--- /dev/null
+Openbox authors/contributors:
+
+Project Maintainer:
+ Ben Jansens (ben@orodu.net)
+
+Developers:
+ Ben Jansens (ben@orodu.net)
+ Scott Moynes (smoynes@nexus.carleton.ca)
+
+Webmaster:
+ Please apply :)
+
+-==============================================================================-
+
+Openbox was previously known as Blackbox. Here are the authors/contributors
+from that era:
+
+Previous Maintainer:
+ Sean 'Shaleh' Perry <shaleh@debian.org>
+
+Previous Contributors:
+ Ben 'xOr' Jansens <xor@orodu.net>
+ - metric tons of code patches
+ John Kennis <jkennis@chello.nl>
+ - bbpager, ideas, and support
+ Jason 'vanRijn' Kasper <vR@movingparts.net>
+ - bbkeys, ideas, support
+ Chris Mecca <flip@linuxguide.org>
+ - use of his irix machine for testing
+ Wilbert Berendsen <wbsoft@xs4all.nl>
+ - man pages and dutch nls file
+ Luca Marrazzo <marra.luca@libero.it>
+ - italian nls files
+ Ales Kosir <ales.kosir@telemach.net>
+ - Slovenian man pages and nls
+ SATO Satoru <ssato@adachi.ne.jp>
+ - Japanese nls and man pages
+ Jan Schaumann <jschauma@netmeister.org>
+ - German nls support
+ Wang Tiejun <wtj@dept3.buaa.edu.cn>
+ - Chinese nls support
+ Jeffrey Sean Connell <ankh@canuck.gen.nz>
+ - debugger class code (ommited from sources)
+ Frank Belew <frb@umr.edu>
+ - dgradient code
+ Scott Garner <mrfab@arn.net>
+ - suggestions, bug reports and beta testing (*the* beta moron)
+ David Doan <ddoan@usa.net>
+ - testing of 8bpp code
+ Mark Seward <illuzion@paradise.net.nz>
+ - beta testing, bug reports and 32bpp testing
+ Keith Bolland <prime@strip.net.nz>
+ - beta testing, bug reports and suggestions
+ James Spooner <spoons@xtra.co.nz>
+ - beta testing, bug reports
+ Fred Knieper <derf@tamu.edu>
+ - beta testing, bug reports
+ Steve Udell <hettar@teleport.com>
+ - beta testing, bug reports, questions (very good ones)
+ Gregory Barlow <barlowg@ncssm-server.ncssm.edu>
+ - bug reports and patches/suggestions (original middle click advocate)
+ Dyon Balding <dyon.balding@eng.monash.edu.au>
+ - patch for Smart(er)Placement window placement
+ Mike Cole <mike@mydot.com>
+ - co-author/hacker of Image.cc (local LUG buddy)
+ John Kennis <jkennis@chello.nl>
+ - author of bbtools/beta testing/bug reports
+ Wilbert Berendsen <wbsoft@xs4all.nl>
+ - author of blackbox/bsetroot manpages
+
+Second Author:
+ Jeff Raven <jraven@psu.edu>
+
+Original Author:
+ Brad Hughes <bhughes@trolltech.com>
+
+(Brad's original message):
+I would also like to thank the creators of WindowMaker. Reading the existing
+code has helped me immensely, and the BImage class follows the RImage data type
+very closely (the 8bpp code and dithering code was based off of WindowMaker's
+wrlib).
--- /dev/null
+* last focusd window is not updated when the window is closed while the focus
+ is on another workspace. This eventually can lead to a segfault.
--- /dev/null
+Changelog for Openbox:
+
+0.99.0:
+ * renamed header files from *.hh to *.h. (Ben Jansens)
+
+ * fix clipping of the date/time in the toolbar with
+ proportional fonts. (Sean Perry, Ben Jansens)
+
+ * added a --enable-clobber configuration option to
+ allow users to run off the event clobbering taking
+ place so that Openbox wont grab mouse events when
+ num lock or scroll lock are on. (Scott Moynes)
+
+ * window menu is inconsistant in that other menus
+ ignore mouse button 2, but it did not, because of
+ the maximize option. Now all options in the window
+ menu ignore mouse button 2 to be consistant. (Scott Moynes)
+
+ * changed the default configuration file from
+ ~/.blackboxrc to ~/.openbox/rc. (Ben Jansens)
+
+ * ignore fully-maximized windows when smart
+ placing windows. (Ben Jansens)
+
+ * windows snaps to both sides of the screen's edge,
+ i.e. they have double the snapping area, half
+ inside and half outside the visible screen. (Ben Jansens)
+
+ * a rootCommand per-screen in the rc file which
+ will override the rootCommand in styles for that
+ screen. (Ben Jansens)
+
+ * rolling the mouse wheel on a window's title bar
+ will shade/unshade the window. rolling the mouse
+ wheel on the root window will change workspaces (John Kennis, Ben Jansens)
+
+ * new button press/release code in Window class,
+ gives window buttons more consistent behavior. (Ben Jansens)
+
+ * custom ordering of windows' titlebar elements
+ with a titlebarLayout option added to the
+ rc file (MrFab, Ben Jansens)
+
+ * when resizing a window in non-opaque mode, fixed
+ the drawn rectangle so that it is drawn entirely
+ within the bounds of the new window. it used to
+ be drawn in the area of the window + 1. (Ben Jansens)
+
+ * changed the background of the toolbar's workspace
+ label when it is being edited. The text color
+ being used was that of the active window label,
+ but the background remained that of the toolbar.
+ Changed to use the background of the active
+ window label. (Ben Jansens)
+
+ * added windowZones to the rc file specifying
+ the number of zones to divide a window into for
+ alt-drag resizing, and code to resize windows
+ with the number of zones specified. (Nicolas Delon, Ben Jansens)
+
--- /dev/null
+ChangeLog from Blackbox (this code's previous project):
+
+Changes from 0.62.0 to 0.62.1:
+ - the lock modifier code handles user redefined modifiers better
+ - check if the locale actually needs multibyte support before using multibyte
+ functions
+ - use srcdir in all of the makefiles
+ - added zh_CN (Chinese) nls support
+
+
+Changes from 0.61.1 to 0.62.0:
+ - the immorel release
+ - added the ja_JP nls directory and man pages
+ - general code touchups
+ - blackbox-nls.hh is always generated even if --disable-nls is used.
+ This allows us to not have all of those hideous #ifdef NLS chunks.
+ Nothing to worry about, if you do not want NLS this does not affect you
+ - Workspace::placeWindow() cleanups. Also a speed bump from reducing the
+ use of iterator->current() and changing the delta from 1 to 8
+ - cleanups to compile with g++ 3.0
+ - make distclean actually removes Translation.m and blackbox-nls.hh.
+ Also fixed Makefile.am to pass --foreign instead of --gnu when calling
+ the autotools.
+ - fixed a desciptor leak in BScreen::parseMenuFile, seems opendir
+ lacked a matching closedir.
+ - fix transient window handling code in Workspace::removeWindow() so
+ transients give focus back to their parents properly. The code originally
+ handled sloppy focus then transient windows, so we just flopped the
+ if/elsif. This is immediately noticable with web browsers and their open
+ location windows.
+ - plugged a small leak in ~Toolbar
+ - fixed list::insert so you really can insert at item number 2. While there
+ I cleaned up the code a bit.
+ - added decoration to the atom state stored in a window
+ - fixed a typo in bsetroot.cc: 'on of' -> 'one of'.
+ - fixed the window menu gets left open when another window button is pressed
+ issue with a call to windowmenu->hide() in window->maximize()
+ - applied xOr's patch for decoration handling
+ - applied xOr's patch for the maximize, shade, unmaximize bug
+ - applied Kennis' patch for sending incorrect Slit configure notices
+ - BlackboxWindow's flags have been moved into a flags structure
+ - applied xOr's patch for border handling
+ - resizing a window turns off its maximized flag. Before a resized window
+ thought it was still maximized and maximizing a double action
+ - BlackboxWindow::withdraw no longet sets the state to Withdrawn.
+ This confused some X clients.
+ - updated the manpages and added Dutch NLS support (thanks Wilbert)
+ - added it_IT nls files, thanks Luca Marrazzo <marra.luca@libero.it>
+ - the menu file mentioned in the manpage is now based on DEFAULT_MENU
+ - configure script found basename in -lgen, but did not set HAVE_BASENAME
+ causing compilation problems on irix and possibly others. Added a call
+ to AC_DEFINE in AC_CHECK_LIB to fix this.
+ - menu is no longer installed, you need to copy it yourself
+ - cleaned up i18n code a little. Several member functions were declared
+ but never used and getMessage() had a default argument which was also
+ never used.
+ - i18n will now compile cleanly on machines without nl_types.h
+ - the lock modifiers no longer stop blackbox!
+ - maximize a window via bbkeys and the maximize button is not redrawn, fixed
+ - now exit with an error code if an unknown option is passed
+ - autoraise and multiple dialog windows yields segv bug fixed
+ also lengthened the default auto raise delay from 250 to 400
+ - another iteration of autoraise and dialog box handling, this time we
+ noticed that nothing ever reset blackbox.focused_window to 0 when a window
+ was removed
+ - check if the window is visible before changeBlackboxHints() calls maximize
+ - placeWindow no longer takes edgeSnapThreshhold into account
+ - ignore style files ending in ~
+ - support locale specifiers with @euro in them
+ - added Slovenian man pages and nls, thanks Ales Kosir
+ - Toolbar name editing buffer reduced to 128 chars, logic added to make sure
+ this buffer is not overrun
+ - added German nls files, thanks Jan Schaumann
+ - added my name to the code, updated the version output
+
+
+Changes from 0.61.0 to 0.61.1:
+ - fixed some of the code to explicitly use colormaps so that when
+ blackbox decides to use a non-default visual everything will
+ still work (although it may look darn ugly)
+ - optimizations to the deiconify/raising code to (hopefully) deal
+ with a rather nasty bug, plus make things a little more efficient
+ - changed the code so that the close button is always redrawn on
+ button release events, just in case the client decides not to
+ close in response to the message (see Acroread)
+ - tinkered with the Makefiles again to make sure Blackbox
+ completely cleans up after itself during an uninstall
+ - fixed a glitch in window placement that was making Blackbox
+ place some larger windows at coordinates near 2**31
+ - merged in a patch from nyz which fixed a bug with not sending
+ configure events when a window is both moved and resized (eg
+ when the left resize grip is used) as well as optimized some
+ of the show/hide code to use the stacking order
+ - fixed a bug in blackbox's support of the X shape extension...
+ it wasn't correctly resetting the bounding region after a window
+ was resized
+ - fixed a glitch with the geometry window where it would persist
+ if the client was unmapped while in motion
+ - tweaked the code for decorating transient windows so that it
+ is possible to use MOD1+Mouse3 to resize transients as long as
+ there is not some other reason to disable functions.resize
+
+
+Changes from 0.60.3 to 0.61.0:
+ - added slightly updated copies of the blackbox/bsetroot manpages.
+ - reworked the Windowmenu code so that using the second mouse
+ button on the Send To menu moves you along with the window
+ - merged in bsd-snprintf.(h|c) from openssh so that Blackbox can
+ compile on older boxes without (v)snprintf in their standard lib.
+ - fixed a pair of problems where blackbox was not returning icons
+ and slit apps to a useable state at shutdown
+ - fixed a problem with menus not getting layered correctly after
+ a reconfigure or menu reload
+ - changed the behavior of the various MOD1+ButtonPresses on windows...
+ they should now be more consistent with the button behavior on the
+ decorations :
+ . MOD1+Button1 raises and moves the window (unchanged)
+ . MOD1+Button2 lowers the window (used to resize the window)
+ . MOD1+Button3 resizes the window (new button combo)
+ - fixed a small but _extremely_ annoying bug exposed by cvsup
+ - styled frames are now a thing of the past... the textures formerly
+ known as window.frame.(un)focus have been replaced by solid colors
+ window.frame.(un)focusColor... the thickness of the frame is now
+ determined by frameWidth, which will default to bevelWidth if not
+ specified
+ - middle clicking on a window in a workspace's window list now moves
+ the window to the current workspace
+ - fixed a minor glitch with the appearance of window labels for
+ certain newly-started apps (i.e. rxvt)
+ - added a new configure option for both the toolbar and the slit --
+ autohide. Hopefully this should help quell the demands for the
+ removal of the toolbar...
+ - added code to better handle apps that change the window focus
+ - changed the command execution code (used to handle rootCommands
+ and executable menu items) to be more robust... compound commands
+ should now work
+ - a new-and-slightly-improved implementation of unstyled frames should
+ mean slightly better performance than previously
+ - fixed a couple of stupid bugs in the new code for handling
+ Solid Flat textures more efficiently
+ - fixed the nls makefiles so that they respect DESTDIR, behave better
+ if you reinstall over an existing installation, and actually remove
+ their files on a make uninstall
+ - added cthulhain's bsetbg script to the util directory... see the
+ file README.bsetbg for more information
+ - added Estonian, French and Danish translations
+
+
+Changes from 0.60.2 to 0.60.3:
+ - put in a (temporary?) fix for a bug with the new way icons are
+ handled. Previously an icon was created only for non-transient
+ windows, which means that 1) minimized transient windows were
+ not getting cleaned up at shutdown, and that 2) one could
+ conceivably lose access to a minimized transient if there were
+ a break in the transient chain.
+
+ For the time being, every iconified window gets an icon. In
+ order to make this a little nicer, if a window doesn't provide
+ an icon title, the window title is used in the icon menu, rather
+ than 'Unnamed'.
+ - fixed a bug in handling the destruction of intermediate
+ transient windows. The code was leaving the transient of a
+ destroyed window with a reference to the now non-existent
+ window. This can lead to all sorts of problems.
+ - fixed a slight positioning error when the slit is on the right
+ side of the screen
+ - included a new style, Minimal, which is designed for use on 8-bit
+ displays. It tries to use a bare minimum of colors, and with the
+ new code regarding Flat Solid, should consume very little memory.
+ - made yet another alteration to the way focus changes after a window
+ closes under ClickToFocus. Blackbox now tracks the stacking order of
+ all windows and uses this information to give the focus to the topmost
+ window.
+ - new configure option :
+ --enable-styled-frames include support for fully-styled window
+ frames -- these are the decorations which
+ are affected by the window.frame* theme
+ entries. This option is turned on by
+ default.
+
+ Because of the way they are implemented,
+ these are typically the most memory and
+ render intensive of the various blackbox
+ decorations, even if they are typically
+ only a pixel or so wide. Disabling this
+ feature can result in a substantial
+ decrease in X memory usage, but it's
+ enabled by default to remain compatible
+ with previous versions.
+
+ - added a whole mess of logic so that blackbox will use
+ XSetWindowBackground for Flat Solid textures instead generating
+ a pixmap (which would be subsequently cached)... should help cut
+ down some on the X memory usage
+ - altered the behavior of the BImageControl timer... now it will
+ fire every cacheLife minutes, regardless of when anything has
+ been removed from the cache
+ - modified the NLS build code yet again... at this point we've
+ hopefully hit the least common denominator and it should work
+ for everyone
+ - dealt with a possible problem in the BlackboxWindow constructor
+ where we referred to a member after deletion
+ - removed a last lingering bit of the allocate()/deallocate() code
+ - fixed a pair of string formatting problems
+
+
+Changes from 0.60.1 to 0.60.2:
+ - updated README.bbtools, since bbpager and bbkeys were updated to work with
+ 0.60.x (also removed the .diffs from the source tree)
+ - fix for compiling with NLS support on Solaris
+ - added Turkish, Russian and Swedish translations
+ - applied patch for more correct Spanish translations
+ - added completed pt_BR (Brazillian Porteguese) translation
+ - removed mem.h and the allocate()/deallocate() calls throughout blackbox
+ these have been unused for a long time, and needed to go away :)
+ - compile fixes for --enable-debug
+ - changed the font loading/drawing code... XFontSets are only used if
+ the locale is set properly. So you can still compile with nls support,
+ but do not set your LANG environment variable, and your fonts will be
+ loaded and drawn the old way
+ - smarter Basemenu::drawItem() code added, i noticed alot of flicker when
+ moving menus, because of code constantly redrawing menus items... this
+ has been significatly modified and sped up quite a bit
+ - fixed a bug where iconified windows wouldn't remove themselves from the
+ icon menu when they unmapped/closed themselves (which would result in a
+ crash if you selected this dead item)
+ - fixed a potential crash in Workspace::removeWindow() that had relation
+ to focus last window on workspace... one person experience gibberish being
+ displayed, another experienced a crash
+ - fixed a flicker problem when changing focus between windows rapidly
+ (the toolbar's window label was getting redrawn twice per focus, not
+ optimum behavior)
+ - fixed the infamous bsetroot segfault... this was quite a feat... took 3
+ people in excess of 8 hours to find... and it was a simple one line change
+
+
+Changes from 0.51.3.1 to 0.60.1: (note: 0.60.1 is 0.60.0 non-alpha)
+ - changed licensing for Blackbox from GNU GPL to more open BSD license
+ see the file LICENSE
+ - removed alot of empty files that did nothing but passify automake/autoconf
+ Blackbox now passes --foreign to automake to lessen the requirements for
+ files like NEWS,AUTHORS,COPYING,README,etc.
+ - new configure options:
+ --enable-ordered-pseudo this enables a new algorithm for dithering
+ on pseudocolor (8 bit) displays... a noticable
+ pattern is visible when using this. you may or
+ may not like it... just something different
+ if you want it, but is turned off by default.
+
+ --enable-debug turn on verbose debugging output... this
+ isn't very complete or really very helpful...
+ right now it just describes memory usage and
+ tracks a few X event handlers... this is turned
+ off by default
+
+ --enable-nls turn on natural language support... this option
+ will turn on the use of catgets(3) to read
+ native language text from any of the supported
+ locales (see the nls/ directory for current
+ translations)...
+
+ This option also turns on the use of XFontSets,
+ which allows the display of multibyte
+ characters, like Japanese or Korean.
+ This option is turned on by default.
+
+ --enable-timed-cache turn on/off the new timed pixmap cache... this
+ differs from the old pixmap cache in that
+ instead of releasing unused pixmaps
+ immediately, it waits for <X> minutes, where
+ <X> is set with session.cacheLife in your
+ ~/.blackboxrc... this option is turned on
+ by default.
+
+ - changed the default menu to include a listing of workspaces (and their
+ window lists) and the new configuration menu (see below)
+ - included new default styles, contributed by regulars on
+ irc.openproject.net's #blackbox
+ - generated default "translation" catalog for the C/POSIX locale... the
+ same catalog is used for English (en_US for now, will add others
+ as necessary)
+ - included translation for Spanish (es_ES) and Brazilian
+ Portuguese (pt_BR)... if you are interested in doing a
+ translation, email me at blackbox@alug.org
+ - properties and hints added for communication with bbpager and bbkeys, the
+ two most common "blackbox addons"
+ - KDE 1.x support has been completely removed, pending approval of the new
+ window manager specification to be used by KDE2 and GNOME
+ - a (broken!) base for the new window manager spec was put in place, but
+ using --enable-newspec will result in code that will not compile
+ - added a timer class to handle internal timeouts without using
+ getitimer/setitimer/SIGARLM... this will enable other things to be done,
+ as any number of timers with any timeout can be used
+ - Blackbox will search for the highest depth supported by each visual on
+ each screen... basically this means that blackbox will try to use
+ TrueColor if a TrueColor visual exists (but it's not the default visual)
+ - menu hilite changed from being just a color to being a texture and new
+ window decoration layout... as a result the style file syntax has changed,
+ old styles for 0.5x.x will not work. See the included styles for examples,
+ and browse by http://bb.themes.org/
+ - added support for enabled/disabled and selectable menuitems, this is for
+ use in the configmenu mostly (but is used in the windowmenu)
+ - added the Configmenu, which is insertable into your menu by using:
+
+ [config] (Catchy Label)
+
+ changes made in the configmenu take effect immediately, and are saved in
+ your ~/.blackbxrc... current tunable settings:
+
+ Focus model
+ Window placement
+ Image dithering
+ Opaque window moving
+ Full Maximization
+ Focus New Windows
+ Focus Last Window on Workspace
+
+ the window placement and focus model options will be discussed below
+ - added texture type "ParentRelative" which causes the decoration to display
+ the contents of it's parent... this is a sort of pseudo-transparent option
+ and doesn't work for all decorations... see the included style named
+ "Operation" for an example of ParentRelative
+ - added support for solid interlacing... for example:
+
+ toolbar: raised interlaced solid bevel1
+ toolbar.color: grey
+ toolbar.colorTo: darkgrey
+
+ will cause the toolbar base to be draw with solid lines, one line grey,
+ the next darkgrey, the next grey, the next darkgrey, ...
+ - changed dithering algorithm for TrueColor displays from Floyd-Steinberg to
+ an ordered dither... dithering at 8bpp (Pseudocolor) can be either FS or
+ ordered, but must be selected at compile time...
+
+ NOTE: when using ordered pseudocolor (8bpp) dithering, your
+ session.colorsPerChannel ***MUST*** be 4, otherwise your display will
+ not display *any* correct colors
+ - fixed TrueColor rendering to do aligned writes (suppresses warnings on
+ Alpha Linux machines)
+ - added support for GrayScale/StaticGray displays (completely untested)
+ - made linked lists smarter, they can now have as many iterators assigned to
+ them as you want... no more FATAL errors
+ - added the Netizen class, which is a client that has
+ _BLACKBOX_STRUCTURE_MESSAGES listed in their WM_PROTOCOLS... these clients
+ get notified of window add, remove, focus, shade, iconify, maximize,
+ resize, etc.
+
+ the two most common Netizens are bbpager and bbkeys
+ - when loading an incomplete style, blackbox now uses default colors to
+ draw decorations (instead of the annoying "see-through" effect)
+ - added menu tag [config]... which inserts the Configmenu into your rootmenu
+ - made [include] handling smarter, it will only read regular files (it
+ won't read a directory in case you ever accidentally put one there)
+ - the slit and toolbar menus now include a placement option, which will place
+ them in various positions on the screen
+ - included a slit menu option to choose it's direction (horizontal or
+ vertical)
+ - added options to the slit and toolbar menus to have them always stacked
+ above other windows
+ - right clicking on the workspace label no longer initiates a workspacename
+ edit... right clicking anywhere on the toolbar brings up the toolbar menu,
+ which has an entry that lets you change the workspace name
+ - iconified windows no longer show up in the window list for the current
+ workspace... just in the icon submenu
+ - ClickToFocus now works like one would think, clicking anywhere in a window
+ will focus it
+ - overall... this version of blackbox has and does alot more than previously
+ just take it for a test drive and see how well you like it
+
+
+Changes from 0.50.5 to 0.51.0:
+ - new default theme, shows off new gradients (see below)
+ - many themes updated to show off new menu bullet configuration
+ - added new source file Display.cc... it offers an easy way to connect to
+ an X display and setup screen info, this was done to make life easier
+ for John Kennis, the author of the bbtools. Image.cc and Image.hh have
+ been modified to use classes from this abstraction, so that drop in
+ replacements are all that is necessary to update the bbtools image code.
+ - configurable menu bullet... 2 new resources for in your style file:
+
+ menu.bulletStyle: (round|triangle|square|diamond|empty)
+ menu.bulletPosition: (left|right)
+
+ - new style resource for setting the borderWidth on menus, client windows and
+ the buttons/frame/handle/titlebar... the default theme uses a borderWidth
+ of zero... it's pretty neat
+ - udpated Image code... blackbox now supports 8 types of gradients (thanks
+ to mosfet@kde.org... in exchange for helping him get the diagonal gradient
+ code from blackbox into kde, kde gave me the source to their new gradients)
+ the 8 gradients are:
+
+ diagonal, vertical, horizontal, crossdiagonal, pipecross, elliptic,
+ pyramid, rectangle
+
+ use them just like you would normally (ie. raised elliptic gradient bevel1)
+ - merged John Kennis' patch for notifying KDE modules of windows that are
+ raised/lowered/activated(focused)
+ - new geometry window that is displayed when a window is moved/resized
+ - cleaned up code for detecting slit apps
+ - window stacking code changed to keep menus above windows, and to keep the
+ slit raised when the toolbar is raised
+ - fixed compiler error from gcc 2.95 about frame.frame in several places
+ - fixed some bugs with shaped windows that set decorations via MWM hints,
+ and also fixed bugs with such windows changing their shape
+ - more complete ICCCM compliance, default window gravity is now NorthWest
+ instead of Static...
+ - focus code revamped... window focusing is alot faster and simpler, i
+ mimicked the way TWM does it's focusing... proved much faster
+ - the window menu always has "Kill Client" as an option now
+ - fixed window stacking for windows that have multiple transients (like
+ netscape)
+ - smartplacement from 0.50.4 has been reinstated... i quickly grew tired of
+ waiting on windows to be placed with the old version (if you like the way
+ 0.50.5 did it... send me an email and i'll consider making it an option)
+ - added some new signal handling code (using sigaction, if available on your
+ system)...
+ - fixed some bugs with KDE support... this makes bbpager behave properly
+ - workspace editing via the toolbar has been made a little nicer with the
+ new focus code... right clicking on the workspace label will put you into
+ edit mode, but no windows can be focused until you leave edit mode...
+ ALSO... the window that had focus when you entered edit mode will have the
+ focus returned to it after editing is finished
+ - added new option to blackbox... -rc <filename> will read <filename> instead
+ of .blackboxrc for it's base configuration
+ - the option for opaque window moves has been moved from the stylefile into
+ .blackboxrc... set the session.opaqueMove: resource to True or False,
+ depending on what you want
+ - general namespace cleanups... just stuff to make maintaining the code a
+ little easier...
+ - any form of "beta" has been removed from the version number for 0.51.x
+ i am declaring this series as "stable" so that i can begin a major overhaul
+ of blackbox, which will be done with John Kennis and Jason Kasper, two
+ very sharp guys that think the same way i do ;)
+
+
+Changes from 0.50.4. to 0.50.5:
+ - modified and merged some patches from several contributors. added their
+ names to AUTHORS
+ - major documentation updates
+ - added a few more platform success reports. changed development platform
+ again :)
+ - added new texture option: Interlaced... it is an extension to the gradient
+ texture that looks really neat... it is compiled in by default but may
+ be removed with --disable-interlace
+ - let's see... where do i begin... the code for 0.51.x has been GREATLY
+ enhanced over 0.50.4 (and the stupid little compile error for KDE has been
+ fixed ;)) Blackbox has undergone major renovation... and i can proudly
+ say that this release is rock solid. Also, i reinstated ccmalloc's tour
+ of duty, and spent several days with it stomping memory leaks in blackbox.
+ i can proudly say that there are no major memory leaks present in 0.51.x
+ - the toolbar has changed it appearance a little bit... the menu button has
+ been removed and the labels and buttons are now symmetrically placed on the
+ toolbar... oh no!? how do you get to your icons/workspaces now? the
+ middle click patch from Greg Barlow has been modified, enhanced and merged
+ with 0.51.x... the workspace menu now behaves just like the root menu...
+ and it can be pinned to the root window (just move it)
+ - the image code has once again been worked over... this time a local LUG
+ friend and i have hashed it out many times and into the wee hours of the
+ morning... this stuff is FAST now... before i added interlacing... we
+ had doubled the speed of the dgradient function... yes... *doubled*
+ - the code to generate error tables, color tables and other tables that are
+ used in image dithering has been rewritten, which severs the last tie to
+ window maker's wrlib that blackbox had. i now understand why and how all
+ the code that i "borrowed" works... and it's been improved... because of
+ this change... dithering is a lot cleaner... and dithering on 8bpp displays
+ is less grainy and less obtrusive...
+ - the linked list code has also been rewritten... blackbox has been using
+ a doubly linked list, and not taking advantage of all the list's
+ capabilities (because it doesnt need them)... so the linked lists are now
+ single-link and much quicker at inserting, removing, searching...
+ - once again... the menu parsing code has been rewritten... this code is
+ very efficient and very extensible... so extensible infact that after
+ implementing the current menu syntax... i added a new tag! you can now
+ insert the workspaces list into your root menu with this:
+
+ [workspaces] (descriptive label)
+
+ - the slit menu is now spacially correct... if you want the slit in the top
+ right corner of the root menu... click the top right corner of the slit
+ menu... i think this is a little more user friendly
+ - window gravity should be better supported now... restarts and what not
+ shouldn't produce all those one pixel shifts or moves anymore...
+ - the modifiers for the keygrabs in blackbox are now configurable...
+ the "keys" are still hard wired (left/right for workspace changing, tab
+ for window cycling)... but you may now configure which modifiers to use
+ with the key combos... this introduces two new resources into your
+ .blackboxrc:
+
+ session.workspaceChangeModifier
+
+ and
+
+ session.windowCycleModifier
+
+ these resources may be set to any combination of the following:
+
+ Control Mod1 Mod2 Mod3 Mod4 Mod5 Lock Shift
+
+ also... for convenience... "Alt" is parsed as "Mod1"...
+ session.workspaceChangeModifier defaults to "Control" and
+ session.windowCycleModifier defaults to "Mod1"
+ - smart placement has been made smarter thanks to Dyon Balding's smarter
+ placement patch... this patch has been modified from the original slightly
+ (mostly speed concerns)
+ - signal handling has been made more robust... this allows it to compile on
+ more platforms and now prefers to use sigaction() over signal()
+ - over all... many code clean ups were made and old commented code was
+ purged... this is a very clean very stable release... enjoy people :)
+
+
+Changes from 0.50.3 to 0.50.4:
+ - changed some Copyright information to include the current year
+ - added a number of platforms to the Supported Platforms section of the
+ README
+ - added the Slit... the Slit is a window maker dockapp util that lets users
+ use all of applications with Blackbox, and allows users to easily switch
+ between Window Maker and Blackbox more easily... it is included by default,
+ but you can remove it from the source with --disable-slit on your configure
+ command line
+ - large Brueghel styles and images removed from the base distribution
+ - merged a patch from Benjamin Stewart for very robust menu parsing... this
+ patch allows for parenthesis in menu files, and works well for
+ automatically generating menus from shellscripts and programs... the menu
+ syntax has not changed... it just is understood better :)
+ - added shell style tilde-slash (~/) home directory expansion for the
+ [include] and [style] tags in menu files
+ - added some sanity to window position/gravity code to for GTK applications
+ - added Window Maker style Mod1+MouseButton1+Motion window moving (for those
+ few braindead apps that like to be positioned where no decorations are
+ visible)
+ - added a SIGCHLD handler to clean up processes started by a startup script
+ that then exec's blackbox (gets rid of all those zombie processes)
+ - added a new resource to .blackboxrc which tells Blackbox where to put the
+ Slit... editing your .blackboxrc to change this is discouraged and
+ discarded, as the Slit has a menu that lets you select where to put it
+ (click any mouse button on the slit and see for yourself)
+ - fixed a bug in the workspace renaming feature that ate all Shift keypresses
+
+
+Changes from 0.50.2 to 0.50.3:
+ - few documentation updates
+ - fixes to let -lgen actually get linked with the executable (fixes compile
+ errors on some platforms, most notably, IRIX 6.5)
+ - a new series of styles has been added to the distribution (this accounts
+ for the increased size)
+ - fix to let 16 color servers run blackbox (colormap reduction)
+ - various bug fixes... numerous strncpy's changed to sprintfs...
+ - default font set internally to "fixed" (to let it run on servers that don't
+ have any fonts installed)
+ - fixed bug to let blackbox remove all but the last workspace (instead of the
+ last two)
+ - window gravity offset changes
+ - the default key grabs have changed... there are now 4: alt-tab,
+ shift-alt-tab, ctrl-alt-right, ctrl-alt-left... these keys perform
+ as would be expected
+ - fixed wire move bug for transient windows
+ - passified error handing for the main window class
+ - fixed gravity restore for restart/exit purposes
+
+
+Changes from 0.50.1 to 0.50.2:
+ - minimal KDE integration (configure/compile time option, turned off by
+ default). This is unfinished and i can't really say if i ever will finish
+ it, but there is enough there to integrate the panel and other modules
+ with Blackbox.
+ - changed the regexp in building menus to use a comma (,) as the separator,
+ instead of a period
+ - various bug fixen (like the one where the window list would stay put after
+ the workspace menu went away)
+ - some hacks to improve speed in the LinkedList routines
+ - new stacking method (to better integrate with the KDE support)... windows
+ are no longer in different "levels", raising windows brings them ALL the
+ way to the front (so it's possible to obscure override redirect windows
+ like image splashes etc.) and lowering throws them ALL the way to the
+ back (even under kfm's icons)... however, the rootmenu and the toolbar
+ (if configured to be ontop) will be placed above raised windows
+ - sticky windows have changed due to the new stack implementation, they can
+ be anywhere in the stack (and not always ontop or onbottom)
+ - session.screenNUM.toolbarRaised resource has changed to
+ session.screenNum.toolbarOnTop
+ - the workspace label in the toolbar is sized a little more sanely now
+ (i found that it looks the best when the workspace label width == clock
+ label width)
+ - colormap focus now has it's own resource, session.colormapFocusModel, which
+ is set to "Click" by default, which means you have to click a window's
+ decorations or the root window to (un)install a colormap... setting this
+ resource to "FollowsMouse" will work just as it says... the window under
+ the pointer will have it's colormap installed
+
+
+Changes from 0.50.0 to 0.50.1:
+ - eliminated the need for XConvertCase... workspace editing should now print
+ any and all characters correctly
+ - added check for libgen.h (which provides the prototype for basename() on
+ some systems, like OpenBSD)
+ - some code obfuscation (i've been removing comments, as some of them don't
+ relate to some of the code below them... i plan on recommenting the code
+ some time soon)
+ - clicking button 3 will hide ANY menu now, and in the case of the workspace
+ and or client menus, any other menus and/or buttons associated will be
+ closed as well
+ - added a patch for multi-screen which sets the DISPLAY env variable so that
+ items selected from one screen don't show up on another... many thanks to
+ F Harvell <fharvell@fts.net> for this
+ - fixed a clock bug... again thanks to F Harvell for this one
+ - complete and proper window placement and window restore has been
+ implemented... windows that are partially off screen will be placed in the
+ center of the root window
+ - the toolbar's workspace label is now dynamically sized according to the
+ length of the workspace names
+ - as stated above... workspace name editing has been completely redone, i
+ discovered XLookupString() this weekend and have deemed it the function of
+ the week... any and all characters should be printed properly now
+ - window placement now has it's own resource...
+ session.screen<NUM>.windowPlacement which may be set to SmartPlacement
+ (which has been implemented) or anything else to default back to cascade
+ placement
+ - a new resource, session.screen<NUM>.toolbarWidthPercent has been added, and
+ should be set to an integer representing what percentage of the root window
+ width the toolbar should occupy (default has been changed back to 67)
+
+
+Changes from 0.40.14 to 0.50.0:
+ - added util/ subdirectory to place small, utility programs to use in
+ conjunction with blackbox.
+ - updated the README... it's still vague and useless, but gives a better
+ view of whats going on
+ - the configure script now checks for a few more headers, setlocale and
+ strftime in addition to basename functions to better include support for
+ multiple arch/langs/etc.
+ - updated default menu file... made it a little more general... and made
+ the default style menu [include]'d instead of explicitly included...
+ this break off of the style menu allows for custom menus to include the
+ default style menu for a create selection of styles
+ - changed all the default styles to use bsetroot instead of xsetroot
+ - menu handling has been improved... no more than one menu at a time may be
+ visible on the desktop (save for the root menu and it's tear off menus)
+ this means that you can't have multiple window menus and the workspace menu
+ open all at once... which saves screen space and reduces clutter
+ - much of the code has been reorganzied and reformatted for better
+ readability... this consists of function name changes and function
+ "ownership" (which basically means workspaces aren't managed by the toolbar
+ itself anymore, but by a general screen class on which the toolbar can
+ operate)
+ - the workspacemenu now autohides when selecting a window from one of the
+ window lists
+ - removed many empty destructors for Basemenu subclasses to improve code
+ readability
+ - two new files, Screen.cc and Screen.hh, have been added to the distribution
+ they add the new class BScreen which was needed for the biggest change of
+ the Blackbox code base, the addition of multiple screen (i.e. multihead)
+ support. A separate BScreen is created for each screen, and all screens
+ work inconjunction with the other... windows can't be passed between
+ screens, because the X server doesn't allow this (more investigation on
+ this later)
+ - the toolbar's clock format is now controlled by the strftime() function...
+ if configure can't find this function on your system, the old date/time
+ format is used... with strftime, clicking on the clock doesn't display the
+ date... as the date may now be part of the clock display... read the man
+ page for the strftime function to write a format string for your clock,
+ and place it in .blackboxrc (i.e.
+ session.strftimeFormat: %I:%M %p on %a, %b %d is my strftime format
+ string)
+ - the toolbar has been stripped of it's workspace responsibilities, but this
+ change has no effect on the end user.
+ - common code interspersed through out the code has been consolodated into
+ small functions and called multiple times instead of having the same or
+ similar code repeated in the same class
+ - the window startup code has been improved upon again so that shaded windows
+ are restored between restarts
+ - some ICCCM code has been updated to properly reflect the state of windows
+ while shaded or on different workspaces... this state code change should
+ also fix the JX toolkit problem of deiconifying and nothing being redrawn
+ - the main Blackbox class has been changed to purely handle X events... it
+ doesn't manage resources (save for those necessary for proper event
+ handling, like the focus model for each screen)
+ - the format of .blackboxrc has changed slightly, the session.menuFile,
+ session.doubleClickInterval, session.imageDither, session.styleFile,
+ and session.colorsPerChannel resources are unchanged. However, the
+ following resources are screen dependant:
+
+ session.screen<num>.strftimeFormat
+ session.screen<num>.workspaces
+ session.screen<num>.workspaceNames
+ session.screen<num>.toolbarRaised
+ session.screen<num>.focusModel
+
+ where <num> is the screen number (zero being default and all that would be
+ present on a single screen/monitor setup).
+ - a utility named bsetroot (mentioned above) has been included in the
+ blackbox distribution, to aid in setting root window patterns (ala
+ xsetroot). the only different between xsetroot and bsetroot is that
+ bsetroot doesn't redefine cursors, and doesn't restore defaults if no
+ arguments are given. bsetroot does support multiple screens, and is ideal
+ for those setups (instead of running xsetroot for each screen)
+
+
+Changes from 0.40.12 to 0.40.13:
+ - added some compile time parameters to allow for clean compiling
+ - added support for vertical/horizontal maximization (i did this by
+ hand, but kudos to John Martin for the idea ;)
+ - added basename() to the distribution... it will only be compiled in
+ if basename is not present in standard libraries
+ - window focus code has changed yet again... i've decided to completely
+ rewrite the focus handling code, instead of trying to fix it... let
+ me know how this does
+ - a new resource has been added to the style loader... a resource of
+ the form: rootCommand: <shell command string> will execute this
+ command when the style is loaded, suitable for setting the root
+ window background to an image/pattern/color... this should make
+ style integration more seamless
+
+
+Changes from 0.40.11 to 0.40.12:
+ - more migration to autoconf/automake/autoheader etc.
+ - changed the default installation prefix... /usr/local is now the
+ default... all default config files will be stored in
+ ${prefix}/share/Blackbox... any old files will not be used, and
+ should be removed
+ - a small internal rework has made the "Inverted" option for
+ pressed button textures obsolete... please update your configs
+ - Makefile.generic has been removed
+ - Laurie's tear off menu patch has been adapted into the source tree...
+ sorry Laurie, but i had to rework your patch to make it completely
+ bullet proof ;)
+ - rework of Image code... resizes and maximizations should be much
+ faster now
+ - existance of XConvertCase is checked by configure... if it is NOT
+ found, then when editing the workspace name, pressing shift will
+ not print capital letters... sorry... get an uptodate X distribution
+ (R6.3 or higher) so that XConvertCase exists...
+ - the date format on the clock is controlled by a new .blackboxrc
+ resource... session.dateFormat... accepted values are:
+ American ( mm/dd/yy ) and
+ European ( dd.mm.yy )
+ the default is american... if any other string is entered for the
+ resource, blackbox defaults again to american...
+ - changed some window positioning code so that windows aren't thrown
+ to the middle of the screen unless they are completely hidden when
+ shown
+ - time bugs have been fixed... this is too detailed to go into... so
+ read the source if you are curious, otherwise just hit Reconfigure
+ when ever you change the system time, and blackbox will update and
+ continue to monitor/display the correct time (also... wrt y2k...
+ blackbox is y2k compliant is your libc's localtime() is y2k
+ compliant)
+ - this release has a major internals rework... let me know of any
+ problems... i would also love to hear about improved/degraded
+ performance... enjoy people...
+
+
+Changes from 0.40.10 to 0.40.11:
+ - changed the blackbox distribution to use autoconf instead of
+ imake... let me know how this works
+ - removed all the Imakefiles and Imakeconfig in favor of autoconf...
+ - added necessary files for automake and autoconf
+ - fixed a bug that would automatically shift focus to the workspace
+ label after switching to an empty workspace which would edit the
+ workspace name if pressing ctrl-arrow...
+ - fixed a bug that wouldn't focus any windows with alt-tab after
+ switching workspaces
+ - new feature: click button 1 on the clock to display today's date
+ releasing the mouse button redraws the current time
+ - implemented double-click window shading by adapting David Edwards'
+ <david@dt031n1a.tampabay.rr.com> shade patch
+ - added new .blackboxrc resource - session.doubleClickInterval - which
+ controls the time between double clicks... used by the double-click
+ shade feature... defaults to 250ms is not specified
+
+
+Changes from 0.40.9 to 0.40.10:
+ - fixed the broken menu highlights - they are now a dot in front of
+ the menu label
+ - enhanced the image rendering code to prebuild dithering lookup
+ tables... this saves some multiply and divide instructions during the
+ rendering loop... it makes a noticable difference on my lowly p133 ;)
+ - just for completeness... i've added some error output for various
+ things that could (but rarely do) go awry
+ - the focus code has been updated yet again... but this time it's for
+ the better ;) the ctrl arrow keys continue working after a window
+ has been closed etc. etc... this should be the final change... unless
+ i find more bugs in it
+
+
+Changes from 0.40.8 to 0.40.9:
+ - fixed a menu bug to keep as much of the menu on screen as possible
+ - added a patch from Peter Kovacs <kovacsp@egr.uri.edu> to raise the
+ current focused window when the user clicks on the window label on
+ the toolbar
+ - changed some window gravity defaults... nothing major here
+ - focus handling code has been spruced up... and majorly tested...
+ 0.40.8's focus code was about as good as a full tank of gas but
+ no corvette... let me know how the focus handles in 0.40.9
+
+
+Changes from 0.40.7 to 0.40.8:
+ - more menu fixes... highlights are handled as normal... constant
+ highlights are draw differently... the rounded edges minus the
+ highlighted bar...
+ - hand strength reduction in the BImage::renderXImage() method...
+ this doesn't offer much of a speed up... but every little bit
+ counts
+ - stuck clients that open transients now have their transients stuck
+ by default
+ - changed some input focus code to better handle the sloppy focus
+ model... the little annoyances like two focused windows should now
+ be fixed...
+ - removed gcc specific code... changed use of strsep to strtok (which
+ is defined by ANSI C)
+ - this is strictly a maintainence release... no new features have
+ been introduced
+
+
+Changes from 0.40.6 to 0.40.7:
+ - changed bhughes@arn.net to bhughes@tcac.net throughout the source
+ tree
+ - menu sanity fixes... like unmapping a submenu when an item is removed
+ - image code fixes... no memory is allocated during the rendering...
+ only when the BImage is created... thanks to lee.salzman@lvdi.net for
+ the frame work for these changes
+ - fewer floating point division in gradient rendering routines... again
+ thanks to lee.salzman@lvdi.net for the basis of these changes
+ - reading workspace names is now a little more robust, but probably not
+ bullet proof... events are handled normally while reading the
+ workspace name... instead of blocking them all... the label changes
+ color... and reverts back to normal when enter is pressed (which
+ applies the new workspace name)
+ - the window geometry label drawn during window resizing has moved to
+ inside the window frame, this allows us to see what size windows are
+ being resized to when the right edge is close to the edge of root
+ - a lock system has been implemented for the blackbox objects... this
+ fixes a nasty little problem of stale windows (decorations with no
+ client window) because of on object grabbing the server and another
+ unlocking it... the current system works similar to XLockDisplay
+ (which is used in threaded X programs).
+ - icccm code enhancements for XWMHints and NormalHints
+ - window maximizing now properly returns the maximized client to its
+ previous location (this is a bug fix... maximize netscape, then
+ maximize an xterm... unmaximizing netscape will put it where the
+ xterm was previously)
+
+
+Changes from 0.40.5 to 0.40.6:
+ - the workspace and client menus now keep the current workspace and
+ focus window highlighted so that we know which window is in focus
+ (especially useful with multiple xterms in the same workspace)
+ - image dithering code has been updated slightly to hopefully squeeze
+ every last drop of performance out of it
+ - pixel computation has been simplified
+ - gradient code has been changed to use less floating point division
+ this breaks Jon Denardis' gradient hack, but the option has been
+ left in place in case Jon wants to re-implement it :)
+ - more ICCCM compliance code added... window colormap focus has a
+ click-to-focus policy... any window that wants to use it's own
+ colormap (i.e. netscape -install) will have it's colormap installed
+ when button1 is pressed anywhere on the decorations (like when
+ raising) the default root colormap is reinstalled when pressing
+ button1 on the root window
+ - workspace names can now be changed on the fly... they are stored in
+ the users ~/.blackboxrc file, and may be edited from there, although
+ any changes made to the file will be over written when blackbox is
+ shutdown or restarted...
+ - workspace names can be edited *while blackbox is running* by pressing
+ button3 on the workspace label on the toolbar... pressing enter ends
+ the edit and normal event processing resumes... these names are saved
+ on exit/restart for convienence
+ - support for window gravity has been added... this is addition is
+ another step closer to complete ICCCM compliance
+ - window resizing is a bit more sane now... a bug once pointed out long
+ ago that i never noticed plagued me the other day... when resizing a
+ window to a large size... blackbox can delay a bit while it renders
+ the new decorations... if the user tries to move the window before
+ these decorations are finished... the window is resized again... this
+ has been fixed
+
+
+Changes from 0.40.4 to 0.40.5:
+ - updated the default style to reflect the button resource change in
+ 0.40.4
+ - added internal menu alignment
+ - added internal linked list insertion at a certain point, used in
+ menus
+ - submenus now update their parent menu to reflect that the submenu
+ is no longer open
+ - right clicking anywhere on the rootmenu or window menus will now
+ unmap them... NOTE: this doesn't work on submenus or the rootmenu
+ or on the SendToWorkspaceMenu
+ - cleaned up some of the image rendering code to use less comparisons
+ while rendering an image... also removed alot of
+ multiplication/division use in beveling loops to increase speed
+ - changed dithering error distribution to make images smoother at
+ 15 and 8bpp (8bpp got the most benefit from this change)
+ - changed the toolbar appearance... removed the raise/lower button,
+ changing the level of the toolbar isn't possible as of yet... a new
+ button has been added on the left of the toolbar, pressing it will
+ map the workspace menu, which has a few changes
+ - the workspace menu now conatins submenus of all the window lists of
+ all workspaces... it is now possible to see which window is on which
+ workspace... also... the icon button has been removed from the
+ toolbar and the iconmenu is now a submenu of the workspace menu
+ - window placement has been slightly modified... if clients request a
+ certain position, the request is honored, otherwise the client is
+ cascaded... if either the cascade or requested position obscures part
+ of the window when the window is created, the window is centered in
+ the root window...
+ - window state updated... when blackbox is restarted, all client
+ windows are placed on the workspace they were previously occupying...
+ this is only between restarts... not when X is restarted...
+ however... applications may be coded specifically for blackbox to
+ start on a certain workspace... for more information on this, email
+ me
+ - window menu placement has been made a little more sane
+
+
+Changes from 0.40.3 to 0.40.4:
+ - removed the window.handle{.color,.colorTo} resources... the handle
+ is now treated as a button, and uses the button resources
+ - added window.focus.button and window.unfocus.button resources to the
+ style file... this allows colors to be set different from the
+ titlebar... the colors are controlled with window.focus.button.color,
+ window.focus.button.colorTo, window.unfocus.button.color and
+ window.unfocus.button.colorTo
+ - transient focus policy has changed... if any window has an open
+ transient window... focus is awarded to the trasient instead of the
+ parent window, even if the mouse doesn't occupy the trasient window
+ - cleaned up some namespace in Basemenu.cc and Basemenu.hh
+ - changed dithering error diffusion
+ - fixed Bevel2 so that it doesn't sig11 anymore
+ - changed stacking code slightly... "stuck" windows now are placed
+ in relation to the toolbar... i.e. if the toolbar is on top... stuck
+ windows are on top of any other client windows... if the toolbar
+ is underneath client windows... stuck windows are also stacked
+ underneath the client windows
+ - major reworking of Window.cc and Window.hh to fully support the
+ _MOTIF_WM_HINTS on client windows... if this hint is present... then
+ the window is decorated according to those hints... all the move/
+ resize/configure code had to be updated because of this... one step
+ closer to gnome compliance
+ - window menus now contain different items based on the functions
+ available to the client window... if a window cannot be maximized...
+ then no maximize item is present in the window menu... also, "Close"
+ and "Kill Client" are no longer present at the same time... if the
+ client supports the WM_DELETE_WINDOW Protocol, then "Close" is
+ present, "Kill Client" is only present for clients that do not
+ support the protocol
+ - windows may now be moved by the titlebar, handle or thin border
+ around the window... window menus are also accessible by pressing
+ button 3 on any of these 3 windows
+ - a new focus model has been added... it works... but is mostly
+ untested... session.focusModel: AutoRaiseSloppyFocus in .blackboxrc
+ will retain the sloppy focus model... but raise windows to the
+ top when focused...
+
+
+Changes from 0.40.2 to 0.40.3:
+ - fixed a bug in Blackbox::nextFocus that would put blackbox into an
+ infinite loop when 2 windows where open, window 0 was iconified and
+ window 1 had focus and pressing alt-tab or the next window button
+ on the toolbar
+ - completely recoded all the graphics stuffs to support all visual
+ classes and color depths, also the image code is more compact and
+ faster than previous releases
+ - removed graphics.cc and graphics.hh from the distribution and added
+ Image.cc and Image.hh for the new graphics implementation. a new
+ class called BImageControl is now in charge of all pixmap caching
+ and color allocation on displays that don't run/support TrueColor...
+ this takes the job away from the Blackbox class... whose job is now
+ to manage all it's children and disperse events read from the display
+ - fixed bug that didn't handle windows created before blackbox is
+ running (again :/)
+
+
+Changes from 0.40.1 to 0.40.2:
+ - added a variable initialize line of code to keep blackbox from
+ splattering from a sigsegv on startup
+
+
+Changes from 0.35.0 to 0.40.1:
+ - cosmetic menu rendering fixes, changed the way the submenu dot is
+ sized; changed an off by one error in drawing the rounded edges;
+ fixed the text to be draw in the center of the item instead of at the
+ bottom
+ - major changes to the toolbar (formerly the workspace manager) to
+ change the way it looks and works. The large blank space is gone,
+ and the toolbar is now half the height it used to be (roughly). the
+ workspace label displays the current workspace, with the workspace
+ menu accessible by clicking button 1 on the label. the two buttons
+ directly to the right of the workspace label change the workspace
+ when pressed. the window label displays the current focused window,
+ which makes it easier to identify which window has input focus (for
+ some people like me that have very dark or very closely colored
+ decorations). the window menu is accessible by pressing button
+ one on the window label, and selecting an item from the window menu
+ will set input focus to that window (if it can receive focus). the
+ two buttons to the right of the window label circulate focus (up and
+ down, respectively) through the window list, skipping windows that
+ cannot receive focus. the icon button displays a menu of all
+ iconified applications. both the icon menu and the window menu will
+ not become visible if they are empty. the next button on the toolbar
+ is a raise/lower button for the workspace manager. the toolbar is
+ stacked on startup according to the resource set in ~/.blackboxrc,
+ but this button will raise and lower the workspace to the users
+ desire, saving the stack order when blackbox is exited or restarted.
+ the clock is still the same, but editing the session.clockFormat
+ will change it from normal time (session.clockFormat: 12) to 24hour
+ format (session.clockFormat: 24)
+ - a pixmap cache has been implemented. a linked list stores all images
+ rendered, removing them from the list and freeing them with the X
+ server when all applications have removed references to them. for
+ those who start man instances of the same applications will benefit
+ greatly from this, as the same decorations are not redraw for each
+ and every window. this greatly reduces the load on the X server
+ (my X server went from taking 20-28mb of memory to 8-11mb, a dramatic
+ improvement, especially on this 32mb machine). as a result of this,
+ reconfiguring is faster, as is startup and restarting.
+ - click to focus has been implemented, with some restrictions. other
+ window managers allow the user to click anywhere on the decorations
+ OR the client itself to set focus. i have not found an elegant way
+ to do this yet, so focus can only be set by pressing button 1 on
+ the decorations (like the titlebar, handle, buttons, border, etc.)
+ just not on the client itself. i am looking more into this, but
+ don't expect anymore than what is in place now. to use
+ click-to-focus, put session.focusModel: ClickToFocus in ~/.blackboxrc
+ - 2 new commands have been added to the menu syntax, [include] and
+ [style]... the [reconfig] command still has the option to reconfigure
+ after a command has been run, but probably will be faded out...
+ [include] (/path/to/file) includes the file inline with the current
+ menu, meaning that a submenu isnot created for the separate file,
+ if a submenu is desired, the file should include the [submenu] and
+ [end] tags explicitly.
+ [style] is a new addition for the style file support. syntax is:
+ [style] (label here) {/path/to/style/file} which will read the new
+ style file and reconfigure when selected.
+ - style files have been added to allow for easier switching between
+ configurations. the style file resources are dramtically different
+ from those in 0.3x.x, see app-defaults/Blackbox-style.ad for an
+ example...
+ - with the addition of style files, menus have been given their own
+ justification resource, allowing (for example) menus to be left
+ justified while titles are center or right justified.
+ - please read the sample configuration files in app-defaults/ for the
+ new and improved configuration system. NOTE: Blackbox.ad is a
+ sample ~/.blackboxrc, but you shouldn't copy this file to
+ ~/.blackboxrc, as Blackbox will store the resources it needs
+ automatically
+ - an unofficial release numbered 0.40.0 was given out to some
+ testers, and even this release needs the same treatment as 0.35.0
+ with respect to the new config system (0.40.0 only implemented the
+ pixmap cache, the new toolbar and *part* of the new config system,
+ but not the style files or automatic generation of ~/.blackboxrc)
+
+
+Changes from 0.34.5 to 0.35.0:
+ - changed the way menus are draw to round both end of the highlight...
+ - cosmetic enhancements for the various justifications...
+ - this is the first stable release of blackbox
+
+
+Changes from 0.34.4 to 0.34.5:
+ - hopefully... this will be the last bug fix... so i can begin working
+ on new features... i fixed event mask selection on client windows
+ after reparenting them to the decoration frame... this should get
+ xv working again...
+ - changed the signal hander to core on sigsegv and sigfpe... sigint and
+ sigterm will just exit blackbox cleanly... sighup will cause blackbox
+ to reconfigure itself
+ - changed the way the version string is printed...
+
+
+Changes from 0.34.3 to 0.34.4:
+ - changed the window stacking code to stack windows and their menus
+ more sanely... window menus are stacked directly ontop of the client
+ windows... instead of on top of every other client window... the
+ workspace manager is now by default stacked above client windows...
+ - reworked alot of code in Window.cc, blackbox.cc, Workspace.cc and
+ WorkspaceManager.cc to properly handle ICCCM state hints... the
+ startup and shutdown code has been completely reworked as a result of
+ this
+
+Changes from 0.34.2 to 0.34.3:
+ - this was a small change in the code... but a BIG change for the user
+ base... the X error handler is now non fatal... yes... this means if
+ blackbox encounters an X error (like a bad window or a bad match) it
+ will fprintf() the error and continue running... the quick window bug
+ has been mostly fixed... i have a small app that i wrote that quickly
+ maps a window, calls XSync()... then destroys the window and exits...
+ the first time i ran this little beauty... blackbox died a horrible
+ death... blackbox now handles this app nicely... but does
+ occasionally report an error (during the decoration creation... which
+ is promptly destroyed from the destroy notify event placed in the
+ queue by the X server... thus... no memory leaks... no memory
+ corruption... blackbox just keeps chugging along nicely
+
+
+Changes from 0.34.1 to 0.34.2 (unreleased):
+ - fixed MSBFirst byte order image rendering at 32bpp (24bpp pending)
+ (for machines better than this intel machine of mine)
+ - changed BImage to allocate dithering space when the image is created
+ and to delete it when the image is destroyed... instead of allocating
+ the space and deleting the space each time the image is rendered to
+ an XImage... hopefully this will provide a speed increase (albeit a
+ small one)
+ - changed blackbox to call XListPixmapFormats once at startup...
+ instead of each time an image is rendered... this should afford some
+ speed increase (a small one at best :)
+ - fixed a bug in Window.cc that re-reads the window name...
+ Jon Denardis discovered this bug while playing with netscape 4.5...
+ the validation call is now directly before the XFetchName call...
+ instead of before an if() { } block that calls strcmp and XFree()
+ - edit Window.cc to change the way buttons are decorated and sized
+ the associatedWindow.button.color(To) resources have been removed,
+ but the associatedWindow.button texture resource is still there
+
+
+Changes from 0.34.0 to 0.34.1:
+ - fixed the unmanaged rxvt/xconsole/whatever problem that didn't
+ decorate windows at start up... just a little logic error that was
+ fixed with a few braces
+ - fixed the shutdown code so that X and blackbox don't die a gruesome
+ death while reparenting the small applets on the workspace manager
+ toolbar... the above bug fixed also fixed a bug that didn't reparent
+ any existing app windows...
+ - updated libBox code to allow for flaws in it's design (forgotten from
+ 0.34.0)
+ - removed #include <sys/select.h> from blackbox.cc so that it compiles
+ on any platform (since select is supposed to be defined in unistd.h)
+ - removed the NEED_STRNCASECMP block in blackbox.cc until i can get
+ a working posix like routine to work (needed for OS2 platforms)
+ - edited the Imakefile scheme to have the the toplevel Imakefile and
+ Imakefiles in app-defaults/ lib/ and src/... there now is Imakeconfig
+ which includes all the options in one file... so that editing all
+ the Imakefiles is no longer necessary
+
+
+Changes from 0.33.6 to 0.34.0:
+ - edited some Imakefiles so that rpm creaters have an easier time
+ - added stuff to lib/ which contains a small (VERY small) library for
+ letting applications open a window on the workspace manager toolbar
+ this is very very new... restarting will cause the app to crash
+ (at best) or take X with it (the worst)... play with it an let me
+ know how it works
+ - further revised window.cc and blackbox.cc to provide better error
+ checking... window.cc received the most updates... validating a
+ window is now done in the statement before the window is used... not
+ at the beginning of the function the window is used in...
+ - fixed the stacking order bug when changing workspaces... the windows
+ will now be restored in the order that you left them... not in the
+ order they were created in...
+ - updated the README... a little bit anyway :)
+ - updated BlackboxWindow::maximizeWindow() in window.cc to properly
+ maximize windows that have specified size increments
+ - fixed BlackboxWindow::configureWindow so that shaded windows that re
+ size themselves only resize the titlebar
+ - added ccmalloc 0.2.3 to the main source tree to aid in debugging...
+ this is NOT maintained by myself, see the source tree for details
+ - eliminated a double delete call with the aid of ccmalloc!@#!
+
+
+Changes from 0.33.5 to 0.33.6:
+ - added Makefile.generic for those of you with foobared imake configs.
+ the use of xmkmf -a (i.e. imake) is still prefered... but this should
+ work on any system... with a little editing
+ - added static int handleXErrors(Display *, XErrorEvent *) in
+ blackbox.cc to handle any and all X lib errors while blackbox is
+ running... this should produce a coredump and thus the -moron
+ community should be able to flood my inbox with stack trace upon
+ stack trace :)
+ - added some sub directories and moved the sources around, this allows
+ for easier inclusion of the library for blackbox specific programs
+ (which will run in the dock)
+ - hopefully fixed the "disappearing-rxvt-trick"... since i can't
+ reproduce it i don't know for sure
+ - removed the use of alloca in graphics.cc... i was noticing very odd
+ behaviour from malloc() and free()... where blackbox would sig11
+ when exiting because of XCloseDisplay doing something naughty...
+ and this seems to have done the trick... no more sig11's from malloc
+ or new... everything i've thrown at blackbox is gently but firmly
+ beaten into submission...
+ - added docboy's curved gradient hack as a compile time option... see
+ src/Imakefile and src/graphics.cc
+
+
+Changes from 0.33.4 to 0.33.5:
+ - added a small test to cascade windows that start out partially hidden
+ (like netscape, Xnest, xv, etc.)
+ - changed icon handling to include a menu of icons accessible from the
+ workspace manager toolbar
+ - deiconifying a window now takes it to the top of the stack
+ - clicking on a menuitem that has a submenu no longer hides the submenu
+ - added resource "workspaceManager.24hourClock", a value of True turns
+ on the 24hour clock on the toolbar
+ - removed icon pixmap/window/mask support/handling from window.cc and
+ window.hh... since icons are now handled in a menu, this is no
+ longer needed
+ - added session.handleWidth and session.bevelWidth
+ to control window sizes (instead of hardcoded defaults)
+ - changed parts of Basemenu.cc and WorkspaceManager.cc to follow the
+ sizes set by session.bevelWidth
+ - fixed Alt-Tab window switching... also fixed some focus handling bugs
+ which let two windows become focused at the same time (which is bad
+ mojo)
+
+
+Changes from 0.33.3 to 0.33.4:
+ - corrected a typo in the sample Blackbox.ad file to correctly show
+ which resource to set for the menu file
+ - added moderate window group support for programs like netscape and
+ other motif applications... modified window stacking code and
+ internal list code to support window groups (this makes transients
+ behave properly... another step towards more complete ICCCM
+ compliance)
+ - modified focus event handlers to stop applications from focusing out
+ when pressing menubars... also window focus is returned to root if
+ the focus window is closed... if another window is under the focus
+ window when it is closed... that window is awarded input focus
+ - fixed tiny little bug that didn't move the close button when resizing
+ a window
+
+
+Changes from 0.33.2 to 0.33.3:
+ - changed some of the menu code ("updated" in 0.33.1) back to the
+ original 0.33.0, which seems to perform better. Reason behind it? -
+ blackbox died too often with 0.33.1/2
+ - added "Kill Client" option to window menus... for those applications
+ that don't accept the WM_DELETE_WINDOW atom
+ - menus that are not partially moved off the root window are shifted to
+ a visible position when the pointer enters the frame... it is also
+ shifted back to it's original position when left (this is new... let
+ me know how it works)
+
+
+Changes from 0.33.1 to 0.33.2: (unreleased)
+ - changed BlackboxIcon to not try and read its config when it was
+ created. This was forgotten from the 0.31.0 -> 0.33.0 move :/
+
+
+Changes from 0.33.0 to 0.33.1: (unreleased)
+ - improved menu handling, less possibilty for SIGSEGV
+ - menus now make copies of all label, exec strings and titles, to
+ make less loose pointers
+ - fixed typo to allow submenus of submenus of submenus (...)
+ - fixed workspace menu and window list menu placements
+
+
+Changes from 0.31.0 to 0.33.0:
+ - added #ifdef statements so the C preprocessor doesn't complain about
+ _GNU_SOURCE being redefined.
+ - changed internal resource data structures
+ - added Sticky windows functionality
+ - remove old animation code bound with #ifdef ANIMATIONS
+ - fixed a silly little bug that sometimes mapped a submenu when its
+ parent was unmapping itself
+ - added ExecReconfigure option to execute a shell statement before
+ performing reconfiguration
+ - rearranged window config code to reduce wait time while resizing
+ - added internal macro BImageNoDitherSolid to make window frame
+ rendering faster (dithering a solid image is silly anyway)
+ - added new menu file format
+ - added Blackbox::validateWindow to provide a stabler environment for
+ Blackbox. This gives blackbox more error checking and greater
+ stability. For me, random crashes have (nearly) disappeared.
+ - removed window name/class dependant frame texture/color
+ - with 0.31.0, each entity read it's configuration from the rc database
+ loaded at start. this has changed back to the old behaviour of
+ reading all configuration parameters at start, no database reads are
+ performed after the initial setup (save for reconfiguring).
+ - configuration has changed to be a little cleaner, and a little more
+ thorough. See the Blackbox.ad and BlackboxMenu.ad for exmaples.
+
--- /dev/null
+1.12
+* fixed a bug with the bsetroot code that prevented compound commands from
+ being executed properly.
+
+1.11
+* various bugfixes.
+* bsetbg now uses the bsd license.
+
+1.10
+* bsetbg is now completely sh compliant, and no longer uses bash.
+* removed internal default configuration in favor of:
+* added the ability to generate a config file on the fly if one doesn't already exist.
+* added support for -display to be passed to bsetroot. bsetbg now fully supports
+ all of bsetroot's options.
+* made the error messages smart.
+* if one of the variables in the configuration file contains an error, bsetbg
+ will still work perfectly unless it is required to use the faulty variable (in
+ which case it tells you what you did wrong).
+* bsetbg will check for the existence of the specified image application in each
+ of its config variables.
+* massive cleanup and optimization.
+
+1.00
+* rewrote most of the script to handle seperate apps for each config value.
+* configuration file is consequently in a different format.
+* fixed stupid bugs.
+
+0.09
+* fixed a bug that caused a crash when bsetbg tried to read a filename
+ containing spaces.
+
+0.08
+* rewrote info function to make it even smarter.
+
+0.07
+* the end user hath spoken. bsetbg shall hereafter read configuration values
+ from one file and one file only, ~/.bsetbgrc.
+* more error handling.
+* fixed a bug that caused a crash when an image was specified without any
+ arguments.
+
+0.06
+* bsetbg no longer checks for a configuration file when passing arguments to
+ bsetroot.
+* fixed up the -app stuff so that you can specify what the fallback action will
+ be (-center, -tile, or -full).
+* added values for qiv to the sample.config.
+* made -info a lot smarter than it used to be.
+* no more support for ~/.bsetbgrc. it caused uneeded complication.
+
+0.05
+* added support for bsetroot.
+* added the -app flag.
+* fixed up the error checking.
+* added -info flag to display current configuration values.
+* added external configuration files.
+
+0.04
+* i don't remember back that far
--- /dev/null
+Installation instructions for Openbox:
+
+Compilation and Installation:
+--------------------------------
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory in the
+Openbox source tree.
+
+Finally, it creates a shell script `config.status' that you can run
+in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile Openbox, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to bhughes@tcac.net so they can be considered
+for the next release. If at some point `config.cache' contains
+results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 4. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'.
+
+
+Compilers and Options:
+----------------------
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+
+Optional Features:
+------------------
+Openbox supports the XShape extension of X11R6. This support is enabled by
+default, but may be overridden by specifying `--disable-shape' on the configure
+script's command line.
+
+Openbox supports Window Maker dockapps (warning: restarts from wmaker to
+Openbox don't always handle dockapps correctly) with a gadget called the Slit.
+The Slit is compiled into Openbox by default, but may be overridden by
+specifying `--disable-slit' on the configure script's command line.
+
+Openbox supports a rendering effect called "faked interlacing" which darkens
+every other line in rendered images. This support works only for gradient
+images. It is compiled in by default, but may be overridden by specifying
+`--disable-interlace' on the configure script's command line.
+
+Openbox provides an alternative rendering algorithm for dithering on
+pseudocolor (8 bit) displays. A noticeable pattern is visible when using
+this; it's a matter of taste whether this looks better than the default
+algorithm. It is disabled by default, but may be overridden by specifying
+'--enable-ordered-pseudo' on the configure script's command line.
+
+Openbox uses a timer which allows it to periodically flush its pixmap
+cache. It is enabled by default, but may be overridden by specifying
+'--disable-timed-cache' on the configure script's command line.
+
+Also, `configure' can usually find the X include and library files
+automatically, but if it doesn't, you can use the `configure'
+options `--x-includes=DIR' and `--x-libraries=DIR' to specify
+their locations.
+
+
+Please read the README file also.
+
--- /dev/null
+Copyright (c) 2002 - 2002 Ben Jansens <ben@orodu.net>
+Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
+Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
--- /dev/null
+# Makefile.am for Openbox
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = data doc nls src util
+MAINTAINERCLEANFILES = aclocal.m4 config.h.in configure Makefile.in stamp-h.in
+
+uninstall-local:
+ -rmdir $(pkgdatadir)
+
+distclean-local:
+ rm -f *\~ gmon.out
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+AUTOMAKE_OPTIONS = foreign
+
+SUBDIRS = data doc nls src util
+MAINTAINERCLEANFILES = aclocal.m4 config.h.in configure Makefile.in stamp-h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = version.h
+DIST_COMMON = README ./stamp-h.in AUTHORS ChangeLog INSTALL Makefile.am \
+Makefile.in TODO aclocal.m4 config.h.in configure configure.in \
+install-sh missing mkinstalldirs version.h.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in
+ cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+ cd $(srcdir) && $(AUTOCONF)
+
+config.h: stamp-h
+ @if test ! -f $@; then \
+ rm -f stamp-h; \
+ $(MAKE) stamp-h; \
+ else :; fi
+stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES= CONFIG_HEADERS=config.h \
+ $(SHELL) ./config.status
+ @echo timestamp > stamp-h 2> /dev/null
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in
+ @if test ! -f $@; then \
+ rm -f $(srcdir)/stamp-h.in; \
+ $(MAKE) $(srcdir)/stamp-h.in; \
+ else :; fi
+$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
+
+mostlyclean-hdr:
+
+clean-hdr:
+
+distclean-hdr:
+ -rm -f config.h
+
+maintainer-clean-hdr:
+version.h: $(top_builddir)/config.status version.h.in
+ cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" != "." || dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ -rm -rf $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+ mkdir $(distdir)/=build
+ mkdir $(distdir)/=inst
+ dc_install_base=`cd $(distdir)/=inst && pwd`; \
+ cd $(distdir)/=build \
+ && ../configure --srcdir=.. --prefix=$$dc_install_base \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) dist
+ -rm -rf $(distdir)
+ @banner="$(distdir).tar.gz is ready for distribution"; \
+ dashes=`echo "$$banner" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ echo "$$dashes"
+dist: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+dist-all: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+distdir: $(DISTFILES)
+ -rm -rf $(distdir)
+ mkdir $(distdir)
+ -chmod 777 $(distdir)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+all-recursive-am: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+install-exec-am:
+install-exec: install-exec-recursive
+
+install-data-am:
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am: uninstall-local
+uninstall: uninstall-recursive
+all-am: Makefile config.h
+all-redirect: all-recursive-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-hdr distclean-tags distclean-generic clean-am \
+ distclean-local
+
+distclean: distclean-recursive
+ -rm -f config.status
+
+maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \
+ maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f config.status
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+install-data-recursive uninstall-data-recursive install-exec-recursive \
+uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
+all-recursive check-recursive installcheck-recursive info-recursive \
+dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-local uninstall-am uninstall all-redirect all-am all \
+installdirs-am installdirs mostlyclean-generic distclean-generic \
+clean-generic maintainer-clean-generic clean mostlyclean distclean \
+maintainer-clean
+
+
+uninstall-local:
+ -rmdir $(pkgdatadir)
+
+distclean-local:
+ rm -f *\~ gmon.out
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+README for Openbox:
+
+The source tree for Openbox is comprised of five subdirectories:
+
+ data/ - this holds the default data files that Openbox
+ requires for proper operation
+
+ doc/ - this holds the documentation files that explain
+ the various aspects of Openbox
+
+ nls/ - this holds the message files used to generate
+ message catalogs for different languages
+
+ src/ - this holds the actual C++ source code for the window
+ manager.
+
+ util/ - this holds source code for small utility programs
+ that help Openbox do what it does best.
+
+
+Quick Start:
+------------
+The quickest and easiest way to get Openbox up and running is to run the
+following commands:
+
+# cd openbox-x.x.x
+# ./configure
+# make
+# su -c 'make install'
+
+This will configure, compile and install Openbox the quickest. For those
+who like to spend the extra 15 seconds reading ./configure --help, some
+compile time options can be turned on and off before the build.
+
+For general information on GNU's ./configure, see the file INSTALL.
+
+
+Configuring Openbox:
+---------------------
+The next thing most users want to do after installing Openbox is to configure
+the colors, fonts, menus, etc. to their liking. This is covered by the files
+data/README, data/README.menu and data/README.style. These files give
+detailed information on how to customize your new window manager.
+
+
+Included utilities:
+-------------------
+Currently, the only included utilities are a program named bsetroot and a
+script called bsetbg. bsetroot is a replacement for xsetroot, minus a few
+options. The difference between xsetroot and bsetroot is that bsetroot has
+been coded for multiple screens (e.g. multi-headed displays), where as the
+stock xsetroot is not. The bsetbg script acts as a wrapper for most of the
+popular programs used to set background pixmaps, making it possible
+for styles to provide a machine-independent rootCommand.
+
+
+Third-party utilities:
+----------------------
+Openbox does not handle any keyboard shortcuts; instead it supports a
+communication protocol which allows other programs to handle these and related
+tasks. If you'd like to be able to use keyboard shortcuts with Openbox,
+bbkeys (available at http://bbkeys.sourceforge.net) can provide you with this
+functionality.
+If you're looking for a GUI with which to configure your Openbox menu and/or
+styles, check out http://bbconf.sourceforge.net. bbconf is a QT program that
+does just that, as well as providing a GUI for editing your keybindings for the
+above mentioned bbkeys.
+
+Supported Platforms:
+--------------------
+ix86-Linux 2.0.x (libc5 and glibc2)
+ix86-Linux 2.1.x (libc5 and glibc2)
+ix86-Linux 2.2.x (libc5 and glibc2)
+ix86-Linux 2.3.x (glibc2.1)
+ix86-Linux 2.4.x (glibc2.2)
+ix86-FreeBSD 4.0-current
+ix86-FreeBSD 3.3-{stable,release}
+ix86-FreeBSD 3.2-{stable,release}
+ix86-FreeBSD 3.1-{stable,release}
+ix86-FreeBSD 2.2.x-stable
+ix86-NetBSD 1.3.3
+ix86-NetBSD 1.4.1
+ix86-OpenBSD 2.6
+ix86-BSDi 4.0
+PPC-mkLinux (version?)
+ix86-Solaris 2.6
+Sparc-Solaris 2.6 (2.5 anyone?)
+Sparc-Solaris 2.7
+ix86-Solaris 7 (== 2.7?)
+Alpha-Digital UNIX 4.0D
+Alpha-Linux 2.2.x
+rs6k-AIX 4.1.3
+rs6k-AIX 4.3.2
+MIPS-IRIX 6.5 (requires gcc, MIPSpro didn't like some of the template-fu)
+ix86-OS/2 (version? recent successes?)
+hp9000/715-HP/UX 10.20 (with egcs 1.1.1)
+
+Please email ben@orodu.net for other success reports.
+
--- /dev/null
+If you use either bbpager or bbkeys, then you will need to have AT LEAST
+these versions:
+
+bbpager 0.3.0 from http://bbtools.windsofstorm.net/
+bbkeys 0.8.3 from http://bbkeys.sourceforge.net/
+
+If you use anything older than that, they will not work with Openbox. Why?
+The old "Blackbox protocol" used by Blackbox 0.60.0-alpha had messages,
+properties and the like prefixed with _NET, which is to be used by
+the new KDE2+/GNOME2 window manager specification. It was decided to keep from
+polluting the namespace and everything changed to _BLACKBOX. When the change
+was made, bbpager and bbkeys (as well as other tools, I believe) had to be
+updated to understand the new protocol.
+
--- /dev/null
+README for bsetbg 1.xx
+
+####
+### introduction ###
+
+bsetbg is a shell script that is intended to provide a standard root image
+application for the Openbox window manager (although it will work under any
+other window manager as well). bsetbg acts as a wrapper both to bsetroot and to
+whatever application(s) you prefer to use for setting images on the root window.
+
+####
+### installation ###
+
+(o) copy the script to a directory in your path.
+(o) chmod it to make it executable (chmod 755 /path/to/bsetbg).
+
+if you're lazy, do nothing. bsetbg will work out of the box for 99% of the
+population.
+
+if you're at least vaguely curious, run bsetbg in an xterm without any arguments.
+this way, you can watch what it does.
+
+if you're a "power user", read the 'configuration' section below.
+
+####
+### configuration ###
+
+bsetbg reads it's configuration from ~/.bsetbgrc . if it can't find this file, it
+will search for a list of applications in the system path and use the positive
+matches to create it. if you would prefer for this not to happen, you can create
+your own config file using the included sample.config .
+~/.bsetbgrc should contain the following variables:
+
+CENTER= application and arguments for centering an image on the root window
+FULL= application and arguemnts for stretching/contracting an image to fill the root window
+TILE= application and arguments to tile the root window
+DEFAULT= action to take place by default if none of the above have been specified.
+
+if you let bsetbg create the configuration file, the only applications that will
+be included in it are the ones that were found in your path. bsetbg will choose
+one of them to be the default and comment out the rest, so if you don't like what
+it chooses, edit the file and change the default values to whatever you like.
+
+####
+### usage ###
+
+** normal usage:
+
+ bsetbg -full|-tile|-center <image>
+
+running bsetbg without any arguments except the name of the image will cause it to
+set the image with the default values, which will vary from person to person. for
+the ultimate control over your theme, always tell bsetbg what you want it to do.
+
+
+** advanced usage:
+if you use a certain program or set of arguments to achieve a particular effect
+that goes beyond the scope of bsetbg's normal functionality, you can include the
+application and its neccessary command line options after the -app flag:
+
+ bsetbg -app <application> <"command line options"> <image>
+
+here is an example in which bsetbg will try to run xv to center the image against
+a coloured background:
+
+ bsetbg -app xv "-rbg rgb:27/40/8b -root -rmode 5 -quit" <image>
+
+note that you MUST enclose the application's options in double quotes. if you
+don't, bsetbg will bail out and give you an error message.
+
+before bsetbg runs the command, it will check to make sure that the application
+(xv in our example) is present on the target system. if it's not, bsetbg will fall
+back to setting the image using the default values from the configuration. if you
+want to control what the fallback option will be, use either -center, -tile, or
+-full after the options for the application:
+
+ bsetbg -app xv "-rbg rgb:20/2b/32 -root -rmode 5 -quit" -center <image>
+
+in the above example, bsetbg will fall back to setting the image in centered mode
+if xv isn't available.
+
+
+** other usage:
+bsetbg can also be used in place of bsetroot. just give bsetbg the same arguments
+that you would normally pass to bsetroot. example:
+
+ rootCommand: bsetbg -gradient flatinterlaced -from rgb:46/51/5c -to rgb:34/3c/45
+
+ rootCommand: bsetbg -solid SteelBlue
+
+
+** informational usage:
+'bsetbg -help' does what you'd expect it to.
+
+'bsetbg -info' will output information about bsetbg's current configuration
+values. use this when you're debugging an incorrect configuration.
+
+####
+### troubleshooting ###
+
+this section is sort of an faq.
+
+(o) help! my background is messed up when i try to use a png image!
+
+if you are using xv, your version probably hasn't been patched to include png
+support. you have two options: 1), you can download the source and the patches and
+compile xv yourself (see the url at the end of this document), or 2), you can try
+to hunt down a binary version of xv that was compiled with the png patch.
+
+if you aren't using xv, then whatever it is that you are using is having a problem
+with png images. consult the documentation on it.
+
+
+(o) when i switch to a new Openbox style, the background doesn't change.
+
+most likely, there's an error with bsetbg. if you alt+f[1-5] to go back to your
+console, you can see bsetbg's error message. alternatively, run bsetbg from an
+xterm and look at its output.
+
+in most instances, there will be a problem with your config file. you can either
+try to fix it yourself, or you can rename your ~/.bsetbgrc to something else and
+then run bsetbg without any arguments in order to force the creation of a new
+configuration file.
+
+
+(o) when i try to set an image in full/tiled/centered mode, the image is not
+ full/tiled/centered.
+
+you've probably given the values in the config file the wrong arguments for what
+they are meant to do. either let bsetbg create a new file (see above), or else
+read the "configuration" section if this document.
+
+
+(o) i'm a moron who can't be bothered to read your fine and well-written README.
+ can i email you with my stupid questions?
+
+don't even think about it.
+
+####
+### other stuff ###
+
+xv can be found at:
+ http://www.trilon.com/xv/downloads.html
+
+qiv lives at:
+ http://www.klografx.de/software/qiv.shtml
+
+xli can be found at:
+ http://pantransit.reptiles.org/prog/#xli
+
+display (part of ImageMagick) can be found at:
+ http://www.imagemagick.org/
+
+wmsetbg is a part of the Window Maker window manager. Window Maker can be found at:
+ http://windowmaker.org/
+
+Esetroot is a part of the Enlightenment window manager:
+ http://enlightenment.org/
+
+openbox homepage:
+ http://FILLMEINNOW/
+
+and lastly, bsetbg:
+ http://lordzork.com/blackbox/
+
+
+####
+### more other stuff ###
+
+many thanks are due to:
+youngjun han, for the inspiration to do it in the first place
+zak johnson, for invaluable suggestions
+brad hughes, for help in debugging (not to mention, creating a smashing window
+manager)
+and last but not least, mycat, mr. man.
+
+send all comments/suggestions/constructive criticism/blueprints for futuristic
+weapons/etc to lordzork@lordzork.com
+
+bsetbg has only been tested under linux. if it doesn't work on your system, email
+me the details and i'll try to fix it.
+
+copyright (C) 2000 by lordzork industries.
--- /dev/null
+Openbox TODO list:
+
+* add asserts all throughout the code to catch bugs.
+
+* new configuration class which handles the X db, with better functionality.
+ i.e. make changes in the configuraiton save instantly, and stop saving over
+ the config file on shutdown/reconfig.
+
+* convert char *'s to stl's std::string.
+
+* make the toolbar a compile-time option so it can be disabled entirely.
+
+* make it possible to cuycle workspaces by moving the mouse past the edge of
+ the desktop?
+
+* make the wheel mouse functionality optional?
+
+* add a modifer key which will scroll workspaces with the mousewheel even when
+ not on the root window?
+
+* NETWM support (see http://www.freedesktop.org/standards/wm-spec/).
+
+* handle keyboard input natively instead of relying on an external program?
+
+* remappable bindings for keyboard input and for mouse input.
+
+* snap to edges, all edges, including window edges
+
+* port bbconf to Openbox.
+
+* add a close button to root/pinned menus?
+
+* add atoms for most everything in the window manager
+ e.g. add _BLACKBOX_STYLE and _BLACKBOX_MENU atoms so that bbtools, bbconf,
+ etc. can get the current path to the style in use and menu.
+
+* when workspace name is greater than the width of its text area the toolbar
+ gets very ugly. I think waht's really needed is a new toolbar entirely, which
+ can let apps dock in it (these would, of course then, be very tiny apps).
+
+* get translations of Openbox into more languages.
+
+* window stacking layers (i.e. always on top/bottom).
+
+* draw non-opaque move/resize frames using the style's borderWidth.
+
+* better support for window groups.
+
+* support for Xft, to anti-alias text.
+
+* suppert for XRENDER, and use it for making window decorations/menus/etc
+ translucent.
+
+* fix any existant memory leaks, this is on-going forever.
--- /dev/null
+dnl aclocal.m4 generated automatically by aclocal 1.4-p5
+
+dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+# Do all the work for Automake. This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "[$]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "[$]*" != "X $srcdir/configure conftestfile" \
+ && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "[$]2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN([AM_MISSING_PROG],
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+ $1=$2
+ AC_MSG_RESULT(found)
+else
+ $1="$3/missing $2"
+ AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# serial 1
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT($USE_MAINTAINER_MODE)
+ AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+# Define a conditional.
+
+AC_DEFUN([AM_CONDITIONAL],
+[AC_SUBST($1_TRUE)
+AC_SUBST($1_FALSE)
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN([AM_CONFIG_HEADER],
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated. We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+ case " <<$>>CONFIG_HEADERS " in
+ *" <<$>>am_file "*<<)>>
+ echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+ ;;
+ esac
+ am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+
--- /dev/null
+@%:@! /bin/sh
+@%:@ Guess values for system-dependent variables and create Makefiles.
+@%:@ Generated by GNU Autoconf 2.53.
+@%:@
+@%:@ Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+@%:@ Free Software Foundation, Inc.
+@%:@ This configure script is free software; the Free Software Foundation
+@%:@ gives unlimited permission to copy, distribute and modify it.
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# NLS nuisances.
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
+ { $as_unset LANG || test "${LANG+set}" != set; } ||
+ { LANG=C; export LANG; }
+(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
+ { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
+ { LC_ALL=C; export LC_ALL; }
+(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
+ { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
+ { LC_TIME=C; export LC_TIME; }
+(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
+ { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
+ { LC_CTYPE=C; export LC_CTYPE; }
+(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
+ { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
+ { LANGUAGE=C; export LANGUAGE; }
+(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
+ { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
+ { LC_COLLATE=C; export LC_COLLATE; }
+(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
+ { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
+ { LC_NUMERIC=C; export LC_NUMERIC; }
+(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
+ { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
+ { LC_MESSAGES=C; export LC_MESSAGES; }
+
+
+# Name of the executable.
+as_me=`(basename "$0") 2>/dev/null ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conftest.sh
+ echo "exit 0" >>conftest.sh
+ chmod +x conftest.sh
+ if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conftest.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="src/openbox.cc"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+X features:
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-shape enable support of the XShape extension default=yes
+ --enable-slit include code for the Slit default=yes
+ --enable-newspec include code for the new WM Spec (DOES NOTHING)
+ default=no
+ --enable-interlace include code for image interlacing default=yes
+ --enable-ordered-pseudo include code for ordered pseudocolor (8bpp)
+ dithering default=no
+ --enable-clobber intercept mouse events to clients when num lock
+ or scroll lock are on default=yes
+ --enable-debug include verbose debugging code default=no
+ --enable-nls include natural language support default=yes
+ --enable-timed-cache use new timed pixmap cache default=yes
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-x use the X Window System
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.53. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+@%:@@%:@ --------- @%:@@%:@
+@%:@@%:@ Platform. @%:@@%:@
+@%:@@%:@ --------- @%:@@%:@
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+@%:@@%:@ ----------- @%:@@%:@
+@%:@@%:@ Core tests. @%:@@%:@
+@%:@@%:@ ----------- @%:@@%:@
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell meta-characters.
+ac_configure_args=
+ac_sep=
+for ac_arg
+do
+ case $ac_arg in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n ) continue ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ ac_sep=" " ;;
+ esac
+ # Get rid of the leading space.
+done
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+ cat <<\_ASBOX
+@%:@@%:@ ---------------- @%:@@%:@
+@%:@@%:@ Cache variables. @%:@@%:@
+@%:@@%:@ ---------------- @%:@@%:@
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+@%:@@%:@ ----------- @%:@@%:@
+@%:@@%:@ confdefs.h. @%:@@%:@
+@%:@@%:@ ----------- @%:@@%:@
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core core.* *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "$*" != "X $srcdir/configure conftestfile" \
+ && test "$*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ test "$2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f conftest*
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=openbox
+
+VERSION=0.99.0
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo "$as_me:$LINENO: checking for working aclocal" >&5
+echo $ECHO_N "checking for working aclocal... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ ACLOCAL="$missing_dir/missing aclocal"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working autoconf" >&5
+echo $ECHO_N "checking for working autoconf... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+ AUTOCONF=autoconf
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ AUTOCONF="$missing_dir/missing autoconf"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working automake" >&5
+echo $ECHO_N "checking for working automake... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ AUTOMAKE="$missing_dir/missing automake"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working autoheader" >&5
+echo $ECHO_N "checking for working autoheader... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+ AUTOHEADER=autoheader
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ AUTOHEADER="$missing_dir/missing autoheader"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working makeinfo" >&5
+echo $ECHO_N "checking for working makeinfo... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+ MAKEINFO=makeinfo
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ MAKEINFO="$missing_dir/missing makeinfo"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+
+
+test x$prefix = "xNONE" && prefix="$ac_default_prefix"
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $@%:@ != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$as_dir/$ac_word" ${1+"$@"}
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+for ac_file in `ls a_out.exe a.exe conftest.exe 2>/dev/null;
+ ls a.out conftest 2>/dev/null;
+ ls a.* conftest.* 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb | *.xSYM ) ;;
+ a.out ) # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link" >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile" >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+@%:@ifndef __cplusplus
+ choke me
+@%:@endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ ''\
+ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <stdlib.h>
+$ac_declaration
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_declaration
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+for ac_declaration in \
+ ''\
+ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <stdlib.h>
+$ac_declaration
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_declaration
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+for ac_prog in sed
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_regex_cmd+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$regex_cmd"; then
+ ac_cv_prog_regex_cmd="$regex_cmd" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_regex_cmd="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+regex_cmd=$ac_cv_prog_regex_cmd
+if test -n "$regex_cmd"; then
+ echo "$as_me:$LINENO: result: $regex_cmd" >&5
+echo "${ECHO_T}$regex_cmd" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$regex_cmd" && break
+done
+
+if test x$regex_cmd = "x"; then
+ { { echo "$as_me:$LINENO: error: error. sed is required to build the default menu file." >&5
+echo "$as_me: error: error. sed is required to build the default menu file." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check" >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+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 <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+@%:@define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_includes_default
+
+@%:@include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in ctype.h dirent.h fcntl.h libgen.h locale.h nl_types.h process.h signal.h stdarg.h stdio.h time.h unistd.h sys/param.h sys/select.h sys/signal.h sys/stat.h sys/time.h sys/types.h sys/wait.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_includes_default
+@%:@include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+if test "${ac_cv_header_time+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_time=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_header_time=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+@%:@define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+
+for ac_func in basename
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* 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 (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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)
+choke me
+#else
+f = $ac_func;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ echo "$as_me:$LINENO: checking for basename in -lgen" >&5
+echo $ECHO_N "checking for basename in -lgen... $ECHO_C" >&6
+if test "${ac_cv_lib_gen_basename+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgen $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char basename ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+basename ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_gen_basename=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_gen_basename=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_gen_basename" >&5
+echo "${ECHO_T}$ac_cv_lib_gen_basename" >&6
+if test $ac_cv_lib_gen_basename = yes; then
+ cat >>confdefs.h <<\_ACEOF
+@%:@define HAVE_BASENAME 1
+_ACEOF
+ LIBS="$LIBS -lgen"
+fi
+
+fi
+done
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in getpid setlocale sigaction strftime strcasestr snprintf vsnprintf catopen catgets catclose
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* 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 (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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)
+choke me
+#else
+f = $ac_func;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+echo "$as_me:$LINENO: checking for t_open in -lnsl" >&5
+echo $ECHO_N "checking for t_open in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_t_open+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char t_open ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+t_open ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_t_open=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_nsl_t_open=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_t_open" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_t_open" >&6
+if test $ac_cv_lib_nsl_t_open = yes; then
+ LIBS="$LIBS -lnsl"
+fi
+
+echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
+echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_socket+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char socket ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+socket ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_socket=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_socket_socket=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6
+if test $ac_cv_lib_socket_socket = yes; then
+ LIBS="$LIBS -lsocket"
+fi
+
+
+echo "$as_me:$LINENO: checking for X" >&5
+echo $ECHO_N "checking for X... $ECHO_C" >&6
+
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+ withval="$with_x"
+
+fi;
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+ if test "${ac_cv_have_x+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -fr conftest.dir
+if mkdir conftest.dir; then
+ cd conftest.dir
+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+ cat >Imakefile <<'_ACEOF'
+acfindx:
+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+_ACEOF
+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl; do
+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ test -f $ac_im_libdir/libX11.$ac_extension; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case $ac_im_incroot in
+ /usr/include) ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+ esac
+ case $ac_im_usrlibdir in
+ /usr/lib | /lib) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+ esac
+ fi
+ cd ..
+ rm -fr conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Intrinsic.h.
+ # First, try using that file with no special directory specified.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <X11/Intrinsic.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ for ac_dir in $ac_x_header_dirs; do
+ if test -r "$ac_dir/X11/Intrinsic.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+done
+fi
+rm -f conftest.err conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+ # Check for the libraries.
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+ LIBS="-lXt $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+@%:@include <X11/Intrinsic.h>
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+XtMalloc (0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+LIBS=$ac_save_LIBS
+for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/libXt.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ echo "$as_me:$LINENO: result: $have_x" >&5
+echo "${ECHO_T}$have_x" >&6
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
+fi
+
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+
+cat >>confdefs.h <<\_ACEOF
+@%:@define X_DISPLAY_MISSING 1
+_ACEOF
+
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ case `(uname -sr) 2>/dev/null` in
+ "SunOS 5"*)
+ echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
+echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_R_nospace=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_R_nospace=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ if test $ac_R_nospace = yes; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ X_LIBS="$X_LIBS -R$x_libraries"
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_R_space=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_R_space=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ if test $ac_R_space = yes; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ X_LIBS="$X_LIBS -R $x_libraries"
+ else
+ echo "$as_me:$LINENO: result: neither works" >&5
+echo "${ECHO_T}neither works" >&6
+ fi
+ fi
+ LIBS=$ac_xsave_LIBS
+ esac
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn Johnson says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And Karl Berry says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+XOpenDisplay ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dnet_dnet_ntoa=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
+if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
+if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+ fi
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_xsave_LIBS"
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to T.E. Dickey.
+ # The functions gethostbyname, getservbyname, and inet_addr are
+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+ echo "$as_me:$LINENO: checking for gethostbyname" >&5
+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
+if test "${ac_cv_func_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostbyname (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+f = gethostbyname;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_gethostbyname=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
+
+ if test $ac_cv_func_gethostbyname = no; then
+ echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
+if test $ac_cv_lib_nsl_gethostbyname = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+ if test $ac_cv_lib_nsl_gethostbyname = no; then
+ echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
+echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_bsd_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
+if test $ac_cv_lib_bsd_gethostbyname = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+ fi
+ fi
+
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says Simon Leinen: it contains gethostby*
+ # variants that don't use the nameserver (or something). -lsocket
+ # must be given before -lnsl if both are needed. We assume that
+ # if connect needs -lnsl, so does gethostbyname.
+ echo "$as_me:$LINENO: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6
+if test "${ac_cv_func_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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_connect) || defined (__stub___connect)
+choke me
+#else
+f = connect;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_connect=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6
+
+ if test $ac_cv_func_connect = no; then
+ echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+connect ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_socket_connect=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
+if test $ac_cv_lib_socket_connect = yes; then
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+ fi
+
+ # Guillermo Gomez says -lposix is necessary on A/UX.
+ echo "$as_me:$LINENO: checking for remove" >&5
+echo $ECHO_N "checking for remove... $ECHO_C" >&6
+if test "${ac_cv_func_remove+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char remove (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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_remove) || defined (__stub___remove)
+choke me
+#else
+f = remove;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_remove=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_remove=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
+echo "${ECHO_T}$ac_cv_func_remove" >&6
+
+ if test $ac_cv_func_remove = no; then
+ echo "$as_me:$LINENO: checking for remove in -lposix" >&5
+echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
+if test "${ac_cv_lib_posix_remove+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+remove ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_posix_remove=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_posix_remove=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
+echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
+if test $ac_cv_lib_posix_remove = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ echo "$as_me:$LINENO: checking for shmat" >&5
+echo $ECHO_N "checking for shmat... $ECHO_C" >&6
+if test "${ac_cv_func_shmat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shmat (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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_shmat) || defined (__stub___shmat)
+choke me
+#else
+f = shmat;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shmat=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_shmat=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
+echo "${ECHO_T}$ac_cv_func_shmat" >&6
+
+ if test $ac_cv_func_shmat = no; then
+ echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
+echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+shmat ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_ipc_shmat=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_ipc_shmat=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
+echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
+if test $ac_cv_lib_ipc_shmat = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS=$LDFLAGS
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # John Interrante, Karl Berry
+ echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
+echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char IceConnectionNumber ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+IceConnectionNumber ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
+if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+ LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+
+test x$no_x = "xyes" && { { echo "$as_me:$LINENO: error: Openbox requires the X Window System libraries and headers." >&5
+echo "$as_me: error: Openbox requires the X Window System libraries and headers." >&2;}
+ { (exit 1); exit 1; }; }
+
+test x$x_includes = "x" && x_includes="/usr/include"
+test x$x_libraries = "x" && x_libraries="/usr/lib"
+
+CFLAGS="$CFLAGS $X_CFLAGS"
+CXXFLAGS="$CXXFLAGS $X_CFLAGS"
+LIBS="$LIBS $X_LIBS"
+LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
+
+echo "$as_me:$LINENO: checking for XOpenDisplay in -lX11" >&5
+echo $ECHO_N "checking for XOpenDisplay in -lX11... $ECHO_C" >&6
+if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lX11 $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+XOpenDisplay ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_X11_XOpenDisplay=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_X11_XOpenDisplay=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XOpenDisplay" >&5
+echo "${ECHO_T}$ac_cv_lib_X11_XOpenDisplay" >&6
+if test $ac_cv_lib_X11_XOpenDisplay = yes; then
+ LIBS="$LIBS -lX11"
+else
+ { { echo "$as_me:$LINENO: error: Could not find XOpenDisplay in -lX11." >&5
+echo "$as_me: error: Could not find XOpenDisplay in -lX11." >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+
+
+LIBS="$LIBS $X_EXTRA_LIBS"
+
+Xext_lib=""
+
+SHAPE=""
+echo "$as_me:$LINENO: checking whether to build support for the XShape extension" >&5
+echo $ECHO_N "checking whether to build support for the XShape extension... $ECHO_C" >&6
+# Check whether --enable-shape or --disable-shape was given.
+if test "${enable_shape+set}" = set; then
+ enableval="$enable_shape"
+
+fi;
+
+: ${enableval="yes"}
+if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ echo "$as_me:$LINENO: checking for XShapeCombineShape in -lXext" >&5
+echo $ECHO_N "checking for XShapeCombineShape in -lXext... $ECHO_C" >&6
+if test "${ac_cv_lib_Xext_XShapeCombineShape+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXext $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XShapeCombineShape ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+XShapeCombineShape ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_Xext_XShapeCombineShape=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_Xext_XShapeCombineShape=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XShapeCombineShape" >&5
+echo "${ECHO_T}$ac_cv_lib_Xext_XShapeCombineShape" >&6
+if test $ac_cv_lib_Xext_XShapeCombineShape = yes; then
+ echo "$as_me:$LINENO: checking for X11/extensions/shape.h" >&5
+echo $ECHO_N "checking for X11/extensions/shape.h... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/shape.h>
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+long foo = ShapeSet
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SHAPE="-DSHAPE"; Xext_lib="-lXext"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+
+fi
+
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+LIBS="$LIBS $Xext_lib"
+
+SLIT=""
+echo "$as_me:$LINENO: checking whether to include the Slit" >&5
+echo $ECHO_N "checking whether to include the Slit... $ECHO_C" >&6
+# Check whether --enable-slit or --disable-slit was given.
+if test "${enable_slit+set}" = set; then
+ enableval="$enable_slit"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SLIT="-DSLIT"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SLIT="-DSLIT"
+
+fi;
+
+
+NEWWMSPEC=""
+echo "$as_me:$LINENO: checking whether to include the new WM Spec (DOES NOTHING)" >&5
+echo $ECHO_N "checking whether to include the new WM Spec (DOES NOTHING)... $ECHO_C" >&6
+# Check whether --enable-newspec or --disable-newspec was given.
+if test "${enable_newspec+set}" = set; then
+ enableval="$enable_newspec"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ NEWWMSPEC="-DNEWWMSPEC"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+
+INTERLACE=""
+echo "$as_me:$LINENO: checking whether to include interlacing image code" >&5
+echo $ECHO_N "checking whether to include interlacing image code... $ECHO_C" >&6
+# Check whether --enable-interlace or --disable-interlace was given.
+if test "${enable_interlace+set}" = set; then
+ enableval="$enable_interlace"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ INTERLACE="-DINTERLACE"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ INTERLACE="-DINTERLACE"
+
+fi;
+
+
+ORDEREDPSEUDO=""
+echo "$as_me:$LINENO: checking whether to include Pseudocolor ordered dithering code" >&5
+echo $ECHO_N "checking whether to include Pseudocolor ordered dithering code... $ECHO_C" >&6
+# Check whether --enable-ordered-pseudo or --disable-ordered-pseudo was given.
+if test "${enable_ordered_pseudo+set}" = set; then
+ enableval="$enable_ordered_pseudo"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ ORDEREDPSEUDO="-DORDEREDPSEUDO"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+CLOBBER=""
+echo "$as_me:$LINENO: checking whether to intercept mouse events to clients" >&5
+echo $ECHO_N "checking whether to intercept mouse events to clients... $ECHO_C" >&6
+# Check whether --enable-clobber or --disable-clobber was given.
+if test "${enable_clobber+set}" = set; then
+ enableval="$enable_clobber"
+ if test x$enableval = "xno"; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ CLOBBER="-DNOCLOBBER"
+ else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+DEBUG=""
+echo "$as_me:$LINENO: checking whether to include verbose debugging code" >&5
+echo $ECHO_N "checking whether to include verbose debugging code... $ECHO_C" >&6
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+ enableval="$enable_debug"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ DEBUG="-DDEBUG"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+NLS=""
+echo "$as_me:$LINENO: checking whether to include NLS support" >&5
+echo $ECHO_N "checking whether to include NLS support... $ECHO_C" >&6
+# Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+ enableval="$enable_nls"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ NLS="-DNLS"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ NLS="-DNLS"
+
+fi;
+
+
+echo "$as_me:$LINENO: checking for setlocale in -lxpg4" >&5
+echo $ECHO_N "checking for setlocale in -lxpg4... $ECHO_C" >&6
+if test "${ac_cv_lib_xpg4_setlocale+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lxpg4 $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char setlocale ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+setlocale ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_xpg4_setlocale=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_xpg4_setlocale=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_xpg4_setlocale" >&5
+echo "${ECHO_T}$ac_cv_lib_xpg4_setlocale" >&6
+if test $ac_cv_lib_xpg4_setlocale = yes; then
+ LIBS="$LIBS -lxpg4"
+fi
+
+
+for ac_prog in gencat
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_gencat_cmd+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$gencat_cmd"; then
+ ac_cv_prog_gencat_cmd="$gencat_cmd" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_gencat_cmd="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+gencat_cmd=$ac_cv_prog_gencat_cmd
+if test -n "$gencat_cmd"; then
+ echo "$as_me:$LINENO: result: $gencat_cmd" >&5
+echo "${ECHO_T}$gencat_cmd" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$gencat_cmd" && break
+done
+
+if test x$gencat_cmd = "x"; then
+ NLS=""
+fi
+
+
+TIMEDCACHE=""
+echo "$as_me:$LINENO: checking whether to use the new timed pixmap cache" >&5
+echo $ECHO_N "checking whether to use the new timed pixmap cache... $ECHO_C" >&6
+# Check whether --enable-timed-cache or --disable-timed-cache was given.
+if test "${enable_timed_cache+set}" = set; then
+ enableval="$enable_timed_cache"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ TIMEDCACHE="-DTIMEDCACHE"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ TIMEDCACHE="-DTIMEDCACHE"
+
+fi;
+
+
+echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+if test "${ac_cv_type_signal+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+# undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+int i;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_signal=void
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_type_signal=int
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6
+
+cat >>confdefs.h <<_ACEOF
+@%:@define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+ USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi;
+ echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+echo "$as_me:$LINENO: result: " >&5
+echo "${ECHO_T}" >&6
+echo "$as_me:$LINENO: result: $PACKAGE version $VERSION configured successfully." >&5
+echo "${ECHO_T} $PACKAGE version $VERSION configured successfully." >&6
+echo "$as_me:$LINENO: result: " >&5
+echo "${ECHO_T}" >&6
+echo "$as_me:$LINENO: result: Using '$prefix' for installation." >&5
+echo "${ECHO_T}Using '$prefix' for installation." >&6
+echo "$as_me:$LINENO: result: Using '$CXX' for C++ compiler." >&5
+echo "${ECHO_T}Using '$CXX' for C++ compiler." >&6
+echo "$as_me:$LINENO: result: Building with '$CXXFLAGS' for C++ compiler flags." >&5
+echo "${ECHO_T}Building with '$CXXFLAGS' for C++ compiler flags." >&6
+echo "$as_me:$LINENO: result: Building with '$LIBS' for linker flags." >&5
+echo "${ECHO_T}Building with '$LIBS' for linker flags." >&6
+echo "$as_me:$LINENO: result: " >&5
+echo "${ECHO_T}" >&6
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+ac_config_commands="$ac_config_commands default-1"
+
+ac_config_files="$ac_config_files Makefile src/Makefile util/Makefile data/Makefile data/styles/Makefile doc/Makefile nls/Makefile nls/C/Makefile nls/da_DK/Makefile nls/de_DE/Makefile nls/es_ES/Makefile nls/et_EE/Makefile nls/fr_FR/Makefile nls/it_IT/Makefile nls/ja_JP/Makefile nls/nl_NL/Makefile nls/pt_BR/Makefile nls/ru_RU/Makefile nls/sl_SI/Makefile nls/sv_SE/Makefile nls/tr_TR/Makefile nls/zh_CN/Makefile version.h"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if cmp -s $cache_file confcache; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# NLS nuisances.
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
+ { $as_unset LANG || test "${LANG+set}" != set; } ||
+ { LANG=C; export LANG; }
+(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
+ { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
+ { LC_ALL=C; export LC_ALL; }
+(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
+ { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
+ { LC_TIME=C; export LC_TIME; }
+(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
+ { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
+ { LC_CTYPE=C; export LC_CTYPE; }
+(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
+ { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
+ { LANGUAGE=C; export LANGUAGE; }
+(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
+ { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
+ { LC_COLLATE=C; export LC_COLLATE; }
+(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
+ { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
+ { LC_NUMERIC=C; export LC_NUMERIC; }
+(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
+ { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
+ { LC_MESSAGES=C; export LC_MESSAGES; }
+
+
+# Name of the executable.
+as_me=`(basename "$0") 2>/dev/null ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conftest.sh
+ echo "exit 0" >>conftest.sh
+ chmod +x conftest.sh
+ if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conftest.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX
+@%:@@%:@ Running $as_me. @%:@@%:@
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.53. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.53,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ shift
+ set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+ shift
+ ;;
+ -*);;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_need_defaults=false;;
+ esac
+
+ case $1 in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+ exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ shift
+ CONFIG_FILES="$CONFIG_FILES $1"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $1"
+ ac_need_defaults=false;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "util/Makefile" ) CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
+ "data/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+ "data/styles/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/styles/Makefile" ;;
+ "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "nls/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/Makefile" ;;
+ "nls/C/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/C/Makefile" ;;
+ "nls/da_DK/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/da_DK/Makefile" ;;
+ "nls/de_DE/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/de_DE/Makefile" ;;
+ "nls/es_ES/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/es_ES/Makefile" ;;
+ "nls/et_EE/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/et_EE/Makefile" ;;
+ "nls/fr_FR/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/fr_FR/Makefile" ;;
+ "nls/it_IT/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/it_IT/Makefile" ;;
+ "nls/ja_JP/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/ja_JP/Makefile" ;;
+ "nls/nl_NL/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/nl_NL/Makefile" ;;
+ "nls/pt_BR/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/pt_BR/Makefile" ;;
+ "nls/ru_RU/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/ru_RU/Makefile" ;;
+ "nls/sl_SI/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/sl_SI/Makefile" ;;
+ "nls/sv_SE/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/sv_SE/Makefile" ;;
+ "nls/tr_TR/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/tr_TR/Makefile" ;;
+ "nls/zh_CN/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/zh_CN/Makefile" ;;
+ "version.h" ) CONFIG_FILES="$CONFIG_FILES version.h" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: ${TMPDIR=/tmp}
+{
+ tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=$TMPDIR/cs$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@regex_cmd@,$regex_cmd,;t t
+s,@CPP@,$CPP,;t t
+s,@X_CFLAGS@,$X_CFLAGS,;t t
+s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
+s,@X_LIBS@,$X_LIBS,;t t
+s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
+s,@SHAPE@,$SHAPE,;t t
+s,@SLIT@,$SLIT,;t t
+s,@NEWWMSPEC@,$NEWWMSPEC,;t t
+s,@INTERLACE@,$INTERLACE,;t t
+s,@ORDEREDPSEUDO@,$ORDEREDPSEUDO,;t t
+s,@CLOBBER@,$CLOBBER,;t t
+s,@DEBUG@,$DEBUG,;t t
+s,@NLS@,$NLS,;t t
+s,@gencat_cmd@,$gencat_cmd,;t t
+s,@TIMEDCACHE@,$TIMEDCACHE,;t t
+s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s,@MAINT@,$MAINT,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" ||
+ mkdir "$as_incr_dir" ||
+ { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+done; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # egrep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" ||
+ mkdir "$as_incr_dir" ||
+ { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+done; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
+ X"$ac_dest" : 'X\(//\)$' \| \
+ X"$ac_dest" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ default-1 ) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;;
+ esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
--- /dev/null
+# This file was created by autom4te.
+# It contains the lists of macros which have been traced.
+# It can be safely removed.
+
+@request = (
+ bless( [
+ '0',
+ 1,
+ [
+ '/usr/share/autoconf'
+ ],
+ [
+ '--reload-state=/usr/share/autoconf/autoconf/autoconf.m4f',
+ 'aclocal.m4',
+ 'configure.in'
+ ],
+ {
+ 'AC_HEADER_STAT' => 1,
+ 'AC_FUNC_STRFTIME' => 1,
+ 'AC_PROG_RANLIB' => 1,
+ 'AC_FUNC_WAIT3' => 1,
+ 'AC_FUNC_SETPGRP' => 1,
+ 'AC_HEADER_TIME' => 1,
+ 'AC_FUNC_SETVBUF_REVERSED' => 1,
+ 'AC_HEADER_SYS_WAIT' => 1,
+ 'AC_TYPE_UID_T' => 1,
+ 'AM_CONDITIONAL' => 1,
+ 'AC_CHECK_LIB' => 1,
+ 'AC_PROG_LN_S' => 1,
+ 'AC_FUNC_MEMCMP' => 1,
+ 'AC_FUNC_FORK' => 1,
+ 'AC_FUNC_GETGROUPS' => 1,
+ 'AC_HEADER_MAJOR' => 1,
+ 'AC_FUNC_STRTOD' => 1,
+ 'AC_HEADER_DIRENT' => 1,
+ 'AC_FUNC_UTIME_NULL' => 1,
+ 'AC_CONFIG_FILES' => 1,
+ 'AC_FUNC_ALLOCA' => 1,
+ 'AC_C_CONST' => 1,
+ 'include' => 1,
+ 'AC_FUNC_OBSTACK' => 1,
+ 'AC_FUNC_LSTAT' => 1,
+ 'AC_STRUCT_TIMEZONE' => 1,
+ 'AC_FUNC_GETPGRP' => 1,
+ 'AC_DEFINE_TRACE_LITERAL' => 1,
+ 'AC_CHECK_HEADERS' => 1,
+ 'AC_TYPE_MODE_T' => 1,
+ 'AC_CHECK_TYPES' => 1,
+ 'AC_PROG_YACC' => 1,
+ 'AC_TYPE_PID_T' => 1,
+ 'AC_FUNC_STRERROR_R' => 1,
+ 'AC_STRUCT_ST_BLOCKS' => 1,
+ 'AC_PROG_GCC_TRADITIONAL' => 1,
+ 'AC_TYPE_SIGNAL' => 1,
+ 'AC_FUNC_FNMATCH' => 1,
+ 'AC_PROG_CPP' => 1,
+ 'AM_PROG_LIBTOOL' => 1,
+ 'AC_FUNC_STAT' => 1,
+ 'AC_PROG_INSTALL' => 1,
+ 'AM_GNU_GETTEXT' => 1,
+ 'AC_FUNC_STRCOLL' => 1,
+ 'AC_LIBSOURCE' => 1,
+ 'AC_C_INLINE' => 1,
+ 'AC_FUNC_CHOWN' => 1,
+ 'AC_PROG_LEX' => 1,
+ 'AH_OUTPUT' => 1,
+ 'AC_HEADER_STDC' => 1,
+ 'AC_FUNC_GETLOADAVG' => 1,
+ 'AC_CHECK_FUNCS' => 1,
+ 'AC_TYPE_SIZE_T' => 1,
+ 'AC_DECL_SYS_SIGLIST' => 1,
+ 'AC_FUNC_MKTIME' => 1,
+ 'AC_PROG_MAKE_SET' => 1,
+ 'AC_PROG_CXX' => 1,
+ 'm4_pattern_allow' => 1,
+ 'm4_include' => 1,
+ 'm4_pattern_forbid' => 1,
+ 'AC_PROG_AWK' => 1,
+ 'AC_FUNC_VPRINTF' => 1,
+ 'AC_CONFIG_HEADERS' => 1,
+ 'AC_PATH_X' => 1,
+ 'AC_TYPE_OFF_T' => 1,
+ 'AC_FUNC_MALLOC' => 1,
+ 'AC_FUNC_ERROR_AT_LINE' => 1,
+ 'AC_FUNC_FSEEKO' => 1,
+ 'AC_FUNC_MMAP' => 1,
+ 'AC_STRUCT_TM' => 1,
+ 'AC_SUBST' => 1,
+ 'AC_PROG_CC' => 1,
+ 'AC_PROG_LIBTOOL' => 1
+ }
+ ], 'Request' )
+ );
+
--- /dev/null
+m4trace:configure.in:3: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.in:3: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.in:3: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs. LIBOBJS'])
+m4trace:configure.in:3: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.in:3: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.in:3: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.in:3: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.in:3: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
+m4trace:configure.in:3: -1- AC_SUBST([PATH_SEPARATOR])
+m4trace:configure.in:3: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
+m4trace:configure.in:3: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
+m4trace:configure.in:3: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
+m4trace:configure.in:3: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
+m4trace:configure.in:3: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
+m4trace:configure.in:3: -1- AC_SUBST([exec_prefix], [NONE])
+m4trace:configure.in:3: -1- AC_SUBST([prefix], [NONE])
+m4trace:configure.in:3: -1- AC_SUBST([program_transform_name], [s,x,x,])
+m4trace:configure.in:3: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
+m4trace:configure.in:3: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
+m4trace:configure.in:3: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
+m4trace:configure.in:3: -1- AC_SUBST([datadir], ['${prefix}/share'])
+m4trace:configure.in:3: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
+m4trace:configure.in:3: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
+m4trace:configure.in:3: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
+m4trace:configure.in:3: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
+m4trace:configure.in:3: -1- AC_SUBST([includedir], ['${prefix}/include'])
+m4trace:configure.in:3: -1- AC_SUBST([oldincludedir], ['/usr/include'])
+m4trace:configure.in:3: -1- AC_SUBST([infodir], ['${prefix}/info'])
+m4trace:configure.in:3: -1- AC_SUBST([mandir], ['${prefix}/man'])
+m4trace:configure.in:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
+m4trace:configure.in:3: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
+#undef PACKAGE_NAME])
+m4trace:configure.in:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
+m4trace:configure.in:3: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME])
+m4trace:configure.in:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
+m4trace:configure.in:3: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
+#undef PACKAGE_VERSION])
+m4trace:configure.in:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
+m4trace:configure.in:3: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING])
+m4trace:configure.in:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
+m4trace:configure.in:3: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT])
+m4trace:configure.in:3: -1- AC_SUBST([build_alias])
+m4trace:configure.in:3: -1- AC_SUBST([host_alias])
+m4trace:configure.in:3: -1- AC_SUBST([target_alias])
+m4trace:configure.in:3: -1- AC_SUBST([DEFS])
+m4trace:configure.in:3: -1- AC_SUBST([ECHO_C])
+m4trace:configure.in:3: -1- AC_SUBST([ECHO_N])
+m4trace:configure.in:3: -1- AC_SUBST([ECHO_T])
+m4trace:configure.in:3: -1- AC_SUBST([LIBS])
+m4trace:configure.in:4: -1- AC_PROG_INSTALL
+m4trace:configure.in:4: -1- AC_SUBST([INSTALL_PROGRAM])
+m4trace:configure.in:4: -1- AC_SUBST([INSTALL_SCRIPT])
+m4trace:configure.in:4: -1- AC_SUBST([INSTALL_DATA])
+m4trace:configure.in:4: -1- AC_SUBST([PACKAGE])
+m4trace:configure.in:4: -1- AC_SUBST([VERSION])
+m4trace:configure.in:4: -2- AC_DEFINE_TRACE_LITERAL([PACKAGE])
+m4trace:configure.in:4: -2- AH_OUTPUT([PACKAGE], [/* Name of package */
+#undef PACKAGE])
+m4trace:configure.in:4: -2- AC_DEFINE_TRACE_LITERAL([VERSION])
+m4trace:configure.in:4: -2- AH_OUTPUT([VERSION], [/* Version number of package */
+#undef VERSION])
+m4trace:configure.in:4: -1- AC_SUBST([ACLOCAL])
+m4trace:configure.in:4: -1- AC_SUBST([AUTOCONF])
+m4trace:configure.in:4: -1- AC_SUBST([AUTOMAKE])
+m4trace:configure.in:4: -1- AC_SUBST([AUTOHEADER])
+m4trace:configure.in:4: -1- AC_SUBST([MAKEINFO])
+m4trace:configure.in:4: -1- AC_PROG_MAKE_SET
+m4trace:configure.in:4: -1- AC_SUBST([SET_MAKE])
+m4trace:configure.in:14: -1- AC_PROG_CC
+m4trace:configure.in:14: -1- AC_SUBST([CC])
+m4trace:configure.in:14: -1- AC_SUBST([CFLAGS])
+m4trace:configure.in:14: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.in:14: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.in:14: -1- AC_SUBST([CC])
+m4trace:configure.in:14: -1- AC_SUBST([ac_ct_CC])
+m4trace:configure.in:14: -1- AC_SUBST([CC])
+m4trace:configure.in:14: -1- AC_SUBST([ac_ct_CC])
+m4trace:configure.in:14: -1- AC_SUBST([CC])
+m4trace:configure.in:14: -1- AC_SUBST([CC])
+m4trace:configure.in:14: -1- AC_SUBST([ac_ct_CC])
+m4trace:configure.in:14: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
+m4trace:configure.in:14: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
+m4trace:configure.in:15: -1- AC_PROG_CXX
+m4trace:configure.in:15: -1- AC_SUBST([CXX])
+m4trace:configure.in:15: -1- AC_SUBST([CXXFLAGS])
+m4trace:configure.in:15: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.in:15: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.in:15: -1- AC_SUBST([CXX])
+m4trace:configure.in:15: -1- AC_SUBST([ac_ct_CXX])
+m4trace:configure.in:16: -1- AC_PROG_INSTALL
+m4trace:configure.in:16: -1- AC_SUBST([INSTALL_PROGRAM])
+m4trace:configure.in:16: -1- AC_SUBST([INSTALL_SCRIPT])
+m4trace:configure.in:16: -1- AC_SUBST([INSTALL_DATA])
+m4trace:configure.in:18: -1- AC_SUBST([regex_cmd])
+m4trace:configure.in:24: -1- AC_HEADER_STDC
+m4trace:configure.in:24: -1- AC_PROG_CPP
+m4trace:configure.in:24: -1- AC_SUBST([CPP])
+m4trace:configure.in:24: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.in:24: -1- AC_SUBST([CPP])
+m4trace:configure.in:24: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
+m4trace:configure.in:24: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS])
+m4trace:configure.in:25: -1- AC_CHECK_HEADERS([ctype.h dirent.h fcntl.h libgen.h locale.h nl_types.h process.h signal.h stdarg.h stdio.h time.h unistd.h sys/param.h sys/select.h sys/signal.h sys/stat.h sys/time.h sys/types.h sys/wait.h])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_CTYPE_H], [/* Define to 1 if you have the <ctype.h> header file. */
+#undef HAVE_CTYPE_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_LIBGEN_H], [/* Define to 1 if you have the <libgen.h> header file. */
+#undef HAVE_LIBGEN_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_NL_TYPES_H], [/* Define to 1 if you have the <nl_types.h> header file. */
+#undef HAVE_NL_TYPES_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_PROCESS_H], [/* Define to 1 if you have the <process.h> header file. */
+#undef HAVE_PROCESS_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SIGNAL_H], [/* Define to 1 if you have the <signal.h> header file. */
+#undef HAVE_SIGNAL_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_STDARG_H], [/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_TIME_H], [/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_SIGNAL_H], [/* Define to 1 if you have the <sys/signal.h> header file. */
+#undef HAVE_SYS_SIGNAL_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_WAIT_H], [/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H])
+m4trace:configure.in:25: -1- AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h], [], [], [$ac_includes_default])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H])
+m4trace:configure.in:25: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H])
+m4trace:configure.in:26: -1- AC_HEADER_TIME
+m4trace:configure.in:26: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])
+m4trace:configure.in:26: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME])
+m4trace:configure.in:30: -3- AC_DEFINE_TRACE_LITERAL([HAVE_BASENAME])
+m4trace:configure.in:30: -2- AC_CHECK_LIB([gen], [basename], [cat >>confdefs.h <<\_ACEOF
+@%:@define HAVE_BASENAME 1
+_ACEOF
+ LIBS="$LIBS -lgen"])
+m4trace:configure.in:30: -1- AC_CHECK_FUNCS([basename], [], [echo "$as_me:$LINENO: checking for basename in -lgen" >&5
+echo $ECHO_N "checking for basename in -lgen... $ECHO_C" >&6
+if test "${ac_cv_lib_gen_basename+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgen $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char basename ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+basename ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_gen_basename=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_gen_basename=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_gen_basename" >&5
+echo "${ECHO_T}$ac_cv_lib_gen_basename" >&6
+if test $ac_cv_lib_gen_basename = yes; then
+ cat >>confdefs.h <<\_ACEOF
+@%:@define HAVE_BASENAME 1
+_ACEOF
+ LIBS="$LIBS -lgen"
+fi
+])
+m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_BASENAME], [/* Define to 1 if you have the \`basename' function. */
+#undef HAVE_BASENAME])
+m4trace:configure.in:31: -1- AC_CHECK_FUNCS([getpid setlocale sigaction strftime strcasestr snprintf vsnprintf catopen catgets catclose])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_GETPID], [/* Define to 1 if you have the \`getpid' function. */
+#undef HAVE_GETPID])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_SETLOCALE], [/* Define to 1 if you have the \`setlocale' function. */
+#undef HAVE_SETLOCALE])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_SIGACTION], [/* Define to 1 if you have the \`sigaction' function. */
+#undef HAVE_SIGACTION])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_STRFTIME], [/* Define to 1 if you have the \`strftime' function. */
+#undef HAVE_STRFTIME])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_STRCASESTR], [/* Define to 1 if you have the \`strcasestr' function. */
+#undef HAVE_STRCASESTR])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define to 1 if you have the \`snprintf' function. */
+#undef HAVE_SNPRINTF])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define to 1 if you have the \`vsnprintf' function. */
+#undef HAVE_VSNPRINTF])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_CATOPEN], [/* Define to 1 if you have the \`catopen' function. */
+#undef HAVE_CATOPEN])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_CATGETS], [/* Define to 1 if you have the \`catgets' function. */
+#undef HAVE_CATGETS])
+m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_CATCLOSE], [/* Define to 1 if you have the \`catclose' function. */
+#undef HAVE_CATCLOSE])
+m4trace:configure.in:32: -1- AC_CHECK_LIB([nsl], [t_open], [LIBS="$LIBS -lnsl"])
+m4trace:configure.in:33: -1- AC_CHECK_LIB([socket], [socket], [LIBS="$LIBS -lsocket"])
+m4trace:configure.in:36: -1- AC_PATH_X
+m4trace:configure.in:37: -1- AC_DEFINE_TRACE_LITERAL([X_DISPLAY_MISSING])
+m4trace:configure.in:37: -1- AH_OUTPUT([X_DISPLAY_MISSING], [/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING])
+m4trace:configure.in:37: -1- AC_CHECK_LIB([dnet], [dnet_ntoa], [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
+m4trace:configure.in:37: -1- AC_CHECK_LIB([dnet_stub], [dnet_ntoa], [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
+m4trace:configure.in:37: -1- AC_CHECK_LIB([nsl], [gethostbyname], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"])
+m4trace:configure.in:37: -1- AC_CHECK_LIB([bsd], [gethostbyname], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"])
+m4trace:configure.in:37: -1- AC_CHECK_LIB([socket], [connect], [X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"], [], [$X_EXTRA_LIBS])
+m4trace:configure.in:37: -1- AC_CHECK_LIB([posix], [remove], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"])
+m4trace:configure.in:37: -1- AC_CHECK_LIB([ipc], [shmat], [X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"])
+m4trace:configure.in:37: -1- AC_CHECK_LIB([ICE], [IceConnectionNumber], [X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"], [], [$X_EXTRA_LIBS])
+m4trace:configure.in:37: -1- AC_SUBST([X_CFLAGS])
+m4trace:configure.in:37: -1- AC_SUBST([X_PRE_LIBS])
+m4trace:configure.in:37: -1- AC_SUBST([X_LIBS])
+m4trace:configure.in:37: -1- AC_SUBST([X_EXTRA_LIBS])
+m4trace:configure.in:53: -1- AC_CHECK_LIB([X11], [XOpenDisplay], [LIBS="$LIBS -lX11"], [{ { echo "$as_me:$LINENO: error: Could not find XOpenDisplay in -lX11." >&5
+echo "$as_me: error: Could not find XOpenDisplay in -lX11." >&2;}
+ { (exit 1); exit 1; }; }
+])
+m4trace:configure.in:79: -1- AC_CHECK_LIB([Xext], [XShapeCombineShape], [echo "$as_me:$LINENO: checking for X11/extensions/shape.h" >&5
+echo $ECHO_N "checking for X11/extensions/shape.h... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/shape.h>
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+long foo = ShapeSet
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SHAPE="-DSHAPE"; Xext_lib="-lXext"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ ])
+m4trace:configure.in:83: -1- AC_SUBST([SHAPE])
+m4trace:configure.in:101: -1- AC_SUBST([SLIT])
+m4trace:configure.in:118: -1- AC_SUBST([NEWWMSPEC])
+m4trace:configure.in:135: -1- AC_SUBST([INTERLACE])
+m4trace:configure.in:151: -1- AC_SUBST([ORDEREDPSEUDO])
+m4trace:configure.in:167: -1- AC_SUBST([CLOBBER])
+m4trace:configure.in:182: -1- AC_SUBST([DEBUG])
+m4trace:configure.in:198: -1- AC_SUBST([NLS])
+m4trace:configure.in:200: -1- AC_CHECK_LIB([xpg4], [setlocale], [LIBS="$LIBS -lxpg4"])
+m4trace:configure.in:202: -1- AC_SUBST([gencat_cmd])
+m4trace:configure.in:223: -1- AC_SUBST([TIMEDCACHE])
+m4trace:configure.in:226: -1- AC_TYPE_SIGNAL
+m4trace:configure.in:226: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE])
+m4trace:configure.in:226: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (\`int' or \`void'). */
+#undef RETSIGTYPE])
+m4trace:configure.in:229: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+m4trace:configure.in:229: -1- AC_SUBST([MAINTAINER_MODE_TRUE])
+m4trace:configure.in:229: -1- AC_SUBST([MAINTAINER_MODE_FALSE])
+m4trace:configure.in:229: -1- AC_SUBST([MAINT])
+m4trace:configure.in:242: -1- AC_CONFIG_HEADERS([config.h])
+m4trace:configure.in:268: -1- AC_CONFIG_FILES([Makefile
+src/Makefile
+util/Makefile
+data/Makefile
+data/styles/Makefile
+doc/Makefile
+nls/Makefile
+nls/C/Makefile
+nls/da_DK/Makefile
+nls/de_DE/Makefile
+nls/es_ES/Makefile
+nls/et_EE/Makefile
+nls/fr_FR/Makefile
+nls/it_IT/Makefile
+nls/ja_JP/Makefile
+nls/nl_NL/Makefile
+nls/pt_BR/Makefile
+nls/ru_RU/Makefile
+nls/sl_SI/Makefile
+nls/sv_SE/Makefile
+nls/tr_TR/Makefile
+nls/zh_CN/Makefile
+version.h])
--- /dev/null
+/* config.h.in. Generated from configure.in by autoheader. */
+
+/* Define to 1 if you have the `basename' function. */
+#undef HAVE_BASENAME
+
+/* Define to 1 if you have the `catclose' function. */
+#undef HAVE_CATCLOSE
+
+/* Define to 1 if you have the `catgets' function. */
+#undef HAVE_CATGETS
+
+/* Define to 1 if you have the `catopen' function. */
+#undef HAVE_CATOPEN
+
+/* Define to 1 if you have the <ctype.h> header file. */
+#undef HAVE_CTYPE_H
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `getpid' function. */
+#undef HAVE_GETPID
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <libgen.h> header file. */
+#undef HAVE_LIBGEN_H
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <nl_types.h> header file. */
+#undef HAVE_NL_TYPES_H
+
+/* Define to 1 if you have the <process.h> header file. */
+#undef HAVE_PROCESS_H
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define to 1 if you have the <signal.h> header file. */
+#undef HAVE_SIGNAL_H
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasestr' function. */
+#undef HAVE_STRCASESTR
+
+/* Define to 1 if you have the `strftime' function. */
+#undef HAVE_STRFTIME
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+#undef HAVE_SYS_SIGNAL_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
--- /dev/null
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.53.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# NLS nuisances.
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
+ { $as_unset LANG || test "${LANG+set}" != set; } ||
+ { LANG=C; export LANG; }
+(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
+ { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
+ { LC_ALL=C; export LC_ALL; }
+(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
+ { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
+ { LC_TIME=C; export LC_TIME; }
+(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
+ { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
+ { LC_CTYPE=C; export LC_CTYPE; }
+(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
+ { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
+ { LANGUAGE=C; export LANGUAGE; }
+(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
+ { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
+ { LC_COLLATE=C; export LC_COLLATE; }
+(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
+ { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
+ { LC_NUMERIC=C; export LC_NUMERIC; }
+(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
+ { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
+ { LC_MESSAGES=C; export LC_MESSAGES; }
+
+
+# Name of the executable.
+as_me=`(basename "$0") 2>/dev/null ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conftest.sh
+ echo "exit 0" >>conftest.sh
+ chmod +x conftest.sh
+ if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conftest.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="src/openbox.cc"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+X features:
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-shape enable support of the XShape extension default=yes
+ --enable-slit include code for the Slit default=yes
+ --enable-newspec include code for the new WM Spec (DOES NOTHING)
+ default=no
+ --enable-interlace include code for image interlacing default=yes
+ --enable-ordered-pseudo include code for ordered pseudocolor (8bpp)
+ dithering default=no
+ --enable-clobber intercept mouse events to clients when num lock
+ or scroll lock are on default=yes
+ --enable-debug include verbose debugging code default=no
+ --enable-nls include natural language support default=yes
+ --enable-timed-cache use new timed pixmap cache default=yes
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-x use the X Window System
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.53. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell meta-characters.
+ac_configure_args=
+ac_sep=
+for ac_arg
+do
+ case $ac_arg in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n ) continue ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ ac_sep=" " ;;
+ esac
+ # Get rid of the leading space.
+done
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core core.* *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "$*" != "X $srcdir/configure conftestfile" \
+ && test "$*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ test "$2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f conftest*
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=openbox
+
+VERSION=0.99.0
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo "$as_me:$LINENO: checking for working aclocal" >&5
+echo $ECHO_N "checking for working aclocal... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ ACLOCAL="$missing_dir/missing aclocal"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working autoconf" >&5
+echo $ECHO_N "checking for working autoconf... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+ AUTOCONF=autoconf
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ AUTOCONF="$missing_dir/missing autoconf"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working automake" >&5
+echo $ECHO_N "checking for working automake... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ AUTOMAKE="$missing_dir/missing automake"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working autoheader" >&5
+echo $ECHO_N "checking for working autoheader... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+ AUTOHEADER=autoheader
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ AUTOHEADER="$missing_dir/missing autoheader"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working makeinfo" >&5
+echo $ECHO_N "checking for working makeinfo... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+ MAKEINFO=makeinfo
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ MAKEINFO="$missing_dir/missing makeinfo"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+
+
+test x$prefix = "xNONE" && prefix="$ac_default_prefix"
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$as_dir/$ac_word" ${1+"$@"}
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+for ac_file in `ls a_out.exe a.exe conftest.exe 2>/dev/null;
+ ls a.out conftest 2>/dev/null;
+ ls a.* conftest.* 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb | *.xSYM ) ;;
+ a.out ) # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link" >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile" >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ ''\
+ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_declaration
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+for ac_declaration in \
+ ''\
+ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_declaration
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+for ac_prog in sed
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_regex_cmd+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$regex_cmd"; then
+ ac_cv_prog_regex_cmd="$regex_cmd" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_regex_cmd="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+regex_cmd=$ac_cv_prog_regex_cmd
+if test -n "$regex_cmd"; then
+ echo "$as_me:$LINENO: result: $regex_cmd" >&5
+echo "${ECHO_T}$regex_cmd" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$regex_cmd" && break
+done
+
+if test x$regex_cmd = "x"; then
+ { { echo "$as_me:$LINENO: error: error. sed is required to build the default menu file." >&5
+echo "$as_me: error: error. sed is required to build the default menu file." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check" >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+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 <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in ctype.h dirent.h fcntl.h libgen.h locale.h nl_types.h process.h signal.h stdarg.h stdio.h time.h unistd.h sys/param.h sys/select.h sys/signal.h sys/stat.h sys/time.h sys/types.h sys/wait.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+if test "${ac_cv_header_time+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_time=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_header_time=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+
+for ac_func in basename
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* 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 (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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)
+choke me
+#else
+f = $ac_func;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ echo "$as_me:$LINENO: checking for basename in -lgen" >&5
+echo $ECHO_N "checking for basename in -lgen... $ECHO_C" >&6
+if test "${ac_cv_lib_gen_basename+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgen $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char basename ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+basename ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_gen_basename=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_gen_basename=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_gen_basename" >&5
+echo "${ECHO_T}$ac_cv_lib_gen_basename" >&6
+if test $ac_cv_lib_gen_basename = yes; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_BASENAME 1
+_ACEOF
+ LIBS="$LIBS -lgen"
+fi
+
+fi
+done
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in getpid setlocale sigaction strftime strcasestr snprintf vsnprintf catopen catgets catclose
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* 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 (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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)
+choke me
+#else
+f = $ac_func;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+echo "$as_me:$LINENO: checking for t_open in -lnsl" >&5
+echo $ECHO_N "checking for t_open in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_t_open+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char t_open ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+t_open ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_t_open=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_nsl_t_open=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_t_open" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_t_open" >&6
+if test $ac_cv_lib_nsl_t_open = yes; then
+ LIBS="$LIBS -lnsl"
+fi
+
+echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
+echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_socket+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char socket ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+socket ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_socket=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_socket_socket=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6
+if test $ac_cv_lib_socket_socket = yes; then
+ LIBS="$LIBS -lsocket"
+fi
+
+
+echo "$as_me:$LINENO: checking for X" >&5
+echo $ECHO_N "checking for X... $ECHO_C" >&6
+
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+ withval="$with_x"
+
+fi;
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+ if test "${ac_cv_have_x+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -fr conftest.dir
+if mkdir conftest.dir; then
+ cd conftest.dir
+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+ cat >Imakefile <<'_ACEOF'
+acfindx:
+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+_ACEOF
+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl; do
+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ test -f $ac_im_libdir/libX11.$ac_extension; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case $ac_im_incroot in
+ /usr/include) ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+ esac
+ case $ac_im_usrlibdir in
+ /usr/lib | /lib) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+ esac
+ fi
+ cd ..
+ rm -fr conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Intrinsic.h.
+ # First, try using that file with no special directory specified.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <X11/Intrinsic.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ for ac_dir in $ac_x_header_dirs; do
+ if test -r "$ac_dir/X11/Intrinsic.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+done
+fi
+rm -f conftest.err conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+ # Check for the libraries.
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+ LIBS="-lXt $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <X11/Intrinsic.h>
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+XtMalloc (0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+LIBS=$ac_save_LIBS
+for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/libXt.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ echo "$as_me:$LINENO: result: $have_x" >&5
+echo "${ECHO_T}$have_x" >&6
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
+fi
+
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+
+cat >>confdefs.h <<\_ACEOF
+#define X_DISPLAY_MISSING 1
+_ACEOF
+
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ case `(uname -sr) 2>/dev/null` in
+ "SunOS 5"*)
+ echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
+echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_R_nospace=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_R_nospace=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ if test $ac_R_nospace = yes; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ X_LIBS="$X_LIBS -R$x_libraries"
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_R_space=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_R_space=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ if test $ac_R_space = yes; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ X_LIBS="$X_LIBS -R $x_libraries"
+ else
+ echo "$as_me:$LINENO: result: neither works" >&5
+echo "${ECHO_T}neither works" >&6
+ fi
+ fi
+ LIBS=$ac_xsave_LIBS
+ esac
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn Johnson says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And Karl Berry says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+XOpenDisplay ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dnet_dnet_ntoa=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
+if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
+if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+ fi
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_xsave_LIBS"
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to T.E. Dickey.
+ # The functions gethostbyname, getservbyname, and inet_addr are
+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+ echo "$as_me:$LINENO: checking for gethostbyname" >&5
+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
+if test "${ac_cv_func_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostbyname (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+f = gethostbyname;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_gethostbyname=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
+
+ if test $ac_cv_func_gethostbyname = no; then
+ echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
+if test $ac_cv_lib_nsl_gethostbyname = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+ if test $ac_cv_lib_nsl_gethostbyname = no; then
+ echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
+echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_bsd_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
+if test $ac_cv_lib_bsd_gethostbyname = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+ fi
+ fi
+
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says Simon Leinen: it contains gethostby*
+ # variants that don't use the nameserver (or something). -lsocket
+ # must be given before -lnsl if both are needed. We assume that
+ # if connect needs -lnsl, so does gethostbyname.
+ echo "$as_me:$LINENO: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6
+if test "${ac_cv_func_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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_connect) || defined (__stub___connect)
+choke me
+#else
+f = connect;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_connect=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6
+
+ if test $ac_cv_func_connect = no; then
+ echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+connect ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_socket_connect=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
+if test $ac_cv_lib_socket_connect = yes; then
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+ fi
+
+ # Guillermo Gomez says -lposix is necessary on A/UX.
+ echo "$as_me:$LINENO: checking for remove" >&5
+echo $ECHO_N "checking for remove... $ECHO_C" >&6
+if test "${ac_cv_func_remove+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char remove (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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_remove) || defined (__stub___remove)
+choke me
+#else
+f = remove;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_remove=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_remove=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
+echo "${ECHO_T}$ac_cv_func_remove" >&6
+
+ if test $ac_cv_func_remove = no; then
+ echo "$as_me:$LINENO: checking for remove in -lposix" >&5
+echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
+if test "${ac_cv_lib_posix_remove+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+remove ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_posix_remove=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_posix_remove=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
+echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
+if test $ac_cv_lib_posix_remove = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ echo "$as_me:$LINENO: checking for shmat" >&5
+echo $ECHO_N "checking for shmat... $ECHO_C" >&6
+if test "${ac_cv_func_shmat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shmat (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+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_shmat) || defined (__stub___shmat)
+choke me
+#else
+f = shmat;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shmat=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_shmat=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
+echo "${ECHO_T}$ac_cv_func_shmat" >&6
+
+ if test $ac_cv_func_shmat = no; then
+ echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
+echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+shmat ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_ipc_shmat=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_ipc_shmat=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
+echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
+if test $ac_cv_lib_ipc_shmat = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS=$LDFLAGS
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # John Interrante, Karl Berry
+ echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
+echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char IceConnectionNumber ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+IceConnectionNumber ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
+if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+ LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+
+test x$no_x = "xyes" && { { echo "$as_me:$LINENO: error: Openbox requires the X Window System libraries and headers." >&5
+echo "$as_me: error: Openbox requires the X Window System libraries and headers." >&2;}
+ { (exit 1); exit 1; }; }
+
+test x$x_includes = "x" && x_includes="/usr/include"
+test x$x_libraries = "x" && x_libraries="/usr/lib"
+
+CFLAGS="$CFLAGS $X_CFLAGS"
+CXXFLAGS="$CXXFLAGS $X_CFLAGS"
+LIBS="$LIBS $X_LIBS"
+LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
+
+echo "$as_me:$LINENO: checking for XOpenDisplay in -lX11" >&5
+echo $ECHO_N "checking for XOpenDisplay in -lX11... $ECHO_C" >&6
+if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lX11 $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+XOpenDisplay ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_X11_XOpenDisplay=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_X11_XOpenDisplay=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XOpenDisplay" >&5
+echo "${ECHO_T}$ac_cv_lib_X11_XOpenDisplay" >&6
+if test $ac_cv_lib_X11_XOpenDisplay = yes; then
+ LIBS="$LIBS -lX11"
+else
+ { { echo "$as_me:$LINENO: error: Could not find XOpenDisplay in -lX11." >&5
+echo "$as_me: error: Could not find XOpenDisplay in -lX11." >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+
+
+LIBS="$LIBS $X_EXTRA_LIBS"
+
+Xext_lib=""
+
+SHAPE=""
+echo "$as_me:$LINENO: checking whether to build support for the XShape extension" >&5
+echo $ECHO_N "checking whether to build support for the XShape extension... $ECHO_C" >&6
+# Check whether --enable-shape or --disable-shape was given.
+if test "${enable_shape+set}" = set; then
+ enableval="$enable_shape"
+
+fi;
+
+: ${enableval="yes"}
+if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ echo "$as_me:$LINENO: checking for XShapeCombineShape in -lXext" >&5
+echo $ECHO_N "checking for XShapeCombineShape in -lXext... $ECHO_C" >&6
+if test "${ac_cv_lib_Xext_XShapeCombineShape+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXext $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XShapeCombineShape ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+XShapeCombineShape ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_Xext_XShapeCombineShape=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_Xext_XShapeCombineShape=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XShapeCombineShape" >&5
+echo "${ECHO_T}$ac_cv_lib_Xext_XShapeCombineShape" >&6
+if test $ac_cv_lib_Xext_XShapeCombineShape = yes; then
+ echo "$as_me:$LINENO: checking for X11/extensions/shape.h" >&5
+echo $ECHO_N "checking for X11/extensions/shape.h... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/shape.h>
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+long foo = ShapeSet
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SHAPE="-DSHAPE"; Xext_lib="-lXext"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+
+fi
+
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+LIBS="$LIBS $Xext_lib"
+
+SLIT=""
+echo "$as_me:$LINENO: checking whether to include the Slit" >&5
+echo $ECHO_N "checking whether to include the Slit... $ECHO_C" >&6
+# Check whether --enable-slit or --disable-slit was given.
+if test "${enable_slit+set}" = set; then
+ enableval="$enable_slit"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SLIT="-DSLIT"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SLIT="-DSLIT"
+
+fi;
+
+
+NEWWMSPEC=""
+echo "$as_me:$LINENO: checking whether to include the new WM Spec (DOES NOTHING)" >&5
+echo $ECHO_N "checking whether to include the new WM Spec (DOES NOTHING)... $ECHO_C" >&6
+# Check whether --enable-newspec or --disable-newspec was given.
+if test "${enable_newspec+set}" = set; then
+ enableval="$enable_newspec"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ NEWWMSPEC="-DNEWWMSPEC"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+
+INTERLACE=""
+echo "$as_me:$LINENO: checking whether to include interlacing image code" >&5
+echo $ECHO_N "checking whether to include interlacing image code... $ECHO_C" >&6
+# Check whether --enable-interlace or --disable-interlace was given.
+if test "${enable_interlace+set}" = set; then
+ enableval="$enable_interlace"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ INTERLACE="-DINTERLACE"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ INTERLACE="-DINTERLACE"
+
+fi;
+
+
+ORDEREDPSEUDO=""
+echo "$as_me:$LINENO: checking whether to include Pseudocolor ordered dithering code" >&5
+echo $ECHO_N "checking whether to include Pseudocolor ordered dithering code... $ECHO_C" >&6
+# Check whether --enable-ordered-pseudo or --disable-ordered-pseudo was given.
+if test "${enable_ordered_pseudo+set}" = set; then
+ enableval="$enable_ordered_pseudo"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ ORDEREDPSEUDO="-DORDEREDPSEUDO"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+CLOBBER=""
+echo "$as_me:$LINENO: checking whether to intercept mouse events to clients" >&5
+echo $ECHO_N "checking whether to intercept mouse events to clients... $ECHO_C" >&6
+# Check whether --enable-clobber or --disable-clobber was given.
+if test "${enable_clobber+set}" = set; then
+ enableval="$enable_clobber"
+ if test x$enableval = "xno"; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ CLOBBER="-DNOCLOBBER"
+ else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+DEBUG=""
+echo "$as_me:$LINENO: checking whether to include verbose debugging code" >&5
+echo $ECHO_N "checking whether to include verbose debugging code... $ECHO_C" >&6
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+ enableval="$enable_debug"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ DEBUG="-DDEBUG"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi;
+
+
+NLS=""
+echo "$as_me:$LINENO: checking whether to include NLS support" >&5
+echo $ECHO_N "checking whether to include NLS support... $ECHO_C" >&6
+# Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+ enableval="$enable_nls"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ NLS="-DNLS"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ NLS="-DNLS"
+
+fi;
+
+
+echo "$as_me:$LINENO: checking for setlocale in -lxpg4" >&5
+echo $ECHO_N "checking for setlocale in -lxpg4... $ECHO_C" >&6
+if test "${ac_cv_lib_xpg4_setlocale+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lxpg4 $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char setlocale ();
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+setlocale ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_xpg4_setlocale=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_xpg4_setlocale=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_xpg4_setlocale" >&5
+echo "${ECHO_T}$ac_cv_lib_xpg4_setlocale" >&6
+if test $ac_cv_lib_xpg4_setlocale = yes; then
+ LIBS="$LIBS -lxpg4"
+fi
+
+
+for ac_prog in gencat
+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 "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_gencat_cmd+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$gencat_cmd"; then
+ ac_cv_prog_gencat_cmd="$gencat_cmd" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_gencat_cmd="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+gencat_cmd=$ac_cv_prog_gencat_cmd
+if test -n "$gencat_cmd"; then
+ echo "$as_me:$LINENO: result: $gencat_cmd" >&5
+echo "${ECHO_T}$gencat_cmd" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$gencat_cmd" && break
+done
+
+if test x$gencat_cmd = "x"; then
+ NLS=""
+fi
+
+
+TIMEDCACHE=""
+echo "$as_me:$LINENO: checking whether to use the new timed pixmap cache" >&5
+echo $ECHO_N "checking whether to use the new timed pixmap cache... $ECHO_C" >&6
+# Check whether --enable-timed-cache or --disable-timed-cache was given.
+if test "${enable_timed_cache+set}" = set; then
+ enableval="$enable_timed_cache"
+ if test x$enableval = "xyes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ TIMEDCACHE="-DTIMEDCACHE"
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ TIMEDCACHE="-DTIMEDCACHE"
+
+fi;
+
+
+echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+if test "${ac_cv_type_signal+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+# undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+int i;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_signal=void
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_type_signal=int
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+ USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi;
+ echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+echo "$as_me:$LINENO: result: " >&5
+echo "${ECHO_T}" >&6
+echo "$as_me:$LINENO: result: $PACKAGE version $VERSION configured successfully." >&5
+echo "${ECHO_T} $PACKAGE version $VERSION configured successfully." >&6
+echo "$as_me:$LINENO: result: " >&5
+echo "${ECHO_T}" >&6
+echo "$as_me:$LINENO: result: Using '$prefix' for installation." >&5
+echo "${ECHO_T}Using '$prefix' for installation." >&6
+echo "$as_me:$LINENO: result: Using '$CXX' for C++ compiler." >&5
+echo "${ECHO_T}Using '$CXX' for C++ compiler." >&6
+echo "$as_me:$LINENO: result: Building with '$CXXFLAGS' for C++ compiler flags." >&5
+echo "${ECHO_T}Building with '$CXXFLAGS' for C++ compiler flags." >&6
+echo "$as_me:$LINENO: result: Building with '$LIBS' for linker flags." >&5
+echo "${ECHO_T}Building with '$LIBS' for linker flags." >&6
+echo "$as_me:$LINENO: result: " >&5
+echo "${ECHO_T}" >&6
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+ac_config_commands="$ac_config_commands default-1"
+
+ac_config_files="$ac_config_files Makefile src/Makefile util/Makefile data/Makefile data/styles/Makefile doc/Makefile nls/Makefile nls/C/Makefile nls/da_DK/Makefile nls/de_DE/Makefile nls/es_ES/Makefile nls/et_EE/Makefile nls/fr_FR/Makefile nls/it_IT/Makefile nls/ja_JP/Makefile nls/nl_NL/Makefile nls/pt_BR/Makefile nls/ru_RU/Makefile nls/sl_SI/Makefile nls/sv_SE/Makefile nls/tr_TR/Makefile nls/zh_CN/Makefile version.h"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if cmp -s $cache_file confcache; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# NLS nuisances.
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
+ { $as_unset LANG || test "${LANG+set}" != set; } ||
+ { LANG=C; export LANG; }
+(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
+ { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
+ { LC_ALL=C; export LC_ALL; }
+(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
+ { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
+ { LC_TIME=C; export LC_TIME; }
+(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
+ { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
+ { LC_CTYPE=C; export LC_CTYPE; }
+(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
+ { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
+ { LANGUAGE=C; export LANGUAGE; }
+(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
+ { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
+ { LC_COLLATE=C; export LC_COLLATE; }
+(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
+ { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
+ { LC_NUMERIC=C; export LC_NUMERIC; }
+(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
+ { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
+ { LC_MESSAGES=C; export LC_MESSAGES; }
+
+
+# Name of the executable.
+as_me=`(basename "$0") 2>/dev/null ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conftest.sh
+ echo "exit 0" >>conftest.sh
+ chmod +x conftest.sh
+ if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conftest.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.53. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.53,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ shift
+ set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+ shift
+ ;;
+ -*);;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_need_defaults=false;;
+ esac
+
+ case $1 in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+ exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ shift
+ CONFIG_FILES="$CONFIG_FILES $1"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $1"
+ ac_need_defaults=false;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "util/Makefile" ) CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
+ "data/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+ "data/styles/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/styles/Makefile" ;;
+ "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "nls/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/Makefile" ;;
+ "nls/C/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/C/Makefile" ;;
+ "nls/da_DK/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/da_DK/Makefile" ;;
+ "nls/de_DE/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/de_DE/Makefile" ;;
+ "nls/es_ES/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/es_ES/Makefile" ;;
+ "nls/et_EE/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/et_EE/Makefile" ;;
+ "nls/fr_FR/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/fr_FR/Makefile" ;;
+ "nls/it_IT/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/it_IT/Makefile" ;;
+ "nls/ja_JP/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/ja_JP/Makefile" ;;
+ "nls/nl_NL/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/nl_NL/Makefile" ;;
+ "nls/pt_BR/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/pt_BR/Makefile" ;;
+ "nls/ru_RU/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/ru_RU/Makefile" ;;
+ "nls/sl_SI/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/sl_SI/Makefile" ;;
+ "nls/sv_SE/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/sv_SE/Makefile" ;;
+ "nls/tr_TR/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/tr_TR/Makefile" ;;
+ "nls/zh_CN/Makefile" ) CONFIG_FILES="$CONFIG_FILES nls/zh_CN/Makefile" ;;
+ "version.h" ) CONFIG_FILES="$CONFIG_FILES version.h" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: ${TMPDIR=/tmp}
+{
+ tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=$TMPDIR/cs$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@regex_cmd@,$regex_cmd,;t t
+s,@CPP@,$CPP,;t t
+s,@X_CFLAGS@,$X_CFLAGS,;t t
+s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t
+s,@X_LIBS@,$X_LIBS,;t t
+s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
+s,@SHAPE@,$SHAPE,;t t
+s,@SLIT@,$SLIT,;t t
+s,@NEWWMSPEC@,$NEWWMSPEC,;t t
+s,@INTERLACE@,$INTERLACE,;t t
+s,@ORDEREDPSEUDO@,$ORDEREDPSEUDO,;t t
+s,@CLOBBER@,$CLOBBER,;t t
+s,@DEBUG@,$DEBUG,;t t
+s,@NLS@,$NLS,;t t
+s,@gencat_cmd@,$gencat_cmd,;t t
+s,@TIMEDCACHE@,$TIMEDCACHE,;t t
+s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s,@MAINT@,$MAINT,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" ||
+ mkdir "$as_incr_dir" ||
+ { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+done; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # egrep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" ||
+ mkdir "$as_incr_dir" ||
+ { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+done; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
+ X"$ac_dest" : 'X\(//\)$' \| \
+ X"$ac_dest" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ default-1 ) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;;
+ esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
--- /dev/null
+dnl configure.in for Openbox
+dnl Initialize autoconf and automake
+AC_INIT(src/openbox.cc)
+AM_INIT_AUTOMAKE(openbox,0.99.0,no-define)
+
+dnl Determine default prefix
+test x$prefix = "xNONE" && prefix="$ac_default_prefix"
+
+dnl Check for various flavors of UNIX(r)
+dnl AC_AIX
+dnl AC_ISC_POSIX
+
+dnl Locate required external software
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_INSTALL
+
+AC_CHECK_PROGS(regex_cmd, sed)
+if test x$regex_cmd = "x"; then
+ AC_MSG_ERROR([error. sed is required to build the default menu file.])
+fi
+
+dnl Check for system header files
+AC_HEADER_STDC
+AC_CHECK_HEADERS(ctype.h dirent.h fcntl.h libgen.h locale.h nl_types.h process.h signal.h stdarg.h stdio.h time.h unistd.h sys/param.h sys/select.h sys/signal.h sys/stat.h sys/time.h sys/types.h sys/wait.h)
+AC_HEADER_TIME
+
+dnl Check for existance of basename(), setlocale() and strftime()
+AC_CHECK_FUNCS(basename, , AC_CHECK_LIB(gen, basename,
+ AC_DEFINE(HAVE_BASENAME) LIBS="$LIBS -lgen"))
+AC_CHECK_FUNCS(getpid setlocale sigaction strftime strcasestr snprintf vsnprintf catopen catgets catclose)
+AC_CHECK_LIB(nsl, t_open, LIBS="$LIBS -lnsl")
+AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
+
+dnl Check for X headers and libraries
+AC_PATH_X
+AC_PATH_XTRA
+
+test x$no_x = "xyes" && AC_MSG_ERROR([Openbox requires the X Window System libraries and headers.])
+
+test x$x_includes = "x" && x_includes="/usr/include"
+test x$x_libraries = "x" && x_libraries="/usr/lib"
+
+CFLAGS="$CFLAGS $X_CFLAGS"
+CXXFLAGS="$CXXFLAGS $X_CFLAGS"
+LIBS="$LIBS $X_LIBS"
+LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
+
+dnl Check for required functions in -lX11
+AC_CHECK_LIB(X11, XOpenDisplay,
+ LIBS="$LIBS -lX11",
+ AC_MSG_ERROR([Could not find XOpenDisplay in -lX11.])
+)
+
+LIBS="$LIBS $X_EXTRA_LIBS"
+
+Xext_lib=""
+
+dnl Check for XShape extension support and proper library files.
+SHAPE=""
+AC_MSG_CHECKING([whether to build support for the XShape extension])
+AC_ARG_ENABLE(
+ shape, [ --enable-shape enable support of the XShape extension [default=yes]])
+
+: ${enableval="yes"}
+if test x$enableval = "xyes"; then
+ AC_MSG_RESULT([yes])
+ AC_CHECK_LIB(Xext, XShapeCombineShape,
+ AC_MSG_CHECKING([for X11/extensions/shape.h])
+ AC_TRY_LINK(
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/shape.h>
+, long foo = ShapeSet,
+ AC_MSG_RESULT([yes])
+ SHAPE="-DSHAPE"; Xext_lib="-lXext",
+ AC_MSG_RESULT([no])
+ )
+ )
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST(SHAPE)
+
+LIBS="$LIBS $Xext_lib"
+
+dnl Check for the Slit
+SLIT=""
+AC_MSG_CHECKING([whether to include the Slit])
+AC_ARG_ENABLE(
+ slit, [ --enable-slit include code for the Slit [default=yes]],
+ if test x$enableval = "xyes"; then
+ AC_MSG_RESULT([yes])
+ SLIT="-DSLIT"
+ else
+ AC_MSG_RESULT([no])
+ fi,
+ AC_MSG_RESULT([yes])
+ SLIT="-DSLIT"
+)
+AC_SUBST(SLIT)
+
+dnl Check for the new WM Spec
+NEWWMSPEC=""
+AC_MSG_CHECKING([whether to include the new WM Spec (DOES NOTHING)])
+AC_ARG_ENABLE(
+ newspec,
+[ --enable-newspec include code for the new WM Spec (DOES NOTHING)
+ [default=no]],
+ if test x$enableval = "xyes"; then
+ AC_MSG_RESULT([yes])
+ NEWWMSPEC="-DNEWWMSPEC"
+ else
+ AC_MSG_RESULT([no])
+ fi,
+ AC_MSG_RESULT([no])
+)
+AC_SUBST(NEWWMSPEC)
+
+
+dnl Check for Interlacing
+INTERLACE=""
+AC_MSG_CHECKING([whether to include interlacing image code])
+AC_ARG_ENABLE(
+ interlace, [ --enable-interlace include code for image interlacing [default=yes]],
+ if test x$enableval = "xyes"; then
+ AC_MSG_RESULT([yes])
+ INTERLACE="-DINTERLACE"
+ else
+ AC_MSG_RESULT([no])
+ fi,
+ AC_MSG_RESULT([yes])
+ INTERLACE="-DINTERLACE"
+)
+AC_SUBST(INTERLACE)
+
+dnl Check for ordered 8bpp dithering
+ORDEREDPSEUDO=""
+AC_MSG_CHECKING([whether to include Pseudocolor ordered dithering code])
+AC_ARG_ENABLE(ordered-pseudo,
+[ --enable-ordered-pseudo include code for ordered pseudocolor (8bpp)
+ dithering [default=no]],
+ if test x$enableval = "xyes"; then
+ AC_MSG_RESULT([yes])
+ ORDEREDPSEUDO="-DORDEREDPSEUDO"
+ else
+ AC_MSG_RESULT([no])
+ fi,
+ AC_MSG_RESULT([no])
+)
+AC_SUBST(ORDEREDPSEUDO)
+
+dnl Check for event clobbering
+CLOBBER=""
+AC_MSG_CHECKING([whether to intercept mouse events to clients])
+AC_ARG_ENABLE(clobber,
+[ --enable-clobber intercept mouse events to clients when num lock
+ or scroll lock are on [default=yes]],
+ if test x$enableval = "xno"; then
+ AC_MSG_RESULT([no])
+ CLOBBER="-DNOCLOBBER"
+ else
+ AC_MSG_RESULT([yes])
+ fi,
+ AC_MSG_RESULT([no])
+)
+AC_SUBST(CLOBBER)
+
+dnl Check whether to include debugging code
+DEBUG=""
+AC_MSG_CHECKING([whether to include verbose debugging code])
+AC_ARG_ENABLE(debug,
+ [ --enable-debug include verbose debugging code [default=no]],
+ if test x$enableval = "xyes"; then
+ AC_MSG_RESULT([yes])
+ DEBUG="-DDEBUG"
+ else
+ AC_MSG_RESULT([no])
+ fi,
+ AC_MSG_RESULT([no])
+)
+AC_SUBST(DEBUG)
+
+dnl Check whether to include natural language support (i18n)
+NLS=""
+AC_MSG_CHECKING([whether to include NLS support])
+AC_ARG_ENABLE(nls,
+ [ --enable-nls include natural language support [default=yes]],
+ if test x$enableval = "xyes"; then
+ AC_MSG_RESULT([yes])
+ NLS="-DNLS"
+ else
+ AC_MSG_RESULT([no])
+ fi,
+ AC_MSG_RESULT([yes])
+ NLS="-DNLS"
+)
+AC_SUBST(NLS)
+
+AC_CHECK_LIB(xpg4, setlocale, LIBS="$LIBS -lxpg4")
+
+AC_CHECK_PROGS(gencat_cmd, gencat)
+if test x$gencat_cmd = "x"; then
+ NLS=""
+fi
+
+
+dnl Check for new timed pixmap cache
+TIMEDCACHE=""
+AC_MSG_CHECKING([whether to use the new timed pixmap cache])
+AC_ARG_ENABLE(
+ timed-cache,
+[ --enable-timed-cache use new timed pixmap cache [default=yes]],
+ if test x$enableval = "xyes"; then
+ AC_MSG_RESULT([yes])
+ TIMEDCACHE="-DTIMEDCACHE"
+ else
+ AC_MSG_RESULT([no])
+ fi,
+ AC_MSG_RESULT([yes])
+ TIMEDCACHE="-DTIMEDCACHE"
+)
+AC_SUBST(TIMEDCACHE)
+
+dnl Determine the return type of signal handlers
+AC_TYPE_SIGNAL
+
+dnl Determine if maintainer portions of the Makefiles should be included.
+AM_MAINTAINER_MODE
+
+dnl Print results
+AC_MSG_RESULT([])
+AC_MSG_RESULT([ $PACKAGE version $VERSION configured successfully.])
+AC_MSG_RESULT([])
+AC_MSG_RESULT([Using '$prefix' for installation.])
+AC_MSG_RESULT([Using '$CXX' for C++ compiler.])
+AC_MSG_RESULT([Building with '$CXXFLAGS' for C++ compiler flags.])
+AC_MSG_RESULT([Building with '$LIBS' for linker flags.])
+AC_MSG_RESULT([])
+
+dnl Output files
+AM_CONFIG_HEADER(config.h)
+AC_OUTPUT(Makefile
+src/Makefile
+util/Makefile
+data/Makefile
+data/styles/Makefile
+doc/Makefile
+dnl doc/ja_JP/Makefile
+dnl doc/nl_NL/Makefile
+dnl doc/sl_SI/Makefile
+nls/Makefile
+nls/C/Makefile
+nls/da_DK/Makefile
+nls/de_DE/Makefile
+nls/es_ES/Makefile
+nls/et_EE/Makefile
+nls/fr_FR/Makefile
+nls/it_IT/Makefile
+nls/ja_JP/Makefile
+nls/nl_NL/Makefile
+nls/pt_BR/Makefile
+nls/ru_RU/Makefile
+nls/sl_SI/Makefile
+nls/sv_SE/Makefile
+nls/tr_TR/Makefile
+nls/zh_CN/Makefile
+version.h)
--- /dev/null
+# data/Makefile.am for Openbox
+
+SUBDIRS = styles
+CLEANFILES = menu
+MAINTAINERCLEANFILES = Makefile.in
+
+all-local: menu
+
+distclean-local:
+ rm -f *\~
+
+menu: menu.in
+ @regex_cmd@ -e "s,@pkgdatadir@,$(pkgdatadir)," @srcdir@/menu.in > menu
+
+install-data-local: menu
+ test -f $(DESTDIR)$(pkgdatadir)/menu || \
+ $(INSTALL_DATA) menu $(DESTDIR)$(pkgdatadir)
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# data/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+SUBDIRS = styles
+CLEANFILES = menu
+MAINTAINERCLEANFILES = Makefile.in
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = README Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" != "." || dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = data
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu data/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+install-exec-am:
+install-exec: install-exec-recursive
+
+install-data-am: install-data-local
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am:
+uninstall: uninstall-recursive
+all-am: Makefile all-local
+all-redirect: all-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-tags distclean-generic clean-am distclean-local
+
+distclean: distclean-recursive
+
+maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+
+.PHONY: install-data-recursive uninstall-data-recursive \
+install-exec-recursive uninstall-exec-recursive installdirs-recursive \
+uninstalldirs-recursive all-recursive check-recursive \
+installcheck-recursive info-recursive dvi-recursive \
+mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-local install-data-am install-data install-am \
+install uninstall-am uninstall all-local all-redirect all-am all \
+installdirs-am installdirs mostlyclean-generic distclean-generic \
+clean-generic maintainer-clean-generic clean mostlyclean distclean \
+maintainer-clean
+
+
+all-local: menu
+
+distclean-local:
+ rm -f *\~
+
+menu: menu.in
+ @regex_cmd@ -e "s,@pkgdatadir@,$(pkgdatadir)," @srcdir@/menu.in > menu
+
+install-data-local: menu
+ test -f $(DESTDIR)$(pkgdatadir)/menu || \
+ $(INSTALL_DATA) menu $(DESTDIR)$(pkgdatadir)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+The data/ directory holds some menu and style (or theme) examples for Openbox.
+
+The styles are installed as system defaults, and are ALWAYS overwritten when
+upgrading or otherwise re-installing Openbox. Changes to them are
+discouraged, because of this reason.
+
+In the data/ directory, you will find a directory named `styles.' These are
+the system defaults that are installed when Openbox is built, and they are
+intended as examples on how to customize and control the appearance of Openbox.
+In the event that a user does not have a defined style, Openbox falls back on
+the example styles included here.
+
+Also in the data/ directory is a file named `menu'. This is meant as an
+example but is also installed if make install detects that no menu exists.
+If openbox is ever started without a valid menu the user will get a backup
+menu which gives the ability to launch and xterm and exit the window manager.
+
+For information on creating/editing a menu, see the file README.menu.
+
+For information on creating/editing a style, see the file README.style.
--- /dev/null
+Creating a user defined menu:
+-----------------------------
+Creating a menu for Openbox requires a text editor of some sort. Familiarity
+with your choice of text editor is assumed, since editor preference differs
+as much (if not more than) window manager preference.
+
+First, we need to decide on a location for our custom menu. Your home
+directory is the most logical solution, since you will most likely not have
+write access anywhere else. You place the menu file in any directory, and
+give it any name you choose, as we will later tell Openbox the path or
+location for this file.
+
+As an example, let's assume that my home directory is `/home/bhughes' (which it
+is). I've decided to keep all my Openbox related files in a directory named
+`openbox.' After creating the directory, I now have two options for creating
+my new menu. I can either copy the system default (usually in
+`/usr/local/share/Openbox/menu') to this directory, or I can create a new
+one from scratch. Let's do the latter, for the sake of completeness.
+
+I've decided to name the file `rootmenu.' I fire up my favorite text editor
+and now have a clean file. So let's begin.
+
+
+Menu syntax:
+------------
+The menu syntax is very simple and very effective. There are upto three
+fields in a menu line. They are of the form:
+
+ [tag] (label or filename) {command or filename}
+
+The supported tags are as follows:
+
+[begin] (label for root menu)
+
+ This tells Openbox to start parsing the menu file. This tag is
+ required for Openbox to parse your menu file. If it cannot find it,
+ the system default menu is used instead.
+
+[end]
+
+ This tells Openbox that it is at the end of a menu. This can either
+ be a submenu or the main root menu. There must be at least one
+ of these tags in your menu to correspond to the required [begin] tag.
+
+[exec] (label for command) {shell command}
+
+ This tells Openbox to insert a command item into the menu. When you
+ select the menu item from the menu, Openbox runs `shell command.'
+
+[exit] (label for exit)
+
+ This tells Openbox to insert an item that shuts down and exits
+ Openbox. Any open windows are reparented to the root window before
+ Openbox exits.
+
+[include] (filename)
+
+ This tells Openbox to parse the file specified by `filename' inline
+ with the current menu. `filename' can be the full path to a file
+ (such as /usr/local/share/Openbox/brueghel/stylesmenu) or it can
+ begin with `~/', which will be expanded into your home directory
+ (e.g. [include] (~/.openbox/stylesmenu) will include
+ /home/bhughes/.openbox/stylesmenu in my menu)
+
+[nop] (label - optional)
+
+ This tells Openbox to insert a non-operational item into the current
+ menu. This can be used to help format the menu into blocks or sections
+ if so desired (e.g. you could put all your ssh accounts together, add
+ a [nop] and then add all your telnet accounts together). [nop] does
+ accept a label, but it is not required, and a blank item will be used
+ if none is supplied.
+
+[style] (label) {filename}
+
+ This tells Openbox to read `filename' and apply the new textures,
+ colors and fonts to the current running session. The filename is
+ just like the [include] tag, it can be the full path to the file,
+ or it can be of the form `~/path/from/home/dir.' Openbox also
+ re-reads the entire menu structure from disk, incase the menu has
+ changed.
+
+[submenu] (label) {title for menu - optional}
+
+ This tells Openbox to create and parse a new menu. This menu is
+ inserted as a submenu into the parent menu. These menus are parsed
+ recursively, so there is no limit to the number of levels or nested
+ submenus you can have. The title for the new menu is optional, if
+ none is supplied, the new menu's title is the same as the item label.
+
+[reconfig] (label)
+
+ This tells Openbox to reread the current style and menu files and
+ apply any changes. This is useful for creating a new style or theme,
+ as you don't have to constantly restart Openbox every time you save
+ your style.
+
+[restart] (label) {shell command - optional}
+
+ This tells Openbox to restart. If `shell command' is supplied, it
+ shuts down and runs the command (which is commonly the name of another
+ window manager). If the command is omitted, Openbox restarts itself.
+
+[workspaces] (label)
+
+ This tells Openbox to insert a "link" to the workspaces menu directly
+ into your menu. This is handy for those users who can't access the
+ workspace menu directly (e.g. if you don't have a 3 button mouse, it's
+ rather hard to middle click to show the workspace menu). This is a
+ "link" to the systems workspace menu, so multiple [workspaces] tags
+ will display the same workspace menu, so expect it to move around if
+ you do so. ;)
+
+[config] (label)
+
+ This tells Openbox to insert the ConfigMenu into your menu. From
+ this menu you can configure several options stored in your
+ ~/.openbox/rc, and the changes take effect immediately.
+
+Comments may be inserted on any line of the file, as long as the first
+character on the line is a `#.'
+
+Also, in the labels/commands/filenames fields, you can escape any character
+like so:
+
+ [exec] (\(my cool\) \{XTERM\}) {\(xterm -T \\\"cool XTERM\\\"\)}
+
+Using `\\' inserts a literal back-slash into the label/command/filename field.
+
+
+Putting it all together:
+------------------------
+Alrighty, so let's see if we can understand the arcane incantation above. It
+says we have to have a [begin] and an [end] tag, which create our menu and
+give it a title. Let's do that first:
+
+
+ [begin] (Example \[Menu\])
+
+ [end]
+
+Simple enough. Now let's add some items to the list. We always want to have
+access to a terminal emulator, be it a regular xterm or something else.
+So we add the item to our menu, and it now looks like this:
+
+...
+[begin] (Example \[Menu\])
+[exec] (xterm) {xterm -ls}
+[end]
+...
+
+Great! Now let's add us some items to run an irc client, a web browser and
+some other common programs. This gives up this:
+
+...
+[begin] (Example \[Menu\])
+[exec] (xterm) {xterm -ls}
+[exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}
+[exec] (Mozilla Navigator) {mozilla}
+[exec] (XEmacs) {xemacs}
+[exec] (The GIMP) {gimp}
+[exec] (Video Tune) {xvidtune}
+[end]
+...
+
+Whoa, wait a second. This menu file is beginning to look a little cluttered.
+Not a problem, just like programmers indent and space their code, we can
+do this with our menu file, so let's clean it up a bit:
+
+...
+[begin] (Example \[Menu\])
+ [exec] (xterm) {xterm -ls}
+ [exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}
+
+ [exec] (Mozilla Navigator) {mozilla}
+ [exec] (XEmacs) {xemacs}
+
+ [exec] (Konqueror) {konqueror}
+ [exec] (The GIMP) {gimp}
+
+ [exec] (Video Tune) {xvidtune}
+[end]
+...
+
+Ahh... now that looks a little better. Now we decide that we kind of like the
+spacing in the file, and decide we want to apply it to the menu itself. Now
+we take advantage of the [nop] tag:
+
+...
+[begin] (Example \[Menu\])
+ [exec] (xterm) {xterm -ls}
+ [exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}
+
+ [nop]
+
+ [exec] (Mozilla Navigator) {mozilla}
+ [exec] (XEmacs) {xemacs}
+
+ [nop]
+
+ [exec] (Konqueror) {konqueror}
+ [exec] (The GIMP) {gimp}
+
+ [nop]
+
+ [exec] (Video Tune) {xvidtune}
+[end]
+...
+
+Now, let's create a submenu to put some items to change between all these
+themes we downloaded from http://bb.classic.themes.org/. Let's assume we
+untarred the themes into the ~/.openbox directory like the documentation on
+the themes.org site recommends.
+
+...
+[begin] (Example \[Menu\])
+ [exec] (xterm) {xterm -ls}
+ [exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}
+
+ [nop]
+
+ [exec] (Mozilla Navigator) {mozilla}
+ [exec] (XEmacs) {xemacs}
+
+ [nop]
+
+ [exec] (Konqueror) {konqueror}
+ [exec] (The GIMP) {gimp}
+
+ [nop]
+
+ [exec] (Video Tune) {xvidtune}
+
+ [submenu] (Themes) {Themes from bb.classic.themes.org}
+ [style] (Openbox) {~/.openbox/styles/blackbox}
+ [style] (Openbox II) {~/.openbox/styles/blackbox2}
+ [style] (Hardware) {~/.openbox/styles/hardware}
+ [style] (Nova) {~/.openbox/styles/nova}
+ [style] (Orbital) {~/.openbox/styles/orbital}
+ [style] (Orbital II) {~/.openbox/styles/orbital2}
+ [style] (Seething) {~/.openbox/styles/seething}
+ [style] (Zero) {~/.openbox/styles/zero}
+ [style] (Cold Fusion) {~/.openbox/styles/coldfusion}
+ [end]
+[end]
+...
+
+Even better. Now hold on a second, if we have our themes and styles in
+~/.openbox why do we have to have our menu in ~/openbox? Answer: WE DON'T!
+This is where the choice comes. Do we keep our stuff in two separate
+directories? Do we put it all in one directory? That is up to you to decide.
+I personally prefer to keep everything in one directory (but, I use ~/.openbox
+and have been for a long, long time; long before bb.classic.themes.org was
+even thought of... and again that is *personal* preference, not a hard-fast
+rule).
+
+Now that we've gotten a feel for the menu syntax, we decide to finish off our
+menu. In addition to the styles we downloaded, we decide we also want to
+keep a submenu for the default styles that came with Openbox. All we need
+to do is [include] the styles file from the share directory for Openbox.
+After putting everything together, we have:
+
+
+...
+# custom menu file for Openbox
+
+[begin] (Example \[Menu\])
+ [exec] (xterm) {xterm -ls}
+ [exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}
+
+ [nop]
+
+ [exec] (Mozilla Browser) {mozilla}
+ [exec] (Konqueror) {konqueror}
+ [exec] (XEmacs) {xemacs}
+
+ [nop]
+
+ [exec] (The GIMP) {gimp}
+
+ [nop]
+
+ [exec] (Video Tune) {xvidtune}
+
+ [nop] (...)
+
+ [submenu] (Themes) {Themes from bb.classic.themes.org}
+ [style] (Openbox) {~/.openbox/styles/blackbox}
+ [style] (Openbox II) {~/.openbox/styles/blackbox2}
+ [style] (Hardware) {~/.openbox/styles/hardware}
+ [style] (Nova) {~/.openbox/styles/nova}
+ [style] (Orbital) {~/.openbox/styles/orbital}
+ [style] (Orbital II) {~/.openbox/styles/orbital2}
+ [style] (Seething) {~/.openbox/styles/seething}
+ [style] (Zero) {~/.openbox/styles/zero}
+ [style] (Cold Fusion) {~/.openbox/styles/coldfusion}
+
+# include the default style menu... this is assuming Openbox was installed
+# into /usr/local
+
+ [nop]
+
+ [include] (/usr/local/share/Openbox/styles/stylesmenu)
+ [end]
+
+ [workspaces] (Workspace list)
+
+ [submenu] (Restart) {Restart which?}
+ [restart] (Openbox)
+
+# let's also give us access to some other window managers
+
+ [restart] (Window Maker) {wmaker}
+ [restart] (Enlightenment) {enlightenment}
+ [restart] (KWM) {kwm}
+ [restart] (TWM) {twm}
+ [end]
+
+ [nop] (...)
+
+ [reconfig] (Reconfigure)
+ [exit] (Quit!)
+[end]
+...
+
+And voila! our menu file is finished. Now we need to tell Openbox to read
+this menu file. We do this by editing the file ~/.openbox/rc.
+
+NOTE: your ~/.openbox/rc is auotmatically updated every time Openbox restarts,
+reconfigures, changes styles or exits. Changes to dynamic data like workspace
+count, names, etc. is lost. About the only thing you can change and have it
+preserved is the menu filename, which is what we are about to change.
+
+The format of ~/.openbox/rc is in the X resource database format (just like
+~/.Xdefaults). Since the file is updated automatically, it may be full of
+stuff or it may not even exist (especially if this is the first time we've
+ran Openbox). Don't worry if you have to create ~/.openbox/rc, Openbox will
+see the file the next time it starts.
+
+What we need to do is change the resource for the menu's filename. This is
+done by changing (or adding) the line that looks like so:
+
+...
+session.menuFile: /path/to/some/file
+...
+
+If this resource exists, we change it. If it does not, we add it. Depending
+on where we put the menu file, our new resource could look like this:
+
+...
+session.menuFile: /home/bhughes/.openbox/rootmenu
+...
+
+We save ~/.openbox/rc and then restart Openbox (reconfiguring doesn't work,
+we need Openbox to completely shutdown and reread ALL of it's configuration
+files, not just the ones that control colors/fonts/etc.)
+
+If we've done everything correctly, Openbox restarts itself and our new menu
+is now ready for use. If something doesn't work, read over the above example
+again to make sure you didn't forget a step or leave out the necessary tags.
+
+Now that Openbox has been told where to find it's menu, it does a little more.
+Openbox 0.51.x introduced automagic menu updates. As long as you never
+change session.menuFile, you will never have to restart or reconfigure Openbox
+whenever you change your menu. Openbox watches the timestamps on all the
+files it reads to build your menu. If any of them change, they are reread and
+your menu updated. This check is done everytime you open the root menu. Like
+I said... it is a check, it doesn't reread the menu everytime, it just looks
+at the modification time and rereads when it changes.
--- /dev/null
+Creating a new style (aka "theme"):
+-----------------------------------
+After getting Openbox up and running, the next thing you want to do is change
+the colors/fonts/etc. on the screen. Openbox uses a "style" to read its
+configuration information. A style in Openbox consists of X resources placed
+in a file. Just like the menu file (see README.menu), the style file can be
+put anywhere on the filesystem; as long as you have read access to the file,
+Openbox can use it.
+
+First, we need to decide where to put our style file, and what to name it.
+I recommend using the naming scheme described on http://bb.classic.themes.org/
+when creating styles.
+
+Let's get started. Let's put our new style into a file named `results.'
+Following the themes.org naming scheme, this file will go into
+.openbox/styles. Same as with the menu file, we use our favorite text editor
+to create the new style.
+
+X resources consist of a key and a value. The key is constructed of several
+smaller keys, delimited by a period (`.'). Keys may also contain a star (`*')
+to serve as a wildcard, which means that one line of typed text will match
+several keys. This is useful for styles that are based on one or two colors.
+
+Openbox allows you to configure it's three main components: the toolbar, the
+menus and the window decorations. Lets begin by creating a style for our
+toolbar.
+
+First we need to define a "texture" for the toolbar and it's components.
+Textures tell Openbox how to mold or shape the colors we supply.
+
+A texture is comprised of the following elements:
+
+ Raised / Sunken / Flat give the component a raised, sunken
+ or flat appearance (respectively)
+
+ Solid / Gradient tell Openbox whether to draw a solid
+ or gradiented texture
+
+ Interlaced tells Openbox to interlace a
+ gradient (and gradient ONLY) texture
+
+ Bevel1 / Bevel2 tells Openbox which type of bevel
+ to use.
+
+NOTE on Bevel1 / Bevel2:
+
+Bevel1 is the default bevel. The shading is placed on the edge of the image.
+Bevel2 is an alternative. The shading is placed one pixel in from the edge
+of the image.
+
+Now that we understand that, let's define the textures for the toolbar. The
+toolbar has a main frame, buttons, two labels and a clock label. The buttons
+have 2 states, so we provide textures for both the normal and the pressed
+state.
+
+...
+toolbar: Raised Diagonal Gradient Bevel1
+toolbar.button: Raised Diagonal Gradient Bevel1
+toolbar.button.pressed: Sunken Diagonal Interlaced Gradient Bevel1
+toolbar.clock: Flat Interlaced Gradient
+toolbar.label: Flat Interlaced Gradient
+...
+
+NOTE: the texture strings don't have to be capitalized like they did in
+previous versions. They are still placed in capitals here, because things like
+the bbtools still use the old method.
+
+Next we define colors for the textures. Colors can be any valid X colorname
+(from the RGB database) or it can be a color specifier, as described by
+'man 1 X.'
+
+Let's see how our file looks after adding colors:
+
+...
+toolbar: Raised Diagonal Gradient Bevel1
+toolbar.button: Raised Diagonal Gradient Bevel1
+toolbar.button.pressed: Sunken Diagonal Interlaced Gradient Bevel1
+toolbar.clock: Flat Interlaced Gradient
+toolbar.label: Flat Interlaced Gradient
+
+toolbar.color: rgb:8/8/7
+toolbar.colorTo: grey20
+toolbar.button.color: grey
+toolbar.button.colorTo: grey20
+toolbar.button.pressed.color: rgb:4/4/38
+toolbar.button.pressed.colorTo: rgb:f/f/d
+toolbar.clock.color: grey20
+toolbar.clock.colorTo: rgb:8/8/7
+toolbar.label.color: grey20
+toolbar.label.colorTo: rgb:8/8/7
+toolbar.textColor: grey85
+...
+
+As you have noticed, all textures have a color and a colorTo key. These keys
+are required for gradient images. For solids, only color is needed. You will
+also notice that we have supplied the color for the text on the toolbar. Not
+all textures have a text color, just certain base textures.
+
+Next, let's move onto the menus. Since Openbox was written in C++, all of
+the menus used in it are subclasses of one generic base class. Openbox reads
+the style for the configuration for that base class, which applies to all
+the menus used in Openbox.
+
+The menu has two main parts, the title and the frame. There is nothing
+visible under them, so we only configure these two components. The menu frame
+and menu title BOTH have a configurable text color, and the menu frame has a
+highlight color and the corresponding highlighted text color key. Let's assign
+some textures and colors to our menu, and see what our style file looks like
+so far:
+
+...
+toolbar: Raised Diagonal Gradient Bevel1
+toolbar.button: Raised Diagonal Gradient Bevel1
+toolbar.button.pressed: Sunken Diagonal Interlaced Gradient Bevel1
+toolbar.clock: Flat Interlaced Gradient
+toolbar.label: Flat Interlaced Gradient
+
+toolbar.color: rgb:8/8/7
+toolbar.colorTo: grey20
+toolbar.button.color: grey
+toolbar.button.colorTo: grey20
+toolbar.button.pressed.color: rgb:4/4/38
+toolbar.button.pressed.colorTo: rgb:f/f/d
+toolbar.clock.color: grey20
+toolbar.clock.colorTo: rgb:8/8/7
+toolbar.label.color: grey20
+toolbar.label.colorTo: rgb:8/8/7
+toolbar.textColor: grey85
+
+menu.title: Raised Diagonal Interlaced Gradient Bevel1
+menu.frame: Raised Diagonal Gradient Bevel1
+
+menu.title.color: grey20
+menu.title.colorTo: rgb:8/8/7
+menu.title.textColor: grey85
+menu.frame.color: rgb:8/8/7
+menu.frame.colorTo: grey10
+menu.frame.textColor: white
+menu.frame.highlightColor: grey85
+menu.frame.hiTextColor: grey20
+...
+
+Next, we need to configure our windows. Windows are like buttons, they have
+two states, focused and unfocused. There for we define a separate texture
+for unfocused windows and focused windows. The buttons on the titlebar
+are focus dependant also, so we need to configure them as well. The buttons
+only have one "pressed" state, so we only have to define that once, instead of
+having a focus.pressed state and an unfocus.pressed state. The window frame
+is the thin border around the client window. Let's be sure to catch it as well.
+
+After adding the window config, our style now looks like this:
+
+...
+
+toolbar: Raised Diagonal Gradient Bevel1
+toolbar.button: Raised Diagonal Gradient Bevel1
+toolbar.button.pressed: Sunken Diagonal Interlaced Gradient Bevel1
+toolbar.clock: Flat Interlaced Gradient
+toolbar.label: Flat Interlaced Gradient
+
+toolbar.color: rgb:8/8/7
+toolbar.colorTo: grey20
+toolbar.button.color: grey
+toolbar.button.colorTo: grey20
+toolbar.button.pressed.color: rgb:4/4/38
+toolbar.button.pressed.colorTo: rgb:f/f/d
+toolbar.clock.color: grey20
+toolbar.clock.colorTo: rgb:8/8/7
+toolbar.label.color: grey20
+toolbar.label.colorTo: rgb:8/8/7
+toolbar.textColor: grey85
+
+menu.title: Raised Diagonal Interlaced Gradient Bevel1
+menu.frame: Raised Diagonal Gradient Bevel1
+
+menu.title.color: grey20
+menu.title.colorTo: rgb:8/8/7
+menu.title.textColor: grey85
+menu.frame.color: rgb:8/8/7
+menu.frame.colorTo: grey10
+menu.frame.textColor: white
+menu.frame.highlightColor: grey85
+menu.frame.hiTextColor: grey20
+
+window.focus: Raised Diagonal Interlaced Gradient Bevel1
+window.focus.button: Raised Diagonal Gradient Bevel1
+window.unfocus: Raised Diagonal Gradient Bevel1
+window.unfocus.button: Sunken Diagonal Gradient Bevel1
+window.button.pressed: Flat Diagonal Interlaced Gradient
+window.frame: Raised Solid Bevel1
+
+window.focus.color: grey
+window.focus.colorTo: grey20
+window.focus.textColor: grey85
+window.focus.button.color: grey
+window.focus.button.colorTo: grey20
+window.unfocus.color: rgb:8/8/7
+window.unfocus.colorTo: grey20
+window.unfocus.textColor: grey
+window.unfocus.button.color: grey20
+window.unfocus.button.colorTo: grey
+window.button.pressed.color: rgb:4/4/38
+window.button.pressed.colorTo: rgb:f/f/d
+window.frame.color: grey85
+...
+
+Now all we have to do is finish off the style with a few miscellanous options.
+These include the title and menu fonts/justification, border color, bevel and
+handle widths, window move style and the root command.
+
+Fonts must be a valid X11 font screen, or a valid font alias. Use a utility
+like `xfontsel' (and others) to preview fonts. Also use the utility
+`xlsfonts' to spit out all the current X font names and aliases stored in
+the X server.
+
+Justification can be one of three things: LeftJustify, CenterJustify or
+RightJustify.
+
+The border color is the color applied to the 1 pixel border around the menu
+frame/title and the window titlebar/buttons/handle/etc. Setting this color
+can have drastic effects on your style, so don't just leave it set to `black'
+all the time. ;)
+
+The bevel and handle widths control the size and spacing of decorations in
+Openbox. The larger the number, the more space Openbox takes up.
+
+The window move style tells Openbox how to move windows when you drag them
+with your mouse. There are two options for it: Opaque or Wire.
+
+The root command is the command run every time the style is loaded (either at
+startup or after a reconfigure/style-change). It is used to run a program
+like xv, Esetroot, wmsetbg, etc. to set an image/color/pattern on the root
+window. Just supply a command and it will be run.
+
+Also, as a note, an X resource file can have comments. Precede the line with
+and exclamation mark `!' and the rest of the line will be ignored.
+
+Let's finish off the details and take a look at our finished style:
+
+...
+! Results - theme for Openbox
+! by Brad Hughes bhughes@tcac.net
+
+toolbar: Raised Diagonal Gradient Bevel1
+toolbar.button: Raised Diagonal Gradient Bevel1
+toolbar.button.pressed: Sunken Diagonal Interlaced Gradient Bevel1
+toolbar.clock: Flat Interlaced Gradient
+toolbar.label: Flat Interlaced Gradient
+
+! toolbar colors
+toolbar.color: rgb:8/8/7
+toolbar.colorTo: grey20
+toolbar.button.color: grey
+toolbar.button.colorTo: grey20
+toolbar.button.pressed.color: rgb:4/4/38
+toolbar.button.pressed.colorTo: rgb:f/f/d
+toolbar.clock.color: grey20
+toolbar.clock.colorTo: rgb:8/8/7
+toolbar.label.color: grey20
+toolbar.label.colorTo: rgb:8/8/7
+toolbar.textColor: grey85
+
+! menu textures
+menu.title: Raised Diagonal Interlaced Gradient Bevel1
+menu.frame: Raised Diagonal Gradient Bevel1
+
+! menu colors
+menu.title.color: grey20
+menu.title.colorTo: rgb:8/8/7
+menu.title.textColor: grey85
+menu.frame.color: rgb:8/8/7
+menu.frame.colorTo: grey10
+menu.frame.textColor: white
+menu.frame.highlightColor: grey85
+menu.frame.hiTextColor: grey20
+
+! window textures
+window.focus: Raised Diagonal Interlaced Gradient Bevel1
+window.focus.button: Raised Diagonal Gradient Bevel1
+window.unfocus: Raised Diagonal Gradient Bevel1
+window.unfocus.button: Sunken Diagonal Gradient Bevel1
+window.button.pressed: Flat Diagonal Interlaced Gradient
+window.frame: Raised Solid Bevel1
+
+! window colors
+window.focus.color: grey
+window.focus.colorTo: grey20
+window.focus.textColor: grey85
+window.focus.button.color: grey
+window.focus.button.colorTo: grey20
+window.unfocus.color: rgb:8/8/7
+window.unfocus.colorTo: grey20
+window.unfocus.textColor: grey
+window.unfocus.button.color: grey20
+window.unfocus.button.colorTo: grey
+window.button.pressed.color: rgb:4/4/38
+window.button.pressed.colorTo: rgb:f/f/d
+window.frame.color: grey85
+
+! misc...
+borderColor: rgb:2/2/1c
+
+moveStyle: Opaque
+
+menuJustify: CenterJustify
+titleJustify: CenterJustify
+
+bevelWidth: 2
+handleWidth: 4
+
+menuFont: lucidasans-10
+titleFont: lucidasans-bold-10
+
+rootCommand: bsetroot -mod 4 4 -fg rgb:6/6/5c -bg grey20
+...
+
+Alright! Our style is finished. Let's see how the sucker looks. First we
+need to tell Openbox to use the new style. The way to do that is to edit
+your menu (refer to README.menu for this) and add:
+
+[style] (Results) {~/.openbox/styles/results}
+
+somewhere in our menu. Taking advantage of Openbox' automagic menu updates,
+all we have to do is close and reopen the root menu and our new style entry
+will be visible. Select it and Openbox will apply the new style we just
+created.
--- /dev/null
+# This is the default menu file for Openbox
+#
+# Lines beginning with the '#' character are ignored.
+#
+# The new syntax is simpler than the old X resource format...
+# Each menu item consists of 2 or 3 fields:
+#
+# [command] (label) {data}
+#
+# where [command] is one of:
+#
+# [begin] [end] [exec] [exit] [reconfig] [restart]
+# [submenu] [style] [include] [workspaces] [config]
+#
+# [begin] is used for the top level menu
+# [submenu] is used for submenus
+# [end] must be used with BOTH [begin] and [submenu] to tell the parser to stop
+# reading from the file.
+#
+# [exec] (label) {string}
+# This will insert an item that runs a program.
+#
+# [exit] (label)
+# This will insert an item that exits the window manager.
+#
+# [reconfig] (label) {string}
+# This will insert an item that tells Openbox to re-read it's configuration
+# files. {string} is optional, and if supplied, will execute the string with
+# /bin/sh -c before the reconfiguration is performed. (this is helpful for
+# writing multiple config files and switching between them)
+#
+# [restart] (label) {string}
+# This will insert an item to restart the window manager. {string} is
+# optional, and if omitted, Openbox will restart itself. If {string} is
+# specified, then a different window manager will be started.
+#
+# [style] (filename)
+# This will insert an item to reconfigure Openbox with the new style. This
+# change is saved when Openbox exits or restarts.
+#
+# [include] (filename)
+# This will read more menu items from the file "filename". The file cannot
+# contain a [begin] or [end], except for the [end] needed for submenus.
+#
+# [workspaces] (label)
+# This tells Openbox to insert a "link" to the workspaces menu directly
+# into your menu.
+#
+# [config] (label)
+# This tells Openbox to insert the ConfigMenu into your menu. The ConfigMenu
+# allows you to change several options found in your ~/.openbox/rc file on the
+# fly.
+#
+# example:
+
+[begin] (Openbox)
+ [exec] (xterm) {xterm -ls}
+ [exec] (rxvt) {rxvt}
+
+ [exec] (StarOffice) {soffice}
+ [exec] (XEmacs) {xemacs}
+ [exec] (Acroread) {acroread}
+
+ [submenu] (Graphics)
+ [exec] (The GIMP) {gimp}
+ [exec] (Image Magick) {display}
+ [end]
+
+ [submenu] (Mozilla)
+ [exec] (Mozilla Navigator) {mozilla}
+ [submenu] (More...)
+ [exec] (Mozilla Mail) {mozilla -mail}
+ [exec] (Mozilla News) {mozilla -news}
+ [exec] (Mozilla Composer) {mozilla -edit}
+ [end]
+ [end]
+
+ [submenu] (X Utilities)
+ [exec] (Xfontsel) {xfontsel}
+ [exec] (Xman) {xman}
+ [exec] (Xcalc) {xcalc}
+ [exec] (Xload) {xload}
+ [end]
+
+ [submenu] (Styles) {Choose a style...}
+ [stylesdir] (@pkgdatadir@/styles)
+ [end]
+
+ [workspaces] (Workspace List)
+ [config] (Configuration)
+
+ [reconfig] (Reconfigure)
+ [restart] (Restart)
+ [submenu] (Others) {Other Window Managers}
+ [restart] (Start FVWM) {fvwm}
+ [restart] (Start WindowMaker) {wmaker}
+ [restart] (Start Afterstep) {afterstep}
+ [restart] (Start Enlightenment) {enlightenment}
+ [restart] (Start TWM) {twm}
+ [restart] (Start KWM) {kwm}
+ [end]
+
+ [exit] (Exit)
+[end]
+
+# End of example menu.
+
--- /dev/null
+# data/styles/Makefile.am for Openbox
+
+styledir = $(pkgdatadir)/styles
+MAINTAINERCLEANFILES = Makefile.in
+style_DATA = artwiz bluebox cthulhain flux nyz nyzclone operation outcomes shade the_orange trisb twice frobozz frobust steelblue steelblue2
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# data/styles/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+styledir = $(pkgdatadir)/styles
+MAINTAINERCLEANFILES = Makefile.in
+style_DATA = artwiz bluebox cthulhain flux nyz nyzclone operation outcomes shade the_orange trisb twice frobozz frobust steelblue steelblue2
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(style_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu data/styles/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-styleDATA: $(style_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(styledir)
+ @list='$(style_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(styledir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(styledir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(styledir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(styledir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-styleDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(style_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(styledir)/$$p; \
+ done
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = data/styles
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu data/styles/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-styleDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-styleDATA
+uninstall: uninstall-am
+all-am: Makefile $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(styledir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: uninstall-styleDATA install-styleDATA tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+toolbar: raised gradient vertical
+toolbar.color: rgb:80/84/88
+toolbar.colorTo: rgb:30/34/38
+
+toolbar.button: raised gradient diagonal
+toolbar.button.color: rgb:90/94/98
+toolbar.button.colorTo: rgb:20/24/28
+toolbar.button.picColor: white
+
+toolbar.button.pressed: sunken gradient diagonal
+toolbar.button.pressed.color: black
+toolbar.button.pressed.colorTo: rgb:80/98/d0
+
+toolbar.clock: sunken gradient diagonal
+toolbar.clock.color: rgb:10/20/30
+toolbar.clock.colorTo: rgb:70/80/90
+toolbar.clock.textColor: white
+
+toolbar.label: sunken gradient diagonal
+toolbar.label.color: rgb:10/20/30
+toolbar.label.colorTo: rgb:70/80/90
+toolbar.label.textColor: white
+
+toolbar.windowLabel: sunken gradient diagonal
+toolbar.windowLabel.color: rgb:10/20/30
+toolbar.windowLabel.colorTo: rgb:70/80/90
+toolbar.windowLabel.textColor: white
+
+toolbar.justify: center
+
+
+menu.title: raised gradient diagonal
+menu.title.color: rgb:90/94/98
+menu.title.colorTo: rgb:20/24/28
+menu.title.textColor: white
+menu.title.justify: center
+
+menu.frame: sunken gradient diagonal
+menu.frame.color: rgb:10/20/30
+menu.frame.colorTo: rgb:70/80/90
+menu.frame.textColor: rgb:90/a0/b0
+menu.frame.justify: center
+
+menu.hilite: raised gradient diagonal
+menu.hilite.color: rgb:90/94/98
+menu.hilite.colorTo: rgb:20/24/28
+menu.hilite.textColor: white
+
+menu.bullet: empty
+menu.bullet.position: right
+
+
+window.title.focus: raised gradient vertical
+window.title.focus.color: rgb:80/84/88
+window.title.focus.colorTo: rgb:30/34/38
+window.title.unfocus: raised vertical gradient
+window.title.unfocus.color: rgb:50/54/58
+window.title.unfocus.colorTo: black
+
+window.label.focus: sunken diagonal gradient
+window.label.focus.color: rgb:10/20/30
+window.label.focus.colorTo: rgb:70/80/90
+window.label.focus.textColor: white
+window.label.unfocus: sunken gradient diagonal
+window.label.unfocus.color: black
+window.label.unfocus.colorTo: rgb:40/50/60
+window.label.unfocus.textColor: rgb:60/64/68
+
+window.button.focus: raised gradient diagonal
+window.button.focus.color: rgb:90/94/98
+window.button.focus.colorTo: rgb:20/24/28
+window.button.focus.picColor: white
+window.button.unfocus: raised gradient diagonal
+window.button.unfocus.color: rgb:50/54/58
+window.button.unfocus.colorTo: black
+window.button.unfocus.picColor: rgb:70/74/78
+window.button.pressed: sunken gradient diagonal
+window.button.pressed.color: rgb:20/40/50
+window.button.pressed.colorTo: rgb:60/70/80
+
+window.frame.focusColor: rgb:40/44/48
+window.frame.unfocusColor: rgb:20/24/28
+
+window.handle.focus: raised gradient diagonal
+window.handle.focus.color: rgb:70/74/78
+window.handle.focus.colorTo: rgb:40/44/48
+window.handle.unfocus: raised gradient diagonal
+window.handle.unfocus.color: rgb:50/54/58
+window.handle.unfocus.colorTo: black
+
+window.grip.focus: sunken diagonal gradient
+window.grip.focus.color: rgb:20/30/40
+window.grip.focus.colorTo: rgb:60/70/80
+window.grip.unfocus: sunken diagonal gradient
+window.grip.unfocus.color: black
+window.grip.unfocus.colorTo: rgb:30/40/50
+
+window.justify: center
+
+
+borderColor: black
+
+bevelWidth: 2
+borderWidth: 1
+handleWidth: 5
+
+rootCommand: bsetroot -mod 4 4 -bg rgb:10/18/20 -fg rgb:30/38/40
+
+*Font: -*-lucidatypewriter-medium-r-*-*-*-100-*-*-*-*-*-*
--- /dev/null
+! Miscellaneous settings...
+style.name: bluebox
+style.author: miklos
+style.date: Thu, Mar 21, 2002
+style.credits:
+style.comments:
+
+
+rootCommand: bsetbg -solid "#414b57"
+
+! Toolbar settings...
+toolbar.button: Flat Gradient Vertical
+toolbar.button.color: #46505d
+toolbar.button.colorTo: #67788b
+toolbar.button.picColor: #d7e0ee
+
+toolbar.button.pressed: Sunken Bevel1 Gradient Diagonal
+toolbar.button.pressed.color: #6a7482
+toolbar.button.pressed.colorTo: #73787e
+
+toolbar.label: Flat Gradient Vertical
+toolbar.label.color: #414b57
+toolbar.label.colorTo: #6a7b8f
+toolbar.label.textColor: #d7e0ee
+
+toolbar.windowLabel: Sunken Bevel1 Gradient Vertical
+toolbar.windowLabel.color: #21354a
+toolbar.windowLabel.colorTo: #406285
+toolbar.windowLabel.textColor: #d7e0ee
+
+toolbar.clock: Flat Gradient Vertical
+toolbar.clock.color: #414b57
+toolbar.clock.colorTo: #6a7b8f
+toolbar.clock.textColor: #d7e0ee
+
+toolbar: Raised Bevel1 Gradient Vertical
+toolbar.color: #414b57
+toolbar.colorTo: #6a7b8f
+toolbar.textColor: #d7e0ee
+!toolbar.font: gelly
+toolbar.font: -*-lucida-medium-r-*-*-*-100-*-*-*-*-*-*
+toolbar.justify: Center
+
+
+! Menu settings...
+menu.frame: Flat Gradient Horizontal
+menu.frame.color: #2c333b
+menu.frame.colorTo: #6a7b8f
+menu.frame.textColor: #becad4
+!menu.frame.font: gelly
+menu.frame.font: -*-lucida-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.frame.justify: Left
+
+menu.title: Raised Gradient Vertical
+menu.title.color: #414b57
+menu.title.colorTo: #67788b
+menu.title.textColor: #8998ab
+!menu.title.font: gelly
+menu.title.font: -*-lucida-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.title.justify: Center
+
+menu.hilite: Sunken Bevel1 Gradient Horizontal
+menu.hilite.color: #21354a
+menu.hilite.colorTo: #406285
+menu.hilite.textColor: #a8bed6
+
+menu.bullet: Triangle
+menu.bullet.position: Right
+menu.frame.disableColor: #ffffff
+
+! Window settings...
+window.button.focus: Flat Gradient Vertical
+window.button.focus.color: #46505d
+window.button.focus.colorTo: #67788b
+window.button.focus.picColor: #d8e0ee
+
+window.button.unfocus: Flat Gradient Vertical
+window.button.unfocus.color: #46505d
+window.button.unfocus.colorTo: #67788b
+window.button.unfocus.picColor: #7e8c9d
+
+window.grip.focus: Raised Bevel1 Solid Vertical
+window.grip.focus.color: #46505d
+window.grip.focus.colorTo: #ffffff
+
+window.grip.unfocus: Raised Bevel1 Solid Horizontal
+window.grip.unfocus.color: #3c4550
+window.grip.unfocus.colorTo: #ffffff
+
+window.handle.focus: Raised Bevel1 Solid Vertical
+window.handle.focus.color: #46505d
+window.handle.focus.colorTo: #ffffff
+
+window.handle.unfocus: Raised Bevel1 Solid Horizontal
+window.handle.unfocus.color: #3c4550
+window.handle.unfocus.colorTo: #ffffff
+
+window.label.focus: Sunken Bevel1 Gradient Vertical
+window.label.focus.color: #21354a
+window.label.focus.colorTo: #406285
+window.label.focus.textColor: #d7e0ee
+!window.label.focus.font: gelly
+window.label.focus.font: -*-lucida-medium-r-*-*-*-100-*-*-*-*-*-*
+window.label.focus.justify: Center
+
+!window.font: gelly
+window.font: -*-lucida-medium-r-*-*-*-100-*-*-*-*-*-*
+window.justify: Center
+window.label.unfocus: Flat Gradient Vertical
+window.label.unfocus.color: #414b57
+window.label.unfocus.colorTo: #6a7b8f
+window.label.unfocus.textColor: #7e8c9d
+
+window.title.focus: Raised Bevel1 Gradient Vertical
+window.title.focus.color: #414b57
+window.title.focus.colorTo: #6a7b8f
+
+window.title.unfocus: Raised Bevel1 Gradient Vertical
+window.title.unfocus.color: #414b57
+window.title.unfocus.colorTo: #6a7b8f
+
+window.button.pressed: Sunken Bevel1 Gradient Diagonal
+window.button.pressed.color: #6a7482
+window.button.pressed.colorTo: #73787e
+
+window.frame.focusColor: #73787e
+window.frame.unfocusColor: #62666b
+handleWidth: 1
+frameWidth: 0
+bevelWidth: 1
+borderWidth: 1
+borderColor: #000000
+
+bbpager.frame: raised solid
+ bbpager.frame.color: #515b67
+
+bbpager.desktop: sunken solid
+ bbpager.desktop.color: #414b57
+
+bbpager.desktop.focus: raised solid
+ bbpager.desktop.focus.color: #ffffff
+
+bbpager.window.focus: raised gradient vertical
+ bbpager.window.focus.color: #21354a
+ bbpager.window.focus.colorTo: #406285
+
+bbpager.window: flat gradient vertical
+ bbpager.window.color: #414b57
+ bbpager.window.colorTo: #6a7b8f
+
+bbpager.desktop.focusStyle: border
+bbpager.active.window.borderColor: #202020
+bbpager.inactive.window.borderColor: #000000
+bbpager.active.desktop.borderColor: #73787e
+
--- /dev/null
+! Title: cthulhain
+! By: cthulhain (http://lordzork.com/blackbox/
+! Email: cthulhain@lordzork.com
+! Comment: no comment
+
+! ***** toolbar *****
+toolbar: raised gradient vertical
+ toolbar.color: #585858
+ toolbar.colorTo: #0f1319
+
+toolbar.label: parentrelative
+ toolbar.label.textColor: #cccccc
+
+toolbar.windowLabel: sunken gradient crossdiagonal
+ toolbar.windowLabel.color: #151a22
+ toolbar.windowLabel.colorTo: #7a8290
+ toolbar.windowLabel.textColor: #ffffff
+
+toolbar.clock: parentrelative
+ toolbar.clock.textColor: #cccccc
+
+toolbar.button: parentrelative
+ toolbar.button.picColor: #cccccc
+
+toolbar.button.pressed: flat gradient vertical
+ toolbar.button.pressed.color: #0f1319
+ toolbar.button.pressed.colorTo: #7a8290
+
+
+! ***** menu *****
+menu.title: raised gradient crossdiagonal
+ menu.title.color: #151a22
+ menu.title.colorTo: #7a8290
+ menu.title.textColor: #ffffff
+
+menu.frame: sunken gradient crossdiagonal
+ menu.frame.color: #0f1319
+ menu.frame.colorTo: gray40
+ menu.frame.textColor: #cccccc
+
+menu.hilite: sunken gradient crossdiagonal
+ menu.hilite.color: #151a22
+ menu.hilite.colorTo: #7a8290
+ menu.hilite.textColor: #ffffff
+
+menu.bullet: triangle
+ menu.bullet.position: right
+
+
+! ***** window focused *****
+window.title.focus: raised gradient diagonal
+ window.title.focus.color: gray40
+ window.title.focus.colorTo: #0f1319
+
+window.label.focus: sunken gradient crossdiagonal
+ window.label.focus.color: #151a22
+ window.label.focus.colorTo: #7a8290
+ window.label.focus.textColor: gray90
+
+window.button.focus: parentrelative
+ window.button.focus.picColor: #cccccc
+
+window.button.pressed: flat gradient vertical
+ window.button.pressed.color: #0f1319
+ window.button.pressed.colorTo: #7a8290
+
+window.handle.focus: raised gradient diagonal
+ window.handle.focus.color: gray50
+ window.handle.focus.colorTo: #0f1319
+
+window.grip.focus: raised gradient diagonal
+ window.grip.focus.color: #7a8290
+ window.grip.focus.colorTo: #151a22
+
+window.frame.focusColor: #858585
+window.frame.focus.color: #858585
+
+
+! ***** window unfocused *****
+window.title.unfocus: raised gradient diagonal
+ window.title.unfocus.color: gray40
+ window.title.unfocus.colorTo: #0f1319
+
+window.label.unfocus: parentrelative
+ window.label.unfocus.textColor: #808080
+
+window.button.unfocus: parentrelative
+ window.button.unfocus.picColor: #727272
+
+window.handle.unfocus: raised gradient diagonal
+ window.handle.unfocus.color: gray50
+ window.handle.unfocus.colorTo: #0f1319
+
+window.grip.unfocus: raised gradient diagonal
+ window.grip.unfocus.color: gray50
+ window.grip.unfocus.colorTo: #0f1319
+
+window.frame.unfocusColor: #5e6166
+window.frame.unfocus.color: #5e6166
+
+
+! ***** fonts *****
+*.font: -*-lucida-medium-r-*-*-*-100-*-*-*-*-*
+ toolbar.justify: center
+ window.justify: right
+ menu.title.justify: center
+ menu.frame.justify: right
+
+! ***** the rest *****
+borderColor: #202020
+borderWidth: 1
+bevelWidth: 2
+handleWidth: 4
+frameWidth: 0
+
+rootCommand: bsetbg -solid "#3a404b"
+
+! ***** bbpager *****
+bbpager.frame: sunken gradient crossdiagonal
+ bbpager.frame.color: #151a22
+ bbpager.frame.colorTo: #7a8290
+
+bbpager.desktop: parentrelative
+
+bbpager.desktop.focus: flat gradient vertical
+ bbpager.desktop.focus.color: #0f1319
+ bbpager.desktop.focus.colorTo: gray40
+
+bbpager.window: raised gradient vertical
+ bbpager.window.color: gray40
+ bbpager.window.colorTo: #0f1319
+
+bbpager.window.focus: raised gradient crossdiagonal
+ bbpager.window.focus.color: #151a22
+ bbpager.window.focus.colorTo: #7a8290
+
+bbpager.desktop.focusStyle: border
+bbpager.active.window.borderColor: #202020
+bbpager.inactive.window.borderColor: #202020
+bbpager.active.desktop.borderColor: #0f1319
--- /dev/null
+toolbar: flat solid
+toolbar.color: rgb:6/6/54
+toolbar.button: flat solid
+toolbar.button.color: rgb:6/6/54
+toolbar.button.picColor: rgb:2/2/1c
+toolbar.label: flat crossdiagonal gradient
+toolbar.label.color: rgb:8/8/7
+toolbar.label.colorTo: rgb:f/f/d
+toolbar.label.textColor: rgb:2/2/1c
+toolbar.windowLabel: flat crossdiagonal gradient
+toolbar.windowLabel.color: rgb:8/8/7
+toolbar.windowLabel.colorTo: rgb:f/f/d
+toolbar.windowLabel.textColor: rgb:2/2/1c
+toolbar.clock: flat crossdiagonal gradient
+toolbar.clock.color: rgb:8/8/7
+toolbar.clock.colorTo: rgb:f/f/d
+toolbar.clock.textColor: rgb:2/2/1c
+toolbar.justify: right
+toolbar.font: lucidasans-10
+
+menu.title: flat crossdiagonal gradient
+menu.title.color: rgb:8/8/7
+menu.title.colorTo: rgb:f/f/d
+menu.title.textColor: rgb:2/2/1c
+menu.title.font: lucidasans-10
+menu.title.justify: right
+
+menu.frame: flat solid
+menu.frame.color: rgb:6/6/54
+menu.frame.textColor: grey85
+menu.frame.disableColor: rgb:4/4/38
+menu.frame.font: lucidasans-10
+menu.frame.justify: center
+
+menu.bullet.position: right
+menu.bullet: triangle
+
+menu.hilite: flat solid
+menu.hilite.color: rgb:4/4/38
+menu.hilite.textColor: white
+
+window.title.focus: flat solid
+window.title.focus.color: rgb:6/6/54
+window.title.unfocus: flat solid
+window.title.unfocus.color: rgb:4/4/38
+
+window.label.focus: flat crossdiagonal gradient
+window.label.focus.color: rgb:8/8/7
+window.label.focus.colorTo: rgb:f/f/d
+window.label.focus.textColor: rgb:2/2/1c
+window.label.unfocus: flat solid
+window.label.unfocus.color: rgb:4/4/38
+window.label.unfocus.textColor: rgb:2/2/1c
+
+window.button.focus: flat solid
+window.button.focus.color: rgb:6/6/54
+window.button.focus.picColor: rgb:2/2/1c
+window.button.unfocus: flat solid
+window.button.unfocus.color: rgb:4/4/38
+window.button.unfocus.picColor: rgb:2/2/1c
+
+window.handle.focus: flat crossdiagonal gradient
+window.handle.focus.color: rgb:8/8/7
+window.handle.focus.colorTo: rgb:f/f/d
+window.handle.unfocus: flat solid
+window.handle.unfocus.color: rgb:4/4/38
+
+window.grip.focus: flat solid
+window.grip.focus.color: rgb:8/8/7
+window.grip.unfocus: flat solid
+window.grip.unfocus.color: rgb:4/4/38
+
+window.frame.focusColor: rgb:f/f/d
+window.frame.unfocusColor: rgb:6/6/54
+
+window.font: lucidasans-10
+window.justify: right
+
+*button.pressed: flat solid
+*button.pressed.color: rgb:a/a/8c
+
+borderColor: rgb:2/2/1c
+
+bevelWidth: 2
+borderWidth: 2
+handleWidth: 3
+
+*textColor: grey20
+*Font: lucidasans-10
+
+rootCommand: bsetroot -solid rgb:4/4/38
--- /dev/null
+! frobozz for blackbox.
+! Automagically generated by bbconf.
+
+
+! Miscellaneous settings...
+style.name: Untitled
+style.author: Unnamed
+style.date: Wed Jan 23 2002
+style.credits:
+style.comments:
+
+
+rootCommand: bsetbg -solid "#484848"
+
+! Toolbar settings...
+toolbar.button: Flat Solid PipeCross
+toolbar.button.color: #484848
+toolbar.button.colorTo: #ffffff
+toolbar.button.picColor: #303030
+
+toolbar.button.pressed: Sunken Bevel1 Solid Diagonal
+toolbar.button.pressed.color: #484848
+toolbar.button.pressed.colorTo: #ffffff
+
+toolbar.label: parentrelative
+toolbar.label.color: #ffffff
+toolbar.label.colorTo: #ffffff
+toolbar.label.textColor: #bcc3ce
+
+toolbar.windowLabel: Sunken Bevel1 Solid Pyramid
+toolbar.windowLabel.color: #263340
+toolbar.windowLabel.colorTo: #ffffff
+toolbar.windowLabel.textColor: #d7e0ee
+
+toolbar.clock: parentrelative
+toolbar.clock.color: #ffffff
+toolbar.clock.colorTo: #ffffff
+toolbar.clock.textColor: #bcc3ce
+
+toolbar: Raised Bevel1 Solid Horizontal
+toolbar.color: #484848
+toolbar.colorTo: #ffffff
+toolbar.textColor: #ffffff
+!toolbar.font: lime
+toolbar.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+toolbar.justify: Center
+
+
+! Menu settings...
+menu.frame: Raised Bevel1 Solid Elliptic
+menu.frame.color: #484848
+menu.frame.colorTo: #ffffff
+menu.frame.textColor: #bcc3ce
+!menu.frame.font: lime
+menu.frame.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.frame.justify: Right
+
+menu.title: Raised Bevel1 Solid PipeCross
+menu.title.color: #263340
+menu.title.colorTo: #ffffff
+menu.title.textColor: #d7e0ee
+!menu.title.font: lime
+menu.title.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.title.justify: Center
+
+menu.hilite: Sunken Bevel1 Solid CrossDiagonal
+menu.hilite.color: #263340
+menu.hilite.colorTo: #ffffff
+menu.hilite.textColor: #d7e0ee
+
+menu.bullet: Triangle
+menu.bullet.position: Right
+menu.frame.disableColor: #ffffff
+
+! Window settings...
+window.button.focus: Flat Solid PipeCross
+window.button.focus.color: #484848
+window.button.focus.colorTo: #ffffff
+window.button.focus.picColor: #303030
+
+window.button.unfocus: Flat Solid Pyramid
+window.button.unfocus.color: #484848
+window.button.unfocus.colorTo: #ffffff
+window.button.unfocus.picColor: #404040
+
+window.grip.focus: Raised Bevel1 Solid PipeCross
+window.grip.focus.color: #485561
+window.grip.focus.colorTo: #ffffff
+
+window.grip.unfocus: Sunken Bevel1 Solid Pyramid
+window.grip.unfocus.color: #484848
+window.grip.unfocus.colorTo: #ffffff
+
+window.handle.focus: Raised Bevel1 Solid Pyramid
+window.handle.focus.color: #485561
+window.handle.focus.colorTo: #ffffff
+
+window.handle.unfocus: Raised Bevel1 Solid Pyramid
+window.handle.unfocus.color: #484848
+window.handle.unfocus.colorTo: #ffffff
+
+window.label.focus: Sunken Bevel1 Solid Pyramid
+window.label.focus.color: #263340
+window.label.focus.colorTo: #ffffff
+window.label.focus.textColor: #d7e0ee
+!window.label.focus.font: lime
+window.label.focus.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+window.label.focus.justify: Left
+
+!window.font: lime
+window.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+window.justify: Left
+window.label.unfocus: parentrelative
+window.label.unfocus.color: #ffffff
+window.label.unfocus.colorTo: #ffffff
+window.label.unfocus.textColor: #909090
+
+window.title.focus: Raised Bevel1 Solid Diagonal
+window.title.focus.color: #484848
+window.title.focus.colorTo: #ffffff
+
+window.title.unfocus: Raised Bevel1 Solid Diagonal
+window.title.unfocus.color: #484848
+window.title.unfocus.colorTo: #ffffff
+
+window.button.pressed: Sunken Bevel1 Solid Diagonal
+window.button.pressed.color: #484848
+window.button.pressed.colorTo: #ffffff
+
+window.frame.focusColor: #63707f
+window.frame.unfocusColor: #5e6166
+handleWidth: 4
+frameWidth: 0
+bevelWidth: 0
+borderWidth: 1
+borderColor: #000000
+
--- /dev/null
+
+style.name: frobust
+style.author: miklos
+style.date: Tue, 03.05.02
+style.credits:
+style.comments: frobust!
+
+
+rootCommand: bsetroot -mod 4 4 -bg "#4c4c4c" -fg "#3c3c3c"
+
+! Toolbar settings...
+toolbar.button: Flat Gradient Vertical
+toolbar.button.color: #4c4c4c
+toolbar.button.colorTo: #414141
+toolbar.button.picColor: #d7e0ee
+
+toolbar.button.pressed: Sunken Bevel1 Gradient Diagonal
+toolbar.button.pressed.color: #484848
+toolbar.button.pressed.colorTo: #73787e
+
+toolbar.label: Flat Gradient Vertical
+toolbar.label.color: #4c4c4c
+toolbar.label.colorTo: #414141
+toolbar.label.textColor: #d7e0ee
+
+toolbar.windowLabel: Sunken Bevel1 Gradient Vertical
+toolbar.windowLabel.color: #aab0b9
+toolbar.windowLabel.colorTo: #73787e
+toolbar.windowLabel.textColor: #000000
+
+toolbar.clock: Flat Gradient Vertical
+toolbar.clock.color: #4c4c4c
+toolbar.clock.colorTo: #414141
+toolbar.clock.textColor: #d7e0ee
+
+toolbar: Raised Bevel1 Gradient Vertical
+toolbar.color: #4c4c4c
+toolbar.colorTo: #414141
+toolbar.textColor: #d7e0ee
+!toolbar.font: creep
+toolbar.font: -Adobe-Helvetica-Medium-R-Normal--10-100-75-75-P-56-ISO8859-2
+toolbar.justify: Center
+
+
+! Menu settings...
+menu.frame: Raised Solid
+menu.frame.color: #4c4c4c
+menu.frame.textColor: #d7e0ee
+!menu.frame.font: creep
+menu.frame.font: -Adobe-Helvetica-Medium-R-Normal--10-100-75-75-P-56-ISO8859-2
+menu.frame.justify: Right
+
+menu.title: Raised Bevel1 Solid PipeCross
+menu.title.color: #8d929a
+menu.title.colorTo: #73787e
+menu.title.textColor: #000000
+!menu.title.font: creep
+menu.title.font: -Adobe-Helvetica-Medium-R-Normal--10-100-75-75-P-56-ISO8859-2
+menu.title.justify: Center
+
+menu.hilite: Sunken Solid
+menu.hilite.color: #73787e
+menu.hilite.colorTo: #ffffff
+menu.hilite.textColor: #d7e0ee
+
+menu.bullet: Triangle
+menu.bullet.position: Right
+menu.frame.disableColor: #ffffff
+
+! Window settings...
+window.button.focus: Flat Gradient Vertical
+window.button.focus.color: #4c4c4c
+window.button.focus.colorTo: #414141
+window.button.focus.picColor: #d8e0ee
+
+window.button.unfocus: Flat Gradient Vertical
+window.button.unfocus.color: #4c4c4c
+window.button.unfocus.colorTo: #414141
+window.button.unfocus.picColor: #686868
+
+window.grip.focus: Raised Bevel1 Solid Vertical
+window.grip.focus.color: #aab0b9
+
+window.grip.unfocus: Raised Bevel1 Solid Horizontal
+window.grip.unfocus.color: #4c4c4c
+window.grip.unfocus.colorTo: #ffffff
+
+window.handle.focus: Raised Bevel1 Solid Vertical
+window.handle.focus.color: #8a8f96
+
+window.handle.unfocus: Raised Bevel1 Solid Horizontal
+window.handle.unfocus.color: #4c4c4c
+window.handle.unfocus.colorTo: #ffffff
+
+window.label.focus: Sunken Bevel1 Gradient Vertical
+window.label.focus.color: #aab0b9
+window.label.focus.colorTo: #73787e
+window.label.focus.textColor: #000000
+window.label.focus.justify: Center
+
+!window.font: creep
+window.font: -Adobe-Helvetica-Medium-R-Normal--10-100-75-75-P-56-ISO8859-2
+window.justify: Center
+window.label.unfocus: Flat Gradient Vertical
+window.label.unfocus.color: #4c4c4c
+window.label.unfocus.colorTo: #414141
+window.label.unfocus.textColor: #686868
+
+window.title.focus: Raised Bevel1 Gradient Vertical
+window.title.focus.color: #4c4c4c
+window.title.focus.colorTo: #414141
+
+window.title.unfocus: Raised Bevel1 Gradient Vertical
+window.title.unfocus.color: #4c4c4c
+window.title.unfocus.colorTo: #414141
+
+window.button.pressed: Sunken Bevel1 Gradient Diagonal
+window.button.pressed.color: #484848
+window.button.pressed.colorTo: #73787e
+
+window.frame.focusColor: #73787e
+window.frame.unfocusColor: #62666b
+handleWidth: 4
+frameWidth: 1
+bevelWidth: 1
+borderWidth: 1
+borderColor: #000000
+
+! ***** bbpager *****
+bbpager.frame: raised solid
+ bbpager.frame.color: #484848
+
+bbpager.desktop: sunken Gradient Vertical bevel1
+ bbpager.desktop.color: #4c4c4c
+ bbpager.desktop.colorTo: #4a4a4a
+
+bbpager.desktop.focus: raised solid
+ bbpager.desktop.focus.color: #4c4c4c
+
+bbpager.window: raised gradient vertical
+ bbpager.window.color: #4c4c4c
+ bbpager.window.colorTo: #414141
+
+bbpager.window.focus: sunken gradient vertical bevel2
+ bbpager.window.focus.color: #aab0b9
+ bbpager.window.focus.colorTo: #73787e
+
+bbpager.desktop.focusStyle: border
+bbpager.active.window.borderColor: #202020
+bbpager.inactive.window.borderColor: #000000
+bbpager.active.desktop.borderColor: #73787e
+
--- /dev/null
+toolbar: flat diagonal gradient
+toolbar.color: rgb:6/9/c
+toolbar.colorTo: rgb:4/6/8
+toolbar.button: flat diagonal gradient
+toolbar.button.color: rgb:3/48/6
+toolbar.button.colorTo: rgb:5/78/a
+toolbar.button.picColor: rgb:1/18/2
+toolbar.button.pressed: flat crossdiagonal gradient
+toolbar.button.pressed.color: grey40
+toolbar.button.pressed.colorTo: grey20
+toolbar.label: flat crossdiagonal gradient
+toolbar.label.color: grey40
+toolbar.label.colorTo: grey20
+toolbar.label.textColor: grey85
+toolbar.windowLabel: flat crossdiagonal gradient
+toolbar.windowLabel.color: grey40
+toolbar.windowLabel.colorTo: grey20
+toolbar.windowLabel.textColor: grey85
+toolbar.clock: flat crossdiagonal gradient
+toolbar.clock.color: grey40
+toolbar.clock.colorTo: grey20
+toolbar.clock.textColor: grey85
+toolbar.justify: right
+toolbar.font: lucidasans-10
+
+menu.title: flat crossdiagonal gradient
+menu.title.color: rgb:6/9/c
+menu.title.colorTo: rgb:3/48/6
+menu.title.textColor: white
+menu.title.font: lucidasans-10
+menu.title.justify: right
+
+menu.frame: flat crossdiagonal gradient
+menu.frame.color: grey40
+menu.frame.colorTo: grey20
+menu.frame.textColor: grey85
+menu.frame.disableColor: rgb:4/4/38
+menu.frame.font: lucidasans-10
+menu.frame.justify: center
+
+menu.bullet.position: right
+menu.bullet: triangle
+
+menu.hilite: flat crossdiagonal gradient
+menu.hilite.color: rgb:6/9/c
+menu.hilite.colorTo: rgb:3/48/6
+menu.hilite.textColor: white
+
+window.title.focus: flat diagonal gradient
+window.title.focus.color: rgb:6/9/c
+window.title.focus.colorTo: rgb:4/6/8
+window.title.unfocus: flat solid
+window.title.unfocus.color: grey30
+
+window.label.focus: flat crossdiagonal gradient
+window.label.focus.color: grey40
+window.label.focus.colorTo: grey20
+window.label.focus.textColor: white
+window.label.unfocus: flat crossdiagonal gradient
+window.label.unfocus.color: grey30
+window.label.unfocus.colorTo: grey20
+window.label.unfocus.textColor: grey60
+
+window.button.focus: flat diagonal gradient
+window.button.focus.color: rgb:4/6/8
+window.button.focus.colorTo: rgb:5/78/a
+window.button.focus.picColor: rgb:1/18/2
+window.button.unfocus: flat solid
+window.button.unfocus.color: grey30
+window.button.unfocus.picColor: grey20
+window.button.pressed: flat crossdiagonal gradient
+window.button.pressed.color: grey40
+window.button.pressed.colorTo: grey20
+
+window.handle.focus: flat crossdiagonal gradient
+window.handle.focus.color: rgb:6/9/c
+window.handle.focus.colorTo: rgb:3/48/6
+window.handle.unfocus: flat solid
+window.handle.unfocus.color: grey30
+
+window.grip.focus: flat crossdiagonal gradient
+window.grip.focus.color: grey40
+window.grip.focus.colorTo: grey20
+window.grip.unfocus: flat crossdiagonal gradient
+window.grip.unfocus.color: grey30
+window.grip.unfocus.colorTo: grey20
+
+window.frame.focusColor: rgb:6/9/c
+window.frame.unfocusColor: grey30
+
+window.font: lucidasans-10
+window.justify: right
+
+borderColor: grey10
+
+bevelWidth: 1
+borderWidth: 2
+handleWidth: 4
+
+*textColor: grey85
+*Font: lucidasans-10
+
+rootCommand: bsetroot -solid grey20
--- /dev/null
+! Miscellaneous settings...
+style.name: nyzclone
+style.author: miklos
+style.date: March 3, 2002
+style.credits: nyz's moving_targets.png
+style.comments: (kyle) miklos, clone nyz's theme for me.\
+ \
+
+
+
+rootCommand: bsetbg -solid '#385070'
+
+! Toolbar settings...
+toolbar.button: Flat Solid
+toolbar.button.color: #c8c8c8
+toolbar.button.picColor: #000000
+
+toolbar.button.pressed: Sunken Bevel1 Solid
+toolbar.button.pressed.color: #c8c8c8
+
+toolbar.label: Flat Solid
+toolbar.label.color: #c8c8c8
+toolbar.label.textColor: #000000
+
+toolbar.windowLabel: Flat Solid
+toolbar.windowLabel.color: #506c90
+toolbar.windowLabel.textColor: #ffffff
+
+toolbar.clock: Flat Solid
+toolbar.clock.color: #c8c8c8
+toolbar.clock.textColor: #000000
+
+toolbar: Raised Bevel1 Solid
+toolbar.color: #c8c8c8
+toolbar.textColor: #ffffff
+!toolbar.font: lime
+toolbar.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+toolbar.justify: Center
+
+
+! Menu settings...
+menu.frame: Raised Bevel1 Solid
+menu.frame.color: #c8c8c8
+menu.frame.textColor: #000000
+!menu.frame.font: lime
+menu.frame.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.frame.justify: Center
+
+menu.title: Raised Bevel1 Solid
+menu.title.color: #506c90
+menu.title.textColor: #ffffff
+!menu.title.font: lime
+menu.title.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.title.justify: Center
+
+menu.hilite: Flat Solid
+menu.hilite.color: #506890
+menu.hilite.textColor: #ffffff
+
+menu.bullet: Empty
+menu.bullet.position: Right
+menu.frame.disableColor: #ffffff
+
+! Window settings...
+window.button.focus: Flat Solid
+window.button.focus.color: #506c90
+window.button.focus.picColor: #ffffff
+
+window.button.unfocus: Flat Solid
+window.button.unfocus.color: #c8c8c8
+window.button.unfocus.picColor: #787c78
+
+window.grip.focus: Raised Bevel1 Solid
+window.grip.focus.color: #506890
+
+window.grip.unfocus: Raised Bevel1 Solid
+window.grip.unfocus.color: #c8c8c8
+
+window.handle.focus: Raised Bevel1 Solid
+window.handle.focus.color: #506890
+
+window.handle.unfocus: Raised Bevel1 Solid
+window.handle.unfocus.color: #c8c8c8
+
+window.label.focus: Flat Solid
+window.label.focus.color: #506890
+window.label.focus.textColor: #ffffff
+!window.label.focus.font: lime
+window.label.focus.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+window.label.focus.justify: Center
+
+!window.font: lime
+window.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+window.justify: Center
+window.label.unfocus: Flat Solid
+window.label.unfocus.color: #c8c8c8
+window.label.unfocus.textColor: #787c78
+
+window.title.focus: Raised Bevel1 Solid
+window.title.focus.color: #506890
+
+window.title.unfocus: Raised Bevel1 Solid
+window.title.unfocus.color: #c8c8c8
+
+window.button.pressed: Sunken Bevel1 Gradient Diagonal
+window.button.pressed.color: #506890
+window.button.pressed.colorTo: #a0a0a0
+
+window.frame.focusColor: #ffffff
+window.frame.unfocusColor: #202428
+handleWidth: 5
+frameWidth: 0
+bevelWidth: 1
+borderWidth: 1
+borderColor: #000000
+! ***** bbpager *****
+bbpager.frame: raised solid bevel1
+ bbpager.frame.color: #c8c8c8
+
+bbpager.desktop: sunken solid bevel1
+ bbpager.desktop.color: #385070
+
+bbpager.desktop.focus: raised solid
+ bbpager.desktop.focus.color: #486890
+
+bbpager.window: raised solid
+ bbpager.window.color: #c8c8c8
+
+bbpager.window.focus: raised solid
+ bbpager.window.focus.color: #486890
+
+bbpager.desktop.focusStyle: border
+bbpager.active.window.borderColor: #202020
+bbpager.inactive.window.borderColor: #202020
+bbpager.active.desktop.borderColor: #ffffff
+
--- /dev/null
+toolbar: flat crossdiagonal gradient
+toolbar.color: rgb:6/9/c
+toolbar.colorTo: rgb:4/6/8
+toolbar.button: parentrelative
+toolbar.button.picColor: grey85
+toolbar.button.pressed: flat crossdiagonal gradient
+toolbar.button.pressed.color: grey50
+toolbar.button.pressed.colorTo: grey80
+toolbar.label: parentrelative
+toolbar.label.textColor: grey85
+toolbar.windowLabel: parentrelative
+toolbar.windowLabel.textColor: grey85
+toolbar.clock: parentrelative
+toolbar.clock.textColor: grey85
+toolbar.justify: right
+toolbar.font: lucidasans-10
+
+menu.title: flat crossdiagonal gradient
+menu.title.color: rgb:6/9/c
+menu.title.colorTo: rgb:3/48/6
+menu.title.textColor: white
+menu.title.font: lucidasans-10
+menu.title.justify: right
+
+menu.frame: flat crossdiagonal gradient
+menu.frame.color: grey50
+menu.frame.colorTo: grey80
+menu.frame.textColor: grey20
+menu.frame.disableColor: grey40
+menu.frame.font: lucidasans-10
+menu.frame.justify: center
+
+menu.bullet.position: right
+menu.bullet: triangle
+
+menu.hilite: flat crossdiagonal gradient
+menu.hilite.color: rgb:6/9/c
+menu.hilite.colorTo: rgb:3/48/6
+menu.hilite.textColor: white
+
+window.title.focus: flat crossdiagonal gradient
+window.title.focus.color: rgb:6/9/c
+window.title.focus.colorTo: rgb:3/48/6
+window.title.unfocus: flat diagonal gradient
+window.title.unfocus.color: grey50
+window.title.unfocus.colorTo: grey20
+
+window.label.focus: parentrelative
+window.label.focus.textColor: white
+window.label.unfocus: parentrelative
+window.label.unfocus.textColor: grey60
+
+window.button.focus: parentrelative
+window.button.focus.picColor: grey85
+window.button.unfocus: parentrelative
+window.button.unfocus.picColor: grey60
+window.button.pressed: flat crossdiagonal gradient
+window.button.pressed.color: grey50
+window.button.pressed.colorTo: grey80
+
+window.handle.focus: flat crossdiagonal gradient
+window.handle.focus.color: rgb:6/9/c
+window.handle.focus.colorTo: rgb:3/48/6
+window.handle.unfocus: flat diagonal gradient
+window.handle.unfocus.color: grey50
+window.handle.unfocus.colorTo: grey20
+
+window.grip.focus: parentrelative
+window.grip.unfocus: parentrelative
+
+window.frame.focusColor: rgb:6/9/c
+window.frame.unfocusColor: grey50
+
+window.font: lucidasans-10
+window.justify: right
+
+borderColor: rgb:2/3/4
+
+bevelWidth: 1
+borderWidth: 1
+handleWidth: 4
+
+*textColor: grey85
+*Font: lucidasans-10
+
+rootCommand: bsetroot -gradient flatcrossdiagonalgradient -from rgb:4/6/8 -to rgb:3/48/6
+
+bbpager.desktop.focus: flat interlaced crossdiagonal gradient
+bbpager.desktop.focus.color: rgb:6/9/c
+bbpager.desktop.focus.colorTo: rgb:3/48/6
+
--- /dev/null
+toolbar: raised diagonal gradient bevel1
+toolbar.color: rgb:7/8/8
+toolbar.colorTo: grey20
+
+toolbar.button: raised diagonal gradient bevel1
+toolbar.button.color: grey
+toolbar.button.colorTo: grey20
+toolbar.button.picColor: black
+toolbar.button.pressed: sunken diagonal interlaced gradient bevel1
+toolbar.button.pressed.color: rgb:38/4/4
+toolbar.button.pressed.colorTo: rgb:d/f/f
+
+toolbar.label: flat interlaced diagonal gradient
+toolbar.label.color: grey20
+toolbar.label.colorTo: rgb:7/8/8
+toolbar.label.textColor: grey85
+
+toolbar.windowLabel: flat interlaced diagonal gradient
+toolbar.windowLabel.color: grey20
+toolbar.windowLabel.colorTo: rgb:7/8/8
+toolbar.windowLabel.textColor: grey85
+
+toolbar.clock: flat interlaced diagonal gradient
+toolbar.clock.color: grey20
+toolbar.clock.colorTo: rgb:7/8/8
+toolbar.clock.textColor: grey85
+
+toolbar.justify: center
+toolbar.font: lucidasans-bold-10
+
+menu.title: raised diagonal interlaced gradient bevel1
+menu.title.color: grey20
+menu.title.colorTo: rgb:7/8/8
+menu.title.textColor: grey85
+menu.title.font: lucidasans-bold-10
+menu.title.justify: center
+
+menu.frame: raised diagonal gradient bevel1
+menu.frame.color: rgb:7/8/8
+menu.frame.colorTo: grey10
+menu.frame.textColor: white
+menu.frame.disableColor: rgb:38/4/4
+menu.frame.font: lucidasans-10
+menu.frame.justify: center
+
+menu.bullet: triangle
+menu.bullet.position: right
+
+menu.hilite: raised diagonal gradient bevel1
+menu.hilite.color: grey60
+menu.hilite.colorTo: white
+menu.hilite.textColor: grey20
+
+window.title.focus: raised diagonal gradient bevel1
+window.title.focus.color: rgb:7/8/8
+window.title.focus.colorTo: grey20
+window.title.unfocus: raised diagonal gradient bevel1
+window.title.unfocus.color: rgb:54/6/6
+window.title.unfocus.colorTo: grey20
+
+window.label.focus: interlaced sunken diagonal gradient bevel1
+window.label.focus.color: grey20
+window.label.focus.colorTo: grey
+window.label.focus.textColor: white
+window.label.unfocus: interlaced flat gradient
+window.label.unfocus.color: grey20
+window.label.unfocus.colorTo: rgb:54/6/6
+window.label.unfocus.textColor: grey
+
+window.handle.focus: raised diagonal gradient bevel1
+window.handle.focus.color: rgb:7/8/8
+window.handle.focus.colorTo: grey20
+window.handle.unfocus: raised diagonal gradient bevel1
+window.handle.unfocus.color: rgb:54/6/6
+window.handle.unfocus.colorTo: grey20
+
+window.grip.focus: raised diagonal gradient bevel1
+window.grip.focus.color: grey
+window.grip.focus.colorTo: grey20
+window.grip.unfocus: sunken diagonal gradient bevel1
+window.grip.unfocus.color: grey20
+window.grip.unfocus.colorTo: grey
+
+
+window.button.focus: raised diagonal gradient bevel1
+window.button.focus.color: grey
+window.button.focus.colorTo: grey20
+window.button.focus.picColor: black
+window.button.unfocus: sunken diagonal gradient bevel1
+window.button.unfocus.color: grey20
+window.button.unfocus.colorTo: grey
+window.button.unfocus.picColor: grey40
+window.button.pressed: flat diagonal interlaced gradient
+window.button.pressed.color: rgb:38/4/4
+window.button.pressed.colorTo: rgb:d/f/f
+
+window.frame.focusColor: grey85
+window.frame.unfocusColor: rgb:54/6/6
+
+window.font: lucidasans-bold-10
+window.justify: center
+
+! misc...
+borderColor: rgb:1c/2/2
+
+borderWidth: 1
+bevelWidth: 2
+handleWidth: 4
+
+rootCommand: bsetroot -mod 4 4 -fg rgb:54/6/6 -bg grey20
+
+! for the bbtools
+menuFont: lucidasans-10
+titleFont: lucidasans-bold-10
--- /dev/null
+toolbar: flat solid
+toolbar.color: rgb:6/6/6
+toolbar.button: flat solid
+toolbar.button.color: rgb:6/6/6
+toolbar.button.picColor: rgb:2/2/2
+toolbar.label: flat crossdiagonal gradient
+toolbar.label.color: rgb:8/8/7
+toolbar.label.colorTo: rgb:f/f/d
+toolbar.label.textColor: rgb:2/2/1c
+toolbar.windowLabel: flat crossdiagonal gradient
+toolbar.windowLabel.color: rgb:8/8/7
+toolbar.windowLabel.colorTo: rgb:f/f/d
+toolbar.windowLabel.textColor: rgb:2/2/1c
+toolbar.clock: flat crossdiagonal gradient
+toolbar.clock.color: rgb:8/8/7
+toolbar.clock.colorTo: rgb:f/f/d
+toolbar.clock.textColor: rgb:2/2/1c
+toolbar.justify: right
+toolbar.font: lucidasans-10
+
+menu.title: flat crossdiagonal gradient
+menu.title.color: rgb:8/8/7
+menu.title.colorTo: rgb:f/f/d
+menu.title.textColor: rgb:2/2/1c
+menu.title.font: lucidasans-10
+menu.title.justify: right
+
+menu.frame: flat solid
+menu.frame.color: rgb:6/6/6
+menu.frame.textColor: grey85
+menu.frame.disableColor: rgb:4/4/4
+menu.frame.font: lucidasans-10
+menu.frame.justify: center
+
+menu.bullet.position: right
+menu.bullet: triangle
+
+menu.hilite: flat solid
+menu.hilite.color: rgb:4/4/4
+menu.hilite.textColor: white
+
+window.title.focus: flat solid
+window.title.focus.color: rgb:6/6/6
+window.title.unfocus: flat solid
+window.title.unfocus.color: rgb:4/4/4
+
+window.label.focus: flat crossdiagonal gradient
+window.label.focus.color: rgb:8/8/7
+window.label.focus.colorTo: rgb:f/f/d
+window.label.focus.textColor: rgb:2/2/1c
+window.label.unfocus: flat solid
+window.label.unfocus.color: rgb:4/4/4
+window.label.unfocus.textColor: rgb:2/2/2
+
+window.button.focus: flat solid
+window.button.focus.color: rgb:6/6/6
+window.button.focus.picColor: rgb:2/2/2
+window.button.unfocus: flat solid
+window.button.unfocus.color: rgb:4/4/4
+window.button.unfocus.picColor: rgb:2/2/2
+
+window.handle.focus: flat crossdiagonal gradient
+window.handle.focus.color: rgb:8/8/7
+window.handle.focus.colorTo: rgb:f/f/d
+window.handle.unfocus: flat solid
+window.handle.unfocus.color: rgb:4/4/4
+
+window.grip.focus: flat solid
+window.grip.focus.color: rgb:8/8/8
+window.grip.unfocus: flat solid
+window.grip.unfocus.color: rgb:4/4/4
+
+window.frame.focusColor: rgb:f/f/d
+window.frame.unfocusColor: rgb:6/6/6
+
+window.font: lucidasans-10
+window.justify: right
+
+*button.pressed: flat solid
+*button.pressed.color: rgb:a/a/8c
+
+borderColor: rgb:2/2/2
+
+bevelWidth: 2
+borderWidth: 2
+handleWidth: 3
+
+*textColor: grey20
+*Font: lucidasans-10
+
+rootCommand: bsetroot -solid rgb:4/4/4
--- /dev/null
+! Miscellaneous settings...
+style.name: steelblue
+style.author: miklos
+style.date: Feb 3, 2002
+style.credits:
+style.comments: I prefer the font "luxus.pcf" to be used with this style.
+
+
+!rootCommand: bsetbg -solid "#3c5979"
+rootCommand: bsetbg -mod 4 4 -to "#44668a" -from "#7788bb"
+
+! Toolbar settings...
+toolbar.button: Flat Solid PipeCross
+toolbar.button.color: #44668a
+toolbar.button.colorTo: #ffffff
+toolbar.button.picColor: #ffffff
+
+toolbar.button.pressed: Sunken Bevel1 Solid Diagonal
+toolbar.button.pressed.color: #3c5979
+toolbar.button.pressed.colorTo: #ffffff
+
+toolbar.label: Sunken Bevel1 Gradient Rectangle
+toolbar.label.color: #44668a
+toolbar.label.colorTo: #3c5979
+toolbar.label.textColor: #d1d9e5
+
+toolbar.windowLabel: Sunken Bevel1 Gradient Rectangle
+toolbar.windowLabel.color: #5e8dbf
+toolbar.windowLabel.colorTo: #3c5979
+toolbar.windowLabel.textColor: #e9f2ff
+
+toolbar.clock: Sunken Bevel1 Gradient Rectangle
+toolbar.clock.color: #44668a
+toolbar.clock.colorTo: #3c5979
+toolbar.clock.textColor: #d1d9e5
+
+toolbar: Raised Bevel1 Solid Horizontal
+toolbar.color: #44668a
+toolbar.colorTo: #ffffff
+toolbar.textColor: #ffffff
+!toolbar.font: luxus*
+toolbar.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+toolbar.justify: Center
+
+
+! Menu settings...
+menu.frame: Raised Bevel1 Gradient Elliptic
+menu.frame.color: #44668a
+menu.frame.colorTo: #44668a
+menu.frame.textColor: #d1d9e5
+!menu.frame.font: luxus
+menu.frame.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.frame.justify: Right
+
+menu.title: Sunken Bevel2 Gradient Elliptic
+menu.title.color: #5e8dbf
+menu.title.colorTo: #3c5979
+menu.title.textColor: #d7e0ee
+!menu.title.font: luxus
+menu.title.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.title.justify: Center
+
+menu.hilite: Sunken Bevel1 Gradient Elliptic
+menu.hilite.color: #3c5979
+menu.hilite.colorTo: #5e8dbf
+menu.hilite.textColor: #ffffff
+
+menu.bullet: Triangle
+menu.bullet.position: Right
+menu.frame.disableColor: #ffffff
+
+! Window settings...
+window.button.focus: Flat Solid Horizontal
+window.button.focus.color: #44668a
+window.button.focus.colorTo: #ffffff
+window.button.focus.picColor: #ffffff
+
+window.button.unfocus: Flat Solid Horizontal
+window.button.unfocus.color: #3c5979
+window.button.unfocus.colorTo: #ffffff
+window.button.unfocus.picColor: #44668a
+
+window.grip.focus: Raised Bevel1 Solid PipeCross
+window.grip.focus.color: #5e8dbf
+window.grip.focus.colorTo: #ffffff
+
+window.grip.unfocus: Raised Bevel1 Solid Pyramid
+window.grip.unfocus.color: #3c5979
+window.grip.unfocus.colorTo: #ffffff
+
+window.handle.focus: Raised Bevel1 Solid Pyramid
+window.handle.focus.color: #44668a
+window.handle.focus.colorTo: #ffffff
+
+window.handle.unfocus: Raised Bevel1 Solid Pyramid
+window.handle.unfocus.color: #3c5979
+window.handle.unfocus.colorTo: #ffffff
+
+window.label.focus: Sunken Bevel1 Gradient Rectangle
+window.label.focus.color: #5e8dbf
+window.label.focus.colorTo: #3c5979
+window.label.focus.textColor: #e6f0ff
+!window.label.focus.font: luxus
+window.label.focus.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+window.label.focus.justify: Center
+
+!window.font: luxus
+window.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+window.justify: Center
+window.label.unfocus: Sunken Bevel1 Gradient Rectangle
+window.label.unfocus.color: #44668a
+window.label.unfocus.colorTo: #3c5979
+window.label.unfocus.textColor: #5077a1
+
+window.title.focus: Raised Bevel1 Solid Diagonal
+window.title.focus.color: #44668a
+window.title.focus.colorTo: #ffffff
+
+window.title.unfocus: Raised Bevel1 Solid Diagonal
+window.title.unfocus.color: #3c5979
+window.title.unfocus.colorTo: #ffffff
+
+window.button.pressed: Sunken Bevel1 Solid Diagonal
+window.button.pressed.color: #484848
+window.button.pressed.colorTo: #ffffff
+
+window.frame.focusColor: #63707f
+window.frame.unfocusColor: #5e6166
+handleWidth: 4
+frameWidth: 0
+bevelWidth: 0
+borderWidth: 1
+borderColor: #000000
+
--- /dev/null
+style.name: steelblue2
+style.author: miklos
+style.date: Feb 28, 2002
+style.credits:
+style.comments: The return of \
+ steelblue
+
+
+rootCommand: bsetbg -solid "#6e7a8a"
+
+! Toolbar settings...
+toolbar.button: Flat Gradient Vertical
+toolbar.button.color: #6e7a8a
+toolbar.button.colorTo: #555f6b
+toolbar.button.picColor: #ffffff
+
+toolbar.button.pressed: Sunken Bevel1 Gradient Diagonal
+toolbar.button.pressed.color: #6e7b8b
+toolbar.button.pressed.colorTo: #8fa0b5
+
+toolbar.label: Sunken Bevel1 Gradient Diagonal
+toolbar.label.color: #6e7b8b
+toolbar.label.colorTo: #555f6b
+toolbar.label.textColor: #d1d9e5
+
+toolbar.windowLabel: Sunken Bevel1 Gradient Diagonal
+toolbar.windowLabel.color: #8fa0b5
+toolbar.windowLabel.colorTo: #555f6b
+toolbar.windowLabel.textColor: #e9f2ff
+
+toolbar.clock: Sunken Bevel1 Gradient Diagonal
+toolbar.clock.color: #6e7b8b
+toolbar.clock.colorTo: #555f6b
+toolbar.clock.textColor: #d1d9e5
+
+toolbar: Raised Bevel1 Gradient Vertical
+toolbar.color: #6e7b8b
+toolbar.colorTo: #555f6b
+toolbar.textColor: #ffffff
+!toolbar.font: lime
+toolbar.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+toolbar.justify: Left
+
+
+! Menu settings...
+menu.frame: Sunken Bevel2 Gradient Diagonal
+menu.frame.color: #8fa0b5
+menu.frame.colorTo: #6e7b8b
+menu.frame.textColor: #ffffff
+!menu.frame.font: lime
+menu.frame.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.frame.justify: Right
+
+menu.title: Raised Bevel1 Gradient Diagonal
+menu.title.color: #6e7b8b
+menu.title.colorTo: #555f6b
+menu.title.textColor: #d7e0ee
+!menu.title.font: lime
+menu.title.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.title.justify: Center
+
+menu.hilite: Raised Bevel1 Gradient Diagonal
+menu.hilite.color: #6e7b8b
+menu.hilite.colorTo: #555f6b
+menu.hilite.textColor: #ffffff
+
+menu.bullet: Empty
+menu.bullet.position: Right
+menu.frame.disableColor: #ffffff
+
+! Window settings...
+window.button.focus: Flat Gradient CrossDiagonal
+window.button.focus.color: #6e7b8b
+window.button.focus.colorTo: #555f6b
+window.button.focus.picColor: #ddeeff
+
+window.button.unfocus: Flat Gradient Vertical
+window.button.unfocus.color: #6e7b8b
+window.button.unfocus.colorTo: #555f6b
+window.button.unfocus.picColor: #748293
+
+window.grip.focus: Raised Bevel1 Gradient Diagonal
+window.grip.focus.color: #8fa0b5
+window.grip.focus.colorTo: #6e7b8b
+
+window.grip.unfocus: Raised Bevel1 Gradient Diagonal
+window.grip.unfocus.color: #6e7b8b
+window.grip.unfocus.colorTo: #555f6b
+
+window.handle.focus: Raised Bevel1 Gradient Diagonal
+window.handle.focus.color: #6e7b8b
+window.handle.focus.colorTo: #555f6b
+
+window.handle.unfocus: Raised Bevel1 Gradient Diagonal
+window.handle.unfocus.color: #6e7b8b
+window.handle.unfocus.colorTo: #555f6b
+
+window.label.focus: Sunken Bevel1 Gradient Diagonal
+window.label.focus.color: #8fa0b5
+window.label.focus.colorTo: #555f6b
+window.label.focus.textColor: #e6f0ff
+!window.label.focus.font: lime
+window.label.focus.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+window.label.focus.justify: Left
+
+!window.font: lime
+window.font: -schumacher-clean-medium-r-*-*-*-100-*-*-*-*-*-*
+window.justify: Left
+window.label.unfocus: Sunken Bevel1 Gradient Diagonal
+window.label.unfocus.color: #6e7b8b
+window.label.unfocus.colorTo: #555f6b
+window.label.unfocus.textColor: #748293
+
+window.title.focus: Raised Bevel1 Gradient Vertical
+window.title.focus.color: #6e7b8b
+window.title.focus.colorTo: #555f6b
+
+window.title.unfocus: Raised Bevel1 Gradient Vertical
+window.title.unfocus.color: #6e7b8b
+window.title.unfocus.colorTo: #555f6b
+
+window.button.pressed: Sunken Bevel1 Gradient Diagonal
+window.button.pressed.color: #6e7b8b
+window.button.pressed.colorTo: #8fa0b5
+
+window.frame.focusColor: #ffffff
+window.frame.unfocusColor: #555f6b
+handleWidth: 4
+frameWidth: 0
+bevelWidth: 1
+borderWidth: 1
+borderColor: #000000
+
--- /dev/null
+! Title: the_orange
+! By: thread
+! Email: thread@threadbox.net
+! Website: http://www.threadbox.net/
+! Comment: AAAAHAHAHAHAHAHHAHAHHAHAAHAHHH!!#%#!$
+
+
+toolbar.button: parentrelative
+toolbar.button.pressed: flat horizontal gradient
+toolbar.button.pressed.color: #636363
+toolbar.button.pressed.colorTo: #898989
+toolbar.label: parentrelative
+toolbar.label.textColor: #000000
+toolbar.windowLabel: parentrelative
+toolbar.windowLabel.textColor: #000000
+toolbar.clock: parentrelative
+toolbar.clock.textColor: #000000
+toolbar: Flat Gradient Vertical
+toolbar.color: #898989
+toolbar.colorTo: #6d6d6d
+toolbar.textColor: #000000
+toolbar.justify: Center
+
+
+menu.title: flat gradient diagonal
+ menu.title.color: #d6753d
+ menu.title.colorTo: #8b3d10
+ menu.title.textColor: black
+
+menu.frame: flat gradient diagonal
+ menu.frame.color: #898989
+ menu.frame.colorTo: #6d6d6d
+ menu.frame.textColor: black
+
+menu.hilite: flat gradient diagonal
+ menu.hilite.color: #8b3d10
+ menu.hilite.colorTo: #d6753d
+ menu.hilite.textColor: #000000
+
+menu.bullet: empty
+ menu.bullet.position: left
+
+
+
+window.title.focus: flat gradient vertical
+ window.title.focus.color: #d6753d
+ window.title.focus.colorTo: #8b3d10
+window.title.unfocus: flat gradient vertical
+ window.title.unfocus.color: #898989
+ window.title.unfocus.colorTo: #6d6d6d
+
+window.label.focus: parentrelative
+ window.label.focus.textColor: black
+window.label.unfocus: parentrelative
+ window.label.unfocus.textColor: black
+
+window.button.focus: parentrelative
+ window.button.focus.picColor: black
+window.button.unfocus: parentrelative
+ window.button.unfocus.picColor: black
+window.button.pressed: flat gradient vertical
+ window.button.pressed.color: #8b3d10
+ window.button.pressed.colorTo: #d6753d
+
+window.handle.focus: flat gradient vertical
+ window.handle.focus.color: #606060
+ window.handle.focus.colorTo: #303030
+window.handle.unfocus: flat gradient vertical
+ window.handle.unfocus.color: #505050
+ window.handle.unfocus.colorTo: #202020
+
+window.grip.focus: flat gradient vertical
+ window.grip.focus.color: #d6753d
+ window.grip.focus.colorTo: #8b3d10
+window.grip.unfocus: flat gradient vertical
+ window.grip.unfocus.color: #898989
+ window.grip.unfocus.colorTo: #6d6d6d
+
+
+borderColor: black
+
+frameWidth: 0
+bevelWidth: 1
+borderWidth: 1
+handleWidth: 4
+
+*justify: center
+
+
+
+rootCommand: bsetroot -solid rgb:40/40/40
+!more readable, doesn't as well
+!*Font: mints-mild
+
+!less readable, fits more
+!*Font: mints-strong
+
+*Font: -b&h-lucidatypewriter-medium-r-*-*-*-100-*-*-*-*-*-*
--- /dev/null
+style.name: trisb
+style.author: miklos
+style.date: March 25, 2002
+style.credits:
+style.comments:
+
+
+rootCommand: bsetbg -solid "#4b4b4b"
+
+! Toolbar settings...
+toolbar.button: Flat Gradient Vertical
+toolbar.button.color: #d5d5d5
+toolbar.button.colorTo: #b4b4b4
+toolbar.button.picColor: #343434
+
+toolbar.button.pressed: Sunken Bevel1 Solid Vertical
+toolbar.button.pressed.color: #c8c8c8
+toolbar.button.pressed.colorTo: #ffffff
+
+toolbar.label: Flat Gradient Vertical
+toolbar.label.color: #d5d5d5
+toolbar.label.colorTo: #b4b4b4
+toolbar.label.textColor: #343434
+
+toolbar.windowLabel: Flat Gradient Vertical
+toolbar.windowLabel.color: #d5d5d5
+toolbar.windowLabel.colorTo: #b4b4b4
+toolbar.windowLabel.textColor: #343434
+
+toolbar.clock: Flat Gradient Vertical
+toolbar.clock.color: #d5d5d5
+toolbar.clock.colorTo: #b4b4b4
+toolbar.clock.textColor: #343434
+
+toolbar: Flat Gradient Vertical
+toolbar.color: #d5d5d5
+toolbar.colorTo: #b4b4b4
+toolbar.textColor: #ffffff
+!toolbar.font: mints-strong
+toolbar.font: -adobe-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*
+toolbar.justify: Center
+
+
+! Menu settings...
+menu.frame: Flat Gradient CrossDiagonal
+menu.frame.color: #d5d5d5
+menu.frame.colorTo: #b4b4b4
+menu.frame.textColor: #343434
+!menu.frame.font: mints-strong
+menu.frame.font: -adobe-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.frame.justify: Right
+
+menu.title: Flat Gradient Vertical
+menu.title.color: #8e8e8e
+menu.title.colorTo: #5f5f5f
+menu.title.textColor: #c8c8c8
+!menu.title.font: mints-strong
+menu.title.font: -adobe-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*
+menu.title.justify: Center
+
+menu.hilite: Flat Gradient Vertical
+menu.hilite.color: #3b90dc
+menu.hilite.colorTo: #2c5f8c
+menu.hilite.textColor: #8efdff
+
+menu.bullet: Triangle
+menu.bullet.position: Right
+menu.frame.disableColor: #ffffff
+
+! Window settings...
+window.button.focus: Flat Gradient Vertical
+window.button.focus.color: #3b90dc
+window.button.focus.colorTo: #2c5f8c
+window.button.focus.picColor: #8efdff
+
+window.button.unfocus: Flat Gradient Vertical
+window.button.unfocus.color: #8e8e8e
+window.button.unfocus.colorTo: #5f5f5f
+window.button.unfocus.picColor: #aaaaaa
+
+window.grip.focus: Flat Solid Vertical
+window.grip.focus.color: #3b90dc
+window.grip.focus.colorto: #2c5f8c
+
+window.grip.unfocus: Flat Gradient Vertical
+window.grip.unfocus.color: #8e8e8e
+window.grip.unfocus.colorTo: #5f5f5f
+
+window.handle.focus: Flat Gradient Vertical
+window.handle.focus.color: #3b90dc
+window.handle.focus.colorTo: #2c5f8c
+
+window.handle.unfocus: Flat Gradient Vertical
+window.handle.unfocus.color: #7a7a7a
+window.handle.unfocus.colorTo: #555555
+
+window.label.focus: Flat Gradient Vertical
+window.label.focus.color: #3b90dc
+window.label.focus.colorTo: #2c5f8c
+window.label.focus.textColor: #8efdff
+!window.label.focus.font: mints-strong
+window.label.focus.font: -adobe-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*
+window.label.focus.justify: Center
+
+!window.font: mints-strong
+window.font: -adobe-helvetica-medium-r-*-*-*-100-*-*-*-*-*-*
+window.justify: Center
+window.label.unfocus: Flat Gradient Vertical
+window.label.unfocus.color: #8e8e8e
+window.label.unfocus.colorTo: #5f5f5f
+window.label.unfocus.textColor: #aaaaaa
+
+window.title.focus: Flat Gradient Vertical
+window.title.focus.color: #3b90dc
+window.title.focus.colorTo: #2c5f8c
+
+window.title.unfocus: Flat Gradient Vertical
+window.title.unfocus.color: #8e8e8e
+window.title.unfocus.colorTo: #5f5f5f
+
+window.button.pressed: Sunken Bevel1 Solid Vertical
+window.button.pressed.color: #3b90dc
+
+window.frame.focusColor: #343434
+window.frame.unfocusColor: #000000
+handleWidth: 3
+frameWidth: 0
+bevelWidth: 1
+borderWidth: 1
+borderColor: #121212
+
+bbpager.frame: flat solid
+ bbpager.frame.color: #4b4b4b
+
+bbpager.desktop: sunken solid
+ bbpager.desktop.color: #4b4b4b
+
+bbpager.desktop.focus: raised solid
+ bbpager.desktop.focus.color: #ffffff
+
+bbpager.window.focus: raised gradient vertical
+ bbpager.window.focus.color: #3b90dc
+ bbpager.window.focus.colorTo: #2c5f8c
+
+bbpager.window: flat gradient vertical
+ bbpager.window.color: #8e8e8e
+ bbpager.window.colorTo: #5f5f5f
+
+bbpager.desktop.focusStyle: border
+bbpager.active.window.borderColor: #202020
+bbpager.inactive.window.borderColor: #000000
+bbpager.active.desktop.borderColor: #73787e
+
--- /dev/null
+toolbar: flat diagonal gradient
+toolbar.color: rgb:c/6/6
+toolbar.colorTo: rgb:8/4/4
+toolbar.button: flat diagonal gradient
+toolbar.button.color: rgb:6/3/3
+toolbar.button.colorTo: rgb:a/5/5
+toolbar.button.picColor: rgb:4/2/2
+toolbar.button.pressed: flat crossdiagonal gradient
+toolbar.button.pressed.color: grey40
+toolbar.button.pressed.colorTo: grey20
+toolbar.label: flat crossdiagonal gradient
+toolbar.label.color: grey40
+toolbar.label.colorTo: grey20
+toolbar.label.textColor: grey85
+toolbar.windowLabel: flat crossdiagonal gradient
+toolbar.windowLabel.color: grey40
+toolbar.windowLabel.colorTo: grey20
+toolbar.windowLabel.textColor: grey85
+toolbar.clock: flat crossdiagonal gradient
+toolbar.clock.color: grey40
+toolbar.clock.colorTo: grey20
+toolbar.clock.textColor: grey85
+toolbar.justify: right
+toolbar.font: lucidasans-10
+
+menu.title: flat crossdiagonal gradient
+menu.title.color: rgb:c/6/6
+menu.title.colorTo: rgb:6/3/3
+menu.title.textColor: white
+menu.title.font: lucidasans-10
+menu.title.justify: right
+
+menu.frame: flat crossdiagonal gradient
+menu.frame.color: grey40
+menu.frame.colorTo: grey20
+menu.frame.textColor: grey85
+menu.frame.disableColor: rgb:4/2/2
+menu.frame.font: lucidasans-10
+menu.frame.justify: center
+
+menu.bullet.position: right
+menu.bullet: triangle
+
+menu.hilite: flat crossdiagonal gradient
+menu.hilite.color: rgb:c/6/6
+menu.hilite.colorTo: rgb:6/3/3
+menu.hilite.textColor: white
+
+window.title.focus: flat diagonal gradient
+window.title.focus.color: rgb:c/6/6
+window.title.focus.colorTo: rgb:8/4/4
+window.title.unfocus: flat solid
+window.title.unfocus.color: grey30
+
+window.label.focus: flat crossdiagonal gradient
+window.label.focus.color: grey40
+window.label.focus.colorTo: grey20
+window.label.focus.textColor: white
+window.label.unfocus: flat crossdiagonal gradient
+window.label.unfocus.color: grey30
+window.label.unfocus.colorTo: grey20
+window.label.unfocus.textColor: grey60
+
+window.button.focus: flat diagonal gradient
+window.button.focus.color: rgb:8/4/4
+window.button.focus.colorTo: rgb:a/5/5
+window.button.focus.picColor: rgb:4/2/2
+window.button.unfocus: flat solid
+window.button.unfocus.color: grey30
+window.button.unfocus.picColor: grey20
+window.button.pressed: flat crossdiagonal gradient
+window.button.pressed.color: grey40
+window.button.pressed.colorTo: grey20
+
+window.handle.focus: flat crossdiagonal gradient
+window.handle.focus.color: rgb:c/6/6
+window.handle.focus.colorTo: rgb:6/3/3
+window.handle.unfocus: flat solid
+window.handle.unfocus.color: grey30
+
+window.grip.focus: flat crossdiagonal gradient
+window.grip.focus.color: grey40
+window.grip.focus.colorTo: grey20
+window.grip.unfocus: flat crossdiagonal gradient
+window.grip.unfocus.color: grey30
+window.grip.unfocus.colorTo: grey20
+
+window.frame.focusColor: rgb:c/6/6
+window.frame.unfocusColor: grey30
+
+window.font: lucidasans-10
+window.justify: right
+
+borderColor: grey10
+
+bevelWidth: 1
+borderWidth: 2
+handleWidth: 4
+
+*textColor: grey85
+*Font: lucidasans-10
+
+rootCommand: bsetroot -solid grey20
--- /dev/null
+# doc/Makefile.am for Openbox
+
+CLEANFILES = openbox.1
+MAINTAINERCLEANFILES = Makefile.in
+man_MANS = openbox.1 bsetroot.1
+SUBDIRS =
+
+DEFAULT_MENU=$(pkgdatadir)/menu
+
+distclean-local:
+ rm -f *\~
+
+openbox.1: openbox.1.in
+ @regex_cmd@ -e "s,@defaultmenu@,$(DEFAULT_MENU)," \
+ -e "s,@pkgdatadir@,$(pkgdatadir)," \
+ -e "s,@version@,$(VERSION)," \
+ @srcdir@/openbox.1.in > openbox.1
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# doc/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+CLEANFILES = openbox.1
+MAINTAINERCLEANFILES = Makefile.in
+man_MANS = openbox.1 bsetroot.1
+SUBDIRS =
+
+DEFAULT_MENU = $(pkgdatadir)/menu
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+man1dir = $(mandir)/man1
+MANS = $(man_MANS)
+
+NROFF = nroff
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-man1:
+ $(mkinstalldirs) $(DESTDIR)$(man1dir)
+ @list='$(man1_MANS)'; \
+ l2='$(man_MANS)'; for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
+ done
+
+uninstall-man1:
+ @list='$(man1_MANS)'; \
+ l2='$(man_MANS)'; for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
+ rm -f $(DESTDIR)$(man1dir)/$$inst; \
+ done
+install-man: $(MANS)
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-man1
+uninstall-man:
+ @$(NORMAL_UNINSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-man1
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" != "." || dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = doc
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu doc/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+install-exec-am:
+install-exec: install-exec-recursive
+
+install-data-am: install-man
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am: uninstall-man
+uninstall: uninstall-recursive
+all-am: Makefile $(MANS)
+all-redirect: all-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+ $(mkinstalldirs) $(DESTDIR)$(mandir)/man1
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-tags distclean-generic clean-am distclean-local
+
+distclean: distclean-recursive
+
+maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+
+.PHONY: install-man1 uninstall-man1 install-man uninstall-man \
+install-data-recursive uninstall-data-recursive install-exec-recursive \
+uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
+all-recursive check-recursive installcheck-recursive info-recursive \
+dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+distclean-local:
+ rm -f *\~
+
+openbox.1: openbox.1.in
+ @regex_cmd@ -e "s,@defaultmenu@,$(DEFAULT_MENU)," \
+ -e "s,@pkgdatadir@,$(pkgdatadir)," \
+ -e "s,@version@,$(VERSION)," \
+ @srcdir@/openbox.1.in > openbox.1
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+.\"
+.\" Man page for Bsetroot
+.\"
+.\" Copyright (c) 2000 by Wilbert Berendsen <wbsoft@xs4all.nl>
+.\"
+.TH bsetroot 1 "June 16th, 2000" "0.60.3"
+.SH NAME
+bsetroot \- Openbox utility to change root window appearance
+.SH SYNOPSIS
+.BR bsetroot " \-help"
+.br
+.B bsetroot
+.RI "[ \-display " display " ] \-solid " color
+.br
+.B bsetroot
+.RI "[ \-display " display " ] \-mod " "x y" " \-fg " color " \-bg " color
+.br
+.B bsetroot
+.RI "[ \-display " display " ] \-gradient " texture " \-from " color " \-to " color
+.SH DESCRIPTION
+Bsetroot is a utility that can control the appearance of the root window in
+three ways: Either give it a solid color, or write a two color modula pattern
+to it, or render a gradient texture, based on two different colors.
+.PP
+Bsetroot resembles
+.IR xsetroot (1)
+in this functionality but it supports multiple screen displays, and gradient
+textures the same way as Openbox does.
+It doesn't handle cursors etc.
+Bsetroot is part of the Openbox package.
+.SH OPTIONS
+Bsetroot operates in three ways, you must choose one of the first 3 options:
+.TP
+.BI \-solid " color"
+Sets the root window to specified color.
+.TP
+.BI \-mod " x y"
+Creates a modula pattern. You must specify
+.BR \-bg " and " \-fg
+colors.
+.TP
+.BI \-gradient " texturestring"
+Renders the specified texture string to the root window.
+For possible texture strings, please refer to
+.IR openbox (1).
+You must also specify both a
+.BR \-from " and a " \-to
+color.
+.TP
+.BI \-display " display"
+Tells Bsetroot to connect to the specified display.
+.TP
+.BI "\-bg, \-background " color
+Background color.
+Needed for
+.B \-mod
+patterns.
+.TP
+.BI "\-fg, \-foreground " color
+Foreground color.
+Needed for
+.B \-mod
+patterns.
+.TP
+.BI \-from " color"
+Start color for rendering textures.
+Needed for
+.B \-gradient
+operation mode.
+.TP
+.BI \-to " color"
+Ending color for rendering textures.
+Needed for
+.B \-gradient
+operation mode.
+.TP
+.B \-help
+Prints version info and short help text.
+.SH AUTHOR
+Bsetroot was written and maintained by Brad Hughes
+.nh \" hyphenation off
+(blackbox@alug.org)
+.hy \" on again
+and Jeff Raven
+.nh
+(jraven@psu.edu).
+.hy
+.SH SEE ALSO
+.IR openbox (1)
--- /dev/null
+.\"
+.\" Man page for Openbox
+.\"
+.\" Copyright (c) 2000 by Wilbert Berendsen <wbsoft@xs4all.nl>
+.\"
+.\" This manual page may be freely distributed and modified.
+.\" Parts of the text are taken from website and several README's
+.\" by His Great Hughesness himself. Why reinvent wheels?
+.\"
+.\" Created with NEdit, tested with ``man'' and ``tkman.''
+.\" This manpage uses only standard groff and tmac.an macros.
+.\" To all translators who didn't do manpages earlier (like me ;-):
+.\" Read the Man-Page-Mini-HOWTO and the LDP manpage ``man 7 man''
+.\" There's all I needed to know about these macros.
+.\"
+.\" Updated for bb 0.61 at Sat Sep 9 06:56:04 CEST 2000
+.\"
+.\" ..define sort of <blockquote><pre> macro
+.de EX
+.ne 5
+.if n .sp 1
+.if t .sp .5
+.nf
+.in +.5i
+..
+.de EE
+.fi
+.in -.5i
+.if n .sp 1
+.if t .sp .5
+..
+.TH openbox 1 "April 8th, 2002" "@VERSION@"
+.SH NAME
+openbox \- a window manager for X11
+.SH SYNOPSIS
+.BR openbox " \-help | \-version"
+.br
+.B openbox
+.RI "[ \-rc" " rcfile " "] [ \-display" " display " ]
+.SH DESCRIPTION
+.\"
+.\" First few Paragraphs taken from FILLMEINNOW
+.\"
+.\"Openbox is yet another addition to the list of window managers for the Open
+.\"Group's X Window System, Version 11 Release 6 and above.
+.\"Openbox is built with C++, sharing no common code with any other window
+.\"manager (even though the graphics implementation is similar to that of Window
+.\"Maker).
+.\".PP
+.\"From the time the first line of code was written, Openbox has evolved around
+.\"one premise, minimalism.
+.\"It's not meant to be Eye Candy, nor the most Featureful, nor the most Adorned
+.\"for modelling the Widely acclaimed NeXT interface.
+.\"It is just meant to be
+.\".BR fast .
+.\".PP
+.\"Openbox provides configurable window decorations, a root menu to launch
+.\"applications, and a toolbar that shows the current workspace name, the focused
+.\"application name, and the current time.
+.\"There is also a workspace menu to add or remove workspaces. The `slit' can be
+.\"used to dock small applications, e.g. most of the bbtools can use the slit.
+.\".PP
+.\"Openbox features a special kind of icon handling: When you minimize a window,
+.\"no icon appears; instead, you can view all minimized applications in the `Icons'
+.\"submenu of the workspace menu.
+.\"Your desktop will never get cluttered with icons. As an alternative to icons,
+.\"shaded windows are provided: A double click on the titlebar of a window will
+.\"shade it (i.e. the window will disappear; only the titlebar stays visible).
+.\".PP
+.\"Openbox uses its own graphics class to render its images on the fly.
+.\"By using style files, you can determine at a great level how your desktop looks.
+.\"Openbox currently uses its own protocol to communicate with other clients such
+.\"as the pager. Work is underway to support the new window manager specification
+.\"that both GNOME and KDE use.
+.SH OPTIONS
+Openbox supports the following command line options:
+.TP
+.B \-help
+Display command line options and compiled-in features, then exit.
+.TP
+.B \-version
+Display version info and exit.
+.TP
+.BI \-rc \ rcfile
+Use another rcfile than the default
+.IR "~/.openbox/rc" .
+.TP
+.BI \-display \ display
+Start Openbox on the specified display.
+Programs started by Openbox will have the
+.B DISPLAY
+environment variable set to this value, too.
+.SH RUNNING BLACKBOX
+This program is usually started by the user's startup script, most times called
+.IR ~/.xinitrc .
+To run openbox, modify the script by adding
+.EX 0
+exec openbox
+.EE
+as the last executed command of the script.
+When Openbox terminates, the X session will terminate too.
+.PP
+When started, Openbox will try to find a default menu file in
+.IR @defaultmenu@ .
+You can provide a system-wide menu for your users here.
+.PP
+On exit or restart, Openbox will save user defaults in the file
+.I ~/.openbox/rc
+in the user's home directory.
+Some resources in this file can be edited by hand.
+.SH USING BLACKBOX
+From version 0.60.x, Openbox does no keyboard handling by itself; instead, it
+relies on an external program
+.IR bbkeys (1)
+for this.
+So, in this section, we will discuss all mouse commands.
+.SS Root window (background):
+A right click (button 3) will pop up the root menu.
+With this, you can launch your applications.
+You can also customize this menu for your needs. See above for its location.
+A middle click (button 2) will pop up the workspace menu.
+You can add or remove a workspace, view
+applications running on all workspace, inspect your iconified applications,
+and jump directly to any workspace or application.
+.PP
+Left clicking (button 1) on an application in the Workspaces menu will bring
+you to that workspace and raise/focus that application;
+middle clicking (button 2) will warp the application to the current workspace.
+.SS Toolbar:
+The toolbar consists of three fields: a workspace name, the name of the
+window that currently has focus, and a clock.
+A left click on the toolbar will bring it to the foreground, a
+middle click will hide it behind other windows (if AlwaysOnTop is not set), and
+the right button will bring up a little menu.
+.PP
+Using this menu, you can enter a name for the current workspace (when finished,
+press Enter).
+Also, you can choose the toolbar's position, whether or not it
+should be always on top (i.e. it cannot be obscured by other windows),
+and whether it should hide itself when the mouse moves away.
+.PP
+Note: In Openbox versions below 0.60.0, a right click on the toolbar
+immediately entered workspace name edit mode.
+.SS Window Titlebar and Borders:
+A left click on any part of the window's border will raise it.
+Dragging then moves the window.
+Dragging the resize grips at the bottom left and bottom right
+corners resizes the window.
+Middle clicking will immediately lower the window.
+Right clicking on the border or titlebar pops up the window menu,
+containing these commands:
+.TP
+.B Send To...
+Send window to another workspace.
+When you select the workspace with the middle button, Openbox will
+send you, along with the application, to the selected workspace.
+.TP
+.B Shade
+Shade window (display titlebar only).
+.TP
+.B Iconify
+Iconify window.
+The `icon' can be found in the `Icons' submenu of the workspace menu. It will
+*NOT* appear on screen otherwise.
+.TP
+.B Maximize
+(Un)Maximize window.
+When you click the middle button on this item, the
+window will maximize only vertically.
+.TP
+.B Raise
+Raise window.
+.TP
+.B Lower
+Lower window.
+.TP
+.B Stick
+(Un)Stick window.
+A stuck window will always be displayed in the current workspace.
+.TP
+.B Kill Client
+Kill (-SIGKILL) owner of window. Only use this if the client refuses to close.
+.TP
+.B Close
+Close the application cleanly.
+.PP
+When you double click on the titlebar of a window, it will `shade', so
+that only the titlebar stays visible.
+Another double click will redisplay the window contents.
+.SS Window Buttons:
+The button at the left upper corner of a window is the Minimize button.
+Clicking with any button causes the window to be iconified.
+The rightmost button (with the X) closes the application.
+The other button on the right (if present) maximizes the window in three ways:
+Button 1 causes full screen maximization, button 2 maximizes the window only
+vertically, and button 3 only horizontally.
+.SS Any menu:
+Clicking button 3 in a menu will popdown the menu.
+Clicking button 1 on the titlebar of any (sub)menu and then dragging it somewhere
+else will cause the menu to stay visible, and not disappear when you click on
+a menu item.
+.SS Miscellaneous:
+When you want to drag a window, but cannot see either the bottom handle or its
+titlebar, you can press Alt + button 1 anywhere in the window and then
+drag it around.
+You can also use Alt + button 1 to raise a partially visible window.
+Finally, Alt + button 2 lowers a window, and Alt + button 3 resizes the window.
+.SH MENU FILE
+A default menu file is installed in
+.IR @defaultmenu@ .
+Of course, this system-wide menu can be customized for all users at once.
+But it is also possible to create a personal menu.
+It is a convention to use the directory
+.IR "~/.openbox/"
+in your home directory, and to create a menu file, e.g.
+.I menu
+in this directory, or copy the system-wide menu file to this location.
+Next, we have to tell Openbox to load our menu file instead of the default.
+This is accomplished by adding (or changing) a resource value in the
+.I ~/.openbox/rc
+file, e.g.:
+.EX
+session.menuFile: ~/.openbox/menu
+.EE
+For this change to take effect, Openbox has to be restarted.
+Be sure that your menu is usable, then choose `Restart' from the default
+Openbox root menu.
+.SS Menu syntax
+The menu syntax is very simple and very effective.
+There are up to three fields in a menu line.
+They are of the form:
+.EX
+[tag] (label or filename) {command or filename}
+.EE
+The supported tags are as follows:
+.TP
+.B [begin] (label for root menu)
+This tells Openbox to start parsing the menu file.
+This tag is required for Openbox to parse your menu file.
+If it cannot find it, the system default menu is used instead.
+.TP
+.B [end]
+This tells Openbox that it is at the end of a menu.
+This can either be a submenu or the main root menu.
+There must be at least one of these tags in your menu to correspond to the
+required [begin] tag.
+.TP
+.B [exec] (label for command) {shell command}
+Inserts a command item into the menu.
+When you select the menu item from the menu, Openbox runs `shell command.'
+.TP
+.B [exit] (label for exit)
+Inserts an item that shuts down and exits Openbox.
+Any running programs are not closed.
+.TP
+.B [include] (filename)
+Parses the file specified by
+.I filename
+and includes it with the current menu. The filename can be the full path to a
+ file, or it can begin with
+.IR ~/ ,
+which will be expanded into your home directory (e.g.
+.EX
+[include] (~/.openbox/stylesmenu)
+.EE
+will include
+.I /home/bhughes/.openbox/stylesmenu
+in my menu).
+.TP
+.B [nop] (label - optional)
+Insert a non-operational item into the current menu.
+This can be used to help format the menu into blocks or sections
+if so desired.
+.B [nop]
+does accept a label, but it is not required, and a blank item will be used
+if none is supplied.
+.TP
+.B [style] (label) {filename}
+This tells Openbox to insert an item that, when selected, reads the style file
+named
+.I filename
+and applies the new textures, colors, and fonts to the current
+running session.
+.TP
+.B [stylesdir] (directory name)
+Reads all filenames (directories are ignored) from the specified directory and
+ creates menu items in the current menu for every filename. Openbox assumes
+ that each file is a valid style file. When selected by the user, Openbox
+applies the selected style file to the current session.
+The labels that are created in the menu are the filenames of the style files.
+.TP
+.B [stylesmenu] (label) {directory name}
+Creates a submenu entry with
+.I label
+(that is also the title of the new submenu), and inserts in that submenu all
+filenames in the specified directory, in the same way as the
+.B [stylesdir]
+command does.
+.IP
+.RB Both\ [stylesdir] \ and\ [stylesmenu]
+commands make it possible to install style files without editing your menu file.
+.TP
+.B [submenu] (label) {title for menu - optional}
+This tells Openbox to create and parse a new menu.
+This menu is inserted as a submenu into the parent menu.
+These menus are parsed recursively, so there is no limit to the number of levels
+or nested submenus you can have.
+The title for the new menu is optional; if none is supplied,
+the new menu's title is the same as the item label.
+An
+.B [end]
+tag is required to end the submenu.
+.TP
+.B [reconfig] (label)
+When selected, this item rereads the current style and menu files and
+applies any changes.
+This is useful for creating a new style or theme, as you don't have to
+constantly restart Openbox every time you save your style.
+However, Openbox automagically rereads the menu whenever it changes.
+.TP
+.B [restart] (label) {shell command - optional}
+This tells Openbox to restart.
+If `shell command' is supplied, it shuts down and runs the command (which is
+commonly the name of another window manager).
+If the command is omitted, Openbox restarts itself.
+.TP
+.B [config] (label)
+Inserts a Openbox generated submenu item containing numerous configuration
+options concerning window placement, focus style, window moving style, etc.
+.TP
+.B [workspaces] (label)
+This tells Openbox to insert a link to the workspaces menu directly
+into your menu.
+This is handy for those users who can't access the
+workspace menu directly (e.g. if you don't have a 3 button mouse).
+.PP
+Any line that starts with a `#' is considered a comment and ignored by Openbox.
+Also, in the labels/commands/filenames fields,
+you can escape any character like so:
+.EX
+[exec] (\\(my cool\\) \\{XTERM\\}) {xterm -T \\"cool XTERM\\"}
+.EE
+Using `\\\\' inserts a literal back-slash into the label/command/filename field.
+.SS Menu example
+Now let's put together some things.
+Here is a short example of a menu file:
+.PP
+.nf
+# Openbox menu file
+[begin] (Openbox @version@)
+ [exec] (rxvt) {rxvt -ls}
+ [exec] (Mozilla) {mozilla}
+ [exec] (The GIMP) {gimp}
+ [submenu] (Window Manager)
+ [exec] (Edit Menus) {nedit .openbox/Menu}
+ [submenu] (Style) {Which Style?}
+ [stylesdir] (~/.openbox/styles)
+ [stylesmenu] (Openbox Styles) {@pkgdatadir@/styles}
+ [end]
+ [config] (Config Options)
+ [reconfig] (Reconfigure)
+ [restart] (Restart)
+ [end]
+ [exit] (Log Out)
+[end]
+# end of menu file
+.fi
+.SH STYLES
+Openbox enables you to use specialized files that contain
+.IR X (1)
+resources to specify colors, textures, and fonts and therefore
+the overall look of your window borders, menus, and the toolbar.
+.PP
+The default installation of Openbox provides some of these style files.
+Usually they are put in
+.IR @pkgdatadir@/styles .
+You can study or edit these files to grasp how the Openbox style mechanism
+works.
+You can use the
+.BR [style] ", " [stylesdir] " and " [stylesmenu]
+menu commands in your menu file to be able to select and change between styles
+on the fly.
+.PP
+You can also create a directory in your home directory (usually named
+.I ~/.openbox/styles)
+and put your own style files there.
+Of course, you may choose any name for this directory, but many downloadable
+themes will rely on the name
+.I styles
+(following the bb.themes.org naming scheme).
+.PP
+To understand how the style mechanism works, you should have a little knowledge
+of how X resources work.
+.PP
+X resources consist of a key and a value.
+The key is constructed of several smaller keys (sometimes referred to as
+children), delimited by a period (`.').
+Keys may also contain a star (`*') to serve as a wildcard, which means that one
+line of typed text will match several keys.
+This is useful for styles that are based on one or two colors.
+.PP
+Openbox allows you to configure its four main components: the toolbar, the
+slit, the menus, and the window decorations.
+.PP
+The little window that shows the x-y position while dragging windows borrows
+its style from the window's titlebar.
+.PP
+Here are some quick examples:
+.EX
+toolbar.clock.color: green
+.EE
+This sets the color resource of the toolbar clock to `green'. Another example:
+.EX
+menu*color: rgb:3/4/5
+.EE
+This sets the color resource of the menu
+.I and all of its `children'
+to `rgb:3/4/5'.
+(For a description of color names, see
+.IR X (1).)
+So this one also applies to
+.IR menu.title.color " and " menu.frame.color .
+And with
+.EX
+*font: -b&h-lucida-medium-r-normal-*-*-140-*
+.EE
+you set the font resource for all keys to this font name all at once.
+(For information about the fonts installed on your system, you can use a program like
+.IR xfontsel "(1), " gtkfontsel ", or " xlsfonts "(1).)"
+.PP
+Now what makes Openbox just so spectacular is its ability to render textures
+on the fly.
+Texture descriptions are specified in a similar way to the colors shown above
+e.g.:
+.ta \w'toolbar.clock.colorTo:\ 'u
+.EX
+toolbar.clock: Raised Gradient Diagonal Bevel1
+toolbar.clock.color: rgb:8/6/4
+toolbar.clock.colorTo: rgb:4/3/2
+.EE
+Don't worry; we will explain right now!
+A texture description consists of up to five fields, which are as follows:
+.TP
+.B Flat / Raised / Sunken
+gives the component either a flat, raised, or sunken appearance.
+.TP
+.B Gradient / Solid
+tells Openbox to draw either a solid color or a texture with gradient.
+.TP
+.B Horizontal / Vertical / Diagonal / Crossdiagonal / Pipecross / Elliptic / Rectangle / Pyramid
+Select one of these texture types. They only work when
+.B Gradient
+is also specified!
+.TP
+.B Interlaced
+tells Openbox to interlace the texture (darken every other line).
+This option is most commonly used with gradiented textures, but, from Openbox
+version 0.60.3 on, it also works in solid textures.
+.TP
+.B Bevel1 / Bevel2
+tells Openbox which type of bevel to use.
+Bevel1 is the default bevel.
+The shading is placed on the edge of the image.
+Bevel2 is an alternative.
+The shading is placed one pixel in from the edge of the image.
+.PP
+Instead of a texture description, the option
+.B ParentRelative
+is also available, which makes the component appear as a part of its parent, i.e.
+totally transparent.
+.PP
+All gradient textures are composed of two color values: the
+.IR color " and " colorTo " resources."
+color represents the initial color, colorTo represents the final color of the
+gradient.
+When
+.B Interlaced
+is used in
+.B Solid
+mode, the
+.I colorTo
+resource is used to specify the interlacing color.
+.PP
+Well, here is the complete component list; also, all components together with
+which kind of value they can contain.
+Comments are preceded with an exclamation sign (!), which is also used for
+comments in Openbox style c.q. X resource files.
+.PP
+.ta \w'window.button.unfocus.picColor:\ 'u
+.nf
+.\"
+.\" The comments also to be translated!
+.\"
+! The toolbar itself.
+toolbar: Texture
+toolbar.color: Color
+toolbar.colorTo: Color
+
+! The buttons on the toolbar.
+toolbar.button: Texture or \fIParentRelative\fR
+toolbar.button.color: Color
+toolbar.button.colorTo: Color
+
+! Color of the button arrows.
+toolbar.button.picColor: Color
+
+! Buttons in pressed state.
+toolbar.button.pressed: Texture \fI(e.g. Sunken)\fR or \fIParentRelative\fR
+toolbar.button.pressed.color: Color
+toolbar.button.pressed.colorTo: Color
+
+! Color of pressed button arrows.
+toolbar.button.pressed.picColor: Color
+
+! The toolbar workspace label.
+toolbar.label: Texture or \fIParentRelative\fR
+toolbar.label.color: Color
+toolbar.label.colorTo: Color
+toolbar.label.textColor: Color
+
+! The toolbar window label.
+toolbar.windowLabel: Texture or \fIParentRelative\fR
+toolbar.windowLabel.color: Color
+toolbar.windowLabel.colorTo: Color
+toolbar.windowLabel.textColor: Color
+
+! The toolbar clock.
+toolbar.clock: Texture or \fIParentRelative\fR
+toolbar.clock.color: Color
+toolbar.clock.colorTo: Color
+toolbar.clock.textColor: Color
+
+! How the toolbar's text should be justified.
+toolbar.justify: \fIcenter\fR, \fIleft\fR, or \fIright\fR
+
+! Font to be used for all toolbar components.
+toolbar.font: Font \fI(e.g. -*-helvetica-medium-r-normal-*-*-100-*)\fR
+
+! The menu titlebar.
+menu.title: Texture
+menu.title.color: Color
+menu.title.colorTo: Color
+menu.title.textColor: Color
+menu.title.font: Font
+menu.title.justify: \fIcenter\fR, \fIleft\fR, or \fIright\fR
+
+! The menu frame.
+menu.frame: Texture
+menu.frame.color: Color
+menu.frame.colorTo: Color
+menu.frame.textColor: Color
+menu.frame.disableColor: Color
+menu.frame.font: Font
+menu.frame.justify: \fIcenter\fR, \fIleft\fR, or \fIright\fR
+
+! Bullets for submenu items.
+menu.bullet: \fIempty\fR, \fItriangle\fR, \fIsquare\fR, or \fIdiamond\fR
+menu.bullet.position: \fIright\fR or \fIleft\fR
+
+! The highlighted menu item.
+menu.hilite: Texture (e.g. \fIRaised\fR)
+menu.hilite.color: Color
+menu.hilite.colorTo: Color
+menu.hilite.textColor: Color
+
+! A focused window.
+window.title.focus: Texture
+window.title.focus.color: Color
+window.title.focus.colorTo: Color
+
+! An unfocused window.
+window.title.unfocus: Texture
+window.title.unfocus.color: Color
+window.title.unfocus.colorTo: Color
+
+! Window label.
+window.label.focus: Texture or \fIParentRelative\fR
+window.label.focus.color: Color
+window.label.focus.colorTo: Color
+window.label.focus.textColor: Color
+
+window.label.unfocus: Texture or \fIParentRelative\fR
+window.label.unfocus.color: Color
+window.label.unfocus.colorTo: Color
+window.label.unfocus.textColor: Color
+
+! Handlebar.
+window.handle.focus: Texture
+window.handle.focus.color: Color
+window.handle.focus.colorTo: Color
+
+window.handle.unfocus: Texture
+window.handle.unfocus.color: Color
+window.handle.unfocus.colorTo: Color
+
+! Resize grips.
+window.grip.focus: Texture
+window.grip.focus.color: Color
+window.grip.focus.colorTo: Color
+
+window.grip.unfocus: Texture
+window.grip.unfocus.color: Color
+window.grip.unfocus.colorTo: Color
+
+! Window buttons.
+window.button.focus: Texture or \fIParentRelative\fR
+window.button.focus.color: Color
+window.button.focus.colorTo: Color
+window.button.focus.picColor: Color
+
+window.button.unfocus: Texture or \fIParentRelative\fR
+window.button.unfocus.color: Color
+window.button.unfocus.colorTo: Color
+window.button.unfocus.picColor: Color
+
+window.button.pressed: Texture (e.g. \fISunken\fR)
+window.button.pressed.color: Color
+window.button.pressed.colorTo: Color
+
+! Frame around window.
+window.frame.focusColor: Color
+window.frame.unfocusColor: Color
+
+! Font and justification for window labels.
+window.font: Font
+window.justify: \fIcenter\fR, \fIleft\fR, or \fIright\fR
+
+! Miscellaneous resources.
+
+! A border can be drawn around all components.
+borderWidth: a number of pixels, e.g. \fI1\fR
+borderColor: Color
+
+bevelWidth: a number of pixels > 0
+handleWidth: a number of pixels > 0
+
+! Width of the window frame (from version 0.61 on).
+! When not specified, frameWidth defaults to the value of bevelWidth.
+frameWidth: a number of pixels >= 0
+
+
+! This command is executed whenever this style is selected.
+! Typically it sets the root window to a nice picture.
+rootCommand: Shell command, e.g. \fIbsetroot -mod 4 4 -fg rgb: 5/6/6 -bg grey20\fR
+
+! Some of the bbtools read these old 0.51 resources.
+menuFont: Font
+titleFont: Font
+.fi
+.PP
+Now, this seems a long list, but, remember, when you create your own style, you
+can easily set lots of keys with a single command, e.g.
+.EX
+.ta \w'*unfocus.textColor:\ 'u
+*color: slategrey
+*colorTo: darkslategrey
+*unfocus.color: darkslategrey
+*unfocus.colorTo: black
+*textColor: white
+*unfocus.textColor: lightgrey
+*font: lucidasans-10
+.EE
+This sets already nice defaults for many components.
+.SH THE SLIT
+The slit is a special Openbox window frame that can contain dockable
+applications, e.g. the `bbtools' or WindowMaker's dockapps.
+When applications are run in the slit, they have no window borders of their own;
+instead, they are framed in the slit, and they are always visible in the current
+workspace.
+You can click button 3 on the edge of the slit window to get a menu to
+determine its position, whether its contained applications should be grouped
+horizontally or vertically and whether it should hide itself when the
+mouse moves away.
+.PP
+Most dockable applications use the
+.B -w
+option to run in the slit.
+For example, you could put in your
+.IR ~/.xinitrc :
+.EX
+bbmail -w &
+bbpager -w &
+exec openbox
+.EE
+Of course, to use the slit, you must have slit support compiled in (this is
+the default).
+.SH RESOURCE FILE
+Usually the
+.I ~/.openbox/rc
+resource file is created and maintained by Openbox itself.
+All options from the
+.B [config]
+menu (from 0.60.x on), the last selected style file, your workspace names and
+so on are saved automatically in this file.
+However, there are some resources in it you might want to edit yourself:
+.TP
+.B session.menuFile:
+This tells Openbox where to look for its menu file.
+.TP
+.B session.screen0.toolbar.widthPercent:
+This determines the amount (in %) of space the toolbar will take.
+Default value is:
+.IR 66 .
+.TP
+.B session.screen0.strftimeFormat:
+This adjusts the way the current time is displayed in the toolbar.
+The
+.IR strftime (3)
+format is used.
+Default value is:
+.IR "%I:%M %p" .
+.TP
+.B session.autoRaiseDelay:
+This adjusts the delay (in ms) before focused windows will raise when using the
+Auto Raise option.
+Default value is:
+.IR 250 .
+.TP
+.B session.doubleClickInterval:
+This adjusts the delay (in ms) between mouse clicks for Openbox to consider a double click.
+Default value is:
+.IR 250 .
+.TP
+.B session.screen0.edgeSnapThreshold:
+When moving a window across your screen, Openbox is able to have it `snap' to
+the edges of the screen for easy placement.
+This variable tells Openbox the distance (in pixels) at which the window will
+jump to the edge.
+Default value is:
+.IR 0 .
+.TP
+.B session.cacheMax:
+This tells Openbox how much memory (in Kb) it may use to store cached pixmaps on
+the X server.
+If your machine runs short of memory, you may lower this value.
+Default value is:
+.IR 200 .
+.TP
+.B session.cacheLife:
+This tells Openbox how long (in minutes) unused pixmaps may stay in the X
+server's memory.
+Default value is:
+.IR 5 .
+.TP
+.B session.colorsPerChannel:
+This tells Openbox how many colors to take from the X server on pseudocolor
+displays. A channel would be red, green, or blue.
+Openbox will allocate this variable ^ 3 colors and make them always available.
+This value must be between 2 and 6.
+When you run Openbox on an 8-bit display, you must set this resource to 4.
+Default value is:
+.IR 4.
+.PP
+When running Openbox in a multiple desktop environment, the
+.B screen0
+key can also be
+.B screen1, 2
+etc. for any appropriate desktop.
+.SH ENVIRONMENT
+.TP
+.B HOME
+Openbox uses
+.RB $ HOME
+to find its
+.I .openbox/rc
+file, and to resolve style file and directory names.
+.TP
+.B DISPLAY
+When no other display was given on the command line, Openbox will start on the
+display specified by this variable.
+.SH AUTHOR and CREDITS
+All of the code was initially written and maintained as Blackbox by Brad Hughes
+.nh \" hyphenation off
+(blackbox@alug.org)
+.hy \" on again
+and then Jeff Raven
+.nh
+(jraven@psu.edu),
+.hy
+and then Sean 'Shaleh' Perry
+.nh
+(shaleh@debian.org)
+.hy
+.hy
+and is now maintained as Openbox by Ben Jansens
+.nh
+(ben@orodu.net)
+.hy
+with contributions and patches merged from
+many individuals around the world.
+.PP
+The official Openbox website:
+.nh
+.B http://FILLMEINNOW/
+.hy
+.br
+The bug and feature request page, as well as current releases can be found at:
+.nh
+.B http://FILLMEINNOW/
+.hy
+.br
+Many themes and other contributions:
+.nh
+.B http://bb.themes.org/
+.hy
+.PP
+This manpage was put together by Wilbert Berendsen
+.nh
+(wbsoft@xs4all.nl).
+.hy
+Numerous other languages will be available.
+.SH SEE ALSO
+.IR bsetroot (1), \ bbkeys (1) \" not there, yet ;-(
--- /dev/null
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
--- /dev/null
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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, 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-1307, USA.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+case "$1" in
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing - GNU libit 0.0"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acinclude.m4' or \`configure.in'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`configure.in'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acconfig.h' or \`configure.in'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER([^):]*:\([^)]*\)).*/\1/p' configure.in`
+ if test -z "$files"; then
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^):]*\)).*/\1/p' configure.in`
+ test -z "$files" || files="$files.in"
+ else
+ files=`echo "$files" | sed -e 's/:/ /g'`
+ fi
+ test -z "$files" && files="config.h.in"
+ touch $files
+ ;;
+
+ automake)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print \
+ | sed 's/^\(.*\).am$/touch \1.in/' \
+ | sh
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ makeinfo)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequirements for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
--- /dev/null
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id$
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp" 1>&2
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X error: %s(%d) opcodes %d/%d\n resource 0x%lx\n
+$ #SignalCaught
+# %s: signal %d caught\n
+$ #ShuttingDown
+# shutting down\n
+$ #Aborting
+# aborting... dumping core\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: connection to X server failed.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: couldn't mark display connection as close-on-exec\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): removing bad window from event queue\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox Menu
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Config Options
+$ #FocusModel
+# Focus Model
+$ #WindowPlacement
+# Window Placement
+$ #ImageDithering
+# Image Dithering
+$ #OpaqueMove
+# Opaque Window Moving
+$ #FullMax
+# Full Maximization
+$ #FocusNew
+# Focus New Windows
+$ #FocusLast
+# Focus Window on Workspace Change
+$ #ClickToFocus
+# Click to Focus
+$ #SloppyFocus
+# Sloppy Focus
+$ #AutoRaise
+# Auto Raise
+$ #SmartRows
+# Smart Placement (Rows)
+$ #SmartCols
+# Smart Placement (Columns)
+$ #Cascade
+# Cascade Placement
+$ #LeftRight
+# Left to Right
+$ #RightLeft
+# Right to Left
+$ #TopBottom
+# Top to Bottom
+$ #BottomTop
+# Bottom to Top
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Icons
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: error creating pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: error creating XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: unsupported visual\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: error creating pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: invalid colormap size %d (%d/%d/%d) - reducing\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: error allocating colormap\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: failed to alloc color %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: pixmap cache - releasing %d pixmaps\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: cache is large, forcing cleanout\n
+$ #ColorParseError
+# BImageControl::getColor: color parse error: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: color alloc error: '%s'\n
--- /dev/null
+# nls/C/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: Translation.m openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/C"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/C; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/C; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/US_ASCII; \
+ ln -f -ss C $(DESTDIR)$(pkgdatadir)/nls/US_ASCII; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/POSIX; \
+ ln -f -s C $(DESTDIR)$(pkgdatadir)/nls/POSIX; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/en_US; \
+ ln -f -s C $(DESTDIR)$(pkgdatadir)/nls/en_US; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/en; \
+ ln -f -s C $(DESTDIR)$(pkgdatadir)/nls/en; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/C/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/US_ASCII; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/POSIX; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/en_US; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/en; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/C; \
+ fi
+
+# note... when adding new catalogs... you do not need the
+# header=../openbox-nls.h which is passed to awk... we
+# only need to generate it once.
+
+Translation.m: $(MFILES)
+ awk -f @srcdir@/../convert.awk header=../openbox-nls.h \
+ output=Translation.m $(MFILES)
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/C/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/C/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/C
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/C/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: Translation.m openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/C"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/C; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/C; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/US_ASCII; \
+ ln -f -ss C $(DESTDIR)$(pkgdatadir)/nls/US_ASCII; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/POSIX; \
+ ln -f -s C $(DESTDIR)$(pkgdatadir)/nls/POSIX; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/en_US; \
+ ln -f -s C $(DESTDIR)$(pkgdatadir)/nls/en_US; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/en; \
+ ln -f -s C $(DESTDIR)$(pkgdatadir)/nls/en; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/C/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/US_ASCII; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/POSIX; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/en_US; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/en; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/C; \
+ fi
+
+# note... when adding new catalogs... you do not need the
+# header=../openbox-nls.h which is passed to awk... we
+# only need to generate it once.
+
+Translation.m: $(MFILES)
+ awk -f @srcdir@/../convert.awk header=../openbox-nls.h \
+ output=Translation.m $(MFILES)
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: an error occured while querying the X server.\n \
+another window manager is already running on display %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: managing screen %d using visual 0x%lx, depth %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): couldn't load font '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): couldn't load default font.\n
+$ #EmptyMenuFile
+# %s: empty menu file\n
+$ #xterm
+# xterm
+$ #Restart
+# Restart
+$ #Exit
+# Exit
+$ #EXECError
+# BScreen::parseMenuFile: [exec] error, no menu label and/or command defined\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] error, no menu label defined\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] error, no menu label and/or filename \
+defined\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] error, no menu label defined\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] error, no filename defined\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] error, '%s' is not a regular file\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] error, no menu label defined\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] error, no menu label defined\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] error, no menu label defined\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] error, no directory defined\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] error, '%s' is not a \
+directory\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] error, '%s' does not exist\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] error, no menu label defined\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Slit Direction
+$ #SlitPlacement
+# Slit Placement
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Toolbar
+$ #EditWkspcName
+# Edit current workspace name
+$ #ToolbarPlacement
+# Toolbar Placement
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: creating 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres failed\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: cannot find screen for root window 0x%lx\n
+$ #Unnamed
+# Unnamed
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() for 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() for 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: reparent 0x%lx to root\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Send To ...
+$ #Shade
+# Shade
+$ #Iconify
+# Iconify
+$ #Maximize
+# Maximize
+$ #Raise
+# Raise
+$ #Lower
+# Lower
+$ #Stick
+# Stick
+$ #KillClient
+# Kill Client
+$ #Close
+# Close
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Workspace %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Workspaces
+$ #NewWorkspace
+# New Workspace
+$ #RemoveLast
+# Remove Last
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: error: must specify one of: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> display connection\n\
+ -mod <x> <y> modula pattern\n\
+ -foreground, -fg <color> modula foreground color\n\
+ -background, -bg <color> modula background color\n\n\
+ -gradient <texture> gradient texture\n\
+ -from <color> gradient start color\n\
+ -to <color> gradient end color\n\n\
+ -solid <color> solid color\n\n\
+ -help print this help text and exit\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Yes
+$ #No
+# No
+
+$ #DirectionTitle
+# Direction
+$ #DirectionHoriz
+# Horizontal
+$ #DirectionVert
+# Vertical
+
+$ #AlwaysOnTop
+# Always on top
+
+$ #PlacementTitle
+# Placement
+$ #PlacementTopLeft
+# Top Left
+$ #PlacementCenterLeft
+# Center Left
+$ #PlacementBottomLeft
+# Bottom Left
+$ #PlacementTopCenter
+# Top Center
+$ #PlacementBottomCenter
+# BottomCenter
+$ #PlacementTopRight
+# Top Right
+$ #PlacementCenterRight
+# Center Right
+$ #PlacementBottomRight
+# Bottom Right
+
+$ #AutoHide
+# Auto hide
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# error: '-rc' requires an argument\n
+$ #DISPLAYRequiresArg
+# error: '-display' requires an argument\n
+$ #WarnDisplaySet
+# warning: could not set environment variable 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tuse display connection.\n\
+ -rc <string>\t\t\tuse alternate resource file.\n\
+ -version\t\t\tdisplay version and exit.\n\
+ -help\t\t\t\tdisplay this help text and exit.\n\n
+$ #CompileOptions
+# Compile time options:\n\
+ Debugging\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Shape:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Ordered Dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: no managable screens found, aborting\n
+$ #MapRequest
+# Openbox::process_event: MapRequest for 0x%lx\n
--- /dev/null
+# nls/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+SUBDIRS = C da_DK de_DE es_ES et_EE fr_FR it_IT ja_JP nl_NL pt_BR ru_RU \
+ sl_SI sv_SE tr_TR zh_CN
+MAINTAINERCLEANFILES = Makefile.in openbox-nls.h
+DISTCLEANFILES = openbox-nls.h
+
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls; \
+ fi
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+SUBDIRS = C da_DK de_DE es_ES et_EE fr_FR it_IT ja_JP nl_NL pt_BR ru_RU sl_SI sv_SE tr_TR zh_CN
+
+MAINTAINERCLEANFILES = Makefile.in openbox-nls.h
+DISTCLEANFILES = openbox-nls.h
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" != "." || dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+install-exec-am:
+install-exec: install-exec-recursive
+
+install-data-am:
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am: uninstall-local
+uninstall: uninstall-recursive
+all-am: Makefile
+all-redirect: all-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-tags distclean-generic clean-am distclean-local
+
+distclean: distclean-recursive
+
+maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+
+.PHONY: install-data-recursive uninstall-data-recursive \
+install-exec-recursive uninstall-exec-recursive installdirs-recursive \
+uninstalldirs-recursive all-recursive check-recursive \
+installcheck-recursive info-recursive dvi-recursive \
+mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-redirect all-am all \
+installdirs-am installdirs mostlyclean-generic distclean-generic \
+clean-generic maintainer-clean-generic clean mostlyclean distclean \
+maintainer-clean
+
+
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls; \
+ fi
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/^\$set/ {
+ major++
+ minor = 0
+
+ if (major > 1)
+ printf "\n" > output
+ printf "$set %d %s\n", major, $3 > output
+
+ if (header) {
+ majorName = substr($3, 2)
+ if (major > 1)
+ printf "\n" > header
+ printf "#define %sSet %#x\n", majorName, major > header
+ }
+}
+
+/^\$ #/ {
+ minor++
+
+ if (header) {
+ minorName = substr($2, 2)
+ printf "#define %s%s %#x\n", majorName, minorName, minor > header
+ }
+}
+
+/^#/ {
+ text = substr($0, 3)
+ printf "%d %s\n", minor, text > output
+}
+
+! /^(\$|#)/ { print > output }
+
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X fejl: %s(%d) kode %d/%d\n resource 0x%lx\n
+$ #SignalCaught
+# %s: signal %d fanget\n
+$ #ShuttingDown
+# lukker ned\n
+$ #Aborting
+# Avbryder... dumper kernen\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: tilslutning til X server mislykkedes.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: kunne ikke markere skærmtilslutning som luk-ved-afslut\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): fjerner dårligt vindue fra hændelseskøen\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openboxmenu
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Indstillinger
+$ #FocusModel
+# Fokus Model
+$ #WindowPlacement
+# Vindueplacering
+$ #ImageDithering
+# Billede Dithering
+$ #OpaqueMove
+# Uklar vinduesflytning
+$ #FullMax
+# Fuld maximering
+$ #FocusNew
+# Fokus nyt vindue
+$ #FocusLast
+# Fokus vindue ved skrivebords ændring
+$ #ClickToFocus
+# Klik for fokus
+$ #SloppyFocus
+# Dovent fokus
+$ #AutoRaise
+# Hæv automatisk
+$ #SmartRows
+# Intelligent placering (Rækker)
+$ #SmartCols
+# Intelligent placering (Søjler)
+$ #Cascade
+# Kaskade placering
+$ #LeftRight
+# Fra venstre mod højre
+$ #RightLeft
+# Fra højre mod venstre
+$ #TopBottom
+# Oppefra
+$ #BottomTop
+# Nedefra
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Ikoner
+$ #Unnamed
+# Intet navn
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: fejl ved skabelse af pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: fejl ved skabelse af XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: ikke support for farvedybden\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: fejl ved skabelse af pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: ugyldigt farvekort størrelse %d (%d/%d/%d) - reducing\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: fejl ved allokering af farvekort\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: fejl ved allokering af farve %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: pixmap cache - sletter %d pixmaps\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: cache er for stor, gennemtvinger rensning\n
+$ #ColorParseError
+# BImageControl::getColor: farvefejl: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: farveallokeringsfejl: '%s'\n
--- /dev/null
+# nls/da_DK/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/da_DK"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/da_DK; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/da_DK; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/da_DK/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/da_DK; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/da_DK/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/da_DK/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/da_DK
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/da_DK/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/da_DK"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/da_DK; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/da_DK; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/da_DK/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/da_DK; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: fejl ved forespørgsel til X server.\n \
+en anden window manager er allerede kørende på display %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: håndterer skærm %d med visuel 0x%lx, farvedybde %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): kunne ikke hente font '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): kunne ikke hente standardfonten.\n
+$ #EmptyMenuFile
+# %s: tom menu fil\n
+$ #xterm
+# xterm
+$ #Restart
+# Genstart
+$ #Exit
+# Afslut
+$ #EXECError
+# BScreen::parseMenuFile: [exec] fejl, ingen menu etikette og/eller kommando defineret\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] fejl, ingen menu etikette defineret\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] fejl, ingen menu etikette og/eller filnavn \
+defineret\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] fejl, ingen menu etikette defineret\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] fejl, intet filnavn defineret\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] fejl, '%s' er ikke en normal fil\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] fejl, ingen menu etikette defineret\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] fejl, ingen menu etikette defineret\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] fejl, ingen menu etikette defineret\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fejl, intet katalog defineret\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fejl, '%s' er ikke et katalog\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fejl, '%s' eksisterer ikke\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] fejl, ingen menu etikette defineret\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Slit retning
+$ #SlitPlacement
+# Slit placering
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Værktøjsbjælke
+$ #EditWkspcName
+# Andring af skrivebordets navn
+$ #ToolbarPlacement
+# Værktøjsbjælkens placering
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: skaber 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres fejlede\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: kunne ikke finde skærm til hovedvinduet 0x%lx\n
+$ #Unnamed
+# Intet navn
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() for 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() for 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: sætter 0x%lx til hovedvinduet\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Send til ...
+$ #Shade
+# Skygge
+$ #Iconify
+# Iconificeret
+$ #Maximize
+# Maksimer
+$ #Raise
+# Hæv
+$ #Lower
+# Sænk
+$ #Stick
+# Klæbrig
+$ #KillClient
+# Dræb klient
+$ #Close
+# Luk
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Skrivebord %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Skriveborde
+$ #NewWorkspace
+# Nyt skrivebord
+$ #RemoveLast
+# Fjern sidste
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: fejl: specificér en af følgende: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> skærmtilslutning\n\
+ -mod <x> <y> modula mønster\n\
+ -foreground, -fg <color> modula foregrundsfarve\n\
+ -background, -bg <color> modula baggrundsfarve\n\n\
+ -gradient <texture> gradient tekstur\n\
+ -from <color> gradient start farve\n\
+ -to <color> gradient slut farve\n\n\
+ -solid <color> fast farve\n\n\
+ -help hvis denne hjælp og afslut\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Ja
+$ #No
+# Nej
+
+$ #DirectionTitle
+# Retning
+$ #DirectionHoriz
+# Horisontal
+$ #DirectionVert
+# Vertikal
+
+$ #AlwaysOnTop
+# Altid øverst
+
+$ #PlacementTitle
+# Placering
+$ #PlacementTopLeft
+# Øverste venstre hjørne
+$ #PlacementCenterLeft
+# Venstre i midten
+$ #PlacementBottomLeft
+# Bunden til venstre
+$ #PlacementTopCenter
+# Toppen i midten
+$ #PlacementBottomCenter
+# Bunden i midten
+$ #PlacementTopRight
+# Øverst til højre
+$ #PlacementCenterRight
+# Til højre i midten
+$ #PlacementBottomRight
+# Til højre i bunden
+
+$ #AutoHide
+# Gem automatisk
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# fejl: '-rc' kræver et argument\n
+$ #DISPLAYRequiresArg
+# fjel: '-display' kræver et argument\n
+$ #WarnDisplaySet
+# advarsel: kunne ikke sætte variablen 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tbrug skærm tilslutning.\n\
+ -rc <string>\t\t\tbrug alternativ resource fil.\n\
+ -version\t\t\tvis versionsnummer og afslut.\n\
+ -help\t\t\t\tvis denne hjælp og afslut.\n\n
+$ #CompileOptions
+# Kompileret med:\n\
+ Debugging\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Shape:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Ordered Dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: ingen håndterbare skærme fundet, afslutter\n
+$ #MapRequest
+# Openbox::process_event: MapRequest for 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X Fehler: %s(%d) opcodes %d/%d\n resource 0x%lx\n
+$ #SignalCaught
+# %s: Signal %d erhalten\n
+$ #ShuttingDown
+# Shutdown\n
+$ #Aborting
+# Abbruch... dumping core\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: Verbindung mit X Server versagt.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: kann die Display Verbindung nicht als 'close-on-exec' markieren\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): Entfernung des inkorrekten Fensters aus der 'Event Queue'\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox Menu
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Einstellungen
+$ #FocusModel
+# Fokus Model
+$ #WindowPlacement
+# Fenster Plazierung
+$ #ImageDithering
+# Image Dithering
+$ #OpaqueMove
+# Fenster beim Verschieben durchsichtig
+$ #FullMax
+# Vollständige Vergrößerung
+$ #FocusNew
+# Fokus auf Neue Fenster
+$ #FocusLast
+# Fokus auf letztes Fenster bei Arbeitsplatz Wechsel
+$ #ClickToFocus
+# Fokus durch Mausklick
+$ #SloppyFocus
+# Fokus folgt Maus
+$ #AutoRaise
+# Fenster automatisch in Vordergrund
+$ #SmartRows
+# Optimale Plazierung (Reihen)
+$ #SmartCols
+# Optimale Plazierung (Spalten)
+$ #Cascade
+# Verschobene Plazierung
+$ #LeftRight
+# Von links nach rechts
+$ #RightLeft
+# Von rechts nach links
+$ #TopBottom
+# Von oben nach unten
+$ #BottomTop
+# Von unten nach oben
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Icons
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: Fehler bei der Erstellung der Pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: Fehler bei der Erstellung des XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: nicht unterstütztes Visual\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: Fehler bei der Erstellung der Pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: Ungültige Colormap Größe %d (%d/%d/%d) - verkleinere\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: Fehler bei der Anlegung der Colormap\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: Fehler bei der Auswertung der Farbe %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: Pixmap Cache - Freigabe von %d Pixmaps\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: Cache zu groß, Ausleerung erfordert\n
+$ #ColorParseError
+# BImageControl::getColor: Color Parse Fehler: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: Color Alloc Fehler: '%s'\n
--- /dev/null
+# nls/de_DE/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/de_DE"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/de_DE; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/de_DE; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/de; \
+ ln -f -s de_DE $(DESTDIR)$(pkgdatadir)/nls/de; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/de_DE/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/de; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/de_DE; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/de_DE/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/de_DE/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/de_DE
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/de_DE/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/de_DE"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/de_DE; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/de_DE; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/de; \
+ ln -f -s de_DE $(DESTDIR)$(pkgdatadir)/nls/de; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/de_DE/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/de; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/de_DE; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: Fehler bei der Abfrage des X Servers.\n \
+ein anderer Windowmanager benutzt Display %s bereits.\n
+$ #ManagingScreen
+# BScreen::BScreen: Verwaltung von Bildschirm %d mit Visual 0x%lx, Tiefe %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): Kann Font '%s' nicht finden\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): Kann Standard Font nicht finden.\n
+$ #EmptyMenuFile
+# %s: leere Menu Datei\n
+$ #xterm
+# xterm
+$ #Restart
+# Neustart
+$ #Exit
+# Beenden
+$ #EXECError
+# BScreen::parseMenuFile: [exec] Fehler, kein Menu Eintrag und/oder Befehl definiert.\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] Fehler, kein Menu Eintrag definiert\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] Fehler, kein Menu Eintrag und/oder Datei definiert\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] Fehler, kein Menu Eintrag definiert\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] Fehler, kein Dateiname definiert\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] Fehler, '%s' ist keine normale Datei\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] Fehler, kein Menu Eintrag definiert\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] Fehler, kein Menu Eintrag definiert\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] Fehler, kein Menu Eintrag definiert\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] Fehler, kein Verzeichnis definiert\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] Fehler, '%s' ist kein Verzeichnis\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] Fehler, '%s' existiert nicht\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] Fehler, kein Menu Eintrag definiert\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Slit Ausrichtung
+$ #SlitPlacement
+# Slit Platzierung
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Toolbar
+$ #EditWkspcName
+# Arbeitsplatzname ändern
+$ #ToolbarPlacement
+# Toolbar Platzierung
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: Erstelle 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres versagt\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: kann keinen Bildschirm für root window 0x%lx finden\n
+$ #Unnamed
+# Ohne Titel
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() von 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() von 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: 0x%lx nun Child des root window\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Senden an...
+$ #Shade
+# Aufrollen
+$ #Iconify
+# Verkleinern
+$ #Maximize
+# Vergrößern
+$ #Raise
+# In den Vordergrund
+$ #Lower
+# In den Hintergrund
+$ #Stick
+# Immer sichtbar
+$ #KillClient
+# Abbrechen
+$ #Close
+# Schliessen
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Arbeitsplatz %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Arbeitsplätze
+$ #NewWorkspace
+# Neuer Arbeitsplatz
+$ #RemoveLast
+# Letzten Arbeitsplatz löschen
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: error: must specify one of: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> Display Verbindung\n\
+ -mod <x> <y> Modula Muster\n\
+ -foreground, -fg <color> Modula Vordergrund Farbe\n\
+ -background, -bg <color> Modula Hintergrund Farbe\n\n\
+ -gradient <texture> steigernde Beschaffenheit\n\
+ -from <color> Anfangsfarbe\n\
+ -to <color> Endfarbe\n\n\
+ -solid <color> volle Farbe\n\n\
+ -help Anzeige dieser Hilfe und Beendung\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Ja
+$ #No
+# Nein
+
+$ #DirectionTitle
+# Ausrichtung
+$ #DirectionHoriz
+# Horizontal
+$ #DirectionVert
+# Vertikal
+
+$ #AlwaysOnTop
+# Immer im Vorgrund
+
+$ #PlacementTitle
+# Platzierung
+$ #PlacementTopLeft
+# Oben Links
+$ #PlacementCenterLeft
+# Mitte Links
+$ #PlacementBottomLeft
+# Unten Links
+$ #PlacementTopCenter
+# Oben Mitte
+$ #PlacementBottomCenter
+# Unten Mitte
+$ #PlacementTopRight
+# Oben Rechts
+$ #PlacementCenterRight
+# Mitte Rechts
+$ #PlacementBottomRight
+# Unten Rechts
+
+$ #AutoHide
+# Automatisch Verbergen
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# Fehler: '-rc' benötigt einen Parameter\n
+$ #DISPLAYRequiresArg
+# Fehler: '-display' benötigt einen Parameter\n
+$ #WarnDisplaySet
+# Achtung: konnte die Umgebungsvariable 'DISPLAY' nicht setzen\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tDisplay Verbindung.\n\
+ -rc <string>\t\t\talternative Konfigurationsdatei.\n\
+ -version\t\t\tzeige Versionsnummer und Beendung.\n\
+ -help\t\t\t\tzeige diesen Hilfstext und Beendung.\n\n
+$ #CompileOptions
+# Optionen zum Kompilationszeitpunkt:\n\
+ Debugging\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Shape:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Ordered Dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: keine verwaltbaren Bildschirme gefunden, Abbruch\n
+$ #MapRequest
+# Openbox::process_event: MapRequest von 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: Un error de X: %s(%d) clave de operación %d/%d\n recurso 0x%lx\n
+$ #SignalCaught
+# %s: señal %d capturada\n
+$ #ShuttingDown
+# cerrando\n
+$ #Aborting
+# cancelando... generando 'core'\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: la conexión al servidor de X falló.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: no se pude marcar la conexión de despliegue como close-on-exec\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): quitando la ventana errónea de la cola de eventos\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Menú de Openbox
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Opciones de configuración
+$ #FocusModel
+# Modelo de enfoque
+$ #WindowPlacement
+# Ubicación de ventanas
+$ #ImageDithering
+# Simulación de colores en imágenes
+$ #OpaqueMove
+# Movimiento opaco de ventanas
+$ #FullMax
+# Maximización total
+$ #FocusNew
+# Enfocar ventanas nuevas
+$ #FocusLast
+# Enfocar la última ventana en el escritorio
+$ #ClickToFocus
+# Seleccionar para enfocar
+$ #SloppyFocus
+# Enfocar sin forma estricta
+$ #AutoRaise
+# Elevar automáticamente las ventanas
+$ #SmartRows
+# Ubicación inteligente (filas)
+$ #SmartCols
+# Ubicación inteligente (columnas)
+$ #Cascade
+# Ubicación en cascada
+$ #LeftRight
+# De izquierda a derecha
+$ #RightLeft
+# De derecha a izquierda
+$ #TopBottom
+# De arriba hacia abajo
+$ #BottomTop
+# De abajo hacia arriba
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Iconos
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: error creando el pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: error creando el XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: visual no soportado\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: error creando el pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: mapa no válido de colores tamaño %d (%d/%d/%d) - reduciendo\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: error en la asignación del mapa de colores\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: no se puede asignar el color %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: reserva de pixmaps - liberando %d pixmaps\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: reserva de pixmaps grande, forzando limpieza\n
+$ #ColorParseError
+# BImageControl::getColor: error evaluando el color: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: error asignando el color: '%s'\n
--- /dev/null
+# nls/es_ES/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/es_ES"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/es_ES; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/es_ES; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/es; \
+ ln -f -s es_ES $(DESTDIR)$(pkgdatadir)/nls/es; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/es_ES/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/es; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/es_ES; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/es_ES/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/es_ES/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/es_ES
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/es_ES/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/es_ES"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/es_ES; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/es_ES; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/es; \
+ ln -f -s es_ES $(DESTDIR)$(pkgdatadir)/nls/es; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/es_ES/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/es; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/es_ES; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: un error ocurrió mientras cuestionaba el servidor X.\n otro gestor de ventanas se está ejecutando en conexión de despliegue %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: gestionando la pantalla %d usando visual 0x%lx, profundidad %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): no se puede cargar el tipo de letra '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): no se puede cargar el tipo de letra por omisión.\n
+$ #EmptyMenuFile
+# %s: archivo de menú vacío\n
+$ #xterm
+# xterm
+$ #Restart
+# Reiniciar
+$ #Exit
+# Salir
+$ #EXECError
+# BScreen::parseMenuFile: [exec] error, no hay etiqueta de menú ni comando definido\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] error, no hay etiqueta de menú definida\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] error, no hay etiqueta de menú ni archivo \
+definido\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] error, no hay etiqueta de menú definida\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] error, no hay nombre de archivo definido\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] error, '%s' no es un archivo regular\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] error, no hay etiqueta de menú definida\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] error, no hay etiqueta de menú definida\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] error, no hay etiqueta de menú definida\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] error, no hay directorio definido\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] error, '%s' no es un directorio\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] error, '%s' no existe\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] error, no hay etiqueta de menú definida\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Dirección de slit
+$ #SlitPlacement
+# Ubicación de slit
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Escritorio
+$ #EditWkspcName
+# Cambiar el nombre del escritorio actual
+$ #ToolbarPlacement
+# Ubicación de la barra de herramientas
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: creando 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres falló\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: no se puede encontrar la pantalla para la ventana \
+ raíz 0x%lx\n
+$ #Unnamed
+# Sin nombre
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() para 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() para 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: el padre nuevo para 0x%lx es la raíz\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Enviar a ...
+$ #Shade
+# Enrollar
+$ #Iconify
+# Convertir en icono
+$ #Maximize
+# Maximizar
+$ #Raise
+# Elevar
+$ #Lower
+# Bajar
+$ #Stick
+# Fijar
+$ #KillClient
+# Matar al cliente
+$ #Close
+# Cerrar
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Escritorio %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Escritorios
+$ #NewWorkspace
+# Escritorio nuevo
+$ #RemoveLast
+# Quitar el último escritorio
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: error: es necesario especifiar uno de: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> conexión de despliegue\n\
+ -mod <x> <y> diseño de modula \n\
+ -foreground, -fg <color> color del primer plano de modula\n\
+ -background, -bg <color> color del fondo de modula\n\n\
+ -gradient <texture> textura de la pendiente\n\
+ -from <color> color inicial de la pendiente\n\
+ -to <color> color final de la pendiente\n\n\
+ -solid <color> color sólido\n\n\
+ -help mostrar este texto de ayuda y salir\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Sí
+$ #No
+# No
+
+$ #DirectionTitle
+# Dirección
+$ #DirectionHoriz
+# Horizontal
+$ #DirectionVert
+# Vertical
+
+$ #AlwaysOnTop
+# Siempre encima/arriba
+
+$ #PlacementTitle
+# Ubicación
+$ #PlacementTopLeft
+# Arriba a la izquierda
+$ #PlacementCenterLeft
+# Centro a la izquierda
+$ #PlacementBottomLeft
+# Abajo a la izquierda
+$ #PlacementTopCenter
+# Arriba al centro
+$ #PlacementBottomCenter
+# Abajo al centro
+$ #PlacementTopRight
+# Arriba a la derecha
+$ #PlacementCenterRight
+# Centro a la derecha
+$ #PlacementBottomRight
+# Abajo a la derecha
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# error: '-rc' requiere un argumento
+$ #DISPLAYRequiresArg
+# error: '-display' requiere un argumento
+$ #WarnDisplaySet
+# cuidado: no se puede establecer la variable de ambiente 'DISPLAY'
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string> conexión de despliegue.\n\
+ -rc <string> archivo alternativo de recuros.\n\
+ -version mostrar la versión y cerrar.\n\
+ -help mostrar este texto de ayuda y cerrar.\n\n
+$ #CompileOptions
+# Opciones durante la compilación:\n\
+ Información extra para depuración: %s\n\
+ Entrelazado: %s\n\
+ Forma: %s\n\
+ Slit: %s\n\
+ 8bpp simulación ordenada de colores en imágenes: %s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: no encontré pantallas manejables, cerrando\n
+$ #MapRequest
+# Openbox::process_event: MapRequest para 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X'i viga: %s(%d) opkood %d/%d\n resurss 0x%lx\n
+$ #SignalCaught
+# %s: signaal %d püütud\n
+$ #ShuttingDown
+# lõpetame\n
+$ #Aborting
+# katkestame... mälupilt tehtud\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: ühenduse saamine X serveriga ebaõnnestus.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: ühenduse märgistamine 'close-on-exec' ebaõnnestus\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): eemaldame vigase akna tominigute reast\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox'i Menüü
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Konfiguratsioon
+$ #FocusModel
+# Fookusmood
+$ #WindowPlacement
+# Akende paigutamine
+$ #ImageDithering
+# Piltide teravustamine
+$ #OpaqueMove
+# Nähtav akende liigutamine
+$ #FullMax
+# Üle-ekraani suurendus
+$ #FocusNew
+# Fookus uutele akendele
+$ #FocusLast
+# Fokusseeri viimane aken
+$ #ClickToFocus
+# Klikka fookuse saamiseks
+$ #SloppyFocus
+# Kaasaskäiv fookus
+$ #AutoRaise
+# Akende esiletoomine
+$ #SmartRows
+# Arukas paigutus (read)
+$ #SmartCols
+# Arukas paigutus (tulbad)
+$ #Cascade
+# Kaskaadis
+$ #LeftRight
+# Vasakult paremale
+$ #RightLeft
+# Paremalt vasakule
+$ #TopBottom
+# Ülevalt alla
+$ #BottomTop
+# Alt ülesse
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Ikoonid
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: viga pixmapi loomisel\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: viga XImage loomisel\n
+$ #UnsupVisual
+# BImage::renderXImage: toeta visuaal\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: viga pixmapi loomisel\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: vale värvipaletti suurus %d (%d/%d/%d) - vähendame\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: viga värvipaletti määramisel \n
+$ #ColorAllocFail
+# BImageControl::BImageControl: ei õnnestunud värvi määrata %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: pixmap cache - vabastame %d pixmappi\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: cache on liiga suur, sundpuhastus\n
+$ #ColorParseError
+# BImageControl::getColor: viga värvi analüüsimisel: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: viga värvi määramisel: '%s'\n
--- /dev/null
+# nls/et_EE/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/et_EE"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/et_EE ; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/et_EE; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/et_EE/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/et_EE; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/et_EE/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/et_EE/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/et_EE
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/et_EE/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/et_EE"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/et_EE ; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/et_EE; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/et_EE/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/et_EE; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: viga X serveri küsitlemisel.\n \
+teine akahaldur juba töötab displeil %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: haldame displeid %d reolutsioonis 0x%lx, vörvisügavusel %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): ei saanud laadida fonti '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): ei saanud laadida vaikimisi määratud fonti.\n
+$ #EmptyMenuFile
+# %s: tühi menüüfail\n
+$ #xterm
+# xterm
+$ #Restart
+# Restart
+$ #Exit
+# Välju
+$ #EXECError
+# BScreen::parseMenuFile: [exec] viga, menüü pealkirja ja/või käsku pole määratud\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] viga, menüü pealkirja pole määratud\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] viga, menüü pealkirja ja/või failinime \
+pole määratud\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] viga, menüü pealkirja pole määratud\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] viga, failinime pole määratud\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] viga, '%s' ei ole tavaline fail\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] viga, menüü pealkirja pole määratud\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] viga, menüü pealkirja pole määratud\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] viga, menüü pealkirja pole määratud\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] viga, kataloogi pole määratud\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] viga, '%s' pole kataloog\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] viga, '%s' pole olemas\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] viga, menüü pealkirja pole määratud\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Pragu
+$ #SlitDirection
+# Prao suund
+$ #SlitPlacement
+# Prao asukoht
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Tegumiriba
+$ #EditWkspcName
+# Muuda töölaua nime
+$ #ToolbarPlacement
+# Tegumiriba asukoht
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: loome 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres ebaõnnestus\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: ei leidnud displeid juuraknale 0x%lx\n
+$ #Unnamed
+# Nimeta
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() 0x%lx'le\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() 0x%lx'le\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: 0x%lx juurele\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Saada...
+$ #Shade
+# Varjuta
+$ #Iconify
+# Ikoniseeri
+$ #Maximize
+# Suurenda
+$ #Raise
+# Esiplaanile
+$ #Lower
+# Tahaplaanile
+$ #Stick
+# Kleebi
+$ #KillClient
+# Killi klient
+$ #Close
+# Sulge
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Töölaud %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Töölauad
+$ #NewWorkspace
+# Uus töölaud
+$ #RemoveLast
+# Eemalda viimane
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: viga: pead määratlema ühe järgnevaist: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> displei ühendus\n\
+ -mod <x> <y> moodula tapeet\n\
+ -foreground, -fg <color> esiplaani värvi moodula\n\
+ -background, -bg <color> tausta värvi moodula\n\n\
+ -gradient <texture> gradientne tekstuur\n\
+ -from <color> gradiendi algusvärv\n\
+ -to <color> gradiendi lõpuvärv\n\n\
+ -solid <color> ühtne värv\n\n\
+ -help näida seda abiteksti ja välju\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Jah
+$ #No
+# Ei
+
+$ #DirectionTitle
+# Suund
+$ #DirectionHoriz
+# Horisontaalne
+$ #DirectionVert
+# Vertikaalne
+
+$ #AlwaysOnTop
+# Alati esiplaanil
+
+$ #PlacementTitle
+# Asetus
+$ #PlacementTopLeft
+# Üleval vasakul
+$ #PlacementCenterLeft
+# Keskel vasakul
+$ #PlacementBottomLeft
+# All vasakul
+$ #PlacementTopCenter
+# Üleval keskel
+$ #PlacementBottomCenter
+# All keskel
+$ #PlacementTopRight
+# Üleval paremal
+$ #PlacementCenterRight
+# Keskel paremal
+$ #PlacementBottomRight
+# All paremal
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# viga: '-rc' vajab argumenti\n
+$ #DISPLAYRequiresArg
+# viga: '-display' vajab argumenti\n
+$ #WarnDisplaySet
+# hoiatus: ei saanud määrata keskonna muutujat 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tkasuta displei ühendust.\n\
+ -rc <string>\t\t\tkasuta alternatiivseid resursse.\n\
+ -version\t\t\tnäita versiooninumber ja välju.\n\
+ -help\t\t\t\tnäita seda abiteksti ja välju.\n\n
+$ #CompileOptions
+# Kompileerimisoptsioonid:\n\
+ Debuggimine\t\t\t%s\n\
+ Põimimine:\t\t\t%s\n\
+ Kuju:\t\t\t%s\n\
+ Pragu:\t\t\t\t%s\n\
+ 8bpp määratud teravustamine:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: ei leidnud hallatavaid displeisid, katkestame\n
+$ #MapRequest
+# Openbox::process_event: MapRequest 0x%lx'le\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: Erreur de X %s(%d) opcodes %d/%d\n ressource 0x%lx\n
+$ #SignalCaught
+# %s: signal %d capturé\n
+$ #ShuttingDown
+# arrêt du programme\n
+$ #Aborting
+# annulation... ponte du fichier core\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: échec de la connexion à X\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: impossible d'attribuer close-on-exec à l'affichage\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): suppression d'une mauvaise fenêtre de la queue\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Menu de Openbox
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Options de configuration
+$ #FocusModel
+# Mode de convergence
+$ #WindowPlacement
+# Disposition des fenêtres
+$ #ImageDithering
+# Lissage d'images
+$ #OpaqueMove
+# Déplacement opaque des fenêtres
+$ #FullMax
+# Maximization complète
+$ #FocusNew
+# Convergence de la nouvelle fenêtre
+$ #FocusLast
+# Convergence de la dernière fenêtre
+$ #ClickToFocus
+# Cliquer pour converger
+$ #SloppyFocus
+# Convergence souple
+$ #AutoRaise
+# Premier plan automatique
+$ #SmartRows
+# Disposition futée (Lignes)
+$ #SmartCols
+# Disposition futée (Colonnes)
+$ #Cascade
+# Disposition en cascade
+$ #LeftRight
+# De gauche à droite
+$ #RightLeft
+# De droite à gauche
+$ #TopBottom
+# De haut en bas
+$ #BottomTop
+# De bas en haut
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Icones
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: Erreur de création de pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: Erreur de création de XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: Image non endossée\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: Erreur de création de pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: Taille des couleurs parentes invalide%d (%d/%d/%d) - coupe\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: Erreur d'allocation des couleurs parentes\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: Echec d'allocation de couleur %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: Cache pixmap - abandon %d pixmaps\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: Cache important, nettoyage conséquent\n
+$ #ColorParseError
+# BImageControl::getColor: Erreur de lecture de couleur: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: Erreur d'allocation,couleur: '%s'\n
--- /dev/null
+# nls/fr_FR/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/fr_FR"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/fr_FR; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/fr_FR; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/fr; \
+ ln -f -s fr_FR $(DESTDIR)$(pkgdatadir)/nls/fr; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/fr_FR/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/fr; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/fr_FR; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/fr_FR/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/fr_FR/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/fr_FR
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/fr_FR/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/fr_FR"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/fr_FR; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/fr_FR; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/fr; \
+ ln -f -s fr_FR $(DESTDIR)$(pkgdatadir)/nls/fr; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/fr_FR/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/fr; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/fr_FR; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: Occurence d'une erreur pendant une requête vers X.\n \
+Un autre gestionnaire de fenêtres est déjà lancé %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: Gestion de l'écran %d avec le visuel 0x%lx, profondeur %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): Impossible de charger la police de caractère '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): Impossible de charger la police de caractère initiale.\n
+$ #EmptyMenuFile
+# %s: Fichier de menu vide\n
+$ #xterm
+# xterm
+$ #Restart
+# Redémarrer
+$ #Exit
+# Sortie
+$ #EXECError
+# BScreen::parseMenuFile: [exec] Erreur, pas d'indication de menu &/ou de commande definie\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] Erreur, aucune indication de menu définie\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] Erreur, pas d'indication de menu &/ou de nom de fichier\
+defini\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] Erreur, aucune indication de menu définie\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] Erreur, aucun nom de fichier défini\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] Erreur, '%s' est un fichier invalide\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] Erreur, aucune indication de menu définie\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] Erreur, aucune indication de menu définie\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] Erreur, aucune indication de menu définie\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] Erreur, aucun répertoire défini\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] Erreur, '%s' est un répertoire \
+invalide\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] Erreur, '%s' est inexistant\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] Erreur, aucune indication de menu définie\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# L: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Orientation du Slit
+$ #SlitPlacement
+# Disposition du Slit
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Barre d'outils
+$ #EditWkspcName
+# Bâptème du bureau courant
+$ #ToolbarPlacement
+# Disposition de la barre d'outils
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: Génération 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: Echec de XGetWindowAttributres\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: Impossible de trouver l'écran de la fenêtre racine0x%lx\n
+$ #Unnamed
+# Inconnu
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() pour 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() pour 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: réattribue 0x%lx à la fenêtre principale\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Redirige vers...
+$ #Shade
+# Ombrage
+$ #Iconify
+# Iconifie
+$ #Maximize
+# Maximize
+$ #Raise
+# Résurrection
+$ #Lower
+# Réduit
+$ #Stick
+# Epingle
+$ #KillClient
+# Massacre
+$ #Close
+# Ferme
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Bureau %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Bureaux
+$ #NewWorkspace
+# Nouveau bureau
+$ #RemoveLast
+# Supprimer le dernier
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: Erreur: il faut préciser: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <chaîne> connexion à l'écran\n\
+ -mod <x> <y> schéma\n\
+ -foreground, -fg <couleur> couleur au premier plan\n\
+ -background, -bg <couleur> couleur au second plan\n\n\
+ -gradient <texture> texture du dégradé\n\
+ -from <couleur> couleur de départ du dégradé\n\
+ -to <couleur> couleur d'arrivé du dégradé\n\n\
+ -solid <couleur> couleur pleine\n\n\
+ -help affiche ce texte d'aide et quitte\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Oui
+$ #No
+# Non
+
+$ #DirectionTitle
+# Orientation
+$ #DirectionHoriz
+# Horizontal
+$ #DirectionVert
+# Vertical
+
+$ #AlwaysOnTop
+# Toujours au-dessus
+
+$ #PlacementTitle
+# Disposition
+$ #PlacementTopLeft
+# En haut à gauche
+$ #PlacementCenterLeft
+# Au centre à gauche
+$ #PlacementBottomLeft
+# En bas à gauche
+$ #PlacementTopCenter
+# En haut au centre
+$ #PlacementBottomCenter
+# En bas au centre
+$ #PlacementTopRight
+# En haut à droite
+$ #PlacementCenterRight
+# Au centre à droite
+$ #PlacementBottomRight
+# En bas à droite
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# Erreur: '-rc' nécessite un argument\n
+$ #DISPLAYRequiresArg
+# Erreur: '-display' nécessite un argument\n
+$ #WarnDisplaySet
+# Attention: impossible d'attribuer la variable d'environnement 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <chaîne>\t\tutilise la connexion à l'affichage.\n\
+ -rc <chaîne>\t\t\tutilise un autre fichier de configuration.\n\
+ -version\t\t\taffiche la version et quitte.\n\
+ -help\t\t\t\taffiche ce texte d'aide et quitte.\n\n
+$ #CompileOptions
+# Options de compilation:\n\
+ Debugging\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Shape:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Ordered Dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: Aucun écran exploitable n'a été trouvé, annulation\n
+$ #MapRequest
+# Openbox::process_event: MapRequest pour 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: errore di X: %s(%d) opcodes %d/%d\n risorsa 0x%lx\n
+$ #SignalCaught
+# %s: segnale %d intercettato\n
+$ #ShuttingDown
+# arresto del programma\n
+$ #Aborting
+# Annullamento...generazione file core\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: connessione al server X fallita.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: non e' possibile contrassegnare la connessione al display come close-on-exec\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): rimozione finestra difettosa dalla coda degli eventi\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox Menu
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Opzioni di Configurazione
+$ #FocusModel
+# Modalita' Focus
+$ #WindowPlacement
+# Posizionamento Finestra
+$ #ImageDithering
+# Dithering dell'immagine
+$ #OpaqueMove
+# Movimento Opaco della finestra
+$ #FullMax
+# Massimo Ingrandimento
+$ #FocusNew
+# Attiva Focus alle nuove Finestre
+$ #FocusLast
+# Attiva Focus al cambio dell'Area di Lavoro
+$ #ClickToFocus
+# Clicca per il Focus
+$ #SloppyFocus
+# Focus Intelligente (Sloppy)
+$ #AutoRaise
+# Sollevamento Finestra Automatico
+$ #SmartRows
+# Posizionamento Intelligente (Righe)
+$ #SmartCols
+# Posizionamento Intelligente (Colonne)
+$ #Cascade
+# Posizionamento a Cascata
+$ #LeftRight
+# da Sinistra a Destra
+$ #RightLeft
+# da Destra a Sinistra
+$ #TopBottom
+# dall'Alto in Basso
+$ #BottomTop
+# dal Basso in Alto
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Icone
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: errore creando la pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: errore creando XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: visuale non supportata\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: errore creando la pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: grandezza della mappa di colori non valida %d (%d/%d/%d) - riduzione\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: errore di assegnazione mappa di colori\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: fallita l'assegnazione del colore %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: pixmap cache - rilascio %d pixmaps\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: la cache e' larga, forzo la pulitura\n
+$ #ColorParseError
+# BImageControl::getColor: errore di analisi del colore: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: errore di assegnazione del colore: '%s'\n
--- /dev/null
+# nls/it_IT/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/it_IT"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/it_IT; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/it_IT; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/it; \
+ ln -f -s it_IT $(DESTDIR)$(pkgdatadir)/nls/it; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/it_IT/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/it; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/it_IT; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/it_IT/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/it_IT/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/it_IT
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/it_IT/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/it_IT"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/it_IT; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/it_IT; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/it; \
+ ln -f -s it_IT $(DESTDIR)$(pkgdatadir)/nls/it; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/it_IT/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/it; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/it_IT; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: e' accaduto un errore mentre si interrogava il server X.\n \
+un'altro gestore di finestre e' attualmente in esecuzione sul display %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: gestendo schermo %d usando visuale 0x%lx, depth %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): impossibile caricare il font '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): impossibile caricare il font di default.\n
+$ #EmptyMenuFile
+# %s: file menu vuoto\n
+$ #xterm
+# xterm
+$ #Restart
+# Riavvia
+$ #Exit
+# Esci
+$ #EXECError
+# BScreen::parseMenuFile: [exec] errore, nessuna voce nel menu e/o comando definito\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] errore, nessuna voce nel menu definita\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] errore, nessuna voce nel menu e/o file\
+definto\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] errore, nessuna voce nel menu definta\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] errore, nessun file definito\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] errore, '%s' non è un file regolare\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] errore, nessuna voce nel menu definta\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] errore, nessuna voce nel menu definta\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] errore, nessuna voce nel menu definta\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] errore, nessuna cartella definita\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] errore, '%s' non e' una \
+cartella\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] errore, '%s' non esiste\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] errore, nessuna voce nel menu definita\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Direzione Slit
+$ #SlitPlacement
+# Posizionamento Slit
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Barra degli Strumenti
+$ #EditWkspcName
+# Modifica nome Area di Lavoro corrente
+$ #ToolbarPlacement
+# Posizionamento Barra
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: creazione 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres fallito\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: impossibile trovare schermo per finestra principale 0x%lx\n
+$ #Unnamed
+# Senza Nome
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() per 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() per 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: reparent 0x%lx a root\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Manda in ...
+$ #Shade
+# Arrotola
+$ #Iconify
+# Riduci a Icona
+$ #Maximize
+# Ingrandisci
+$ #Raise
+# Alza
+$ #Lower
+# Abbassa
+$ #Stick
+# Fissa
+$ #KillClient
+# Uccidi Programma
+$ #Close
+# Chiudi
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Area di Lavoro %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Aree di Lavoro
+$ #NewWorkspace
+# Nuova Area di Lavoro
+$ #RemoveLast
+# Rimuovi Ultima
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: errore: deve essere specificato uno dei seguenti: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> connessione display\n\
+ -mod <x> <y> modello di modula\n\
+ -foreground, -fg <color> colore di primo piano di modula\n\
+ -background, -bg <color> colore di secondo piano di modula\n\n\
+ -gradient <texture> trama sfumatura\n\
+ -from <color> colore d'inizio sfumatura\n\
+ -to <color> colore di fine sfumatura\n\n\
+ -solid <color> colore pieno\n\n\
+ -help mostra questo aiuto e esci\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Si
+$ #No
+# No
+
+$ #DirectionTitle
+# Direzione
+$ #DirectionHoriz
+# Orizzontale
+$ #DirectionVert
+# Verticale
+
+$ #AlwaysOnTop
+# Sempre in primo piano
+
+$ #PlacementTitle
+# Posizionamento
+$ #PlacementTopLeft
+# in Alto a Sinistra
+$ #PlacementCenterLeft
+# al Centro a Sinistra
+$ #PlacementBottomLeft
+# in Basso a Sinistra
+$ #PlacementTopCenter
+# in Alto al Centro
+$ #PlacementBottomCenter
+# in Basso al Centro
+$ #PlacementTopRight
+# in Alto a Destra
+$ #PlacementCenterRight
+# al Centro a Destra
+$ #PlacementBottomRight
+# in Basso a Destra
+
+$ #AutoHide
+# Nascondi Automaticamente
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# errore: '-rc' richiede un argomento\n
+$ #DISPLAYRequiresArg
+# errore: '-display' richiede an argomento\n
+$ #WarnDisplaySet
+# attenzione: impossibile impostare la variabile d'ambiente 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tusa connessione display.\n\
+ -rc <string>\t\t\tusa un file risorsa alternativo.\n\
+ -version\t\t\tmostra la versione e esci.\n\
+ -help\t\t\t\tmostra questo aiuto e esci.\n\n
+$ #CompileOptions
+# Opzioni in fase di compilazione:\n\
+ Debugging\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Shape:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Ordered Dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: nessuno schermo gestibile trovatono, annullamento\n
+$ #MapRequest
+# Openbox::process_event: MapRequest per 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X ¥¨¥é¡¼: %s(%d) opcodes %d/%d\n resource 0x%lx\n
+$ #SignalCaught
+# %s: ¥·¥°¥Ê¥ë %d ȯÀ¸\n
+$ #ShuttingDown
+# ½ªÎ»\n
+$ #Aborting
+# Ãæ»ß ... ¥³¥¢¥À¥ó¥×¤·¤Þ¤¹\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: X ¥µ¡¼¥Ð¤Ø¤ÎÀܳ¤Ë¼ºÇÔ\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: couldn't mark display connection as close-on-exec\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): ¥¤¥Ù¥ó¥È¥¥å¡¼¤«¤éÉÔÀµ¤Ê¥¦¥£¥ó¥É¥¦¤ò¾Ã¤·¤Þ¤¹\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox ¥á¥Ë¥å¡¼
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# ÀßÄꥪ¥×¥·¥ç¥ó
+$ #FocusModel
+# ¥Õ¥©¡¼¥«¥¹¥â¥Ç¥ë
+$ #WindowPlacement
+# ¥¦¥£¥ó¥É¥¦ÇÛÃÖ
+$ #ImageDithering
+# ²èÁü¥Ç¥£¥¶
+$ #OpaqueMove
+# ¥¦¥£¥ó¥É¥¦ÉÔÆ©ÌÀ°ÜÆ°
+$ #FullMax
+# ´°Á´ºÇÂç²½
+$ #FocusNew
+# ¿·µ¬¥¦¥£¥ó¥É¥¦¤Ë¥Õ¥©¡¼¥«¥¹
+$ #FocusLast
+# ¥ï¡¼¥¯¥¹¥Ú¡¼¥¹Êѹ¹»þ¤Ë¥¦¥£¥ó¥É¥¦¤Ë¥Õ¥©¡¼¥«¥¹
+$ #ClickToFocus
+# Click to Focus
+$ #SloppyFocus
+# Sloppy Focus
+$ #AutoRaise
+# ¼«Æ°Åª¤ËÁ°Ì̤˽Ф¹
+$ #SmartRows
+# ¸¤¯ÇÛÃÖ (¹Ô)
+$ #SmartCols
+# ¸¤¯ÇÛÃÖ (Îó)
+$ #Cascade
+# ¤º¤é¤·¤ÆÇÛÃÖ
+$ #LeftRight
+# º¸¤«¤é±¦¤Ø
+$ #RightLeft
+# ±¦¤«¤éº¸¤Ø
+$ #TopBottom
+# ¾å¤«¤é²¼¤Ø
+$ #BottomTop
+# ²¼¤«¤é¾å¤Ø
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# ¥¢¥¤¥³¥ó
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: ¥Ô¥Ã¥¯¥¹¥Þ¥Ã¥×À¸À®¥¨¥é¡¼\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: XImage À¸À®¥¨¥é¡¼\n
+$ #UnsupVisual
+# BImage::renderXImage: ̤¥µ¥Ý¡¼¥È¤Î»ë³Ð¸ú²Ì\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: ¥Ô¥Ã¥¯¥¹¥Þ¥Ã¥×À¸À®¥¨¥é¡¼\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: ÉÔÀµ¤Ê¥«¥é¡¼¥Þ¥Ã¥×¥µ¥¤¥º %d (%d/%d/%d) - ¸º¿§Ãæ\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: ¥«¥é¡¼¥Þ¥Ã¥×³ÎÊÝ¥¨¥é¡¼\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: ¥«¥é¡¼ %d/%d/%d ¤Î³ÎÊݤ˼ºÇÔ\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: ¥Ô¥Ã¥¯¥¹¥Þ¥Ã¥×¥¥ã¥Ã¥·¥å - %d ¥Ô¥Ã¥¯¥¹¥Þ¥Ã¥×¤ò²òÊü\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: ¥¥ã¥Ã¥·¥å¤¬Â礤¹¤®¤ë¤Î¤Ç¶¯À©Åª¤ËÁݽü\n
+$ #ColorParseError
+# BImageControl::getColor: ¥«¥é¡¼²òÀÏ¥¨¥é¡¼: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: ¥«¥é¡¼³ÎÊÝ¥¨¥é¡¼: '%s'\n
--- /dev/null
+# nls/ja_JP/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/ja_JP"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/ja_JP; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/ja_JP; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/ja_JP/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/ja_JP; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/ja_JP/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/ja_JP/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/ja_JP
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/ja_JP/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/ja_JP"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/ja_JP; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/ja_JP; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/ja_JP/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/ja_JP; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: X ¥µ¡¼¥ÐÌä¹ç¤»Ãæ¤Ë¥¨¥é¡¼È¯À¸\n \
+another window manager is already running on display %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: ¥¹¥¯¥ê¡¼¥ó %d ¤ò»ë³Ð¸ú²Ì 0x%lx, ¿¼¤µ %d ¤ÇÀ©¸æ\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): ¥Õ¥©¥ó¥È '%s' ¤òÆɤ߹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): ¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤òÆɤ߹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿\n
+$ #EmptyMenuFile
+# %s: ¶õ¤Î¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë\n
+$ #xterm
+# xterm
+$ #Restart
+# ºÆµ¯Æ°
+$ #Exit
+# ½ªÎ»
+$ #EXECError
+# BScreen::parseMenuFile: [exec] ¥¨¥é¡¼¡¢¥á¥Ë¥å¡¼¥é¥Ù¥ë¤È(¤¢¤ë¤¤¤Ï)¥³¥Þ¥ó¥É̤ÄêµÁ\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] ¥¨¥é¡¼¡¢¥á¥Ë¥å¡¼¥é¥Ù¥ë̤ÄêµÁ\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] ¥¨¥é¡¼¡¢¥á¥Ë¥å¡¼¥é¥Ù¥ë¤È(¤¢¤ë¤¤¤Ï)¥Õ¥¡¥¤¥ë̤̾ÄêµÁ\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] ¥¨¥é¡¼¡¢¥á¥Ë¥å¡¼¥é¥Ù¥ë̤ÄêµÁ\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] ¥¨¥é¡¼¡¢¥Õ¥¡¥¤¥ë̤̾ÄêµÁ\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] ¥¨¥é¡¼¡¢'%s' ¤Ï¥ì¥®¥å¥é¡¼¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] ¥¨¥é¡¼¡¢¥á¥Ë¥å¡¼¥é¥Ù¥ë̤ÄêµÁ\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] ¥¨¥é¡¼¡¢¥á¥Ë¥å¡¼¥é¥Ù¥ë̤ÄêµÁ\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] ¥¨¥é¡¼¡¢¥á¥Ë¥å¡¼¥é¥Ù¥ë̤ÄêµÁ\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] ¥¨¥é¡¼¡¢¥Ç¥£¥ì¥¯¥È¥ê̤̾ÄêµÁ\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] ¥¨¥é¡¼¡¢'%s' ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï\
+¤¢¤ê¤Þ¤»¤ó\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] ¥¨¥é¡¼¡¢'%s' ¤Ï¸ºß¤·¤Þ¤»¤ó\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] ¥¨¥é¡¼¡¢¥á¥Ë¥å¡¼¥é¥Ù¥ë̤ÄêµÁ\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# Éý: %4d x ¹â¤µ: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Slit ¤ÎÊý¸þ
+$ #SlitPlacement
+# Slit ¤ÎÇÛÃÖ
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# ¥Ä¡¼¥ë¥Ð¡¼
+$ #EditWkspcName
+# º£¤Î¥ï¡¼¥¯¥¹¥Ú¡¼¥¹Ì¾¤òÊÔ½¸
+$ #ToolbarPlacement
+# ¥Ä¡¼¥ë¥Ð¡¼¤Î°ÌÃÖ
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: 0x%lx ¤òÀ¸À®Ãæ\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres ¼ºÇÔ\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: ¥ë¡¼¥È¥¦¥£¥ó¥É¥¦ 0x%lx ¤ËÂФ¹¤ë¥¹¥¯¥ê¡¼¥ó¤¬\
+¤ß¤Ä¤«¤ê¤Þ¤»¤ó\n
+$ #Unnamed
+# ̾Á°¤Ê¤·
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() (0x%lx ¤ËÂФ·¤Æ)\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() (0x%lx ¤ËÂФ·¤Æ)\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: reparent 0x%lx to root\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Á÷¤êÀè ...
+$ #Shade
+# ¥·¥§¡¼¥É
+$ #Iconify
+# ¥¢¥¤¥³¥ó²½
+$ #Maximize
+# ºÇÂç²½
+$ #Raise
+# Á°Ì̤˽Ф¹
+$ #Lower
+# ÇØÌ̤˲¼¤²¤ë
+$ #Stick
+# µïºÂ¤ê
+$ #KillClient
+# ¶¯À©½ªÎ»
+$ #Close
+# ½ªÎ»
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# ¥ï¡¼¥¯¥¹¥Ú¡¼¥¹ %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# ¥ï¡¼¥¯¥¹¥Ú¡¼¥¹
+$ #NewWorkspace
+# ¿·µ¬¥ï¡¼¥¯¥¹¥Ú¡¼¥¹
+$ #RemoveLast
+# ËöÈø¤Î¥ï¡¼¥¯¥¹¥Ú¡¼¥¹¤ò¾Ã¤¹
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: ¥¨¥é¡¼: ¼¡¤ÎÃ椫¤é°ì¤Ä¤òÁªÂò¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> »ØÄê¥Ç¥£¥¹¥×¥ì¥¤¤ËÀܳ\n\
+ -mod <x> <y> ¥â¥¸¥å¡¼¥é¥Ñ¥¿¡¼¥ó\n\
+ -foreground, -fg <color> ¥â¥¸¥å¡¼¥éÁ°·Ê¿§\n\
+ -background, -bg <color> ¥â¥¸¥å¡¼¥éÇØ·Ê¿§\n\n\
+ -gradient <texture> ¥°¥é¥Ç¥£¥¨¥ó¥È¥Æ¥¯¥¹¥Á¥ã\n\
+ -from <color> ¥°¥é¥Ç¥£¥¨¥ó¥È³«»Ï¿§\n\
+ -to <color> ¥°¥é¥Ç¥£¥¨¥ó¥È½ªÃ¼¿§\n\n\
+ -solid <color> ñ¿§\n\n\
+ -help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¡¢½ªÎ»\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# ¤Ï¤¤
+$ #No
+# ¤¤¤¤¤¨
+
+$ #DirectionTitle
+# Êý¸þ
+$ #DirectionHoriz
+# ¿åÊ¿
+$ #DirectionVert
+# ¿âľ
+
+$ #AlwaysOnTop
+# ¾ï¤ËºÇÁ°Ì̤Ë
+
+$ #PlacementTitle
+# ÇÛÃÖ
+$ #PlacementTopLeft
+# º¸¾å
+$ #PlacementCenterLeft
+# º¸Ãæ±û
+$ #PlacementBottomLeft
+# º¸²¼
+$ #PlacementTopCenter
+# Ãæ±û¾å
+$ #PlacementBottomCenter
+# Ãæ±û²¼
+$ #PlacementTopRight
+# ±¦¾å
+$ #PlacementCenterRight
+# ±¦Ãæ±û
+$ #PlacementBottomRight
+# ±¦²¼
+
+$ #AutoHide
+# ¼«Æ°Åª¤Ë±£¤¹
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# ¥¨¥é¡¼: '-rc' ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹\n
+$ #DISPLAYRequiresArg
+# ¥¨¥é¡¼: '-display' ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹\n
+$ #WarnDisplaySet
+# ·Ù¹ð: ´Ä¶ÊÑ¿ô 'DISPLAY' ¤òÀßÄê¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\t»ØÄê¥Ç¥£¥¹¥×¥ì¥¤¤ËÀܳ\n\
+ -rc <string>\t\t\tÂå¤ê¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò»ÈÍÑ\n\
+ -version\t\t\t¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¡¢½ªÎ»\n\
+ -help\t\t\t\t¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¡¢½ªÎ»\n\n
+$ #CompileOptions
+# ¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó:\n\
+ Debugging\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Shape:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Ordered Dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: Áàºî²Äǽ¤Ê¥¹¥¯¥ê¡¼¥ó¤¬¤¢¤ê¤Þ¤»¤ó¡¢Ãæ»ß¤·¤Þ¤¹\n
+$ #MapRequest
+# Openbox::process_event: MapRequest (0x%lx ¤ËÂФ·¤Æ)\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X fout: %s(%d) opcodes %d/%d\n resource 0x%lx\n
+$ #SignalCaught
+# %s: signaal %d gekregen\n
+$ #ShuttingDown
+# bezig af te sluiten\n
+$ #Aborting
+# afgebroken... core bestand gedumpt\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: verbinding met X server mislukt\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: kan display verbinding niet markeren als 'close-on-exec'\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): verwijder 'bad window' van gebeurtenis wachtrij\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox menu
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Instellingen
+$ #FocusModel
+# Toetsenbord focusmodel
+$ #WindowPlacement
+# Plaatsing van vensters
+$ #ImageDithering
+# Kleurbenadering
+$ #OpaqueMove
+# Inhoud vensters zichtbaar tijdens slepen
+$ #FullMax
+# Volledig maximaliseren
+$ #FocusNew
+# Geef nieuwe vensters direct focus
+$ #FocusLast
+# Focus laatste venster bij wisselen van werkblad
+$ #ClickToFocus
+# Geef focus na muisklik in venster
+$ #SloppyFocus
+# Geef focus zodra muis in venster komt
+$ #AutoRaise
+# Vensters automatisch naar voorgrond
+$ #SmartRows
+# Optimale plaatsing (rijen)
+$ #SmartCols
+# Optimale plaatsing (kolommen)
+$ #Cascade
+# Trapsgewijs
+$ #LeftRight
+# Van links naar rechts
+$ #RightLeft
+# Van rechts naar links
+$ #TopBottom
+# Van boven naar beneden
+$ #BottomTop
+# Van beneden naar boven
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Iconen
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: kan pixmap niet aanmaken\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: kan XImage niet aanmaken\n
+$ #UnsupVisual
+# BImage::renderXImage: niet ondersteunde visual\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: kan pixmap niet aanmaken\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: ongeldige grootte kleurenmap %d (%d/%d/%d) - verkleind\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: kan geen kleurenmap aanmaken\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: kan kleur %d/%d/%d niet aanmaken\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: pixmap cache - %d pixmaps verwijderd\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: cache is te groot, leeggemaakt\n
+$ #ColorParseError
+# BImageControl::getColor: fout bij lezen kleur: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: fout bij aanmaken kleur: '%s'\n
--- /dev/null
+# nls/nl_NL/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/nl_NL"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/nl_NL; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/nl_NL; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/nl; \
+ ln -f -s nl_NL $(DESTDIR)$(pkgdatadir)/nls/nl; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/nl_NL/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/nl; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/nl_NL; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/nl_NL/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/nl_NL/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/nl_NL
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/nl_NL/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/nl_NL"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/nl_NL; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/nl_NL; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/nl; \
+ ln -f -s nl_NL $(DESTDIR)$(pkgdatadir)/nls/nl; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/nl_NL/openbox.cat; \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/nl; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/nl_NL; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: er is een fout opgetreden bij het verbinden met de X server.\n \
+er werkt al een andere window manager op display %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: manager op scherm %d met visual 0x%lx, kleurdiepte %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): kan lettertype '%s' niet laden\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): kan standaardlettertype niet laden\n
+$ #EmptyMenuFile
+# %s: leeg menu bestand\n
+$ #xterm
+# xterm
+$ #Restart
+# Herstarten
+$ #Exit
+# Afsluiten
+$ #EXECError
+# BScreen::parseMenuFile: [exec] fout, geen label en/of commando aangegeven\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] fout, geen label aangegeven\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] fout, geen label en/of bestandsnaam aangegeven\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] fout, geen label aangegeven\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] fout, geen bestandsnaam aangegeven\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] fout, '%s' is geen leesbaar bestand\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] fout, geen label aangegeven\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] fout, geen label aangegeven\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] fout, geen label aangegeven\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fout, geen directory aangegeven\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fout, '%s' is geen directory\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fout, '%s' bestaat niet\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] fout, geen label aangegeven\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# B: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Richting
+$ #SlitPlacement
+# Plaats
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Werkbalk
+$ #EditWkspcName
+# Wijzig naam van huidig werkblad
+$ #ToolbarPlacement
+# Plaats van werkbalk
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: maak window aan 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres mislukt\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: kan scherm voor root window 0x%lx niet vinden\n
+$ #Unnamed
+# Zonder titel
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() voor 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() voor 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: reparent 0x%lx naar root window\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Verplaatsen naar ...
+$ #Shade
+# Alleen titel
+$ #Iconify
+# Minimaliseren
+$ #Maximize
+# Maximaliseren
+$ #Raise
+# Voorgrond
+$ #Lower
+# Achtergrond
+$ #Stick
+# Altijd zichtbaar
+$ #KillClient
+# Afbreken
+$ #Close
+# Sluiten
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Werkblad %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Werkbladen
+$ #NewWorkspace
+# Nieuw werkblad
+$ #RemoveLast
+# Verwijder laatste werkblad
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: fout: een van -solid, -mod, -gradient moet aangegeven worden\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <displaynaam> display verbinding\n\
+ -mod <x> <y> modula patroon\n\
+ -foreground, -fg <kleur> modula voorgrondkleur\n\
+ -background, -bg <kleur> modula achtergrondkleur\n\n\
+ -gradient <textuur> gradiënt textuur\n\
+ -from <kleur> gradiënt beginkleur\n\
+ -to <kleur> gradiënt eindkleur\n\n\
+ -solid <kleur> effen kleur\n\n\
+ -help toon deze hulp tekst en stop\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Ja
+$ #No
+# Nee
+
+$ #DirectionTitle
+# Richting
+$ #DirectionHoriz
+# Horizontaal
+$ #DirectionVert
+# Vertikaal
+
+$ #AlwaysOnTop
+# Altijd op voorgrond
+
+$ #PlacementTitle
+# Plaatsing
+$ #PlacementTopLeft
+# Linksboven
+$ #PlacementCenterLeft
+# Links
+$ #PlacementBottomLeft
+# Linksonder
+$ #PlacementTopCenter
+# Middenboven
+$ #PlacementBottomCenter
+# Middenonder
+$ #PlacementTopRight
+# Rechtsboven
+$ #PlacementCenterRight
+# Rechts
+$ #PlacementBottomRight
+# Rechtsonder
+
+$ #AutoHide
+# Automatisch verbergen
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# fout: '-rc' heeft een argument nodig (bestandsnaam)\n
+$ #DISPLAYRequiresArg
+# fout: '-display' heeft een argument nodig (displaynaam)\n
+$ #WarnDisplaySet
+# waarschuwing: kan omgevingsvariabele 'DISPLAY' niet instellen\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <displaynaam> gebruik aangegeven display.\n\
+ -rc <bestandsnaam> gebruik alternatief resource bestand.\n\
+ -version toon versie en stop.\n\
+ -help toon deze hulp tekst en stop.\n\n
+$ #CompileOptions
+# Gecompileerd met instellingen:\n\
+ Debugging: %s\n\
+ Interlacing: %s\n\
+ Shape: %s\n\
+ Slit: %s\n\
+ 8bpp Ordered Dithering: %s\n\
+ Event Clobbering: %s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: geen schermen gevonden om te managen, afgesloten\n
+$ #MapRequest
+# Openbox::process_event: MapRequest voor 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X erro: %s(%d) opcodes %d/%d\n recurso 0x%lx\n
+$ #SignalCaught
+# %s: recebeido sinal %d\n
+$ #ShuttingDown
+# desligando\n
+$ #Aborting
+# abortando... gerando arquivo core\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: conecção ao servidor X falhou.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: impossivel marcar a conexão ao display como close-on-exec\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): removendo má janela da trilha de eventos\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Menu Openbox
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Configurações
+$ #FocusModel
+# Modelo de Foco
+$ #WindowPlacement
+# Posicionamento das Janelas
+$ #ImageDithering
+# Simulação de Cores em Imagens
+$ #OpaqueMove
+# Movimento Opaco de Janelas
+$ #FullMax
+# Maximização Total
+$ #FocusNew
+# Foco em Novas Janelas
+$ #FocusLast
+# Foco na Ultima Janela Da Area de Trabalho
+$ #ClickToFocus
+# Foco na Janela Quando Clicada
+$ #SloppyFocus
+# Foco na Janela Quando Apontada
+$ #AutoRaise
+# Sobrepor Janela Quando Ativa
+$ #SmartRows
+# Posicionamento em Fila
+$ #SmartCols
+# Posicionamento em Coluna
+$ #Cascade
+# Posicionamento em Cascata
+$ #LeftRight
+# Esquerda para Direita
+$ #RightLeft
+# Direita para Esquerda
+$ #TopBottom
+# Cima para Baixo
+$ #BottomTop
+# Baixo para Cima
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Icones
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: erro criando pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: erro criando XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: visual não suportado\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: erro criando pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: mapa de cores de tamanho invalido %d (%d/%d/%d) - reduzindo\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: erro localizando mapa de cores\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: falha localizando cor %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: reserva de pixmap cheia - liberando %d pixmaps\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: reserva cheia, forçando limpeza\n
+$ #ColorParseError
+# BImageControl::getColor: color parse error: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: erro localizando cor: '%s'\n
--- /dev/null
+# nls/pt_BR/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/pr_BR"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/pt_BR; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/pt_BR; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/pt_BR/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/pt_BR; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/pt_BR/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/pt_BR/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/pt_BR
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/pt_BR/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/pr_BR"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/pt_BR; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/pt_BR; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/pt_BR/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/pt_BR; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: um erro occorreu enquanto chamando o servidor X.\n \
+existe outro window menager rodando no display. %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: managing screen %d using visual 0x%lx, depth %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): impossivel carregar fonte '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): impossivel carregar fonte padrão.\n
+$ #EmptyMenuFile
+# %s: arquivo de menu vazio\n
+$ #xterm
+# xterm
+$ #Restart
+# Reiniciar
+$ #Exit
+# Sair
+$ #EXECError
+# BScreen::parseMenuFile: [exec] erro, não há indicação definida no menu e/ou comando definido\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] erro, não há indicação definida no menu\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] erro, não há indicação de menu e/ou nome de arquivo difinido\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] erro, não há indicação definida no menu\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] erro, nome de arquivo não definido\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] error, '%s' não é um arquivo regular\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] erro, não há indicação definida no menu\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] erro, não há indicação definida no menu\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] erro, não há indicação definida no menu\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] erro, não há diretorio difinido\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] erro, '%s' não é um diretorio\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] erro, '%s' não existe\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] erro, não há indicação definida no menu\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Direção
+$ #SlitPlacement
+# Posicionamento
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Toolbar
+$ #EditWkspcName
+# Renomear Area de Trabalho
+$ #ToolbarPlacement
+# Posicionamento
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: criando 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres falhou\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: impossivel encontrar tela para janela 0x%lx\n
+$ #Unnamed
+# Sem Nome
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() para 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() para 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: reparent 0x%lx to root\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Enviar Para ...
+$ #Shade
+# Encolher
+$ #Iconify
+# Minimizar
+$ #Maximize
+# Maximizar
+$ #Raise
+# Focalizar
+$ #Lower
+# Desfocalizar
+$ #Stick
+# Sempre Visivel
+$ #KillClient
+# Kill Cliente
+$ #Close
+# Fechar
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Area de Trabalho %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Areas de Trabalho
+$ #NewWorkspace
+# Nova Area de Trabalho
+$ #RemoveLast
+# Remover Ultima
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: erro: necessario especificar um dos seguintes argumentos: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> conexão com display\n\
+ -mod <x> <y> modula pattern\n\
+ -foreground, -fg <color> modula foreground color\n\
+ -background, -bg <color> modula background color\n\n\
+ -gradient <texture> textura gradiente\n\
+ -from <color> cor de inicio do gradiente\n\
+ -to <color> com do fim do gradiente\n\n\
+ -solid <color> cor solida\n\n\
+ -help mostra essa ajuda e sai\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Sim
+$ #No
+# Não
+
+$ #DirectionTitle
+# Direção
+$ #DirectionHoriz
+# Horizontal
+$ #DirectionVert
+# Vertical
+
+$ #AlwaysOnTop
+# Sempre Visivel
+
+$ #PlacementTitle
+# Posicionamento
+$ #PlacementTopLeft
+# No Alto a Esquerda
+$ #PlacementCenterLeft
+# No Centro a Esquerda
+$ #PlacementBottomLeft
+# Em Baixo a Esquerda
+$ #PlacementTopCenter
+# No Alto e no Centro
+$ #PlacementBottomCenter
+# Em Baixo e no Centro
+$ #PlacementTopRight
+# No Alto a Direita
+$ #PlacementCenterRight
+# No Meio a Direita
+$ #PlacementBottomRight
+# Em Baixo a Direita
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# erro: '-rc' requer um argumento\n
+$ #DISPLAYRequiresArg
+# erro: '-display' requer um argumento\n
+$ #WarnDisplaySet
+# aviso: não foi possivel setar a variavel de ambiente 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tusar conexão com o display.\n\
+ -rc <string>\t\t\tusar arquivo alternativo de recursos.\n\
+ -version\t\t\tmostrar versao e sair.\n\
+ -help\t\t\t\tmostrar esta ajuda e sair.\n\n
+$ #CompileOptions
+# Opções em tempo de compilação:\n\
+ Informações extras para problemas:\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Forma:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Simulação ordenada de cores em imagens:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: não foram encontradas telas administraveis, abortando..\n
+$ #MapRequest
+# Openbox::process_event: MapRequest para 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: ÏÛÉÂËÁ X ÓÅÒ×ÅÒÁ: %s(%d) ÚÎÁÞÅÎÉÑ %d/%d\n ÒÅÓÕÒÓ 0x%lx\n
+$ #SignalCaught
+# %s: ÐÏÌÕÞÅÎ ÓÉÇÎÁÌ %d \n
+$ #ShuttingDown
+# ÏÔËÌÀÞÅÎÉÅ\n
+$ #Aborting
+# ïÔÍÅÎÁ... ÓÏÚÄÁÅÔÓÑ ÄÁÍÐ core\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: ÓÏÅÄÉÎÅÎÉÅ Ó X ÓÅÒ×ÅÒÏÍ ÐÒÏ×ÁÌÅÎÏ.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: ÎÅÔ ×ÏÚÍÏÖÎÏÓÔÉ ÐÏÍÅÔÉÔØ ÁËÔÉ×ÎÙÊ ÄÉÓÐÌÅÊ ËÁË "ÚÁËÒÙÔÙÊ-ÎÁ-ÉÓÐÏÌÎÅÎÉÅ"\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): ÐÌÏÈÏÅ ÏËÎÏ ÕÄÁÌÑÅÔÓÑ ÉÚ ÏÞÅÒÅÄÉ ÓÏÂÙÔÉÊ\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# íÅÎÀ Openbox
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# ëÏÎÆÉÇÕÒÁÃÉÑ
+$ #FocusModel
+# íÏÄÅÌØ ÆÏËÕÓÉÒÏ×ËÉ
+$ #WindowPlacement
+# ðÏÌÏÖÅÎÉÅ ÏËÎÁ
+$ #ImageDithering
+# Image Dithering
+$ #OpaqueMove
+# ðÅÒÅÍÅÝÅÎÉÅ ÚÁÐÏÌÎÅÎÎÙÈ ÏËÏÎ
+$ #FullMax
+# ðÏÌÎÁÑ ÍÁËÓÉÍÉÚÁÃÉÑ
+$ #FocusNew
+# ðÅÒÅÍÅÝÁÔØ ÆÏËÕÓ ÎÁ ÎÏ×ÙÅ ÏËÎÁ
+$ #FocusLast
+# æÏËÕÓ ÎÁ ÐÏÓÌÅÄÎÅÅ ÏËÎÏ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ
+$ #ClickToFocus
+# æÏËÕÓ ÐÏ ÝÅÌÞËÕ
+$ #SloppyFocus
+# æÏËÕÓ ÐÏ ÐÅÒÅÍÅÝÅÎÉÀ
+$ #AutoRaise
+# á×ÔÏ×ÓÐÌÙÔÉÅ
+$ #SmartRows
+# "õÍÎÏÅ" ÒÁÓÐÏÌÏÖÅÎÉÅ (ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ)
+$ #SmartCols
+# "õÍÎÏÅ" ÒÁÓÐÏÌÏÖÅÎÉÅ (ÐÏ ×ÅÒÔÉËÁÌÉ)
+$ #Cascade
+# ëÁÓËÁÄÏÍ
+$ #LeftRight
+# óÌÅ×Á ÎÁÐÒÁ×Ï
+$ #RightLeft
+# óÐÒÁ×Á ÎÁÌÅ×Ï
+$ #TopBottom
+# ó×ÅÒÈÕ ×ÎÉÚ
+$ #BottomTop
+# óÎÉÚÕ ××ÅÒÈ
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# ó×ÅÒÎÕÔÙÅ\nÏËÎÁ
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÔÉÐ ×ÉÚÕÁÌÉÚÁÃÉÉ\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: ÎÅ×ÅÒÎÙÊ ÒÁÚÍÅÒ ÔÁÂÌÉÃÙ Ã×ÅÔÏ× %d (%d/%d/%d) - ÕÄÁÌÑÅÔÓÑ\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: ÏÛÉÂËÁ ÒÁÚÍÅÝÅÎÉÑ ÔÁÂÌÉÃÙ Ã×ÅÔÏ×\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: ÎÅ×ÏÚÍÏÖÎÏ ÒÁÚÍÅÓÔÉÔØ Ã×ÅÔ %d/%d/%d × ÐÁÍÑÔÉ\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: ËÜÛ ÔÏÞÅÞÎÙÈ ÉÚÏÂÒÁÖÅÎÉÊ - ÏÓ×ÏÂÏÖÄÁÅÔÓÑ %d ÂÌÏËÏ×\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: ÐÅÒÅÐÏÌÎÅÎÉÅ ËÜÛÁ, ÐÒÏÉÚ×ÏÄÉÔÓÑ ÂÙÓÔÒÁÑ ÏÞÉÓÔËÁ\n
+$ #ColorParseError
+# BImageControl::getColor: ÏÛÉÂËÁ ÒÁÚÂÏÒÁ ÓÔÒÏËÉ, ÏÐÉÓÙ×ÁÀÝÅÊ Ã×ÅÔ: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: ÏÛÉÂËÁ ÒÁÚÍÅÝÅÎÉÑ Ã×ÅÔÁ × ÐÁÍÑÔÉ: '%s'\n
--- /dev/null
+# nls/ru_RU/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/ru_RU"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/ru_RU; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/ru_RU; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/ru_RU/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/ru_RU; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/ru_RU/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/ru_RU/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/ru_RU
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/ru_RU/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/ru_RU"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/ru_RU; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/ru_RU; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/ru_RU/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/ru_RU; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÂÒÁÝÅÎÉÉ Ë X ÓÅÒ×ÅÒÕ.\n \
+ÄÒÕÇÏÊ ÍÅÎÅÄÖÅÒ ÏËÏÎ ÕÖÅ ÚÁÐÕÝÅÎ ÎÁ ÄÉÓÐÌÅÅ %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: ÏÂÓÌÕÖÉ×ÁÅÔÓÑ ÜËÒÁÎ %d, ÉÓÐÏÌØÚÕÅÍÙÊ ÔÉÐ ×ÉÚÕÁÌÉÚÁÃÉÉ 0x%lx, ÇÌÕÂÉÎÁ Ã×ÅÔÁ %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): ÎÅÔ ×ÏÚÍÏÖÎÏÓÔÉ ÚÁÇÒÕÚÉÔØ ÛÒÉÆÔ '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): ÎÅÔ ×ÏÚÍÏÖÎÏÓÔÉ ÚÁÇÒÕÚÉÔØ ÐÒÅÄÏÐÒÅÄÅÌÅÎÎÙÊ ÛÒÉÆÔ.\n
+$ #EmptyMenuFile
+# %s: ÐÕÓÔÏÊ ÆÁÊÌ ÍÅÎÀ\n
+$ #xterm
+# Xterm
+$ #Restart
+# ðÅÒÅÚÁÐÕÓË
+$ #Exit
+# ÷ÙÈÏÄ
+$ #EXECError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [exec], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÎÁÚ×ÁÎÉÅ ÐÕÎËÔÁ ÍÅÎÀ É/ÉÌÉ ÎÁÚ×ÁÎÉÅ ËÏÍÍÁÎÄÙ\n
+$ #EXITError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [exit], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÎÁÚ×ÁÎÉÅ ÐÕÎËÔÁ ÍÅÎÀ\n
+$ #STYLEError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [style], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÎÁÚ×ÁÎÉÅ ÐÕÎËÔÁ ÍÅÎÀ É/ÉÌÉ ÉÍÑ ÆÁÊÌÁ\n
+$ #CONFIGError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [config], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÎÁÚ×ÁÎÉÅ ÐÕÎËÔÁ ÍÅÎÀ\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [include], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÉÍÑ ÆÁÊÌÁ\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [include], '%s' ÎÅ ÏÂÙÞÎÙÊ ÆÁÊÌ\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [submenu], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÎÁÚ×ÁÎÉÅ ÐÕÎËÔÁ ÍÅÎÀ\n
+$ #RESTARTError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [restart], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÎÁÚ×ÁÎÉÅ ÐÕÎËÔÁ ÍÅÎÀ\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [reconfig], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÎÁÚ×ÁÎÉÅ ÐÕÎËÔÁ ÍÅÎÀ\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [stylesdir/stylesmenu], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÉÍÑ ÄÉÒÅËÔÏÒÉÉ\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [stylesdir/stylesmenu], '%s' ÎÅ ÄÉÒÅËÔÏÒÉÑ\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [stylesdir/stylesmenu], '%s' ÎÅ ÓÕÝÅÓÔ×ÕÅÔ\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: ÏÛÉÂËÁ [workspaces], ÎÅ ÏÐÒÅÄÅÌÅÎÏ ÎÁÚ×ÁÎÉÅ ÐÕÎËÔÁ ÍÅÎÀ\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# äÏËÅÒ
+$ #SlitDirection
+# ïÒÉÅÎÔÁÃÉÑ ÄÏËÅÒÁ
+$ #SlitPlacement
+# íÅÓÔÏÐÏÌÏÖÅÎÉÑ ÄÏËÅÒÁ
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# ÐÐ
+$ #NoStrftimeTimeFormatA
+# ÄÐ
+$ #ToolbarTitle
+# ôÕÌÂÁÒ
+$ #EditWkspcName
+# òÅÄÁËÔÉÒÏ×ÁÔØ ÉÍÑ ÔÅËÕÝÅÇÏ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ
+$ #ToolbarPlacement
+# íÅÓÔÏÐÏÌÏÖÅÎÉÅ ÔÕÌÂÁÒÁ
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: ÓÏÚÄÁÅÔÓÑ 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: ÐÒÏ×ÁÌÅÎ ÐÒÏÃÅÓÓ XGetWindowAttributres\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: ÎÅÔ ×ÏÚÍÏÖÎÏÓÔÉ ÎÁÊÔÉ ÜËÒÁÎ ÄÌÑ ËÏÒÎÅ×ÏÇÏ ÏËÎÁ 0x%lx\n
+$ #Unnamed
+# âÅÚÙÍÑÎÎÏÅ
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() ÄÌÑ 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() ÄÌÑ 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: reparent 0x%lx to root\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# ïÔÐÒÁ×ÉÔØ ÎÁ ...
+$ #Shade
+# ó×ÅÒÎÕÔØ × ÚÁÇÏÌÏ×ÏË
+$ #Iconify
+# ó×ÅÒÎÕÔØ × ÉËÏÎËÕ
+$ #Maximize
+# íÁËÓÉÍÉÚÉÒÏ×ÁÔØ
+$ #Raise
+# ðÏÄÎÑÔØ ÎÁ×ÅÒÈ
+$ #Lower
+# ïÐÕÓÔÉÔØ ×ÎÉÚ
+$ #Stick
+# ðÒÉËÌÅÉÔØ
+$ #KillClient
+# õÂÉÔØ ËÌÉÅÎÔÓËÏÅ ÐÒÉÌÏÖÅÎÉÅ
+$ #Close
+# úÁËÒÙÔØ
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# òÁÂÏÞÉÊ ÓÔÏÌ %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# òÁÂÏÞÉÅ ÓÔÏÌÙ
+$ #NewWorkspace
+# îÏ×ÙÊ ÒÁÂÏÞÉÊ ÓÔÏÌ
+$ #RemoveLast
+# õÄÁÌÉÔØ ÐÏÓÌÅÄÎÉÊ
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: ÏÛÉÂËÁ: ÎÅÏÂÈÏÄÉÍÏ ÚÁÄÁÔØ ÏÄÉÎ ÉÚ ÓÌÅÄÕÀÝÉÈ ËÌÀÞÅÊ: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> ÓÏÅÄÉÎÅÎÉÅ Ó ÄÉÓÐÌÅÅÍ\n\
+ -mod <x> <y> ÍÁËÅÔ ËÌÅÔËÉ\n\
+ -foreground, -fg <color> Ã×ÅÔ ÐÅÒÅÄÎÅÇÏ ÐÌÁÎÁ ËÌÅÔËÉ\n\
+ -background, -bg <color> Ã×ÅÔ ÆÏÎÁ ËÌÅÔËÉ\n\n\
+ -gradient <texture> ÇÒÁÄÉÅÎÔ\n\
+ -from <color> ÎÁÞÁÌØÎÙÊ Ã×ÅÔ ÇÒÁÄÉÅÎÔÁ\n\
+ -to <color> ËÏÎÅÞÎÙÊ Ã×ÅÔ ÇÒÁÄÉÅÎÔÁ\n\n\
+ -solid <color> ÓÐÌÏÛÎÏÊ Ã×ÅÔ\n\n\
+ -help ×Ù×ÅÓÔÉ ÜÔÕ ÐÏÄÓËÁÚËÕ É ×ÙÊÔÉ\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# äÁ
+$ #No
+# îÅÔ
+
+$ #DirectionTitle
+# îÁÐÒÁ×ÌÅÎÉÅ
+$ #DirectionHoriz
+# ðÏ ÇÏÒÉÚÏÎÔÁÌÉ
+$ #DirectionVert
+# ðÏ ×ÅÒÔÉËÁÌÉ
+
+$ #AlwaysOnTop
+# ÷ÓÅÇÄÁ ÎÁ×ÅÒÈÕ
+
+$ #PlacementTitle
+# íÅÓÔÏÐÏÌÏÖÅÎÉÅ
+$ #PlacementTopLeft
+# óÌÅ×Á ××ÅÒÈÕ
+$ #PlacementCenterLeft
+# óÌÅ×Á ÐÏ ÃÅÎÔÒÕ
+$ #PlacementBottomLeft
+# óÌÅ×Á ×ÎÉÚÕ
+$ #PlacementTopCenter
+# ó×ÅÒÈÕ ÐÏ ÃÅÎÔÒÕ
+$ #PlacementBottomCenter
+# óÎÉÚÕ ÐÏ ÃÅÎÔÒÕ
+$ #PlacementTopRight
+# óÐÒÁ×Á Ó×ÅÒÈÕ
+$ #PlacementCenterRight
+# óÐÒÁ×Á ÐÏ ÃÅÎÔÒÕ
+$ #PlacementBottomRight
+# óÐÒÁ×Á ×ÎÉÚÕ
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# ÏÛÉÂËÁ: '-rc' ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÁÒÇÕÍÅÎÔÁ\n
+$ #DISPLAYRequiresArg
+# ÏÛÉÂËÁ: '-display' ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÁÒÇÕÍÅÎÔÁ\n
+$ #WarnDisplaySet
+# ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ÐÅÒÅÍÅÎÎÕÀ ÏËÒÕÖÅÎÉÑ 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tÉÓÐÏÌØÚÏ×ÁÔØ ÚÁÄÁÎÎÙÊ ÄÉÓÐÌÅÊ.\n\
+ -rc <string>\t\t\tÉÓÐÏÌØÚÏ×ÁÔØ ÁÌØÔÅÒÎÁÔÉ×ÎÙÊ ÆÁÊÌ ÒÅÓÕÒÓÏ×.\n\
+ -version\t\t\t×Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ É ×ÙÊÔÉ.\n\
+ -help\t\t\t\t×Ù×ÅÓÔÉ ÜÔÕ ÐÏÄÓËÁÚËÕ É ×ÙÊÔÉ.\n\n
+$ #CompileOptions
+# Compile time options:\n\
+ Debugging\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Shape:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Ordered Dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: ÎÅ ÎÁÊÄÅÎÏ ÜËÒÁÎÏ× ÄÌÑ ÏÂÓÌÕÖÉ×ÁÎÉÑ, ÏÔÍÅÎÁ...\n
+$ #MapRequest
+# Openbox::process_event: MapRequest for 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: Napaka v sistemu oken X: %s(%d) operacijska koda %d/%d\n vir 0x%lx\n
+$ #SignalCaught
+# %s: prejet signal %d\n
+$ #ShuttingDown
+# zaustavitev\n
+$ #Aborting
+# prekinitev... izmet posmrtnih ostankov core\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: neuspe¹na povezava do stre¾nika X.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: povezave do prikazovalnika ni moè pripraviti do samodejne prekinitve ob zaustavitvi\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): pokvarjeno okno je odstranjeno iz dogodkovne vrste\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox Menu
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Nastavitvene izbire
+$ #FocusModel
+# Naèin fokusiranja
+$ #WindowPlacement
+# Postavitev oken
+$ #ImageDithering
+# Prelivanje slik
+$ #OpaqueMove
+# Premikanje prosojnih oken
+$ #FullMax
+# Najveèje okno
+$ #FocusNew
+# Novo okno dobi fokus
+$ #FocusLast
+# Spremenjeni fokus okna na namizju
+$ #ClickToFocus
+# Za fokus kliknite
+$ #SloppyFocus
+# Povr¹ni fokus
+$ #AutoRaise
+# Samodejno odkrivanje
+$ #SmartRows
+# Pametno postavljanje (vrstice)
+$ #SmartCols
+# Pametno postavljanje (stolpci)
+$ #Cascade
+# Kaskadno postavljanje
+$ #LeftRight
+# Od leve proti desni
+$ #RightLeft
+# Od desne proti levi
+$ #TopBottom
+# Od zgoraj navzdol
+$ #BottomTop
+# Od spodaj navzgor
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Ikone
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: napaka pri izdelavi slike (pixmap)\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: napaka pri izdelavi slike (XImage)\n
+$ #UnsupVisual
+# BImage::renderXImage: nepodprt videz\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: napaka pri izdelavi slike (pixmap)\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: prevelika barvna paleta %d (%d/%d/%d) - krèim\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: napaka pri dodeljevanju palete\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: napaka pri dodeljevanju barve %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: medpomnilnik slik - zavr¾enih je %d slik\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: medpomnilnik je zrasel, prisilno èi¹èenje\n
+$ #ColorParseError
+# BImageControl::getColor: napaka pri branju barve: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: napaka pri dodeljevanju barve: '%s'\n
+
--- /dev/null
+# nls/sl_SI/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/sl_SI"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/sl_SI; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/sl_SI; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/sl_SI/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/sl_SI; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/sl_SI/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/sl_SI/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/sl_SI
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/sl_SI/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/sl_SI"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/sl_SI; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/sl_SI; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/sl_SI/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/sl_SI; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: napaka pri poizvedovanju stre¾nika za X.\n \
+nek upravljalnik oken ¾e teèe v prikazovalniku %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: upravljenje zaslona %d z videzem 0x%lx globine %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): pisave '%s' ni moè nalo¾iti\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): privzete pisave ni moè nalo¾iti.\n
+$ #EmptyMenuFile
+# %s: prazna menujska datoteka\n
+$ #xterm
+# xterm
+$ #Restart
+# Ponovni zagon
+$ #Exit
+# Izhod
+$ #EXECError
+# BScreen::parseMenuFile: [exec] napaka: oznaki menuja ali ukaza nista doloèeni\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] napaka: oznaka menuja ni doloèena\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] napaka: oznaki menuja ali datoteke nista doloèeni\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] napaka: oznaka menuja ni doloèena\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] napaka: ime datoteke ni doloèeno\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] napaka: '%s' ni prava datoteka\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] napaka: oznaka menuja ni doloèena\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] napaka: oznaka menuja ni doloèena\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] napaka: oznaka menuja ni doloèena\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] napaka: imenik ni doloèen\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] napaka: '%s' ni imenik\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] napaka:, '%s' ne obstaja\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] napaka: oznaka menuja ni doloèena\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Re¾a
+$ #SlitDirection
+# Smer re¾e
+$ #SlitPlacement
+# Lega re¾e
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Orodna letev
+$ #EditWkspcName
+# Uredi ime trenutnega namizja
+$ #ToolbarPlacement
+# Lega orodne letve
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: izdelujem 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: neuspe¹en XGetWindowAttributres\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: zaslona za korensko okno 0x%lx ni moè najti\n
+$ #Unnamed
+# Neimenovano
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() za 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() za 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: ponovno prikljuèeno 0x%lx korenskemu oknu\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Na delovno povr¹ino...
+$ #Shade
+# Zastri
+$ #Iconify
+# Pomanj¹aj
+$ #Maximize
+# Poveèaj
+$ #Raise
+# Prika¾i
+$ #Lower
+# Zakrij
+$ #Stick
+# Prilepi
+$ #KillClient
+# Zaustavi
+$ #Close
+# Zapusti
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Delovna povr¹ina %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Delovne povr¹ine
+$ #NewWorkspace
+# Nova delovna povr¹ina
+$ #RemoveLast
+# Odstrani zadnjo
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: napaka: doloèiti je treba eno: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> prika¾i povezavo\n\
+ -mod <x> <y> vzorec\n\
+ -foreground, -fg <color> barva ospredja\n\
+ -background, -bg <color> barva ozadja\n\n\
+ -gradient <texture> prelivna tekstura\n\
+ -from <color> zaèetna barva preliva\n\
+ -to <color> konèna barva preliva\n\n\
+ -solid <color> enotna barva\n\n\
+ -help prika¾i ta navodila in konèaj\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Da
+$ #No
+# Ne
+
+$ #DirectionTitle
+# Smer
+$ #DirectionHoriz
+# Vodoravno
+$ #DirectionVert
+# Navpièno
+
+$ #AlwaysOnTop
+# Vselej na vrhu
+
+$ #PlacementTitle
+# Lega
+$ #PlacementTopLeft
+# Na vrhu in levo poravnano
+$ #PlacementCenterLeft
+# Navpièno osredninjeno in levo poravnano
+$ #PlacementBottomLeft
+# Na dnu in levo poravnano
+$ #PlacementTopCenter
+# Na vrhu in osredinjeno
+$ #PlacementBottomCenter
+# Na dnu in osredinjeno
+$ #PlacementTopRight
+# Na vrhu in desno poravnano
+$ #PlacementCenterRight
+# Navpièno osredinjeno in desno poravnano
+$ #PlacementBottomRight
+# Na dnu in desno poravnano
+
+$ #AutoHide
+# Samodejno skrivanje
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# napaka: '-rc' zahteva argument\n
+$ #DISPLAYRequiresArg
+# napaka: '-display' zahteva argument\n
+$ #WarnDisplaySet
+# opozorilo: spremenljivke okolja 'DISPLAY' ni moè nastaviti\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tuporabi prikazovalnik.\n\
+ -rc <string>\t\t\tuporabi nadomestno datoteko z viri.\n\
+ -version\t\t\tprika¾i oznako razlièice in konèaj.\n\
+ -help\t\t\t\prika¾i ta navodila in konèaj.\n\n
+$ #CompileOptions
+# Izbire pri prevajanju:\n\
+ Razhro¹èevanje\t\t\t%s\n\
+ Prepletanje:\t\t\t%s\n\
+ Oblika:\t\t\t%s\n\
+ Re¾a:\t\t\t\t%s\n\
+ Osembitno stresanje barv:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: ni moè najti upravljivih zaslonov, prekinitev\n
+$ #MapRequest
+# Openbox::process_event: MapRequest za 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X-fel: %s(%d) opkod %d/%d\n resurs 0x%lx\n
+$ #SignalCaught
+# %s: signal %d fångad\n
+$ #ShuttingDown
+# stänger ner\n
+$ #Aborting
+# avbryter... dumpar kärna\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: anslutning till X server misslyckades.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: kunde inte markera skärmanslutning som stäng-vid-exekvering\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): tar bort dåligt fönster från händelsekön\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openboxmeny
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Inställningar
+$ #FocusModel
+# Fokusmodell
+$ #WindowPlacement
+# Fönsterplacering
+$ #ImageDithering
+# Bilddithering
+$ #OpaqueMove
+# Ogenomskinlig fönsterförflyttning
+$ #FullMax
+# Full maximering
+$ #FocusNew
+# Fokus på nya fönster
+$ #FocusLast
+# Fokusera fönster vid skrivbordsbyte
+$ #ClickToFocus
+# Klicka för fokus
+$ #SloppyFocus
+# Hafsig fokus
+$ #AutoRaise
+# Höj automatiskt
+$ #SmartRows
+# Smart placering (Rader)
+$ #SmartCols
+# Smart placering (Kolumner)
+$ #Cascade
+# Kaskadplacering
+$ #LeftRight
+# Från vänster
+$ #RightLeft
+# Från höger
+$ #TopBottom
+# Uppifrån
+$ #BottomTop
+# Nerifrån
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Ikoner
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: fel under skapande av pixmap\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: fel under skapande av XImage\n
+$ #UnsupVisual
+# BImage::renderXImage: ej stöd för färgdjup\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: fel under skapande av pixmap\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: ogiltig färgkarta storlek %d (%d/%d/%d) - reducerar\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: fel under allokering av färgkarta\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: misslyckades att allokera färg %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: pixmap cache - släpper %d pixmappar\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: stor cache, tvingar upprensning\n
+$ #ColorParseError
+# BImageControl::getColor: färgfel: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: färgallokeringsfel: '%s'\n
--- /dev/null
+# nls/sv_SE/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/sv_SE"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/sv_SE; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/sv_SE; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/sv_SE/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/sv_SE; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/sv_SE/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/sv_SE/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/sv_SE
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/sv_SE/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/sv_SE"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/sv_SE; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/sv_SE; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/sv_SE/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/sv_SE; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: ett fel inträffade under en förfrågan till X servern.\n \
+en annan fönsterhanterare körs redan på skärmen %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: hanterar skärm %d med visuell 0x%lx, färgdjup %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): kunde inte ladda font '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): kunde inte ladda standardfont.\n
+$ #EmptyMenuFile
+# %s: tom menyfil\n
+$ #xterm
+# xterm
+$ #Restart
+# Starta om
+$ #Exit
+# Avsluta
+$ #EXECError
+# BScreen::parseMenuFile: [exec] fel, ingen menyetikett och/eller kommando definierat\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] fel, ingen menyetikett definierad\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] fel, ingen menyetikett och/eller filnamn definierat\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] fel, ingen menyetikett definierad\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] fel, inget filnamn definierat\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] fel, '%s' är inte en vanlig fil\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] fel, ingen menyetikett definierad\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] fel, ingen menyetikett definiera\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] fel, ingen menyetikett definierad\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fel, ingen katalog definierad\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fel, '%s' är inte en katalog\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] fel, '%s' existerar inte\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] fel, ingen menyetikett definierad\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# W: %4d x H: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Slitriktning
+$ #SlitPlacement
+# Slitplacering
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Verktygslist
+$ #EditWkspcName
+# Ändra namn på skrivbordet
+$ #ToolbarPlacement
+# Verktygslistens placering
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: skapar 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributes misslyckades\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: kan inte hitta skärm för rootfönster 0x%lx\n
+$ #Unnamed
+# Inget namn
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() för 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() för 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: återför 0x%lx till root\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Skicka till...
+$ #Shade
+# Skugga
+$ #Iconify
+# Ikonifiera
+$ #Maximize
+# Maximera
+$ #Raise
+# Höj
+$ #Lower
+# Sänk
+$ #Stick
+# Klibbig
+$ #KillClient
+# Döda klient
+$ #Close
+# Stäng
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Skrivbord %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Skrivbord
+$ #NewWorkspace
+# Nytt skrivbord
+$ #RemoveLast
+# Ta bort sista
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: fel: måste specifiera en av: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> skärmanslutning\n\
+ -mod <x> <y> modulamönster\n\
+ -foreground, -fg <color> förgrundsfärg för modulamönster\n\
+ -background, -bg <color> bakgrundsfärg för modulamönster\n\n\
+ -gradient <texture> texturlutning\n\
+ -from <color> startfärg\n\
+ -to <color> slutfärg\n\n\
+ -solid <color> solid färg\n\n\
+ -help visa denna hjälptext och avsluta\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Ja
+$ #No
+# Nej
+
+$ #DirectionTitle
+# Riktning
+$ #DirectionHoriz
+# Horisontell
+$ #DirectionVert
+# Vertikal
+
+$ #AlwaysOnTop
+# Alltid överst
+
+$ #PlacementTitle
+# Placering
+$ #PlacementTopLeft
+# Uppe till vänster
+$ #PlacementCenterLeft
+# Mitten till vänster
+$ #PlacementBottomLeft
+# Nere till vänster
+$ #PlacementTopCenter
+# Uppe i mitten
+$ #PlacementBottomCenter
+# Nere i mitten
+$ #PlacementTopRight
+# Uppe till höger
+$ #PlacementCenterRight
+# Mitten till höger
+$ #PlacementBottomRight
+# Nere till höger
+
+$ #AutoHide
+# Göm automatiskt
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# fel: '-rc' kräver ett argument\n
+$ #DISPLAYRequiresArg
+# fel: '-display' kräver ett argument\n
+$ #WarnDisplaySet
+# varning: kunde inte sätta variabeln 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tanvänd skärmanslutning.\n\
+ -rc <string>\t\t\tanvänd alternativ resursfil.\n\
+ -version\t\t\tvisa version och avsluta.\n\
+ -help\t\t\t\tvisa denna hjälptext och avsluta.\n\n
+$ #CompileOptions
+# Kompilerad med:\n\
+ Avlusning\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Form:\t\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp ordnad dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: inga hanterbara skärmar hittades, avslutar\n
+$ #MapRequest
+# Openbox::process_event: MapRequest för 0x%lx\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s : X hatasý : %s ( %d ) opkodlar %d/%d\n kaynak 0x%lx\n
+$ #SignalCaught
+# %s : %d sinyali alýndý \n
+$ #ShuttingDown
+# kapatýlýyorum\n
+$ #Aborting
+# kapatýlýyorum ... çöküntüyü býrakýyorum\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay : X sunucusuna baðlanýlýnamadý .\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay : çalýþtýrýrken kapatmada ekrana baðlanýlýnamadý \n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop() : eylem kuyruðundaki 'kötü' pencereyi siliyorum \n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox mönüsü
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# Ayarlar
+$ #FocusModel
+# Foküsleme
+$ #WindowPlacement
+# Pencere yerleþimi
+$ #ImageDithering
+# Resim oluþturmasý
+$ #OpaqueMove
+# Ekraný içerikli taþý
+$ #FullMax
+# Tam ekranla, vallahi
+$ #FocusNew
+# Yeni pencereleri foküsle
+$ #FocusLast
+# Masaüstündeki son pencereyi foküsle
+$ #ClickToFocus
+# Týklayarak foküsle
+$ #SloppyFocus
+# Aðýr foküsle
+$ #AutoRaise
+# Otomatikman yükselt
+$ #SmartRows
+# Akýllý yerleþim( Sýralar )
+$ #SmartCols
+# Akýllý yerleþim( Sütunlar )
+$ #Cascade
+# Cascade Placement
+$ #LeftRight
+# Soldan saða
+$ #RightLeft
+# Saðdan sola
+$ #TopBottom
+# Üstten aþaða
+$ #BottomTop
+# Alttan üste
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# Ikonalar
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid : resmi yaratamadým\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage : XImage'i yaratamadým\n
+$ #UnsupVisual
+# BImage::renderXImage : desteklenmeyen görünüþ( renk derinliði )\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap : resmi yaratamadým\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl : geçersiz renk haritasý büyüklüðü %d (%d/%d/%d) - azaltýyorum\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl : renk haritasý ayrýlanamadý\n
+$ #ColorAllocFail
+# BImageControl::BImageControl : rengi ayrýrken hata oldu : %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl : resim arabelleði - %d resim temizlendi\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage : arabellek büyük, temizlemeye baþlýyorum\n
+$ #ColorParseError
+# BImageControl::getColor : renk tarama hatasý : '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor : renk ayýrma hatasý : '%s'\n
--- /dev/null
+# nls/tr_TR/Makefile.am for Openbox
+#
+# -- Türkce tercüme dizini için bir yapim-dosya-tabaný
+# kabalak -- kabalak@gmx.net
+#
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/tr_TR"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/tr_TR; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/tr_TR; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/tr_TR/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/tr_TR; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/tr_TR/Makefile.am for Openbox
+#
+# -- Türkce tercüme dizini için bir yapim-dosya-tabaný
+# kabalak -- kabalak@gmx.net
+#
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/tr_TR/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/tr_TR
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/tr_TR/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/tr_TR"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/tr_TR; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/tr_TR; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/tr_TR/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/tr_TR; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen : X sunucusunu sorgularken hata oldu.\n \
+%s ekranýnda baþka bir pencere yöneticisi çalýþýyor gibi.\n
+$ #ManagingScreen
+# BScreen::BScreen : %d ekraný, 0x%lx görünümüyle , %d derinliðiyle\n
+$ #FontLoadFail
+# BScreen::LoadStyle() : '%s' yazý tipi yüklenemedi.\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): önayarlý yazý tipi yüklenemedi.\n
+$ #EmptyMenuFile
+# %s : boþ mönü dosyasý\n
+$ #xterm
+# X komutasý
+$ #Restart
+# Yeniden baþla
+$ #Exit
+# Çýk
+$ #EXECError
+# BScreen::parseMenuFile : [exec] hatasý, mönü yaftasý ve/yada komuta belirlenmedi\n
+$ #EXITError
+# BScreen::parseMenuFile : [exit] hatasý, mönü yaftasý belirlenmedi\n
+$ #STYLEError
+# BScreen::parseMenuFile : [style] hatasý, mönü yaftasý ve/yada dosya adý belirlenmedi\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] hatasý, mönü yaftasý belirlenmedi\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] hatasý, dosya adý belirlenmedi\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] hatasý, '%s' vasat bir dosya deðil\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] hatasý, mönü yaftasý belirlenmedi\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] hatasý, mönü yaftasý belirlenmedi\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] hatasý, mönü yaftasý belirlenmedi\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] hatasý, dizin adý belirlenmedi\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] hatasý, '%s' bir dizin \
+deðildir\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] hatasý, '%s' var deðil\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] hatasý, mönü yaftasý belirlenmedi\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# X: %4d x Y: %4d
+$ #GeometryFormat
+# Y: %4d x E: %4d
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Slit yönü
+$ #SlitPlacement
+# Slit yerleþimi
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# Openbox çubuðu
+$ #EditWkspcName
+# Geçerli masaüstü ismini deðiþtir
+$ #ToolbarPlacement
+# Openbox çubuðunun yerleþimi
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow : 0x%lx'i yarat#_yorum\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow : XGetWindowAttributres baþarýsýz oldu\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow : 0x%lx ana penceresi için ekraný belirleyemedim\n
+$ #Unnamed
+# Isimsiz
+$ #MapRequest
+# 0x%lx için OpenboxWindow::mapRequestEvent()\n
+$ #UnmapNotify
+# 0x%lx için OpenboxWindow::unmapNotifyEvent()\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: 0x%lx'i ana pencereyi boya\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# Gönder ...
+$ #Shade
+# Topla
+$ #Iconify
+# Ikonalaþtýr
+$ #Maximize
+# Azamileþtir
+$ #Raise
+# Alçalt
+$ #Lower
+# Yükselt
+$ #Stick
+# Yapýþýk
+$ #KillClient
+# Öldür
+$ #Close
+# Kapat
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# Masaüstü %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# Masaüstleri
+$ #NewWorkspace
+# Yeni bir masaüstü
+$ #RemoveLast
+# Son masaüstünü sil
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s : hata : -solid, -mod yada -gradient'den birisini belirlemek zorundasýn\n
+$ #Usage
+# %s 2.0 : Tel'if hakký (c) 1997-2000 Brad Hughes\n\n\
+ -display <metin> ekran belirlemesi\n\
+ -mod <x> <y> bölüþüm iþlemi\n\
+ -foreground, -fg <renk> bölüþüm önalaný\n\
+ -background, -bg <renk> bölüþüm ardalaný\n\n\
+ -gradient <kaplam> geçiþim kaplamý\n\
+ -from <renk> geçiþim baþlama rengi\n\
+ -to <renk> geçiþim bitiþ rengi\n\n\
+ -solid <renk> tek renk\n\n\
+ -help bu yardým iletisini göster ve çýk\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# Evet
+$ #No
+# Hayýr
+
+$ #DirectionTitle
+# Yön
+$ #DirectionHoriz
+# Ufki
+$ #DirectionVert
+# Dikey
+
+$ #AlwaysOnTop
+# Her zaman üstte
+
+$ #PlacementTitle
+# Yerleþim
+$ #PlacementTopLeft
+# Sol üst
+$ #PlacementCenterLeft
+# Sol orta
+$ #PlacementBottomLeft
+# Sol alt
+$ #PlacementTopCenter
+# Üst orta
+$ #PlacementBottomCenter
+# Alt orta
+$ #PlacementTopRight
+# Sað üst
+$ #PlacementCenterRight
+# Sað orta
+$ #PlacementBottomRight
+# Sað üst
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# hata : '-rc' bir argüman bekler\n
+$ #DISPLAYRequiresArg
+# hata : '-display' bir argüman bekler\n
+$ #WarnDisplaySet
+# ikaz : 'DISPLAY' verisini oturtamadým\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <metin>\t\tekraný kullan.\n\
+ -rc <metin>\t\t\tbaþka bir ayarlama dosyasýný kullan.\n\
+ -version\t\t\tnesil bilgisini gösterir ve çýkar.\n\
+ -help\t\t\t\tbu yardým iletisini gösterir ve çýkar.\n\n
+$ #CompileOptions
+# Denetleme seçenekleri :\n\
+ Bilgilendirme\t\t\t%s\n\
+ Týzlama:\t\t\t%s\n\
+ Gölgeleme:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ R8b'e göre týzla:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: yönetebilinen ekran bulunamadý, bitiriliyorum\n
+$ #MapRequest
+# Openbox::process_event: 0x%lx için MapRequest\n
--- /dev/null
+$set 1 #BaseDisplay
+
+$ #XError
+# %s: X ´íÎó: %s(%d) opcodes %d/%d\n resource 0x%lx\n
+$ #SignalCaught
+# %s: ²¶»ñÐźŠ%d \n
+$ #ShuttingDown
+# ¹Ø±Õ\n
+$ #Aborting
+# ÕýÔÚÍ˳ö... ´æ´¢ºËÐÄÊý¾Ý\n
+$ #XConnectFail
+# BaseDisplay::BaseDisplay: Á¬½Ó X ·þÎñÆ÷ʧ°Ü.\n
+$ #CloseOnExecFail
+# BaseDisplay::BaseDisplay: couldn't mark display connection as close-on-exec\n
+$ #BadWindowRemove
+# BaseDisplay::eventLoop(): ÕýÔÚ´Óʼþ¶ÓÁÐÖÐɾ³ý»µ´°¿Ú\n
--- /dev/null
+$set 2 #Basemenu
+
+$ #OpenboxMenu
+# Openbox ²Ëµ¥
--- /dev/null
+$set 3 #Configmenu
+
+$ #ConfigOptions
+# ÅäÖÃÑ¡Ïî
+$ #FocusModel
+# ¾Û½¹Ä£Ê½
+$ #WindowPlacement
+# ´°¿Ú·ÅÖÃ
+$ #ImageDithering
+# ͼÏñµ÷г
+$ #OpaqueMove
+# ÏÔʾÒƶ¯´°¿ÚÄÚÈÝ
+$ #FullMax
+# ÍêÈ«×î´ó»¯
+$ #FocusNew
+# ¾Û½¹Ð´°¿Ú
+$ #FocusLast
+# ×ÀÃæ¸Ä±äʱ¾Û½¹´°¿Ú
+$ #ClickToFocus
+# µã»÷¾Û½¹
+$ #SloppyFocus
+# ×Ô¶¯¾Û½¹
+$ #AutoRaise
+# ×Ô¶¯·ÅÇ°
+$ #SmartRows
+# ×Ô¶¯·ÅÖÃ(ÐÐ)
+$ #SmartCols
+# ×Ô¶¯·ÅÖÃ(ÁÐ)
+$ #Cascade
+# ²ãµþ·ÅÖÃ
+$ #LeftRight
+# ´Ó×óµ½ÓÒ
+$ #RightLeft
+# ´ÓÓÒµ½×ó
+$ #TopBottom
+# ´ÓÉϵ½ÏÂ
+$ #BottomTop
+# ´Óϵ½ÉÏ
--- /dev/null
+$set 4 #Icon
+
+$ #Icons
+# ͼ±ê
--- /dev/null
+$set 5 #Image
+
+$ #ErrorCreatingSolidPixmap
+# BImage::render_solid: ´´½¨pixmap³ö´í\n
+$ #ErrorCreatingXImage
+# BImage::renderXImage: ´´½¨XImage³ö´í\n
+$ #UnsupVisual
+# BImage::renderXImage: unsupported visual\n
+$ #ErrorCreatingPixmap
+# BImage::renderPixmap: ´´½¨pixmap³ö´í\n
+$ #InvalidColormapSize
+# BImageControl::BImageControl: invalid colormap size %d (%d/%d/%d) - reducing\n
+$ #ErrorAllocatingColormap
+# BImageControl::BImageControl: error allocating colormap\n
+$ #ColorAllocFail
+# BImageControl::BImageControl: failed to alloc color %d/%d/%d\n
+$ #PixmapRelease
+# BImageControl::~BImageControl: pixmap cache - releasing %d pixmaps\n
+$ #PixmapCacheLarge
+# BImageControl::renderImage: cache is large, forcing cleanout\n
+$ #ColorParseError
+# BImageControl::getColor: color parse error: '%s'\n
+$ #ColorAllocError
+# BImageControl::getColor: color alloc error: '%s'\n
--- /dev/null
+# nls/zh_CN/Makefile.am for Openbox
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/zh_CN"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/zh_CN; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/zh_CN; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/zh_CN/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/zh_CN; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# nls/zh_CN/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+NLSTEST = @NLS@
+CLEANFILES = openbox.cat
+MAINTAINERCLEANFILES = Makefile.in Translation.m
+DISTCLEANFILES = Translation.m
+MFILES = @srcdir@/BaseDisplay.m @srcdir@/Basemenu.m @srcdir@/Configmenu.m @srcdir@/Icon.m @srcdir@/Image.m @srcdir@/Screen.m @srcdir@/Slit.m @srcdir@/Toolbar.m @srcdir@/Window.m @srcdir@/Windowmenu.m @srcdir@/Workspace.m @srcdir@/Workspacemenu.m @srcdir@/openbox.m @srcdir@/common.m @srcdir@/main.m @srcdir@/bsetroot.m
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu nls/zh_CN/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = nls/zh_CN
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu nls/zh_CN/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-data-local
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-local
+uninstall: uninstall-am
+all-am: Makefile all-local
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-local install-data-am install-data install-am install \
+uninstall-local uninstall-am uninstall all-local all-redirect all-am \
+all installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all-local: openbox.cat
+install-data-local: openbox.cat
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ echo "Installing catalog in $(DESTDIR)$(pkgdatadir)/nls/zh_CN"; \
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/nls/zh_CN; \
+ $(INSTALL_DATA) openbox.cat $(DESTDIR)$(pkgdatadir)/nls/zh_CN; \
+ fi
+uninstall-local:
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ rm -f $(DESTDIR)$(pkgdatadir)/nls/zh_CN/openbox.cat; \
+ rmdir $(DESTDIR)$(pkgdatadir)/nls/zh_CN; \
+ fi
+
+Translation.m: $(MFILES)
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ awk -f @srcdir@/../convert.awk output=Translation.m $(MFILES); \
+ fi
+
+openbox.cat: Translation.m
+ @if test x$(NLSTEST) = "x-DNLS"; then \
+ $(gencat_cmd) openbox.cat Translation.m; \
+ fi
+
+distclean-local:
+ rm -f *\~
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+$set 6 #Screen
+
+$ #AnotherWMRunning
+# BScreen::BScreen: ²éѯX·þÎñÆ÷ʱ³ö´í.\n \
+ÒѾÓÐÁíÒ»¸ö´°¿Ú¹ÜÀíÆ÷ÔÚÔËÐÐ %s.\n
+$ #ManagingScreen
+# BScreen::BScreen: ¶ÔÆÁÄ» %d ʹÓÃÊÓ 0x%lx, Éî¶È %d\n
+$ #FontLoadFail
+# BScreen::LoadStyle(): ÎÞ·¨ÔØÈë×ÖÌå '%s'\n
+$ #DefaultFontLoadFail
+# BScreen::LoadStyle(): ÎÞ·¨ÔØÈëĬÈÏ×ÖÌå.\n
+$ #EmptyMenuFile
+# %s: Çå¿Õ²Ëµ¥Îļþ\n
+$ #xterm
+# xterm
+$ #Restart
+# ÖØпªÊ¼
+$ #Exit
+# Í˳ö
+$ #EXECError
+# BScreen::parseMenuFile: [exec] ´íÎó, ûÓв˵¥µÄ±êÌâ»òÃüÁî\n
+$ #EXITError
+# BScreen::parseMenuFile: [exit] ´íÎó, ûÓв˵¥µÄ±êÌâ\n
+$ #STYLEError
+# BScreen::parseMenuFile: [style] ´íÎó, ûÓв˵¥±êÌâ»òÎļþÃû\n
+$ #CONFIGError
+# BScreen::parseMenuFile: [config] ´íÎó, ûÓв˵¥±êÌâ\n
+$ #INCLUDEError
+# BScreen::parseMenuFile: [include] ´íÎó, ûÓÐÎļþÃû\n
+$ #INCLUDEErrorReg
+# BScreen::parseMenuFile: [include] ´íÎó, '%s' ²»ÊÇÒ»¸öÆÕͨÎļþ\n
+$ #SUBMENUError
+# BScreen::parseMenuFile: [submenu] ´íÎó, ûÓв˵¥±êÌâ\n
+$ #RESTARTError
+# BScreen::parseMenuFile: [restart] ´íÎó, ûÓв˵¥±êÌâ\n
+$ #RECONFIGError
+# BScreen::parseMenuFile: [reconfig] ´íÎó, ûÓв˵¥±êÌâ\n
+$ #STYLESDIRError
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] ´íÎó, ûÓÐÖ¸ÃûĿ¼\n
+$ #STYLESDIRErrorNotDir
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] ´íÎó, '%s' ²»ÊÇĿ¼\n
+$ #STYLESDIRErrorNoExist
+# BScreen::parseMenuFile: [stylesdir/stylesmenu] ´íÎó, '%s' ²»´æÔÚ\n
+$ #WORKSPACESError
+# BScreen::parseMenuFile: [workspaces] ´íÎó, ûÓв˵¥±êÌâ\n
+$ #PositionLength
+# 0: 0000 x 0: 0000
+$ #PositionFormat
+# ×ó: %4d x ÉÏ: %4d
+$ #GeometryFormat
+# ¿í: %4d x ¸ß: %4d
+
--- /dev/null
+$set 7 #Slit
+
+$ #SlitTitle
+# Slit
+$ #SlitDirection
+# Slit ·½Ïò
+$ #SlitPlacement
+# Slit ·ÅÖÃ
--- /dev/null
+$set 8 #Toolbar
+
+$ #NoStrftimeLength
+# 00:00000
+$ #NoStrftimeDateFormat
+# %02d/%02d/%02d
+$ #NoStrftimeDateFormatEu
+# %02d.%02d.%02d
+$ #NoStrftimeTimeFormat24
+# %02d:%02d
+$ #NoStrftimeTimeFormat12
+# %02d:%02d %sm
+$ #NoStrftimeTimeFormatP
+# p
+$ #NoStrftimeTimeFormatA
+# a
+$ #ToolbarTitle
+# ¹¤¾ßÌõ
+$ #EditWkspcName
+# ±à¼×ÀÃæÃû
+$ #ToolbarPlacement
+# ¹¤¾ßÌõ·ÅÖÃ
--- /dev/null
+$set 9 #Window
+
+
+$ #Creating
+# OpenboxWindow::OpenboxWindow: ÕýÔÚ´´½¨ 0x%lx\n
+$ #XGetWindowAttributesFail
+# OpenboxWindow::OpenboxWindow: XGetWindowAttributres ʧ°Ü\n
+$ #CannotFindScreen
+# OpenboxWindow::OpenboxWindow: cannot find screen for root window 0x%lx\n
+$ #Unnamed
+# ÎÞÃüÃû
+$ #MapRequest
+# OpenboxWindow::mapRequestEvent() for 0x%lx\n
+$ #UnmapNotify
+# OpenboxWindow::unmapNotifyEvent() for 0x%lx\n
+$ #UnmapNotifyReparent
+# OpenboxWindow::unmapnotifyEvent: reparent 0x%lx to root\n
--- /dev/null
+$set 10 #Windowmenu
+
+$ #SendTo
+# ·¢Ë͵½...
+$ #Shade
+# ¾íÁ±
+$ #Iconify
+# ͼ±ê»¯
+$ #Maximize
+# ×î´ó»¯
+$ #Raise
+# ·ÅÇ°
+$ #Lower
+# ·Åºó
+$ #Stick
+# ¶¤×¡
+$ #KillClient
+# ɱËÀ
+$ #Close
+# ¹Ø±Õ
--- /dev/null
+$set 11 #Workspace
+
+$ #DefaultNameFormat
+# ×ÀÃæ %d
--- /dev/null
+$set 12 #Workspacemenu
+
+$ #WorkspacesTitle
+# ×ÀÃæ
+$ #NewWorkspace
+# н¨×ÀÃæ
+$ #RemoveLast
+# ɾ³ý×ÀÃæ
--- /dev/null
+$set 16 #bsetroot
+
+$ #MustSpecify
+# %s: ´íÎó: ±ØÐë´ÓÖÐÖ¸¶¨Ò»¸ö: -solid, -mod, -gradient\n
+$ #Usage
+# %s 2.0: (c) 1997-2000 Brad Hughes\n\n\
+ -display <string> ÏÔʾÁ¬½Ó\n\
+ -mod <x> <y> ģʽ\n\
+ -foreground, -fg <color> Ç°¾°É«\n\
+ -background, -bg <color> ±³¾°É«\n\n\
+ -gradient <texture> ½¥½øÎÆÀí\n\
+ -from <color> ½¥½ø¿ªÊ¼É«\n\
+ -to <color> ½¥½ø½áÊøÉ«\n\n\
+ -solid <color> µ¥Ò»É«\n\n\
+ -help ÏÔʾÕâ¸ö°ïÖú\n
+
--- /dev/null
+$set 15 #Common
+
+$ #Yes
+# ÊÇ
+$ #No
+# ·ñ
+
+$ #DirectionTitle
+# ·½Ïò
+$ #DirectionHoriz
+# ˮƽ
+$ #DirectionVert
+# ´¹Ö±
+
+$ #AlwaysOnTop
+# ×ÜÔÚ×îÉÏÃæ
+
+$ #PlacementTitle
+# ·ÅÖÃ
+$ #PlacementTopLeft
+# ÉÏ×ó
+$ #PlacementCenterLeft
+# ÖÐ×ó
+$ #PlacementBottomLeft
+# ÏÂ×ó
+$ #PlacementTopCenter
+# ÉÏÖÐ
+$ #PlacementBottomCenter
+# ÏÂÖÐ
+$ #PlacementTopRight
+# ÉÏÓÒ
+$ #PlacementCenterRight
+# ÖÐÓÒ
+$ #PlacementBottomRight
+# ÏÂÓÒ
+
+$ #AutoHide
+# ×Ô¶¯Òþ²Ø
--- /dev/null
+$set 14 #main
+
+$ #RCRequiresArg
+# ´íÎó: '-rc' ÐèÒª²ÎÊý\n
+$ #DISPLAYRequiresArg
+# ´íÎó: '-display' ÐèÒª²ÎÊý\n
+$ #WarnDisplaySet
+# ¾¯¸æ: ²»ÄÜÉèÖû·¾³±äÁ¿ 'DISPLAY'\n
+$ #Usage
+# Openbox %s: (c) 2002 - 2002 Ben Jansens\n\
+ \t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\
+ \t\t\t 1997 - 2000 Brad Hughes\n\n\
+ -display <string>\t\tʹÓÃÏÔʾÁ¬½Ó.\n\
+ -rc <string>\t\t\tʹÓÃÆäËûµÄ×ÊÔ´Îļþ.\n\
+ -version\t\t\tÏÔʾ°æ±¾.\n\
+ -help\t\t\t\tÏÔʾÕâ¸ö°ïÖú.\n\n
+$ #CompileOptions
+# ±àÒëÑ¡Ïî:\n\
+ Debugging\t\t\t%s\n\
+ Interlacing:\t\t\t%s\n\
+ Shape:\t\t\t%s\n\
+ Slit:\t\t\t\t%s\n\
+ 8bpp Ordered Dithering:\t%s\n\
+ Event Clobbering:\t\t%s\n\n
--- /dev/null
+$set 13 #openbox
+
+$ #NoManagableScreens
+# Openbox::Openbox: ûÓÐÕÒµ½¿É¿ØÖƵÄÆÁÄ»£¬Í˳ö...\n
+$ #MapRequest
+# Openbox::process_event: MapRequest for 0x%lx\n
--- /dev/null
+// BaseDisplay.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+#include <X11/cursorfont.h>
+#include <X11/keysym.h>
+
+#ifdef SHAPE
+# include <X11/extensions/shape.h>
+#endif // SHAPE
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif // HAVE_FCNTL_H
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_UNISTD_H
+# include <sys/types.h>
+# include <unistd.h>
+#endif // HAVE_UNISTD_H
+
+#ifdef HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif // HAVE_SYS_SELECT_H
+
+#ifdef HAVE_SIGNAL_H
+# include <signal.h>
+#endif // HAVE_SIGNAL_H
+
+#ifndef SA_NODEFER
+# ifdef SA_INTERRUPT
+# define SA_NODEFER SA_INTERRUPT
+# else // !SA_INTERRUPT
+# define SA_NODEFER (0)
+# endif // SA_INTERRUPT
+#endif // SA_NODEFER
+
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/types.h>
+# include <sys/wait.h>
+#endif // HAVE_SYS_WAIT_H
+
+#if defined(HAVE_PROCESS_H) && defined(__EMX__)
+# include <process.h>
+#endif // HAVE_PROCESS_H __EMX__
+
+#include "i18n.h"
+#include "BaseDisplay.h"
+#include "LinkedList.h"
+#include "Timer.h"
+
+// X error handler to handle any and all X errors while the application is
+// running
+static Bool internal_error = False;
+static Window last_bad_window = None;
+
+BaseDisplay *base_display;
+
+static int handleXErrors(Display *d, XErrorEvent *e) {
+#ifdef DEBUG
+ char errtxt[128];
+
+ XGetErrorText(d, e->error_code, errtxt, 128);
+ fprintf(stderr, i18n->getMessage(BaseDisplaySet, BaseDisplayXError,
+ "%s: X error: %s(%d) opcodes %d/%d\n resource 0x%lx\n"),
+ base_display->getApplicationName(), errtxt, e->error_code,
+ e->request_code, e->minor_code, e->resourceid);
+#endif // DEBUG
+
+ if (e->error_code == BadWindow) last_bad_window = e->resourceid;
+ if (internal_error) abort();
+
+ return(False);
+}
+
+
+// signal handler to allow for proper and gentle shutdown
+
+#ifndef HAVE_SIGACTION
+static RETSIGTYPE signalhandler(int sig) {
+#else // HAVE_SIGACTION
+static void signalhandler(int sig) {
+#endif // HAVE_SIGACTION
+
+ static int re_enter = 0;
+
+ switch (sig) {
+ case SIGCHLD:
+ int status;
+ waitpid(-1, &status, WNOHANG | WUNTRACED);
+
+#ifndef HAVE_SIGACTION
+ // assume broken, braindead sysv signal semantics
+ signal(SIGCHLD, (RETSIGTYPE (*)(int)) signalhandler);
+#endif // HAVE_SIGACTION
+
+ break;
+
+ default:
+ if (base_display->handleSignal(sig)) {
+
+#ifndef HAVE_SIGACTION
+ // assume broken, braindead sysv signal semantics
+ signal(sig, (RETSIGTYPE (*)(int)) signalhandler);
+#endif // HAVE_SIGACTION
+
+ return;
+ }
+
+ fprintf(stderr, i18n->getMessage(BaseDisplaySet, BaseDisplaySignalCaught,
+ "%s: signal %d caught\n"),
+ base_display->getApplicationName(), sig);
+
+ if (! base_display->isStartup() && ! re_enter) {
+ internal_error = True;
+
+ re_enter = 1;
+ fprintf(stderr, i18n->getMessage(BaseDisplaySet, BaseDisplayShuttingDown,
+ "shutting down\n"));
+ base_display->shutdown();
+ }
+
+ if (sig != SIGTERM && sig != SIGINT) {
+ fprintf(stderr, i18n->getMessage(BaseDisplaySet, BaseDisplayAborting,
+ "aborting... dumping core\n"));
+ abort();
+ }
+
+ exit(0);
+
+ break;
+ }
+}
+
+
+// convenience functions
+#ifndef __EMX__
+void bexec(const char *command, char* displaystring) {
+ if (! fork()) {
+ setsid();
+ putenv(displaystring);
+ execl("/bin/sh", "/bin/sh", "-c", command, NULL);
+ exit(0);
+ }
+}
+#endif // !__EMX__
+
+char *bstrdup(const char *s) {
+ const int l = strlen(s) + 1;
+ char *n = new char[l];
+ strncpy(n, s, l);
+ return n;
+}
+
+BaseDisplay::BaseDisplay(char *app_name, char *dpy_name) {
+ application_name = app_name;
+
+ _startup = True;
+ _shutdown = False;
+ server_grabs = 0;
+ last_bad_window = None;
+
+ ::base_display = this;
+
+#ifdef HAVE_SIGACTION
+ struct sigaction action;
+
+ action.sa_handler = signalhandler;
+ action.sa_mask = sigset_t();
+ action.sa_flags = SA_NOCLDSTOP | SA_NODEFER;
+
+ sigaction(SIGPIPE, &action, NULL);
+ sigaction(SIGSEGV, &action, NULL);
+ sigaction(SIGFPE, &action, NULL);
+ sigaction(SIGTERM, &action, NULL);
+ sigaction(SIGINT, &action, NULL);
+ sigaction(SIGCHLD, &action, NULL);
+ sigaction(SIGHUP, &action, NULL);
+ sigaction(SIGUSR1, &action, NULL);
+ sigaction(SIGUSR2, &action, NULL);
+#else // !HAVE_SIGACTION
+ signal(SIGPIPE, (RETSIGTYPE (*)(int)) signalhandler);
+ signal(SIGSEGV, (RETSIGTYPE (*)(int)) signalhandler);
+ signal(SIGFPE, (RETSIGTYPE (*)(int)) signalhandler);
+ signal(SIGTERM, (RETSIGTYPE (*)(int)) signalhandler);
+ signal(SIGINT, (RETSIGTYPE (*)(int)) signalhandler);
+ signal(SIGUSR1, (RETSIGTYPE (*)(int)) signalhandler);
+ signal(SIGUSR2, (RETSIGTYPE (*)(int)) signalhandler);
+ signal(SIGHUP, (RETSIGTYPE (*)(int)) signalhandler);
+ signal(SIGCHLD, (RETSIGTYPE (*)(int)) signalhandler);
+#endif // HAVE_SIGACTION
+
+ if (! (display = XOpenDisplay(dpy_name))) {
+ fprintf(stderr, i18n->getMessage(BaseDisplaySet, BaseDisplayXConnectFail,
+ "BaseDisplay::BaseDisplay: connection to X server failed.\n"));
+ ::exit(2);
+ } else if (fcntl(ConnectionNumber(display), F_SETFD, 1) == -1) {
+ fprintf(stderr,
+ i18n->getMessage(BaseDisplaySet, BaseDisplayCloseOnExecFail,
+ "BaseDisplay::BaseDisplay: couldn't mark display connection "
+ "as close-on-exec\n"));
+ ::exit(2);
+ }
+
+ number_of_screens = ScreenCount(display);
+ display_name = XDisplayName(dpy_name);
+
+#ifdef SHAPE
+ shape.extensions = XShapeQueryExtension(display, &shape.event_basep,
+ &shape.error_basep);
+#else // !SHAPE
+ shape.extensions = False;
+#endif // SHAPE
+
+ xa_wm_colormap_windows =
+ XInternAtom(display, "WM_COLORMAP_WINDOWS", False);
+ xa_wm_protocols = XInternAtom(display, "WM_PROTOCOLS", False);
+ xa_wm_state = XInternAtom(display, "WM_STATE", False);
+ xa_wm_change_state = XInternAtom(display, "WM_CHANGE_STATE", False);
+ xa_wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False);
+ xa_wm_take_focus = XInternAtom(display, "WM_TAKE_FOCUS", False);
+ motif_wm_hints = XInternAtom(display, "_MOTIF_WM_HINTS", False);
+
+ openbox_hints = XInternAtom(display, "_BLACKBOX_HINTS", False);
+ openbox_attributes = XInternAtom(display, "_BLACKBOX_ATTRIBUTES", False);
+ openbox_change_attributes =
+ XInternAtom(display, "_BLACKBOX_CHANGE_ATTRIBUTES", False);
+
+ openbox_structure_messages =
+ XInternAtom(display, "_BLACKBOX_STRUCTURE_MESSAGES", False);
+ openbox_notify_startup =
+ XInternAtom(display, "_BLACKBOX_NOTIFY_STARTUP", False);
+ openbox_notify_window_add =
+ XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_ADD", False);
+ openbox_notify_window_del =
+ XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_DEL", False);
+ openbox_notify_current_workspace =
+ XInternAtom(display, "_BLACKBOX_NOTIFY_CURRENT_WORKSPACE", False);
+ openbox_notify_workspace_count =
+ XInternAtom(display, "_BLACKBOX_NOTIFY_WORKSPACE_COUNT", False);
+ openbox_notify_window_focus =
+ XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_FOCUS", False);
+ openbox_notify_window_raise =
+ XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_RAISE", False);
+ openbox_notify_window_lower =
+ XInternAtom(display, "_BLACKBOX_NOTIFY_WINDOW_LOWER", False);
+
+ openbox_change_workspace =
+ XInternAtom(display, "_BLACKBOX_CHANGE_WORKSPACE", False);
+ openbox_change_window_focus =
+ XInternAtom(display, "_BLACKBOX_CHANGE_WINDOW_FOCUS", False);
+ openbox_cycle_window_focus =
+ XInternAtom(display, "_BLACKBOX_CYCLE_WINDOW_FOCUS", False);
+
+#ifdef NEWWMSPEC
+
+ net_supported = XInternAtom(display, "_NET_SUPPORTED", False);
+ net_client_list = XInternAtom(display, "_NET_CLIENT_LIST", False);
+ net_client_list_stacking = XInternAtom(display, "_NET_CLIENT_LIST_STACKING", False);
+ net_number_of_desktops = XInternAtom(display, "_NET_NUMBER_OF_DESKTOPS", False);
+ net_desktop_geometry = XInternAtom(display, "_NET_DESKTOP_GEOMETRY", False);
+ net_desktop_viewport = XInternAtom(display, "_NET_DESKTOP_VIEWPORT", False);
+ net_current_desktop = XInternAtom(display, "_NET_CURRENT_DESKTOP", False);
+ net_desktop_names = XInternAtom(display, "_NET_DESKTOP_NAMES", False);
+ net_active_window = XInternAtom(display, "_NET_ACTIVE_WINDOW", False);
+ net_workarea = XInternAtom(display, "_NET_WORKAREA", False);
+ net_supporting_wm_check = XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", False);
+ net_virtual_roots = XInternAtom(display, "_NET_VIRTUAL_ROOTS", False);
+
+ net_close_window = XInternAtom(display, "_NET_CLOSE_WINDOW", False);
+ net_wm_moveresize = XInternAtom(display, "_NET_WM_MOVERESIZE", False);
+
+ net_properties = XInternAtom(display, "_NET_PROPERTIES", False);
+ net_wm_name = XInternAtom(display, "_NET_WM_NAME", False);
+ net_wm_desktop = XInternAtom(display, "_NET_WM_DESKTOP", False);
+ net_wm_window_type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
+ net_wm_state = XInternAtom(display, "_NET_WM_STATE", False);
+ net_wm_strut = XInternAtom(display, "_NET_WM_STRUT", False);
+ net_wm_icon_geometry = XInternAtom(display, "_NET_WM_ICON_GEOMETRY", False);
+ net_wm_icon = XInternAtom(display, "_NET_WM_ICON", False);
+ net_wm_pid = XInternAtom(display, "_NET_WM_PID", False);
+ net_wm_handled_icons = XInternAtom(display, "_NET_WM_HANDLED_ICONS", False);
+
+ net_wm_ping = XInternAtom(display, "_NET_WM_PING", False);
+
+#endif // NEWWMSPEC
+
+ cursor.session = XCreateFontCursor(display, XC_left_ptr);
+ cursor.move = XCreateFontCursor(display, XC_fleur);
+ cursor.ll_angle = XCreateFontCursor(display, XC_ll_angle);
+ cursor.lr_angle = XCreateFontCursor(display, XC_lr_angle);
+ cursor.ul_angle = XCreateFontCursor(display, XC_ul_angle);
+ cursor.ur_angle = XCreateFontCursor(display, XC_ur_angle);
+
+ XSetErrorHandler((XErrorHandler) handleXErrors);
+
+ timerList = new LinkedList<BTimer>;
+
+ screenInfoList = new LinkedList<ScreenInfo>;
+ for (int i = 0; i < number_of_screens; i++) {
+ ScreenInfo *screeninfo = new ScreenInfo(this, i);
+ screenInfoList->insert(screeninfo);
+ }
+
+#ifndef NOCLOBBER
+ NumLockMask = ScrollLockMask = 0;
+
+ const XModifierKeymap* const modmap = XGetModifierMapping(display);
+ if (modmap && modmap->max_keypermod > 0) {
+ const int mask_table[] = {
+ ShiftMask, LockMask, ControlMask, Mod1Mask,
+ Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
+ };
+ const size_t size = (sizeof(mask_table) / sizeof(mask_table[0])) *
+ modmap->max_keypermod;
+ // get the values of the keyboard lock modifiers
+ // Note: Caps lock is not retrieved the same way as Scroll and Num lock
+ // since it doesn't need to be.
+ const KeyCode num_lock_code = XKeysymToKeycode(display, XK_Num_Lock);
+ const KeyCode scroll_lock_code = XKeysymToKeycode(display, XK_Scroll_Lock);
+
+ for (size_t cnt = 0; cnt < size; ++cnt) {
+ if (! modmap->modifiermap[cnt]) continue;
+
+ if (num_lock_code == modmap->modifiermap[cnt])
+ NumLockMask = mask_table[cnt / modmap->max_keypermod];
+ if (scroll_lock_code == modmap->modifiermap[cnt])
+ ScrollLockMask = mask_table[cnt / modmap->max_keypermod];
+ }
+ }
+
+ MaskList[0] = 0;
+ MaskList[1] = LockMask;
+ MaskList[2] = NumLockMask;
+ MaskList[3] = ScrollLockMask;
+ MaskList[4] = LockMask | NumLockMask;
+ MaskList[5] = NumLockMask | ScrollLockMask;
+ MaskList[6] = LockMask | ScrollLockMask;
+ MaskList[7] = LockMask | NumLockMask | ScrollLockMask;
+ MaskListLength = sizeof(MaskList) / sizeof(MaskList[0]);
+
+ if (modmap) XFreeModifiermap(const_cast<XModifierKeymap*>(modmap));
+#endif // NOCLOBBER
+}
+
+
+BaseDisplay::~BaseDisplay(void) {
+ while (screenInfoList->count()) {
+ ScreenInfo *si = screenInfoList->first();
+
+ screenInfoList->remove(si);
+ delete si;
+ }
+
+ delete screenInfoList;
+
+ // we don't create the BTimers, we don't delete them
+ while (timerList->count())
+ timerList->remove(0);
+
+ delete timerList;
+
+ XCloseDisplay(display);
+}
+
+
+void BaseDisplay::eventLoop(void) {
+ run();
+
+ int xfd = ConnectionNumber(display);
+
+ while ((! _shutdown) && (! internal_error)) {
+ if (XPending(display)) {
+ XEvent e;
+ XNextEvent(display, &e);
+
+ if (last_bad_window != None && e.xany.window == last_bad_window) {
+#ifdef DEBUG
+ fprintf(stderr, i18n->getMessage(BaseDisplaySet,
+ BaseDisplayBadWindowRemove,
+ "BaseDisplay::eventLoop(): removing bad window "
+ "from event queue\n"));
+#endif // DEBUG
+ } else {
+ last_bad_window = None;
+ process_event(&e);
+ }
+ } else {
+ fd_set rfds;
+ timeval now, tm, *timeout = (timeval *) 0;
+
+ FD_ZERO(&rfds);
+ FD_SET(xfd, &rfds);
+
+ if (timerList->count()) {
+ gettimeofday(&now, 0);
+
+ tm.tv_sec = tm.tv_usec = 0l;
+
+ BTimer *timer = timerList->first();
+
+ tm.tv_sec = timer->getStartTime().tv_sec +
+ timer->getTimeout().tv_sec - now.tv_sec;
+ tm.tv_usec = timer->getStartTime().tv_usec +
+ timer->getTimeout().tv_usec - now.tv_usec;
+
+ while (tm.tv_usec >= 1000000) {
+ tm.tv_sec++;
+ tm.tv_usec -= 1000000;
+ }
+
+ while (tm.tv_usec < 0) {
+ if (tm.tv_sec > 0) {
+ tm.tv_sec--;
+ tm.tv_usec += 1000000;
+ } else {
+ tm.tv_usec = 0;
+ break;
+ }
+ }
+
+ timeout = &tm;
+ }
+
+ select(xfd + 1, &rfds, 0, 0, timeout);
+
+ // check for timer timeout
+ gettimeofday(&now, 0);
+
+ LinkedListIterator<BTimer> it(timerList);
+ for(BTimer *timer = it.current(); timer; it++, timer = it.current()) {
+ tm.tv_sec = timer->getStartTime().tv_sec +
+ timer->getTimeout().tv_sec;
+ tm.tv_usec = timer->getStartTime().tv_usec +
+ timer->getTimeout().tv_usec;
+
+ if ((now.tv_sec < tm.tv_sec) ||
+ (now.tv_sec == tm.tv_sec && now.tv_usec < tm.tv_usec))
+ break;
+
+ timer->fireTimeout();
+
+ // restart the current timer so that the start time is updated
+ if (! timer->doOnce()) timer->start();
+ else timer->stop();
+ }
+ }
+ }
+}
+
+
+const Bool BaseDisplay::validateWindow(Window window) {
+ XEvent event;
+ if (XCheckTypedWindowEvent(display, window, DestroyNotify, &event)) {
+ XPutBackEvent(display, &event);
+
+ return False;
+ }
+
+ return True;
+}
+
+
+void BaseDisplay::grab(void) {
+ if (! server_grabs++)
+ XGrabServer(display);
+}
+
+
+void BaseDisplay::ungrab(void) {
+ if (! --server_grabs)
+ XUngrabServer(display);
+
+ if (server_grabs < 0) server_grabs = 0;
+}
+
+
+void BaseDisplay::addTimer(BTimer *timer) {
+ if (! timer) return;
+
+ LinkedListIterator<BTimer> it(timerList);
+ int index = 0;
+ for (BTimer *tmp = it.current(); tmp; it++, index++, tmp = it.current())
+ if ((tmp->getTimeout().tv_sec > timer->getTimeout().tv_sec) ||
+ ((tmp->getTimeout().tv_sec == timer->getTimeout().tv_sec) &&
+ (tmp->getTimeout().tv_usec >= timer->getTimeout().tv_usec)))
+ break;
+
+ timerList->insert(timer, index);
+}
+
+
+void BaseDisplay::removeTimer(BTimer *timer) {
+ timerList->remove(timer);
+}
+
+
+/*
+ * Grabs a button, but also grabs the button in every possible combination with
+ * the keyboard lock keys, so that they do not cancel out the event.
+ */
+void BaseDisplay::grabButton(unsigned int button, unsigned int modifiers,
+ Window grab_window, Bool owner_events,
+ unsigned int event_mask, int pointer_mode,
+ int keybaord_mode, Window confine_to,
+ Cursor cursor) const
+{
+#ifndef NOCLOBBER
+ for (size_t cnt = 0; cnt < MaskListLength; ++cnt)
+ XGrabButton(display, button, modifiers | MaskList[cnt], grab_window,
+ owner_events, event_mask, pointer_mode, keybaord_mode,
+ confine_to, cursor);
+#else // NOCLOBBER
+ XGrabButton(display, button, modifiers, grab_window,
+ owner_events, event_mask, pointer_mode, keybaord_mode,
+ confine_to, cursor);
+#endif // NOCLOBBER
+}
+
+/*
+ * Releases the grab on a button, and ungrabs all possible combinations of the
+ * keyboard lock keys.
+ */
+void BaseDisplay::ungrabButton(unsigned int button, unsigned int modifiers,
+ Window grab_window) const {
+#ifndef NOCLOBBER
+ for (size_t cnt = 0; cnt < MaskListLength; ++cnt)
+ XUngrabButton(display, button, modifiers | MaskList[cnt], grab_window);
+#else // NOCLOBBER
+ XUngrabButton(display, button, modifiers, grab_window);
+#endif // NOCLOBBER
+}
+
+
+ScreenInfo::ScreenInfo(BaseDisplay *d, int num) {
+ basedisplay = d;
+ screen_number = num;
+
+ root_window = RootWindow(basedisplay->getXDisplay(), screen_number);
+ depth = DefaultDepth(basedisplay->getXDisplay(), screen_number);
+
+ width =
+ WidthOfScreen(ScreenOfDisplay(basedisplay->getXDisplay(), screen_number));
+ height =
+ HeightOfScreen(ScreenOfDisplay(basedisplay->getXDisplay(), screen_number));
+
+ // search for a TrueColor Visual... if we can't find one... we will use the
+ // default visual for the screen
+ XVisualInfo vinfo_template, *vinfo_return;
+ int vinfo_nitems;
+
+ vinfo_template.screen = screen_number;
+ vinfo_template.c_class = TrueColor;
+
+ visual = (Visual *) 0;
+
+ if ((vinfo_return = XGetVisualInfo(basedisplay->getXDisplay(),
+ VisualScreenMask | VisualClassMask,
+ &vinfo_template, &vinfo_nitems)) &&
+ vinfo_nitems > 0) {
+ for (int i = 0; i < vinfo_nitems; i++) {
+ if (depth < (vinfo_return + i)->depth) {
+ depth = (vinfo_return + i)->depth;
+ visual = (vinfo_return + i)->visual;
+ }
+ }
+
+ XFree(vinfo_return);
+ }
+
+ if (visual) {
+ colormap = XCreateColormap(basedisplay->getXDisplay(), root_window,
+ visual, AllocNone);
+ } else {
+ visual = DefaultVisual(basedisplay->getXDisplay(), screen_number);
+ colormap = DefaultColormap(basedisplay->getXDisplay(), screen_number);
+ }
+}
--- /dev/null
+// BaseDisplay.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __BaseDisplay_hh
+#define __BaseDisplay_hh
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+
+// forward declaration
+class BaseDisplay;
+class ScreenInfo;
+
+#include "LinkedList.h"
+#include "Timer.h"
+
+#define AttribShaded (1l << 0)
+#define AttribMaxHoriz (1l << 1)
+#define AttribMaxVert (1l << 2)
+#define AttribOmnipresent (1l << 3)
+#define AttribWorkspace (1l << 4)
+#define AttribStack (1l << 5)
+#define AttribDecoration (1l << 6)
+
+#define StackTop (0)
+#define StackNormal (1)
+#define StackBottom (2)
+
+#define DecorNone (0)
+#define DecorNormal (1)
+#define DecorTiny (2)
+#define DecorTool (3)
+
+typedef struct _openbox_hints {
+ unsigned long flags, attrib, workspace, stack, decoration;
+} OpenboxHints;
+
+typedef struct _openbox_attributes {
+ unsigned long flags, attrib, workspace, stack, decoration;
+ int premax_x, premax_y;
+ unsigned int premax_w, premax_h;
+} OpenboxAttributes;
+
+#define PropOpenboxHintsElements (5)
+#define PropOpenboxAttributesElements (9)
+
+#ifndef __EMX__
+void bexec(const char *, char *);
+#endif // !__EMX__
+
+char *bstrdup(const char *);
+
+class BaseDisplay {
+private:
+ struct cursor {
+ Cursor session, move, ll_angle, lr_angle, ul_angle, ur_angle;
+ } cursor;
+
+ struct shape {
+ Bool extensions;
+ int event_basep, error_basep;
+ } shape;
+
+#ifndef NOCLOBBER
+ unsigned int MaskList[8];
+ size_t MaskListLength;
+#endif // NOCLOBBER
+
+ Atom xa_wm_colormap_windows, xa_wm_protocols, xa_wm_state,
+ xa_wm_delete_window, xa_wm_take_focus, xa_wm_change_state,
+ motif_wm_hints;
+
+ // NETAttributes
+ Atom openbox_attributes, openbox_change_attributes, openbox_hints;
+
+ // NETStructureMessages
+ Atom openbox_structure_messages, openbox_notify_startup,
+ openbox_notify_window_add, openbox_notify_window_del,
+ openbox_notify_window_focus, openbox_notify_current_workspace,
+ openbox_notify_workspace_count, openbox_notify_window_raise,
+ openbox_notify_window_lower;
+
+ // message_types for client -> wm messages
+ Atom openbox_change_workspace, openbox_change_window_focus,
+ openbox_cycle_window_focus;
+
+#ifdef NEWWMSPEC
+
+ // root window properties
+ Atom net_supported, net_client_list, net_client_list_stacking,
+ net_number_of_desktops, net_desktop_geometry, net_desktop_viewport,
+ net_current_desktop, net_desktop_names, net_active_window, net_workarea,
+ net_supporting_wm_check, net_virtual_roots;
+
+ // root window messages
+ Atom net_close_window, net_wm_moveresize;
+
+ // application window properties
+ Atom net_properties, net_wm_name, net_wm_desktop, net_wm_window_type,
+ net_wm_state, net_wm_strut, net_wm_icon_geometry, net_wm_icon, net_wm_pid,
+ net_wm_handled_icons;
+
+ // application protocols
+ Atom net_wm_ping;
+
+#endif // NEWWMSPEC
+
+ Bool _startup, _shutdown;
+ Display *display;
+ LinkedList<ScreenInfo> *screenInfoList;
+ LinkedList<BTimer> *timerList;
+
+ char *display_name, *application_name;
+ int number_of_screens, server_grabs, colors_per_channel;
+
+
+protected:
+ // pure virtual function... you must override this
+ virtual void process_event(XEvent *) = 0;
+
+ // the masks of the modifiers which are ignored in button events.
+ int NumLockMask, ScrollLockMask;
+
+
+public:
+ BaseDisplay(char *, char * = 0);
+ virtual ~BaseDisplay(void);
+
+ inline const Atom &getWMChangeStateAtom(void) const
+ { return xa_wm_change_state; }
+ inline const Atom &getWMStateAtom(void) const
+ { return xa_wm_state; }
+ inline const Atom &getWMDeleteAtom(void) const
+ { return xa_wm_delete_window; }
+ inline const Atom &getWMProtocolsAtom(void) const
+ { return xa_wm_protocols; }
+ inline const Atom &getWMTakeFocusAtom(void) const
+ { return xa_wm_take_focus; }
+ inline const Atom &getWMColormapAtom(void) const
+ { return xa_wm_colormap_windows; }
+ inline const Atom &getMotifWMHintsAtom(void) const
+ { return motif_wm_hints; }
+
+ // this atom is for normal app->WM hints about decorations, stacking,
+ // starting workspace etc...
+ inline const Atom &getOpenboxHintsAtom(void) const
+ { return openbox_hints;}
+
+ // these atoms are for normal app->WM interaction beyond the scope of the
+ // ICCCM...
+ inline const Atom &getOpenboxAttributesAtom(void) const
+ { return openbox_attributes; }
+ inline const Atom &getOpenboxChangeAttributesAtom(void) const
+ { return openbox_change_attributes; }
+
+ // these atoms are for window->WM interaction, with more control and
+ // information on window "structure"... common examples are
+ // notifying apps when windows are raised/lowered... when the user changes
+ // workspaces... i.e. "pager talk"
+ inline const Atom &getOpenboxStructureMessagesAtom(void) const
+ { return openbox_structure_messages; }
+
+ // *Notify* portions of the NETStructureMessages protocol
+ inline const Atom &getOpenboxNotifyStartupAtom(void) const
+ { return openbox_notify_startup; }
+ inline const Atom &getOpenboxNotifyWindowAddAtom(void) const
+ { return openbox_notify_window_add; }
+ inline const Atom &getOpenboxNotifyWindowDelAtom(void) const
+ { return openbox_notify_window_del; }
+ inline const Atom &getOpenboxNotifyWindowFocusAtom(void) const
+ { return openbox_notify_window_focus; }
+ inline const Atom &getOpenboxNotifyCurrentWorkspaceAtom(void) const
+ { return openbox_notify_current_workspace; }
+ inline const Atom &getOpenboxNotifyWorkspaceCountAtom(void) const
+ { return openbox_notify_workspace_count; }
+ inline const Atom &getOpenboxNotifyWindowRaiseAtom(void) const
+ { return openbox_notify_window_raise; }
+ inline const Atom &getOpenboxNotifyWindowLowerAtom(void) const
+ { return openbox_notify_window_lower; }
+
+ // atoms to change that request changes to the desktop environment during
+ // runtime... these messages can be sent by any client... as the sending
+ // client window id is not included in the ClientMessage event...
+ inline const Atom &getOpenboxChangeWorkspaceAtom(void) const
+ { return openbox_change_workspace; }
+ inline const Atom &getOpenboxChangeWindowFocusAtom(void) const
+ { return openbox_change_window_focus; }
+ inline const Atom &getOpenboxCycleWindowFocusAtom(void) const
+ { return openbox_cycle_window_focus; }
+
+#ifdef NEWWMSPEC
+
+ // root window properties
+ inline const Atom &getNETSupportedAtom(void) const
+ { return net_supported; }
+ inline const Atom &getNETClientListAtom(void) const
+ { return net_client_list; }
+ inline const Atom &getNETClientListStackingAtom(void) const
+ { return net_client_list_stacking; }
+ inline const Atom &getNETNumberOfDesktopsAtom(void) const
+ { return net_number_of_desktops; }
+ inline const Atom &getNETDesktopGeometryAtom(void) const
+ { return net_desktop_geometry; }
+ inline const Atom &getNETDesktopViewportAtom(void) const
+ { return net_desktop_viewport; }
+ inline const Atom &getNETCurrentDesktopAtom(void) const
+ { return net_current_desktop; }
+ inline const Atom &getNETDesktopNamesAtom(void) const
+ { return net_desktop_names; }
+ inline const Atom &getNETActiveWindowAtom(void) const
+ { return net_active_window; }
+ inline const Atom &getNETWorkareaAtom(void) const
+ { return net_workarea; }
+ inline const Atom &getNETSupportingWMCheckAtom(void) const
+ { return net_supporting_wm_check; }
+ inline const Atom &getNETVirtualRootsAtom(void) const
+ { return net_virtual_roots; }
+
+ // root window messages
+ inline const Atom &getNETCloseWindowAtom(void) const
+ { return net_close_window; }
+ inline const Atom &getNETWMMoveResizeAtom(void) const
+ { return net_wm_moveresize; }
+
+ // application window properties
+ inline const Atom &getNETPropertiesAtom(void) const
+ { return net_properties; }
+ inline const Atom &getNETWMNameAtom(void) const
+ { return net_wm_name; }
+ inline const Atom &getNETWMDesktopAtom(void) const
+ { return net_wm_desktop; }
+ inline const Atom &getNETWMWindowTypeAtom(void) const
+ { return net_wm_window_type; }
+ inline const Atom &getNETWMStateAtom(void) const
+ { return net_wm_state; }
+ inline const Atom &getNETWMStrutAtom(void) const
+ { return net_wm_strut; }
+ inline const Atom &getNETWMIconGeometryAtom(void) const
+ { return net_wm_icon_geometry; }
+ inline const Atom &getNETWMIconAtom(void) const
+ { return net_wm_icon; }
+ inline const Atom &getNETWMPidAtom(void) const
+ { return net_wm_pid; }
+ inline const Atom &getNETWMHandledIconsAtom(void) const
+ { return net_wm_handled_icons; }
+
+ // application protocols
+ inline const Atom &getNETWMPingAtom(void) const
+ { return net_wm_ping; }
+
+#endif // NEWWMSPEC
+
+ inline ScreenInfo *getScreenInfo(int s)
+ { return (ScreenInfo *) screenInfoList->find(s); }
+
+ inline const Bool &hasShapeExtensions(void) const
+ { return shape.extensions; }
+ inline const Bool &doShutdown(void) const
+ { return _shutdown; }
+ inline const Bool &isStartup(void) const
+ { return _startup; }
+
+ inline const Cursor &getSessionCursor(void) const
+ { return cursor.session; }
+ inline const Cursor &getMoveCursor(void) const
+ { return cursor.move; }
+ inline const Cursor &getLowerLeftAngleCursor(void) const
+ { return cursor.ll_angle; }
+ inline const Cursor &getLowerRightAngleCursor(void) const
+ { return cursor.lr_angle; }
+ inline const Cursor &getUpperLeftAngleCursor(void) const
+ { return cursor.ul_angle; }
+ inline const Cursor &getUpperRightAngleCursor(void) const
+ { return cursor.ur_angle; }
+
+ inline Display *getXDisplay(void) { return display; }
+
+ inline const char *getXDisplayName(void) const
+ { return (const char *) display_name; }
+ inline const char *getApplicationName(void) const
+ { return (const char *) application_name; }
+
+ inline const int &getNumberOfScreens(void) const
+ { return number_of_screens; }
+ inline const int &getShapeEventBase(void) const
+ { return shape.event_basep; }
+
+ inline void shutdown(void) { _shutdown = True; }
+ inline void run(void) { _startup = _shutdown = False; }
+
+ const Bool validateWindow(Window);
+
+ void grabButton(unsigned int, unsigned int, Window, Bool, unsigned int, int,
+ int, Window, Cursor) const;
+ void ungrabButton(unsigned int button, unsigned int modifiers,
+ Window grab_window) const;
+
+ void grab(void);
+ void ungrab(void);
+ void eventLoop(void);
+ void addTimer(BTimer *);
+ void removeTimer(BTimer *);
+
+ // another pure virtual... this is used to handle signals that BaseDisplay
+ // doesn't understand itself
+ virtual Bool handleSignal(int) = 0;
+};
+
+
+class ScreenInfo {
+private:
+ BaseDisplay *basedisplay;
+ Visual *visual;
+ Window root_window;
+ Colormap colormap;
+
+ int depth, screen_number;
+ unsigned int width, height;
+
+
+public:
+ ScreenInfo(BaseDisplay *, int);
+
+ inline BaseDisplay *getBaseDisplay(void) { return basedisplay; }
+
+ inline Visual *getVisual(void) { return visual; }
+ inline const Window &getRootWindow(void) const { return root_window; }
+ inline const Colormap &getColormap(void) const { return colormap; }
+
+ inline const int &getDepth(void) const { return depth; }
+ inline const int &getScreenNumber(void) const { return screen_number; }
+
+ inline const unsigned int &getWidth(void) const { return width; }
+ inline const unsigned int &getHeight(void) const { return height; }
+};
+
+
+#endif // __BaseDisplay_hh
--- /dev/null
+// Basemenu.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#endif // STDC_HEADERS
+
+#include <algorithm>
+using namespace std;
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Basemenu.h"
+#include "Screen.h"
+
+static Basemenu *shown = (Basemenu *) 0;
+
+Basemenu::Basemenu(BScreen *scrn) {
+ screen = scrn;
+ openbox = screen->getOpenbox();
+ image_ctrl = screen->getImageControl();
+ display = openbox->getXDisplay();
+ parent = (Basemenu *) 0;
+ alignment = AlignDontCare;
+
+ title_vis =
+ movable =
+ hide_tree = True;
+
+ shifted =
+ internal_menu =
+ moving =
+ torn =
+ visible = False;
+
+ menu.x =
+ menu.y =
+ menu.x_shift =
+ menu.y_shift =
+ menu.x_move =
+ menu.y_move = 0;
+
+ which_sub =
+ which_press =
+ which_sbl = -1;
+
+ menu.frame_pixmap =
+ menu.title_pixmap =
+ menu.hilite_pixmap =
+ menu.sel_pixmap = None;
+
+ menu.bevel_w = screen->getBevelWidth();
+
+ if (i18n->multibyte())
+ menu.width = menu.title_h = menu.item_w = menu.frame_h =
+ screen->getMenuStyle()->t_fontset_extents->max_ink_extent.height +
+ (menu.bevel_w * 2);
+ else
+ menu.width = menu.title_h = menu.item_w = menu.frame_h =
+ screen->getMenuStyle()->t_font->ascent +
+ screen->getMenuStyle()->t_font->descent + (menu.bevel_w * 2);
+
+ menu.label = 0;
+
+ menu.sublevels =
+ menu.persub =
+ menu.minsub = 0;
+
+ MenuStyle *style = screen->getMenuStyle();
+ if (i18n->multibyte()) {
+ menu.item_h = style->f_fontset_extents->max_ink_extent.height +
+ (menu.bevel_w);
+ } else {
+ menu.item_h = style->f_font->ascent + style->f_font->descent +
+ (menu.bevel_w);
+ }
+
+ menu.height = menu.title_h + screen->getBorderWidth() + menu.frame_h;
+
+ unsigned long attrib_mask = CWBackPixmap | CWBackPixel | CWBorderPixel |
+ CWColormap | CWOverrideRedirect | CWEventMask;
+ XSetWindowAttributes attrib;
+ attrib.background_pixmap = None;
+ attrib.background_pixel = attrib.border_pixel =
+ screen->getBorderColor()->getPixel();
+ attrib.colormap = screen->getColormap();
+ attrib.override_redirect = True;
+ attrib.event_mask = ButtonPressMask | ButtonReleaseMask |
+ ButtonMotionMask | ExposureMask;
+
+ menu.window =
+ XCreateWindow(display, screen->getRootWindow(), menu.x, menu.y, menu.width,
+ menu.height, screen->getBorderWidth(), screen->getDepth(),
+ InputOutput, screen->getVisual(), attrib_mask, &attrib);
+ openbox->saveMenuSearch(menu.window, this);
+
+ attrib_mask = CWBackPixmap | CWBackPixel | CWBorderPixel | CWEventMask;
+ attrib.background_pixel = screen->getBorderColor()->getPixel();
+ attrib.event_mask |= EnterWindowMask | LeaveWindowMask;
+
+ menu.title =
+ XCreateWindow(display, menu.window, 0, 0, menu.width, menu.height, 0,
+ screen->getDepth(), InputOutput, screen->getVisual(),
+ attrib_mask, &attrib);
+ openbox->saveMenuSearch(menu.title, this);
+
+ attrib.event_mask |= PointerMotionMask;
+ menu.frame = XCreateWindow(display, menu.window, 0,
+ menu.title_h + screen->getBorderWidth(),
+ menu.width, menu.frame_h, 0,
+ screen->getDepth(), InputOutput,
+ screen->getVisual(), attrib_mask, &attrib);
+ openbox->saveMenuSearch(menu.frame, this);
+
+ menuitems = new LinkedList<BasemenuItem>;
+
+ // even though this is the end of the constructor the menu is still not
+ // completely created. items must be inserted and it must be update()'d
+}
+
+
+Basemenu::~Basemenu(void) {
+ XUnmapWindow(display, menu.window);
+
+ if (shown && shown->getWindowID() == getWindowID())
+ shown = (Basemenu *) 0;
+
+ int n = menuitems->count();
+ for (int i = 0; i < n; ++i)
+ remove(0);
+
+ delete menuitems;
+
+ if (menu.label)
+ delete [] menu.label;
+
+ if (menu.title_pixmap)
+ image_ctrl->removeImage(menu.title_pixmap);
+
+ if (menu.frame_pixmap)
+ image_ctrl->removeImage(menu.frame_pixmap);
+
+ if (menu.hilite_pixmap)
+ image_ctrl->removeImage(menu.hilite_pixmap);
+
+ if (menu.sel_pixmap)
+ image_ctrl->removeImage(menu.sel_pixmap);
+
+ openbox->removeMenuSearch(menu.title);
+ XDestroyWindow(display, menu.title);
+
+ openbox->removeMenuSearch(menu.frame);
+ XDestroyWindow(display, menu.frame);
+
+ openbox->removeMenuSearch(menu.window);
+ XDestroyWindow(display, menu.window);
+}
+
+
+int Basemenu::insert(const char *l, int function, const char *e, int pos) {
+ char *label = 0, *exec = 0;
+
+ if (l) label = bstrdup(l);
+ if (e) exec = bstrdup(e);
+
+ BasemenuItem *item = new BasemenuItem(label, function, exec);
+ menuitems->insert(item, pos);
+
+ return menuitems->count();
+}
+
+
+int Basemenu::insert(const char *l, Basemenu *submenu, int pos) {
+ char *label = 0;
+
+ if (l) label = bstrdup(l);
+
+ BasemenuItem *item = new BasemenuItem(label, submenu);
+ menuitems->insert(item, pos);
+
+ submenu->parent = this;
+
+ return menuitems->count();
+}
+
+
+int Basemenu::insert(const char **ulabel, int pos, int function) {
+ BasemenuItem *item = new BasemenuItem(ulabel, function);
+ menuitems->insert(item, pos);
+
+ return menuitems->count();
+}
+
+
+int Basemenu::remove(int index) {
+ if (index < 0 || index > menuitems->count()) return -1;
+
+ BasemenuItem *item = menuitems->remove(index);
+
+ if (item) {
+ if ((! internal_menu) && (item->submenu())) {
+ Basemenu *tmp = (Basemenu *) item->submenu();
+
+ if (! tmp->internal_menu) {
+ delete tmp;
+ } else {
+ tmp->internal_hide();
+ }
+ }
+
+ if (item->label())
+ delete [] item->label();
+
+ if (item->exec())
+ delete [] item->exec();
+
+ delete item;
+ }
+
+ if (which_sub == index)
+ which_sub = -1;
+ else if (which_sub > index)
+ which_sub--;
+
+ return menuitems->count();
+}
+
+
+void Basemenu::update(void) {
+ MenuStyle *style = screen->getMenuStyle();
+ if (i18n->multibyte()) {
+ menu.item_h = style->f_fontset_extents->max_ink_extent.height +
+ menu.bevel_w;
+ menu.title_h = style->t_fontset_extents->max_ink_extent.height +
+ (menu.bevel_w * 2);
+ } else {
+ menu.item_h = style->f_font->ascent + style->f_font->descent +
+ menu.bevel_w;
+ menu.title_h = style->t_font->ascent + style->t_font->descent +
+ (menu.bevel_w * 2);
+ }
+
+ if (title_vis) {
+ const char *s = (menu.label) ? menu.label :
+ i18n->getMessage(BasemenuSet, BasemenuOpenboxMenu,
+ "Openbox Menu");
+ int l = strlen(s);
+
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getMenuStyle()->t_fontset, s, l, &ink, &logical);
+ menu.item_w = logical.width;
+ } else {
+ menu.item_w = XTextWidth(screen->getMenuStyle()->t_font, s, l);
+ }
+
+ menu.item_w += (menu.bevel_w * 2);
+ } else {
+ menu.item_w = 1;
+ }
+
+ int ii = 0;
+ LinkedListIterator<BasemenuItem> it(menuitems);
+ for (BasemenuItem *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ const char *s = ((tmp->u && *tmp->u) ? *tmp->u :
+ ((tmp->l) ? tmp->l : (const char *) 0));
+ int l = strlen(s);
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getMenuStyle()->f_fontset, s, l, &ink, &logical);
+ ii = logical.width;
+ } else
+ ii = XTextWidth(screen->getMenuStyle()->f_font, s, l);
+
+ ii += (menu.bevel_w * 2) + (menu.item_h * 2);
+
+ menu.item_w = ((menu.item_w < (unsigned int) ii) ? ii : menu.item_w);
+ }
+
+ if (menuitems->count()) {
+ menu.sublevels = 1;
+
+ while (((menu.item_h * (menuitems->count() + 1) / menu.sublevels)
+ + menu.title_h + screen->getBorderWidth()) >
+ screen->getHeight())
+ menu.sublevels++;
+
+ if (menu.sublevels < menu.minsub) menu.sublevels = menu.minsub;
+
+ menu.persub = menuitems->count() / menu.sublevels;
+ if (menuitems->count() % menu.sublevels) menu.persub++;
+ } else {
+ menu.sublevels = 0;
+ menu.persub = 0;
+ }
+
+ menu.width = (menu.sublevels * (menu.item_w));
+ if (! menu.width) menu.width = menu.item_w;
+
+ menu.frame_h = (menu.item_h * menu.persub);
+ menu.height = ((title_vis) ? menu.title_h + screen->getBorderWidth() : 0) +
+ menu.frame_h;
+ if (! menu.frame_h) menu.frame_h = 1;
+ if (menu.height < 1) menu.height = 1;
+
+ Pixmap tmp;
+ BTexture *texture;
+ if (title_vis) {
+ tmp = menu.title_pixmap;
+ texture = &(screen->getMenuStyle()->title);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ menu.title_pixmap = None;
+ XSetWindowBackground(display, menu.title,
+ texture->getColor()->getPixel());
+ } else {
+ menu.title_pixmap =
+ image_ctrl->renderImage(menu.width, menu.title_h, texture);
+ XSetWindowBackgroundPixmap(display, menu.title, menu.title_pixmap);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+ XClearWindow(display, menu.title);
+ }
+
+ tmp = menu.frame_pixmap;
+ texture = &(screen->getMenuStyle()->frame);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ menu.frame_pixmap = None;
+ XSetWindowBackground(display, menu.frame,
+ texture->getColor()->getPixel());
+ } else {
+ menu.frame_pixmap =
+ image_ctrl->renderImage(menu.width, menu.frame_h, texture);
+ XSetWindowBackgroundPixmap(display, menu.frame, menu.frame_pixmap);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = menu.hilite_pixmap;
+ texture = &(screen->getMenuStyle()->hilite);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ menu.hilite_pixmap = None;
+ } else {
+ menu.hilite_pixmap =
+ image_ctrl->renderImage(menu.item_w, menu.item_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = menu.sel_pixmap;
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ menu.sel_pixmap = None;
+ } else {
+ int hw = menu.item_h / 2;
+ menu.sel_pixmap =
+ image_ctrl->renderImage(hw, hw, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ XResizeWindow(display, menu.window, menu.width, menu.height);
+
+ if (title_vis)
+ XResizeWindow(display, menu.title, menu.width, menu.title_h);
+
+ XMoveResizeWindow(display, menu.frame, 0,
+ ((title_vis) ? menu.title_h +
+ screen->getBorderWidth() : 0), menu.width,
+ menu.frame_h);
+
+ XClearWindow(display, menu.window);
+ XClearWindow(display, menu.title);
+ XClearWindow(display, menu.frame);
+
+ if (title_vis && visible) redrawTitle();
+
+ for (int i = 0; visible && i < menuitems->count(); i++) {
+ if (i == which_sub) {
+ drawItem(i, True, 0);
+ drawSubmenu(i);
+ } else {
+ drawItem(i, False, 0);
+ }
+ }
+
+ if (parent && visible)
+ parent->drawSubmenu(parent->which_sub);
+
+ XMapSubwindows(display, menu.window);
+}
+
+
+void Basemenu::show(void) {
+ XMapSubwindows(display, menu.window);
+ XMapWindow(display, menu.window);
+ visible = True;
+
+ if (! parent) {
+ if (shown && (! shown->torn))
+ shown->hide();
+
+ shown = this;
+ }
+}
+
+
+void Basemenu::hide(void) {
+ if ((! torn) && hide_tree && parent && parent->isVisible()) {
+ Basemenu *p = parent;
+
+ while (p->isVisible() && (! p->torn) && p->parent) p = p->parent;
+ p->internal_hide();
+ } else {
+ internal_hide();
+ }
+}
+
+
+void Basemenu::internal_hide(void) {
+ if (which_sub != -1) {
+ BasemenuItem *tmp = menuitems->find(which_sub);
+ tmp->submenu()->internal_hide();
+ }
+
+ if (parent && (! torn)) {
+ parent->drawItem(parent->which_sub, False, True);
+
+ parent->which_sub = -1;
+ } else if (shown && shown->menu.window == menu.window) {
+ shown = (Basemenu *) 0;
+ }
+
+ torn = visible = False;
+ which_sub = which_press = which_sub = -1;
+
+ XUnmapWindow(display, menu.window);
+}
+
+
+void Basemenu::move(int x, int y) {
+ menu.x = x;
+ menu.y = y;
+ XMoveWindow(display, menu.window, x, y);
+ if (which_sub != -1)
+ drawSubmenu(which_sub);
+}
+
+
+void Basemenu::redrawTitle(void) {
+ char *text = (char *) ((menu.label) ? menu.label :
+ i18n->getMessage(BasemenuSet, BasemenuOpenboxMenu,
+ "Openbox Menu"));
+ int dx = menu.bevel_w, len = strlen(text);
+ unsigned int l;
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getMenuStyle()->t_fontset, text, len, &ink, &logical);
+ l = logical.width;
+ } else {
+ l = XTextWidth(screen->getMenuStyle()->t_font, text, len);
+ }
+
+ l += (menu.bevel_w * 2);
+
+ switch (screen->getMenuStyle()->t_justify) {
+ case BScreen::RightJustify:
+ dx += menu.width - l;
+ break;
+
+ case BScreen::CenterJustify:
+ dx += (menu.width - l) / 2;
+ break;
+ }
+
+ MenuStyle *style = screen->getMenuStyle();
+ if (i18n->multibyte())
+ XmbDrawString(display, menu.title, style->t_fontset, style->t_text_gc, dx,
+ (menu.bevel_w - style->t_fontset_extents->max_ink_extent.y),
+ text, len);
+ else
+ XDrawString(display, menu.title, style->t_text_gc, dx,
+ (style->t_font->ascent + menu.bevel_w), text, len);
+}
+
+
+void Basemenu::drawSubmenu(int index) {
+ if (which_sub != -1 && which_sub != index) {
+ BasemenuItem *itmp = menuitems->find(which_sub);
+
+ if (! itmp->submenu()->isTorn())
+ itmp->submenu()->internal_hide();
+ }
+
+ if (index >= 0 && index < menuitems->count()) {
+ BasemenuItem *item = menuitems->find(index);
+ if (item->submenu() && visible && (! item->submenu()->isTorn()) &&
+ item->isEnabled()) {
+ if (item->submenu()->parent != this) item->submenu()->parent = this;
+ int sbl = index / menu.persub, i = index - (sbl * menu.persub),
+ x = menu.x +
+ ((menu.item_w * (sbl + 1)) + screen->getBorderWidth()), y;
+
+ if (alignment == AlignTop)
+ y = (((shifted) ? menu.y_shift : menu.y) +
+ ((title_vis) ? menu.title_h + screen->getBorderWidth() : 0) -
+ ((item->submenu()->title_vis) ?
+ item->submenu()->menu.title_h + screen->getBorderWidth() : 0));
+ else
+ y = (((shifted) ? menu.y_shift : menu.y) +
+ (menu.item_h * i) +
+ ((title_vis) ? menu.title_h + screen->getBorderWidth() : 0) -
+ ((item->submenu()->title_vis) ?
+ item->submenu()->menu.title_h + screen->getBorderWidth() : 0));
+
+ if (alignment == AlignBottom &&
+ (y + item->submenu()->menu.height) > ((shifted) ? menu.y_shift :
+ menu.y) + menu.height)
+ y = (((shifted) ? menu.y_shift : menu.y) +
+ menu.height - item->submenu()->menu.height);
+
+ if ((x + item->submenu()->getWidth()) > screen->getWidth()) {
+ x = ((shifted) ? menu.x_shift : menu.x) -
+ item->submenu()->getWidth() - screen->getBorderWidth();
+ }
+
+ if (x < 0) x = 0;
+
+ if ((y + item->submenu()->getHeight()) > screen->getHeight())
+ y = screen->getHeight() - item->submenu()->getHeight() -
+ (screen->getBorderWidth() * 2);
+ if (y < 0) y = 0;
+
+ item->submenu()->move(x, y);
+ if (! moving) drawItem(index, True);
+
+ if (! item->submenu()->isVisible())
+ item->submenu()->show();
+ item->submenu()->moving = moving;
+ which_sub = index;
+ } else {
+ which_sub = -1;
+ }
+ }
+}
+
+
+Bool Basemenu::hasSubmenu(int index) {
+ if ((index >= 0) && (index < menuitems->count()))
+ if (menuitems->find(index)->submenu())
+ return True;
+
+ return False;
+}
+
+
+void Basemenu::drawItem(int index, Bool highlight, Bool clear,
+ int x, int y, unsigned int w, unsigned int h)
+{
+ if (index < 0 || index > menuitems->count()) return;
+
+ BasemenuItem *item = menuitems->find(index);
+ if (! item) return;
+
+ Bool dotext = True, dohilite = True, dosel = True;
+ const char *text = (item->ulabel()) ? *item->ulabel() : item->label();
+ int sbl = index / menu.persub, i = index - (sbl * menu.persub);
+ int item_x = (sbl * menu.item_w), item_y = (i * menu.item_h);
+ int hilite_x = item_x, hilite_y = item_y, hoff_x = 0, hoff_y = 0;
+ int text_x = 0, text_y = 0, len = strlen(text), sel_x = 0, sel_y = 0;
+ unsigned int hilite_w = menu.item_w, hilite_h = menu.item_h, text_w = 0,
+ text_h = 0;
+ unsigned int half_w = menu.item_h / 2, quarter_w = menu.item_h / 4;
+
+ if (text) {
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getMenuStyle()->f_fontset,
+ text, len, &ink, &logical);
+ text_w = logical.width;
+ text_y = item_y + (menu.bevel_w / 2) -
+ screen->getMenuStyle()->f_fontset_extents->max_ink_extent.y;
+ } else {
+ text_w = XTextWidth(screen->getMenuStyle()->f_font, text, len);
+ text_y = item_y +
+ screen->getMenuStyle()->f_font->ascent +
+ (menu.bevel_w / 2);
+ }
+
+ switch(screen->getMenuStyle()->f_justify) {
+ case BScreen::LeftJustify:
+ text_x = item_x + menu.bevel_w + menu.item_h + 1;
+ break;
+
+ case BScreen::RightJustify:
+ text_x = item_x + menu.item_w - (menu.item_h + menu.bevel_w + text_w);
+ break;
+
+ case BScreen::CenterJustify:
+ text_x = item_x + ((menu.item_w + 1 - text_w) / 2);
+ break;
+ }
+
+ text_h = menu.item_h - menu.bevel_w;
+ }
+
+ GC gc =
+ ((highlight || item->isSelected()) ? screen->getMenuStyle()->h_text_gc :
+ screen->getMenuStyle()->f_text_gc),
+ tgc =
+ ((highlight) ? screen->getMenuStyle()->h_text_gc :
+ ((item->isEnabled()) ? screen->getMenuStyle()->f_text_gc :
+ screen->getMenuStyle()->d_text_gc));
+
+ sel_x = item_x;
+ if (screen->getMenuStyle()->bullet_pos == Right)
+ sel_x += (menu.item_w - menu.item_h - menu.bevel_w);
+ sel_x += quarter_w;
+ sel_y = item_y + quarter_w;
+
+ if (clear) {
+ XClearArea(display, menu.frame, item_x, item_y, menu.item_w, menu.item_h,
+ False);
+ } else if (! (x == y && y == -1 && w == h && h == 0)) {
+ // calculate the which part of the hilite to redraw
+ if (! (max(item_x, x) <= (signed) min(item_x + menu.item_w, x + w) &&
+ max(item_y, y) <= (signed) min(item_y + menu.item_h, y + h))) {
+ dohilite = False;
+ } else {
+ hilite_x = max(item_x, x);
+ hilite_y = max(item_y, y);
+ hilite_w = min(item_x + menu.item_w, x + w) - hilite_x;
+ hilite_h = min(item_y + menu.item_h, y + h) - hilite_y;
+ hoff_x = hilite_x % menu.item_w;
+ hoff_y = hilite_y % menu.item_h;
+ }
+
+ // check if we need to redraw the text
+ int text_ry = item_y + (menu.bevel_w / 2);
+ if (! (max(text_x, x) <= (signed) min(text_x + text_w, x + w) &&
+ max(text_ry, y) <= (signed) min(text_ry + text_h, y + h)))
+ dotext = False;
+
+ // check if we need to redraw the select pixmap/menu bullet
+ if (! (max(sel_x, x) <= (signed) min(sel_x + half_w, x + w) &&
+ max(sel_y, y) <= (signed) min(sel_y + half_w, y + h)))
+ dosel = False;
+ }
+
+ if (dohilite && highlight && (menu.hilite_pixmap != ParentRelative)) {
+ if (menu.hilite_pixmap)
+ XCopyArea(display, menu.hilite_pixmap, menu.frame,
+ screen->getMenuStyle()->hilite_gc, hoff_x, hoff_y,
+ hilite_w, hilite_h, hilite_x, hilite_y);
+ else
+ XFillRectangle(display, menu.frame,
+ screen->getMenuStyle()->hilite_gc,
+ hilite_x, hilite_y, hilite_w, hilite_h);
+ } else if (dosel && item->isSelected() &&
+ (menu.sel_pixmap != ParentRelative)) {
+ if (menu.sel_pixmap)
+ XCopyArea(display, menu.sel_pixmap, menu.frame,
+ screen->getMenuStyle()->hilite_gc, 0, 0,
+ half_w, half_w, sel_x, sel_y);
+ else
+ XFillRectangle(display, menu.frame,
+ screen->getMenuStyle()->hilite_gc,
+ sel_x, sel_y, half_w, half_w);
+ }
+
+ if (dotext && text) {
+ if (i18n->multibyte())
+ XmbDrawString(display, menu.frame, screen->getMenuStyle()->f_fontset,
+ tgc, text_x, text_y, text, len);
+ else
+ XDrawString(display, menu.frame, tgc, text_x, text_y, text, len);
+ }
+
+ if (dosel && item->submenu()) {
+ switch (screen->getMenuStyle()->bullet) {
+ case Square:
+ XDrawRectangle(display, menu.frame, gc, sel_x, sel_y, half_w, half_w);
+ break;
+
+ case Triangle:
+ XPoint tri[3];
+
+ if (screen->getMenuStyle()->bullet_pos == Right) {
+ tri[0].x = sel_x + quarter_w - 2;
+ tri[0].y = sel_y + quarter_w - 2;
+ tri[1].x = 4;
+ tri[1].y = 2;
+ tri[2].x = -4;
+ tri[2].y = 2;
+ } else {
+ tri[0].x = sel_x + quarter_w - 2;
+ tri[0].y = item_y + half_w;
+ tri[1].x = 4;
+ tri[1].y = 2;
+ tri[2].x = 0;
+ tri[2].y = -4;
+ }
+
+ XFillPolygon(display, menu.frame, gc, tri, 3, Convex,
+ CoordModePrevious);
+ break;
+
+ case Diamond:
+ XPoint dia[4];
+
+ dia[0].x = sel_x + quarter_w - 3;
+ dia[0].y = item_y + half_w;
+ dia[1].x = 3;
+ dia[1].y = -3;
+ dia[2].x = 3;
+ dia[2].y = 3;
+ dia[3].x = -3;
+ dia[3].y = 3;
+
+ XFillPolygon(display, menu.frame, gc, dia, 4, Convex,
+ CoordModePrevious);
+ break;
+ }
+ }
+}
+
+
+void Basemenu::setLabel(const char *l) {
+ if (menu.label)
+ delete [] menu.label;
+
+ if (l) menu.label = bstrdup(l);
+ else menu.label = 0;
+}
+
+
+void Basemenu::setItemSelected(int index, Bool sel) {
+ if (index < 0 || index >= menuitems->count()) return;
+
+ BasemenuItem *item = find(index);
+ if (! item) return;
+
+ item->setSelected(sel);
+ if (visible) drawItem(index, (index == which_sub), True);
+}
+
+
+Bool Basemenu::isItemSelected(int index) {
+ if (index < 0 || index >= menuitems->count()) return False;
+
+ BasemenuItem *item = find(index);
+ if (! item) return False;
+
+ return item->isSelected();
+}
+
+
+void Basemenu::setItemEnabled(int index, Bool enable) {
+ if (index < 0 || index >= menuitems->count()) return;
+
+ BasemenuItem *item = find(index);
+ if (! item) return;
+
+ item->setEnabled(enable);
+ if (visible) drawItem(index, (index == which_sub), True);
+}
+
+
+Bool Basemenu::isItemEnabled(int index) {
+ if (index < 0 || index >= menuitems->count()) return False;
+
+ BasemenuItem *item = find(index);
+ if (! item) return False;
+
+ return item->isEnabled();
+}
+
+
+void Basemenu::buttonPressEvent(XButtonEvent *be) {
+ if (be->window == menu.frame) {
+ int sbl = (be->x / menu.item_w), i = (be->y / menu.item_h);
+ int w = (sbl * menu.persub) + i;
+
+ if (w < menuitems->count() && w >= 0) {
+ which_press = i;
+ which_sbl = sbl;
+
+ BasemenuItem *item = menuitems->find(w);
+
+ if (item->submenu())
+ drawSubmenu(w);
+ else
+ drawItem(w, (item->isEnabled()), True);
+ }
+ } else {
+ menu.x_move = be->x_root - menu.x;
+ menu.y_move = be->y_root - menu.y;
+ }
+}
+
+
+void Basemenu::buttonReleaseEvent(XButtonEvent *re) {
+ if (re->window == menu.title) {
+ if (moving) {
+ moving = False;
+
+ if (which_sub != -1)
+ drawSubmenu(which_sub);
+ }
+
+ if (re->x >= 0 && re->x <= (signed) menu.width &&
+ re->y >= 0 && re->y <= (signed) menu.title_h)
+ if (re->button == 3)
+ hide();
+ } else if (re->window == menu.frame &&
+ re->x >= 0 && re->x < (signed) menu.width &&
+ re->y >= 0 && re->y < (signed) menu.frame_h) {
+ if (re->button == 3) {
+ hide();
+ } else {
+ int sbl = (re->x / menu.item_w), i = (re->y / menu.item_h),
+ ix = sbl * menu.item_w, iy = i * menu.item_h,
+ w = (sbl * menu.persub) + i,
+ p = (which_sbl * menu.persub) + which_press;
+
+ if (w < menuitems->count() && w >= 0) {
+ drawItem(p, (p == which_sub), True);
+
+ if (p == w && isItemEnabled(w)) {
+ if (re->x > ix && re->x < (signed) (ix + menu.item_w) &&
+ re->y > iy && re->y < (signed) (iy + menu.item_h)) {
+ itemSelected(re->button, w);
+ }
+ }
+ } else
+ drawItem(p, False, True);
+ }
+ }
+}
+
+
+void Basemenu::motionNotifyEvent(XMotionEvent *me) {
+ if (me->window == menu.title && (me->state & Button1Mask)) {
+ if (movable) {
+ if (! moving) {
+ if (parent && (! torn)) {
+ parent->drawItem(parent->which_sub, False, True);
+ parent->which_sub = -1;
+ }
+
+ moving = torn = True;
+
+ if (which_sub != -1)
+ drawSubmenu(which_sub);
+ } else {
+ menu.x = me->x_root - menu.x_move,
+ menu.y = me->y_root - menu.y_move;
+
+ XMoveWindow(display, menu.window, menu.x, menu.y);
+
+ if (which_sub != -1)
+ drawSubmenu(which_sub);
+ }
+ }
+ } else if ((! (me->state & Button1Mask)) && me->window == menu.frame &&
+ me->x >= 0 && me->x < (signed) menu.width &&
+ me->y >= 0 && me->y < (signed) menu.frame_h) {
+ int sbl = (me->x / menu.item_w), i = (me->y / menu.item_h),
+ w = (sbl * menu.persub) + i;
+
+ if ((i != which_press || sbl != which_sbl) &&
+ (w < menuitems->count() && w >= 0)) {
+ if (which_press != -1 && which_sbl != -1) {
+ int p = (which_sbl * menu.persub) + which_press;
+ BasemenuItem *item = menuitems->find(p);
+
+ drawItem(p, False, True);
+ if (item->submenu())
+ if (item->submenu()->isVisible() &&
+ (! item->submenu()->isTorn())) {
+ item->submenu()->internal_hide();
+ which_sub = -1;
+ }
+ }
+
+ which_press = i;
+ which_sbl = sbl;
+
+ BasemenuItem *itmp = menuitems->find(w);
+
+ if (itmp->submenu())
+ drawSubmenu(w);
+ else
+ drawItem(w, (itmp->isEnabled()), True);
+ }
+ }
+}
+
+
+void Basemenu::exposeEvent(XExposeEvent *ee) {
+ if (ee->window == menu.title) {
+ redrawTitle();
+ } else if (ee->window == menu.frame) {
+ // this is a compilicated algorithm... lets do it step by step...
+ // first... we see in which sub level the expose starts... and how many
+ // items down in that sublevel
+
+ int sbl = (ee->x / menu.item_w), id = (ee->y / menu.item_h),
+ // next... figure out how many sublevels over the redraw spans
+ sbl_d = ((ee->x + ee->width) / menu.item_w),
+ // then we see how many items down to redraw
+ id_d = ((ee->y + ee->height) / menu.item_h);
+
+ if (id_d > menu.persub) id_d = menu.persub;
+
+ // draw the sublevels and the number of items the exposure spans
+ LinkedListIterator<BasemenuItem> it(menuitems);
+ int i, ii;
+ for (i = sbl; i <= sbl_d; i++) {
+ // set the iterator to the first item in the sublevel needing redrawing
+ it.set(id + (i * menu.persub));
+ for (ii = id; ii <= id_d && it.current(); it++, ii++) {
+ int index = ii + (i * menu.persub);
+ // redraw the item
+ drawItem(index, (which_sub == index), False,
+ ee->x, ee->y, ee->width, ee->height);
+ }
+ }
+ }
+}
+
+
+void Basemenu::enterNotifyEvent(XCrossingEvent *ce) {
+ if (ce->window == menu.frame) {
+ menu.x_shift = menu.x, menu.y_shift = menu.y;
+ if (menu.x + menu.width > screen->getWidth()) {
+ menu.x_shift = screen->getWidth() - menu.width -
+ screen->getBorderWidth();
+ shifted = True;
+ } else if (menu.x < 0) {
+ menu.x_shift = -screen->getBorderWidth();
+ shifted = True;
+ }
+
+ if (menu.y + menu.height > screen->getHeight()) {
+ menu.y_shift = screen->getHeight() - menu.height -
+ screen->getBorderWidth();
+ shifted = True;
+ } else if (menu.y + (signed) menu.title_h < 0) {
+ menu.y_shift = -screen->getBorderWidth();
+ shifted = True;
+ }
+
+ if (shifted)
+ XMoveWindow(display, menu.window, menu.x_shift, menu.y_shift);
+
+ if (which_sub != -1) {
+ BasemenuItem *tmp = menuitems->find(which_sub);
+ if (tmp->submenu()->isVisible()) {
+ int sbl = (ce->x / menu.item_w), i = (ce->y / menu.item_h),
+ w = (sbl * menu.persub) + i;
+
+ if (w != which_sub && (! tmp->submenu()->isTorn())) {
+ tmp->submenu()->internal_hide();
+
+ drawItem(which_sub, False, True);
+ which_sub = -1;
+ }
+ }
+ }
+ }
+}
+
+
+void Basemenu::leaveNotifyEvent(XCrossingEvent *ce) {
+ if (ce->window == menu.frame) {
+ if (which_press != -1 && which_sbl != -1 && menuitems->count() > 0) {
+ int p = (which_sbl * menu.persub) + which_press;
+
+ drawItem(p, (p == which_sub), True);
+
+ which_sbl = which_press = -1;
+ }
+
+ if (shifted) {
+ XMoveWindow(display, menu.window, menu.x, menu.y);
+ shifted = False;
+
+ if (which_sub != -1) drawSubmenu(which_sub);
+ }
+ }
+}
+
+
+void Basemenu::reconfigure(void) {
+ XSetWindowBackground(display, menu.window,
+ screen->getBorderColor()->getPixel());
+ XSetWindowBorder(display, menu.window,
+ screen->getBorderColor()->getPixel());
+ XSetWindowBorderWidth(display, menu.window, screen->getBorderWidth());
+
+ menu.bevel_w = screen->getBevelWidth();
+ update();
+}
--- /dev/null
+// Basemenu.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Basemenu_hh
+#define __Basemenu_hh
+
+#include <X11/Xlib.h>
+
+class Openbox;
+class BImageControl;
+class BScreen;
+class Basemenu;
+class BasemenuItem;
+#include "LinkedList.h"
+
+
+class Basemenu {
+private:
+ LinkedList<BasemenuItem> *menuitems;
+ Openbox *openbox;
+ Basemenu *parent;
+ BImageControl *image_ctrl;
+ BScreen *screen;
+
+ Bool moving, visible, movable, torn, internal_menu, title_vis, shifted,
+ hide_tree;
+ Display *display;
+ int which_sub, which_press, which_sbl, alignment;
+
+ struct _menu {
+ Pixmap frame_pixmap, title_pixmap, hilite_pixmap, sel_pixmap;
+ Window window, frame, title;
+
+ char *label;
+ int x, y, x_move, y_move, x_shift, y_shift, sublevels, persub, minsub,
+ grab_x, grab_y;
+ unsigned int width, height, title_h, frame_h, item_w, item_h, bevel_w,
+ bevel_h;
+ } menu;
+
+
+protected:
+ inline BasemenuItem *find(int index) { return menuitems->find(index); }
+ inline void setTitleVisibility(Bool b) { title_vis = b; }
+ inline void setMovable(Bool b) { movable = b; }
+ inline void setHideTree(Bool h) { hide_tree = h; }
+ inline void setMinimumSublevels(int m) { menu.minsub = m; }
+
+ virtual void itemSelected(int, int) = 0;
+ virtual void drawItem(int, Bool = False, Bool = False,
+ int = -1, int = -1, unsigned int = 0,
+ unsigned int = 0);
+ virtual void redrawTitle();
+ virtual void internal_hide(void);
+
+
+public:
+ Basemenu(BScreen *);
+ virtual ~Basemenu(void);
+
+ inline const Bool &isTorn(void) const { return torn; }
+ inline const Bool &isVisible(void) const { return visible; }
+
+ inline BScreen *getScreen(void) { return screen; }
+
+ inline const Window &getWindowID(void) const { return menu.window; }
+
+ inline const char *getLabel(void) const { return menu.label; }
+
+ int insert(const char *, int = 0, const char * = (const char *) 0, int = -1);
+ int insert(const char **, int = -1, int = 0);
+ int insert(const char *, Basemenu *, int = -1);
+ int remove(int);
+
+ inline const int &getX(void) const { return menu.x; }
+ inline const int &getY(void) const { return menu.y; }
+ inline int getCount(void) { return menuitems->count(); }
+ inline const int &getCurrentSubmenu(void) const { return which_sub; }
+
+ inline const unsigned int &getWidth(void) const { return menu.width; }
+ inline const unsigned int &getHeight(void) const { return menu.height; }
+ inline const unsigned int &getTitleHeight(void) const
+ { return menu.title_h; }
+
+ inline void setInternalMenu(void) { internal_menu = True; }
+ inline void setAlignment(int a) { alignment = a; }
+ inline void setTorn(void) { torn = True; }
+ inline void removeParent(void)
+ { if (internal_menu) parent = (Basemenu *) 0; }
+
+ Bool hasSubmenu(int);
+ Bool isItemSelected(int);
+ Bool isItemEnabled(int);
+
+ void buttonPressEvent(XButtonEvent *);
+ void buttonReleaseEvent(XButtonEvent *);
+ void motionNotifyEvent(XMotionEvent *);
+ void enterNotifyEvent(XCrossingEvent *);
+ void leaveNotifyEvent(XCrossingEvent *);
+ void exposeEvent(XExposeEvent *);
+ void reconfigure(void);
+ void setLabel(const char *n);
+ void move(int, int);
+ void update(void);
+ void setItemSelected(int, Bool);
+ void setItemEnabled(int, Bool);
+
+ virtual void drawSubmenu(int);
+ virtual void show(void);
+ virtual void hide(void);
+
+ enum { AlignDontCare = 1, AlignTop, AlignBottom };
+ enum { Right = 1, Left };
+ enum { Empty = 0, Square, Triangle, Diamond };
+};
+
+
+class BasemenuItem {
+private:
+ Basemenu *s;
+ const char **u, *l, *e;
+ int f, enabled, selected;
+
+ friend class Basemenu;
+
+protected:
+
+public:
+ BasemenuItem(const char *lp, int fp, const char *ep = (const char *) 0):
+ s(0), u(0), l(lp), e(ep), f(fp), enabled(1), selected(0) {}
+
+ BasemenuItem(const char *lp, Basemenu *mp): s(mp), u(0), l(lp), e(0), f(0),
+ enabled(1), selected(0) {}
+
+ BasemenuItem(const char **up, int fp): s(0), u(up), l(0), e(0), f(fp),
+ enabled(1), selected(0) {}
+
+ inline const char *exec(void) const { return e; }
+ inline const char *label(void) const { return l; }
+ inline const char **ulabel(void) const { return u; }
+ inline const int &function(void) const { return f; }
+ inline Basemenu *submenu(void) { return s; }
+
+ inline const int &isEnabled(void) const { return enabled; }
+ inline void setEnabled(int e) { enabled = e; }
+ inline const int &isSelected(void) const { return selected; }
+ inline void setSelected(int s) { selected = s; }
+};
+
+
+#endif // __Basemenu_hh
--- /dev/null
+// Clientmenu.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "openbox.h"
+#include "Clientmenu.h"
+#include "Screen.h"
+#include "Window.h"
+#include "Workspace.h"
+#include "Workspacemenu.h"
+
+
+Clientmenu::Clientmenu(Workspace *ws) : Basemenu(ws->getScreen()) {
+ wkspc = ws;
+ screen = wkspc->getScreen();
+
+ setInternalMenu();
+}
+
+
+void Clientmenu::itemSelected(int button, int index) {
+ if (button > 2) return;
+
+ OpenboxWindow *win = wkspc->getWindow(index);
+ if (win) {
+ if (button == 1) {
+ if (! wkspc->isCurrent()) wkspc->setCurrent();
+ } else if (button == 2) {
+ if (! wkspc->isCurrent()) win->deiconify(True, False);
+ }
+ wkspc->raiseWindow(win);
+ win->setInputFocus();
+ }
+
+ if (! (screen->getWorkspacemenu()->isTorn() || isTorn())) hide();
+}
--- /dev/null
+// Clientmenu.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Clientmenu_hh
+#define __Clientmenu_hh
+
+#include "Basemenu.h"
+class Workspace;
+class BScreen;
+
+class Clientmenu : public Basemenu {
+private:
+ BScreen *screen;
+ Workspace *wkspc;
+
+protected:
+ virtual void itemSelected(int, int);
+
+public:
+ Clientmenu(Workspace *);
+};
+
+
+#endif // __Clientmenu_hh
+
--- /dev/null
+// Configmenu.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "i18n.h"
+#include "Configmenu.h"
+#include "Toolbar.h"
+#include "Window.h"
+#include "Screen.h"
+
+Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) {
+ screen = scr;
+ openbox = screen->getOpenbox();
+ setLabel(i18n->getMessage(ConfigmenuSet, ConfigmenuConfigOptions,
+ "Config options"));
+ setInternalMenu();
+
+ focusmenu = new Focusmenu(this);
+ placementmenu = new Placementmenu(this);
+
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuFocusModel,
+ "Focus Model"), focusmenu);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuWindowPlacement,
+ "Window Placement"), placementmenu);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuImageDithering,
+ "Image Dithering"), 1);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuOpaqueMove,
+ "Opaque Window Moving"), 2);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuFullMax,
+ "Full Maximization"), 3);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuFocusNew,
+ "Focus New Windows"), 4);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuFocusLast,
+ "Focus Last Window on Workspace"), 5);
+ update();
+
+ setItemSelected(2, screen->getImageControl()->doDither());
+ setItemSelected(3, screen->doOpaqueMove());
+ setItemSelected(4, screen->doFullMax());
+ setItemSelected(5, screen->doFocusNew());
+ setItemSelected(6, screen->doFocusLast());
+}
+
+Configmenu::~Configmenu(void) {
+ delete focusmenu;
+ delete placementmenu;
+}
+
+void Configmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+
+ if (!item->function())
+ return;
+
+ switch(item->function()) {
+ case 1: { // dither
+ screen->getImageControl()->
+ setDither((! screen->getImageControl()->doDither()));
+
+ setItemSelected(index, screen->getImageControl()->doDither());
+
+ break;
+ }
+
+ case 2: { // opaque move
+ screen->saveOpaqueMove((! screen->doOpaqueMove()));
+
+ setItemSelected(index, screen->doOpaqueMove());
+
+ break;
+ }
+
+ case 3: { // full maximization
+ screen->saveFullMax((! screen->doFullMax()));
+
+ setItemSelected(index, screen->doFullMax());
+
+ break;
+ }
+ case 4: { // focus new windows
+ screen->saveFocusNew((! screen->doFocusNew()));
+
+ setItemSelected(index, screen->doFocusNew());
+ break;
+ }
+
+ case 5: { // focus last window on workspace
+ screen->saveFocusLast((! screen->doFocusLast()));
+ setItemSelected(index, screen->doFocusLast());
+ break;
+ }
+ } // switch
+}
+
+void Configmenu::reconfigure(void) {
+ focusmenu->reconfigure();
+ placementmenu->reconfigure();
+
+ Basemenu::reconfigure();
+}
+
+Configmenu::Focusmenu::Focusmenu(Configmenu *cm) : Basemenu(cm->screen) {
+ configmenu = cm;
+
+ setLabel(i18n->getMessage(ConfigmenuSet, ConfigmenuFocusModel,
+ "Focus Model"));
+ setInternalMenu();
+
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuClickToFocus,
+ "Click To Focus"), 1);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuSloppyFocus,
+ "Sloppy Focus"), 2);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuAutoRaise,
+ "Auto Raise"), 3);
+ update();
+
+ setItemSelected(0, (! configmenu->screen->isSloppyFocus()));
+ setItemSelected(1, configmenu->screen->isSloppyFocus());
+ setItemEnabled(2, configmenu->screen->isSloppyFocus());
+ setItemSelected(2, configmenu->screen->doAutoRaise());
+}
+
+void Configmenu::Focusmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+
+ if (!item->function())
+ return;
+
+ switch (item->function()) {
+ case 1: // click to focus
+ configmenu->screen->saveSloppyFocus(False);
+ configmenu->screen->saveAutoRaise(False);
+
+ if (! configmenu->screen->getOpenbox()->getFocusedWindow())
+ XSetInputFocus(configmenu->screen->getOpenbox()->getXDisplay(),
+ configmenu->screen->getToolbar()->getWindowID(),
+ RevertToParent, CurrentTime);
+ else
+ XSetInputFocus(configmenu->screen->getOpenbox()->getXDisplay(),
+ configmenu->screen->getOpenbox()->
+ getFocusedWindow()->getClientWindow(),
+ RevertToParent, CurrentTime);
+
+ configmenu->screen->reconfigure();
+
+ break;
+
+ case 2: // sloppy focus
+ configmenu->screen->saveSloppyFocus(True);
+
+ configmenu->screen->reconfigure();
+
+ break;
+
+ case 3: // auto raise with sloppy focus
+ Bool change = ((configmenu->screen->doAutoRaise()) ? False : True);
+ configmenu->screen->saveAutoRaise(change);
+
+ break;
+ }
+
+ setItemSelected(0, (! configmenu->screen->isSloppyFocus()));
+ setItemSelected(1, configmenu->screen->isSloppyFocus());
+ setItemEnabled(2, configmenu->screen->isSloppyFocus());
+ setItemSelected(2, configmenu->screen->doAutoRaise());
+}
+
+Configmenu::Placementmenu::Placementmenu(Configmenu *cm) :
+ Basemenu(cm->screen) {
+ configmenu = cm;
+
+ setLabel(i18n->getMessage(ConfigmenuSet, ConfigmenuWindowPlacement,
+ "Window Placement"));
+ setInternalMenu();
+
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuSmartRows,
+ "Smart Placement (Rows)"),
+ BScreen::RowSmartPlacement);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuSmartCols,
+ "Smart Placement (Columns)"),
+ BScreen::ColSmartPlacement);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuCascade,
+ "Cascade Placement"), BScreen::CascadePlacement);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuLeftRight,
+ "Left to Right"), BScreen::LeftRight);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuRightLeft,
+ "Right to Left"), BScreen::RightLeft);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuTopBottom,
+ "Top to Bottom"), BScreen::TopBottom);
+ insert(i18n->getMessage(ConfigmenuSet, ConfigmenuBottomTop,
+ "Bottom to Top"), BScreen::BottomTop);
+ update();
+
+ switch (configmenu->screen->getPlacementPolicy()) {
+ case BScreen::RowSmartPlacement:
+ setItemSelected(0, True);
+ break;
+
+ case BScreen::ColSmartPlacement:
+ setItemSelected(1, True);
+ break;
+
+ case BScreen::CascadePlacement:
+ setItemSelected(2, True);
+ break;
+ }
+
+ Bool rl = (configmenu->screen->getRowPlacementDirection() ==
+ BScreen::LeftRight),
+ tb = (configmenu->screen->getColPlacementDirection() ==
+ BScreen::TopBottom);
+
+ setItemSelected(3, rl);
+ setItemSelected(4, ! rl);
+
+ setItemSelected(5, tb);
+ setItemSelected(6, ! tb);
+}
+
+void Configmenu::Placementmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+
+ if (!item->function())
+ return;
+
+ switch (item->function()) {
+ case BScreen::RowSmartPlacement:
+ configmenu->screen->savePlacementPolicy(item->function());
+
+ setItemSelected(0, True);
+ setItemSelected(1, False);
+ setItemSelected(2, False);
+
+ break;
+
+ case BScreen::ColSmartPlacement:
+ configmenu->screen->savePlacementPolicy(item->function());
+
+ setItemSelected(0, False);
+ setItemSelected(1, True);
+ setItemSelected(2, False);
+
+ break;
+
+ case BScreen::CascadePlacement:
+ configmenu->screen->savePlacementPolicy(item->function());
+
+ setItemSelected(0, False);
+ setItemSelected(1, False);
+ setItemSelected(2, True);
+
+ break;
+
+ case BScreen::LeftRight:
+ configmenu->screen->saveRowPlacementDirection(BScreen::LeftRight);
+
+ setItemSelected(3, True);
+ setItemSelected(4, False);
+
+ break;
+
+ case BScreen::RightLeft:
+ configmenu->screen->saveRowPlacementDirection(BScreen::RightLeft);
+
+ setItemSelected(3, False);
+ setItemSelected(4, True);
+
+ break;
+
+ case BScreen::TopBottom:
+ configmenu->screen->saveColPlacementDirection(BScreen::TopBottom);
+
+ setItemSelected(5, True);
+ setItemSelected(6, False);
+
+ break;
+
+ case BScreen::BottomTop:
+ configmenu->screen->saveColPlacementDirection(BScreen::BottomTop);
+
+ setItemSelected(5, False);
+ setItemSelected(6, True);
+
+ break;
+ }
+}
--- /dev/null
+// Configmenu.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Configmenu_hh
+#define __Configmenu_hh
+
+#include "Basemenu.h"
+
+// forward declaration
+class Openbox;
+class BScreen;
+class Configmenu;
+
+class Configmenu : public Basemenu {
+private:
+ class Focusmenu : public Basemenu {
+ private:
+ Configmenu *configmenu;
+
+ protected:
+ virtual void itemSelected(int, int);
+
+ public:
+ Focusmenu(Configmenu *);
+ };
+
+ class Placementmenu : public Basemenu {
+ private:
+ Configmenu *configmenu;
+
+ protected:
+ virtual void itemSelected(int, int);
+
+ public:
+ Placementmenu(Configmenu *);
+ };
+
+ Openbox *openbox;
+ BScreen *screen;
+ Focusmenu *focusmenu;
+ Placementmenu *placementmenu;
+
+ friend class Focusmenu;
+ friend class Placementmenu;
+
+protected:
+ virtual void itemSelected(int, int);
+
+public:
+ Configmenu(BScreen *);
+ virtual ~Configmenu(void);
+
+ inline Basemenu *getFocusmenu(void) { return focusmenu; }
+ inline Basemenu *getPlacementmenu(void) { return placementmenu; }
+
+ void reconfigure(void);
+};
+
+#endif // __Configmenu_hh
--- /dev/null
+// Icon.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "i18n.h"
+#include "Iconmenu.h"
+#include "Screen.h"
+#include "Window.h"
+
+
+Iconmenu::Iconmenu(BScreen *scrn) : Basemenu(scrn) {
+ setInternalMenu();
+
+ screen = scrn;
+
+ setLabel(i18n->getMessage(IconSet, IconIcons, "Icons"));
+ update();
+}
+
+
+void Iconmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ if (index >= 0 && index < screen->getIconCount()) {
+ OpenboxWindow *win = screen->getIcon(index);
+
+ if (win) {
+ win->deiconify();
+ win->setInputFocus();
+ }
+ }
+
+ if (! (screen->getWorkspacemenu()->isTorn() || isTorn()))
+ hide();
+}
--- /dev/null
+// Icon.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Icon_hh
+#define __Icon_hh
+
+#include "Basemenu.h"
+
+// forward declaration
+class Iconmenu;
+class BScreen;
+
+class Iconmenu : public Basemenu {
+private:
+ BScreen *screen;
+
+protected:
+ virtual void itemSelected(int, int);
+
+public:
+ Iconmenu(BScreen *);
+};
+
+
+#endif // __Icon_hh
--- /dev/null
+// Image.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "i18n.h"
+#include "BaseDisplay.h"
+#include "Image.h"
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif // HAVE_SYS_TYPES_H
+
+#ifndef u_int32_t
+# ifdef uint_32_t
+typedef uint32_t u_int32_t;
+# else
+# ifdef __uint32_t
+typedef __uint32_t u_int32_t;
+# else
+typedef unsigned int u_int32_t;
+# endif
+# endif
+#endif
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef HAVE_CTYPE_H
+# include <ctype.h>
+#endif // HAVE_CTYPE_H
+
+#include <algorithm>
+using namespace std;
+
+static unsigned long bsqrt(unsigned long x) {
+ if (x <= 0) return 0;
+ if (x == 1) return 1;
+
+ unsigned long r = x >> 1;
+ unsigned long q;
+
+ while (1) {
+ q = x / r;
+ if (q >= r) return r;
+ r = (r + q) >> 1;
+ }
+}
+
+
+BImage::BImage(BImageControl *c, unsigned int w, unsigned int h) {
+ control = c;
+
+ width = ((signed) w > 0) ? w : 1;
+ height = ((signed) h > 0) ? h : 1;
+
+ red = new unsigned char[width * height];
+ green = new unsigned char[width * height];
+ blue = new unsigned char[width * height];
+
+ xtable = ytable = (unsigned int *) 0;
+
+ cpc = control->getColorsPerChannel();
+ cpccpc = cpc * cpc;
+
+ control->getColorTables(&red_table, &green_table, &blue_table,
+ &red_offset, &green_offset, &blue_offset,
+ &red_bits, &green_bits, &blue_bits);
+
+ if (control->getVisual()->c_class != TrueColor)
+ control->getXColorTable(&colors, &ncolors);
+}
+
+
+BImage::~BImage(void) {
+ if (red) delete [] red;
+ if (green) delete [] green;
+ if (blue) delete [] blue;
+}
+
+
+Pixmap BImage::render(BTexture *texture) {
+ if (texture->getTexture() & BImage_ParentRelative)
+ return ParentRelative;
+ else if (texture->getTexture() & BImage_Solid)
+ return render_solid(texture);
+ else if (texture->getTexture() & BImage_Gradient)
+ return render_gradient(texture);
+
+ return None;
+}
+
+
+Pixmap BImage::render_solid(BTexture *texture) {
+ Pixmap pixmap = XCreatePixmap(control->getBaseDisplay()->getXDisplay(),
+ control->getDrawable(), width,
+ height, control->getDepth());
+ if (pixmap == None) {
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageErrorCreatingSolidPixmap,
+ "BImage::render_solid: error creating pixmap\n"));
+ return None;
+ }
+
+ XGCValues gcv;
+ GC gc, hgc, lgc;
+
+ gcv.foreground = texture->getColor()->getPixel();
+ gcv.fill_style = FillSolid;
+ gc = XCreateGC(control->getBaseDisplay()->getXDisplay(), pixmap,
+ GCForeground | GCFillStyle, &gcv);
+
+ gcv.foreground = texture->getHiColor()->getPixel();
+ hgc = XCreateGC(control->getBaseDisplay()->getXDisplay(), pixmap,
+ GCForeground, &gcv);
+
+ gcv.foreground = texture->getLoColor()->getPixel();
+ lgc = XCreateGC(control->getBaseDisplay()->getXDisplay(), pixmap,
+ GCForeground, &gcv);
+
+ XFillRectangle(control->getBaseDisplay()->getXDisplay(), pixmap, gc, 0, 0,
+ width, height);
+
+#ifdef INTERLACE
+ if (texture->getTexture() & BImage_Interlaced) {
+ gcv.foreground = texture->getColorTo()->getPixel();
+ GC igc = XCreateGC(control->getBaseDisplay()->getXDisplay(), pixmap,
+ GCForeground, &gcv);
+
+ register unsigned int i = 0;
+ for (; i < height; i += 2)
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, igc,
+ 0, i, width, i);
+
+ XFreeGC(control->getBaseDisplay()->getXDisplay(), igc);
+ }
+#endif // INTERLACE
+
+
+ if (texture->getTexture() & BImage_Bevel1) {
+ if (texture->getTexture() & BImage_Raised) {
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, lgc,
+ 0, height - 1, width - 1, height - 1);
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, lgc,
+ width - 1, height - 1, width - 1, 0);
+
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, hgc,
+ 0, 0, width - 1, 0);
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, hgc,
+ 0, height - 1, 0, 0);
+ } else if (texture->getTexture() & BImage_Sunken) {
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, hgc,
+ 0, height - 1, width - 1, height - 1);
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, hgc,
+ width - 1, height - 1, width - 1, 0);
+
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, lgc,
+ 0, 0, width - 1, 0);
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, lgc,
+ 0, height - 1, 0, 0);
+ }
+ } else if (texture->getTexture() & BImage_Bevel2) {
+ if (texture->getTexture() & BImage_Raised) {
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, lgc,
+ 1, height - 3, width - 3, height - 3);
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, lgc,
+ width - 3, height - 3, width - 3, 1);
+
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, hgc,
+ 1, 1, width - 3, 1);
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, hgc,
+ 1, height - 3, 1, 1);
+ } else if (texture->getTexture() & BImage_Sunken) {
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, hgc,
+ 1, height - 3, width - 3, height - 3);
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, hgc,
+ width - 3, height - 3, width - 3, 1);
+
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, lgc,
+ 1, 1, width - 3, 1);
+ XDrawLine(control->getBaseDisplay()->getXDisplay(), pixmap, lgc,
+ 1, height - 3, 1, 1);
+ }
+ }
+
+ XFreeGC(control->getBaseDisplay()->getXDisplay(), gc);
+ XFreeGC(control->getBaseDisplay()->getXDisplay(), hgc);
+ XFreeGC(control->getBaseDisplay()->getXDisplay(), lgc);
+
+ return pixmap;
+}
+
+
+Pixmap BImage::render_gradient(BTexture *texture) {
+ int inverted = 0;
+
+#ifdef INTERLACE
+ interlaced = texture->getTexture() & BImage_Interlaced;
+#endif // INTERLACE
+
+ if (texture->getTexture() & BImage_Sunken) {
+ from = texture->getColorTo();
+ to = texture->getColor();
+
+ if (! (texture->getTexture() & BImage_Invert)) inverted = 1;
+ } else {
+ from = texture->getColor();
+ to = texture->getColorTo();
+
+ if (texture->getTexture() & BImage_Invert) inverted = 1;
+ }
+
+ control->getGradientBuffers(width, height, &xtable, &ytable);
+
+ if (texture->getTexture() & BImage_Diagonal) dgradient();
+ else if (texture->getTexture() & BImage_Elliptic) egradient();
+ else if (texture->getTexture() & BImage_Horizontal) hgradient();
+ else if (texture->getTexture() & BImage_Pyramid) pgradient();
+ else if (texture->getTexture() & BImage_Rectangle) rgradient();
+ else if (texture->getTexture() & BImage_Vertical) vgradient();
+ else if (texture->getTexture() & BImage_CrossDiagonal) cdgradient();
+ else if (texture->getTexture() & BImage_PipeCross) pcgradient();
+
+ if (texture->getTexture() & BImage_Bevel1) bevel1();
+ else if (texture->getTexture() & BImage_Bevel2) bevel2();
+
+ if (inverted) invert();
+
+ Pixmap pixmap = renderPixmap();
+
+ return pixmap;
+
+}
+
+
+XImage *BImage::renderXImage(void) {
+ XImage *image =
+ XCreateImage(control->getBaseDisplay()->getXDisplay(),
+ control->getVisual(), control->getDepth(), ZPixmap, 0, 0,
+ width, height, 32, 0);
+
+ if (! image) {
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageErrorCreatingXImage,
+ "BImage::renderXImage: error creating XImage\n"));
+ return (XImage *) 0;
+ }
+
+ // insurance policy
+ image->data = (char *) 0;
+
+ unsigned char *d = new unsigned char[image->bytes_per_line * (height + 1)];
+ register unsigned int x, y, dithx, dithy, r, g, b, o, er, eg, eb, offset;
+
+ unsigned char *pixel_data = d, *ppixel_data = d;
+ unsigned long pixel;
+
+ o = image->bits_per_pixel + ((image->byte_order == MSBFirst) ? 1 : 0);
+
+ if (control->doDither() && width > 1 && height > 1) {
+ unsigned char dither4[4][4] = { {0, 4, 1, 5},
+ {6, 2, 7, 3},
+ {1, 5, 0, 4},
+ {7, 3, 6, 2} };
+
+#ifdef ORDEREDPSEUDO
+ unsigned char dither8[8][8] = { { 0, 32, 8, 40, 2, 34, 10, 42 },
+ { 48, 16, 56, 24, 50, 18, 58, 26 },
+ { 12, 44, 4, 36, 14, 46, 6, 38 },
+ { 60, 28, 52, 20, 62, 30, 54, 22 },
+ { 3, 35, 11, 43, 1, 33, 9, 41 },
+ { 51, 19, 59, 27, 49, 17, 57, 25 },
+ { 15, 47, 7, 39, 13, 45, 5, 37 },
+ { 63, 31, 55, 23, 61, 29, 53, 21 } };
+#endif // ORDEREDPSEUDO
+
+ switch (control->getVisual()->c_class) {
+ case TrueColor:
+ // algorithm: ordered dithering... many many thanks to rasterman
+ // (raster@rasterman.com) for telling me about this... portions of this
+ // code is based off of his code in Imlib
+ for (y = 0, offset = 0; y < height; y++) {
+ dithy = y & 0x3;
+
+ for (x = 0; x < width; x++, offset++) {
+ dithx = x & 0x3;
+ r = red[offset];
+ g = green[offset];
+ b = blue[offset];
+
+ er = r & (red_bits - 1);
+ eg = g & (green_bits - 1);
+ eb = b & (blue_bits - 1);
+
+ r = red_table[r];
+ g = green_table[g];
+ b = blue_table[b];
+
+ if ((dither4[dithy][dithx] < er) && (r < red_table[255])) r++;
+ if ((dither4[dithy][dithx] < eg) && (g < green_table[255])) g++;
+ if ((dither4[dithy][dithx] < eb) && (b < blue_table[255])) b++;
+
+ pixel = (r << red_offset) | (g << green_offset) | (b << blue_offset);
+
+ switch (o) {
+ case 8: // 8bpp
+ *pixel_data++ = pixel;
+ break;
+
+ case 16: // 16bpp LSB
+ *pixel_data++ = pixel;
+ *pixel_data++ = pixel >> 8;
+ break;
+
+ case 17: // 16bpp MSB
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel;
+ break;
+
+ case 24: // 24bpp LSB
+ *pixel_data++ = pixel;
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel >> 16;
+ break;
+
+ case 25: // 24bpp MSB
+ *pixel_data++ = pixel >> 16;
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel;
+ break;
+
+ case 32: // 32bpp LSB
+ *pixel_data++ = pixel;
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel >> 16;
+ *pixel_data++ = pixel >> 24;
+ break;
+
+ case 33: // 32bpp MSB
+ *pixel_data++ = pixel >> 24;
+ *pixel_data++ = pixel >> 16;
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel;
+ break;
+ }
+ }
+
+ pixel_data = (ppixel_data += image->bytes_per_line);
+ }
+
+ break;
+
+ case StaticColor:
+ case PseudoColor: {
+#ifndef ORDEREDPSEUDO
+ short *terr,
+ *rerr = new short[width + 2],
+ *gerr = new short[width + 2],
+ *berr = new short[width + 2],
+ *nrerr = new short[width + 2],
+ *ngerr = new short[width + 2],
+ *nberr = new short[width + 2];
+ int rr, gg, bb, rer, ger, ber;
+ int dd = 255 / control->getColorsPerChannel();
+
+ for (x = 0; x < width; x++) {
+ *(rerr + x) = *(red + x);
+ *(gerr + x) = *(green + x);
+ *(berr + x) = *(blue + x);
+ }
+
+ *(rerr + x) = *(gerr + x) = *(berr + x) = 0;
+#endif // ORDEREDPSEUDO
+
+ for (y = 0, offset = 0; y < height; y++) {
+#ifdef ORDEREDPSEUDO
+ dithy = y & 7;
+
+ for (x = 0; x < width; x++, offset++) {
+ dithx = x & 7;
+
+ r = red[offset];
+ g = green[offset];
+ b = blue[offset];
+
+ er = r & (red_bits - 1);
+ eg = g & (green_bits - 1);
+ eb = b & (blue_bits - 1);
+
+ r = red_table[r];
+ g = green_table[g];
+ b = blue_table[b];
+
+ if ((dither8[dithy][dithx] < er) && (r < red_table[255])) r++;
+ if ((dither8[dithy][dithx] < eg) && (g < green_table[255])) g++;
+ if ((dither8[dithy][dithx] < eb) && (b < blue_table[255])) b++;
+
+ pixel = (r * cpccpc) + (g * cpc) + b;
+ *(pixel_data++) = colors[pixel].pixel;
+ }
+
+ pixel_data = (ppixel_data += image->bytes_per_line);
+ }
+#else // !ORDEREDPSEUDO
+ if (y < (height - 1)) {
+ int i = offset + width;
+ for (x = 0; x < width; x++, i++) {
+ *(nrerr + x) = *(red + i);
+ *(ngerr + x) = *(green + i);
+ *(nberr + x) = *(blue + i);
+ }
+
+ *(nrerr + x) = *(red + (--i));
+ *(ngerr + x) = *(green + i);
+ *(nberr + x) = *(blue + i);
+ }
+
+ for (x = 0; x < width; x++) {
+ rr = rerr[x];
+ gg = gerr[x];
+ bb = berr[x];
+
+ if (rr > 255) rr = 255; else if (rr < 0) rr = 0;
+ if (gg > 255) gg = 255; else if (gg < 0) gg = 0;
+ if (bb > 255) bb = 255; else if (bb < 0) bb = 0;
+
+ r = red_table[rr];
+ g = green_table[gg];
+ b = blue_table[bb];
+
+ rer = rerr[x] - r*dd;
+ ger = gerr[x] - g*dd;
+ ber = berr[x] - b*dd;
+
+ pixel = (r * cpccpc) + (g * cpc) + b;
+ *pixel_data++ = colors[pixel].pixel;
+
+ r = rer >> 1;
+ g = ger >> 1;
+ b = ber >> 1;
+ rerr[x+1] += r;
+ gerr[x+1] += g;
+ berr[x+1] += b;
+ nrerr[x] += r;
+ ngerr[x] += g;
+ nberr[x] += b;
+ }
+
+ offset += width;
+
+ pixel_data = (ppixel_data += image->bytes_per_line);
+
+ terr = rerr;
+ rerr = nrerr;
+ nrerr = terr;
+
+ terr = gerr;
+ gerr = ngerr;
+ ngerr = terr;
+
+ terr = berr;
+ berr = nberr;
+ nberr = terr;
+ }
+
+ delete [] rerr;
+ delete [] gerr;
+ delete [] berr;
+ delete [] nrerr;
+ delete [] ngerr;
+ delete [] nberr;
+#endif // ORDEREDPSUEDO
+
+ break; }
+
+ default:
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageUnsupVisual,
+ "BImage::renderXImage: unsupported visual\n"));
+ delete [] d;
+ XDestroyImage(image);
+ return (XImage *) 0;
+ }
+ } else {
+ switch (control->getVisual()->c_class) {
+ case StaticColor:
+ case PseudoColor:
+ for (y = 0, offset = 0; y < height; y++) {
+ for (x = 0; x < width; x++, offset++) {
+ r = red_table[red[offset]];
+ g = green_table[green[offset]];
+ b = blue_table[blue[offset]];
+
+ pixel = (r * cpccpc) + (g * cpc) + b;
+ *pixel_data++ = colors[pixel].pixel;
+ }
+
+ pixel_data = (ppixel_data += image->bytes_per_line);
+ }
+
+ break;
+
+ case TrueColor:
+ for (y = 0, offset = 0; y < height; y++) {
+ for (x = 0; x < width; x++, offset++) {
+ r = red_table[red[offset]];
+ g = green_table[green[offset]];
+ b = blue_table[blue[offset]];
+
+ pixel = (r << red_offset) | (g << green_offset) | (b << blue_offset);
+
+ switch (o) {
+ case 8: // 8bpp
+ *pixel_data++ = pixel;
+ break;
+
+ case 16: // 16bpp LSB
+ *pixel_data++ = pixel;
+ *pixel_data++ = pixel >> 8;
+ break;
+
+ case 17: // 16bpp MSB
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel;
+ break;
+
+ case 24: // 24bpp LSB
+ *pixel_data++ = pixel;
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel >> 16;
+ break;
+
+ case 25: // 24bpp MSB
+ *pixel_data++ = pixel >> 16;
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel;
+ break;
+
+ case 32: // 32bpp LSB
+ *pixel_data++ = pixel;
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel >> 16;
+ *pixel_data++ = pixel >> 24;
+ break;
+
+ case 33: // 32bpp MSB
+ *pixel_data++ = pixel >> 24;
+ *pixel_data++ = pixel >> 16;
+ *pixel_data++ = pixel >> 8;
+ *pixel_data++ = pixel;
+ break;
+ }
+ }
+
+ pixel_data = (ppixel_data += image->bytes_per_line);
+ }
+
+ break;
+
+ case StaticGray:
+ case GrayScale:
+ for (y = 0, offset = 0; y < height; y++) {
+ for (x = 0; x < width; x++, offset++) {
+ r = *(red_table + *(red + offset));
+ g = *(green_table + *(green + offset));
+ b = *(blue_table + *(blue + offset));
+
+ g = ((r * 30) + (g * 59) + (b * 11)) / 100;
+ *pixel_data++ = colors[g].pixel;
+ }
+
+ pixel_data = (ppixel_data += image->bytes_per_line);
+ }
+
+ break;
+
+ default:
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageUnsupVisual,
+ "BImage::renderXImage: unsupported visual\n"));
+ delete [] d;
+ XDestroyImage(image);
+ return (XImage *) 0;
+ }
+}
+
+ image->data = (char *) d;
+ return image;
+}
+
+
+Pixmap BImage::renderPixmap(void) {
+ Pixmap pixmap =
+ XCreatePixmap(control->getBaseDisplay()->getXDisplay(),
+ control->getDrawable(), width, height, control->getDepth());
+
+ if (pixmap == None) {
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageErrorCreatingPixmap,
+ "BImage::renderPixmap: error creating pixmap\n"));
+ return None;
+ }
+
+ XImage *image = renderXImage();
+
+ if (! image) {
+ XFreePixmap(control->getBaseDisplay()->getXDisplay(), pixmap);
+ return None;
+ } else if (! image->data) {
+ XDestroyImage(image);
+ XFreePixmap(control->getBaseDisplay()->getXDisplay(), pixmap);
+ return None;
+ }
+
+ XPutImage(control->getBaseDisplay()->getXDisplay(), pixmap,
+ DefaultGC(control->getBaseDisplay()->getXDisplay(),
+ control->getScreenInfo()->getScreenNumber()),
+ image, 0, 0, 0, 0, width, height);
+
+ if (image->data) {
+ delete [] image->data;
+ image->data = NULL;
+ }
+
+ XDestroyImage(image);
+
+ return pixmap;
+}
+
+
+void BImage::bevel1(void) {
+ if (width > 2 && height > 2) {
+ unsigned char *pr = red, *pg = green, *pb = blue;
+
+ register unsigned char r, g, b, rr ,gg ,bb;
+ register unsigned int w = width, h = height - 1, wh = w * h;
+
+ while (--w) {
+ r = *pr;
+ rr = r + (r >> 1);
+ if (rr < r) rr = ~0;
+ g = *pg;
+ gg = g + (g >> 1);
+ if (gg < g) gg = ~0;
+ b = *pb;
+ bb = b + (b >> 1);
+ if (bb < b) bb = ~0;
+
+ *pr = rr;
+ *pg = gg;
+ *pb = bb;
+
+ r = *(pr + wh);
+ rr = (r >> 2) + (r >> 1);
+ if (rr > r) rr = 0;
+ g = *(pg + wh);
+ gg = (g >> 2) + (g >> 1);
+ if (gg > g) gg = 0;
+ b = *(pb + wh);
+ bb = (b >> 2) + (b >> 1);
+ if (bb > b) bb = 0;
+
+ *((pr++) + wh) = rr;
+ *((pg++) + wh) = gg;
+ *((pb++) + wh) = bb;
+ }
+
+ r = *pr;
+ rr = r + (r >> 1);
+ if (rr < r) rr = ~0;
+ g = *pg;
+ gg = g + (g >> 1);
+ if (gg < g) gg = ~0;
+ b = *pb;
+ bb = b + (b >> 1);
+ if (bb < b) bb = ~0;
+
+ *pr = rr;
+ *pg = gg;
+ *pb = bb;
+
+ r = *(pr + wh);
+ rr = (r >> 2) + (r >> 1);
+ if (rr > r) rr = 0;
+ g = *(pg + wh);
+ gg = (g >> 2) + (g >> 1);
+ if (gg > g) gg = 0;
+ b = *(pb + wh);
+ bb = (b >> 2) + (b >> 1);
+ if (bb > b) bb = 0;
+
+ *(pr + wh) = rr;
+ *(pg + wh) = gg;
+ *(pb + wh) = bb;
+
+ pr = red + width;
+ pg = green + width;
+ pb = blue + width;
+
+ while (--h) {
+ r = *pr;
+ rr = r + (r >> 1);
+ if (rr < r) rr = ~0;
+ g = *pg;
+ gg = g + (g >> 1);
+ if (gg < g) gg = ~0;
+ b = *pb;
+ bb = b + (b >> 1);
+ if (bb < b) bb = ~0;
+
+ *pr = rr;
+ *pg = gg;
+ *pb = bb;
+
+ pr += width - 1;
+ pg += width - 1;
+ pb += width - 1;
+
+ r = *pr;
+ rr = (r >> 2) + (r >> 1);
+ if (rr > r) rr = 0;
+ g = *pg;
+ gg = (g >> 2) + (g >> 1);
+ if (gg > g) gg = 0;
+ b = *pb;
+ bb = (b >> 2) + (b >> 1);
+ if (bb > b) bb = 0;
+
+ *(pr++) = rr;
+ *(pg++) = gg;
+ *(pb++) = bb;
+ }
+
+ r = *pr;
+ rr = r + (r >> 1);
+ if (rr < r) rr = ~0;
+ g = *pg;
+ gg = g + (g >> 1);
+ if (gg < g) gg = ~0;
+ b = *pb;
+ bb = b + (b >> 1);
+ if (bb < b) bb = ~0;
+
+ *pr = rr;
+ *pg = gg;
+ *pb = bb;
+
+ pr += width - 1;
+ pg += width - 1;
+ pb += width - 1;
+
+ r = *pr;
+ rr = (r >> 2) + (r >> 1);
+ if (rr > r) rr = 0;
+ g = *pg;
+ gg = (g >> 2) + (g >> 1);
+ if (gg > g) gg = 0;
+ b = *pb;
+ bb = (b >> 2) + (b >> 1);
+ if (bb > b) bb = 0;
+
+ *pr = rr;
+ *pg = gg;
+ *pb = bb;
+ }
+}
+
+
+void BImage::bevel2(void) {
+ if (width > 4 && height > 4) {
+ unsigned char r, g, b, rr ,gg ,bb, *pr = red + width + 1,
+ *pg = green + width + 1, *pb = blue + width + 1;
+ unsigned int w = width - 2, h = height - 1, wh = width * (height - 3);
+
+ while (--w) {
+ r = *pr;
+ rr = r + (r >> 1);
+ if (rr < r) rr = ~0;
+ g = *pg;
+ gg = g + (g >> 1);
+ if (gg < g) gg = ~0;
+ b = *pb;
+ bb = b + (b >> 1);
+ if (bb < b) bb = ~0;
+
+ *pr = rr;
+ *pg = gg;
+ *pb = bb;
+
+ r = *(pr + wh);
+ rr = (r >> 2) + (r >> 1);
+ if (rr > r) rr = 0;
+ g = *(pg + wh);
+ gg = (g >> 2) + (g >> 1);
+ if (gg > g) gg = 0;
+ b = *(pb + wh);
+ bb = (b >> 2) + (b >> 1);
+ if (bb > b) bb = 0;
+
+ *((pr++) + wh) = rr;
+ *((pg++) + wh) = gg;
+ *((pb++) + wh) = bb;
+ }
+
+ pr = red + width;
+ pg = green + width;
+ pb = blue + width;
+
+ while (--h) {
+ r = *pr;
+ rr = r + (r >> 1);
+ if (rr < r) rr = ~0;
+ g = *pg;
+ gg = g + (g >> 1);
+ if (gg < g) gg = ~0;
+ b = *pb;
+ bb = b + (b >> 1);
+ if (bb < b) bb = ~0;
+
+ *(++pr) = rr;
+ *(++pg) = gg;
+ *(++pb) = bb;
+
+ pr += width - 3;
+ pg += width - 3;
+ pb += width - 3;
+
+ r = *pr;
+ rr = (r >> 2) + (r >> 1);
+ if (rr > r) rr = 0;
+ g = *pg;
+ gg = (g >> 2) + (g >> 1);
+ if (gg > g) gg = 0;
+ b = *pb;
+ bb = (b >> 2) + (b >> 1);
+ if (bb > b) bb = 0;
+
+ *(pr++) = rr;
+ *(pg++) = gg;
+ *(pb++) = bb;
+
+ pr++; pg++; pb++;
+ }
+ }
+}
+
+
+void BImage::invert(void) {
+ register unsigned int i, j, wh = (width * height) - 1;
+ unsigned char tmp;
+
+ for (i = 0, j = wh; j > i; j--, i++) {
+ tmp = *(red + j);
+ *(red + j) = *(red + i);
+ *(red + i) = tmp;
+
+ tmp = *(green + j);
+ *(green + j) = *(green + i);
+ *(green + i) = tmp;
+
+ tmp = *(blue + j);
+ *(blue + j) = *(blue + i);
+ *(blue + i) = tmp;
+ }
+}
+
+
+void BImage::dgradient(void) {
+ // diagonal gradient code was written by Mike Cole <mike@mydot.com>
+ // modified for interlacing by Brad Hughes
+
+ float drx, dgx, dbx, dry, dgy, dby, yr = 0.0, yg = 0.0, yb = 0.0,
+ xr = (float) from->getRed(),
+ xg = (float) from->getGreen(),
+ xb = (float) from->getBlue();
+ unsigned char *pr = red, *pg = green, *pb = blue;
+ unsigned int w = width * 2, h = height * 2, *xt = xtable, *yt = ytable;
+
+ register unsigned int x, y;
+
+ dry = drx = (float) (to->getRed() - from->getRed());
+ dgy = dgx = (float) (to->getGreen() - from->getGreen());
+ dby = dbx = (float) (to->getBlue() - from->getBlue());
+
+ // Create X table
+ drx /= w;
+ dgx /= w;
+ dbx /= w;
+
+ for (x = 0; x < width; x++) {
+ *(xt++) = (unsigned char) (xr);
+ *(xt++) = (unsigned char) (xg);
+ *(xt++) = (unsigned char) (xb);
+
+ xr += drx;
+ xg += dgx;
+ xb += dbx;
+ }
+
+ // Create Y table
+ dry /= h;
+ dgy /= h;
+ dby /= h;
+
+ for (y = 0; y < height; y++) {
+ *(yt++) = ((unsigned char) yr);
+ *(yt++) = ((unsigned char) yg);
+ *(yt++) = ((unsigned char) yb);
+
+ yr += dry;
+ yg += dgy;
+ yb += dby;
+ }
+
+ // Combine tables to create gradient
+
+#ifdef INTERLACE
+ if (! interlaced) {
+#endif // INTERLACE
+
+ // normal dgradient
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ *(pr++) = *(xt++) + *(yt);
+ *(pg++) = *(xt++) + *(yt + 1);
+ *(pb++) = *(xt++) + *(yt + 2);
+ }
+ }
+
+#ifdef INTERLACE
+ } else {
+ // faked interlacing effect
+ unsigned char channel, channel2;
+
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ if (y & 1) {
+ channel = *(xt++) + *(yt);
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pr++) = channel2;
+
+ channel = *(xt++) + *(yt + 1);
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pg++) = channel2;
+
+ channel = *(xt++) + *(yt + 2);
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pb++) = channel2;
+ } else {
+ channel = *(xt++) + *(yt);
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pr++) = channel2;
+
+ channel = *(xt++) + *(yt + 1);
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pg++) = channel2;
+
+ channel = *(xt++) + *(yt + 2);
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pb++) = channel2;
+ }
+ }
+ }
+ }
+#endif // INTERLACE
+
+}
+
+
+void BImage::hgradient(void) {
+ float drx, dgx, dbx,
+ xr = (float) from->getRed(),
+ xg = (float) from->getGreen(),
+ xb = (float) from->getBlue();
+ unsigned char *pr = red, *pg = green, *pb = blue;
+
+ register unsigned int x, y;
+
+ drx = (float) (to->getRed() - from->getRed());
+ dgx = (float) (to->getGreen() - from->getGreen());
+ dbx = (float) (to->getBlue() - from->getBlue());
+
+ drx /= width;
+ dgx /= width;
+ dbx /= width;
+
+#ifdef INTERLACE
+ if (interlaced && height > 2) {
+ // faked interlacing effect
+ unsigned char channel, channel2;
+
+ for (x = 0; x < width; x++, pr++, pg++, pb++) {
+ channel = (unsigned char) xr;
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *pr = channel2;
+
+ channel = (unsigned char) xg;
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *pg = channel2;
+
+ channel = (unsigned char) xb;
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *pb = channel2;
+
+
+ channel = (unsigned char) xr;
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pr + width) = channel2;
+
+ channel = (unsigned char) xg;
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pg + width) = channel2;
+
+ channel = (unsigned char) xb;
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pb + width) = channel2;
+
+ xr += drx;
+ xg += dgx;
+ xb += dbx;
+ }
+
+ pr += width;
+ pg += width;
+ pb += width;
+
+ int offset;
+
+ for (y = 2; y < height; y++, pr += width, pg += width, pb += width) {
+ if (y & 1) offset = width; else offset = 0;
+
+ memcpy(pr, (red + offset), width);
+ memcpy(pg, (green + offset), width);
+ memcpy(pb, (blue + offset), width);
+ }
+ } else {
+#endif // INTERLACE
+
+ // normal hgradient
+ for (x = 0; x < width; x++) {
+ *(pr++) = (unsigned char) (xr);
+ *(pg++) = (unsigned char) (xg);
+ *(pb++) = (unsigned char) (xb);
+
+ xr += drx;
+ xg += dgx;
+ xb += dbx;
+ }
+
+ for (y = 1; y < height; y++, pr += width, pg += width, pb += width) {
+ memcpy(pr, red, width);
+ memcpy(pg, green, width);
+ memcpy(pb, blue, width);
+ }
+
+#ifdef INTERLACE
+ }
+#endif // INTERLACE
+
+}
+
+
+void BImage::vgradient(void) {
+ float dry, dgy, dby,
+ yr = (float) from->getRed(),
+ yg = (float) from->getGreen(),
+ yb = (float) from->getBlue();
+ unsigned char *pr = red, *pg = green, *pb = blue;
+
+ register unsigned int y;
+
+ dry = (float) (to->getRed() - from->getRed());
+ dgy = (float) (to->getGreen() - from->getGreen());
+ dby = (float) (to->getBlue() - from->getBlue());
+
+ dry /= height;
+ dgy /= height;
+ dby /= height;
+
+#ifdef INTERLACE
+ if (interlaced) {
+ // faked interlacing effect
+ unsigned char channel, channel2;
+
+ for (y = 0; y < height; y++, pr += width, pg += width, pb += width) {
+ if (y & 1) {
+ channel = (unsigned char) yr;
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ memset(pr, channel2, width);
+
+ channel = (unsigned char) yg;
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ memset(pg, channel2, width);
+
+ channel = (unsigned char) yb;
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ memset(pb, channel2, width);
+ } else {
+ channel = (unsigned char) yr;
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ memset(pr, channel2, width);
+
+ channel = (unsigned char) yg;
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ memset(pg, channel2, width);
+
+ channel = (unsigned char) yb;
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ memset(pb, channel2, width);
+ }
+
+ yr += dry;
+ yg += dgy;
+ yb += dby;
+ }
+ } else {
+#endif // INTERLACE
+
+ // normal vgradient
+ for (y = 0; y < height; y++, pr += width, pg += width, pb += width) {
+ memset(pr, (unsigned char) yr, width);
+ memset(pg, (unsigned char) yg, width);
+ memset(pb, (unsigned char) yb, width);
+
+ yr += dry;
+ yg += dgy;
+ yb += dby;
+ }
+
+#ifdef INTERLACE
+ }
+#endif // INTERLACE
+
+}
+
+
+void BImage::pgradient(void) {
+ // pyramid gradient - based on original dgradient, written by
+ // Mosfet (mosfet@kde.org)
+ // adapted from kde sources for Openbox by Brad Hughes
+
+ float yr, yg, yb, drx, dgx, dbx, dry, dgy, dby,
+ xr, xg, xb;
+ int rsign, gsign, bsign;
+ unsigned char *pr = red, *pg = green, *pb = blue;
+ unsigned int tr = to->getRed(), tg = to->getGreen(), tb = to->getBlue(),
+ *xt = xtable, *yt = ytable;
+
+ register unsigned int x, y;
+
+ dry = drx = (float) (to->getRed() - from->getRed());
+ dgy = dgx = (float) (to->getGreen() - from->getGreen());
+ dby = dbx = (float) (to->getBlue() - from->getBlue());
+
+ rsign = (drx < 0) ? -1 : 1;
+ gsign = (dgx < 0) ? -1 : 1;
+ bsign = (dbx < 0) ? -1 : 1;
+
+ xr = yr = (drx / 2);
+ xg = yg = (dgx / 2);
+ xb = yb = (dbx / 2);
+
+ // Create X table
+ drx /= width;
+ dgx /= width;
+ dbx /= width;
+
+ for (x = 0; x < width; x++) {
+ *(xt++) = (unsigned char) ((xr < 0) ? -xr : xr);
+ *(xt++) = (unsigned char) ((xg < 0) ? -xg : xg);
+ *(xt++) = (unsigned char) ((xb < 0) ? -xb : xb);
+
+ xr -= drx;
+ xg -= dgx;
+ xb -= dbx;
+ }
+
+ // Create Y table
+ dry /= height;
+ dgy /= height;
+ dby /= height;
+
+ for (y = 0; y < height; y++) {
+ *(yt++) = ((unsigned char) ((yr < 0) ? -yr : yr));
+ *(yt++) = ((unsigned char) ((yg < 0) ? -yg : yg));
+ *(yt++) = ((unsigned char) ((yb < 0) ? -yb : yb));
+
+ yr -= dry;
+ yg -= dgy;
+ yb -= dby;
+ }
+
+ // Combine tables to create gradient
+
+#ifdef INTERLACE
+ if (! interlaced) {
+#endif // INTERLACE
+
+ // normal pgradient
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ *(pr++) = (unsigned char) (tr - (rsign * (*(xt++) + *(yt))));
+ *(pg++) = (unsigned char) (tg - (gsign * (*(xt++) + *(yt + 1))));
+ *(pb++) = (unsigned char) (tb - (bsign * (*(xt++) + *(yt + 2))));
+ }
+ }
+
+#ifdef INTERLACE
+ } else {
+ // faked interlacing effect
+ unsigned char channel, channel2;
+
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ if (y & 1) {
+ channel = (unsigned char) (tr - (rsign * (*(xt++) + *(yt))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pr++) = channel2;
+
+ channel = (unsigned char) (tg - (gsign * (*(xt++) + *(yt + 1))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pg++) = channel2;
+
+ channel = (unsigned char) (tb - (bsign * (*(xt++) + *(yt + 2))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pb++) = channel2;
+ } else {
+ channel = (unsigned char) (tr - (rsign * (*(xt++) + *(yt))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pr++) = channel2;
+
+ channel = (unsigned char) (tg - (gsign * (*(xt++) + *(yt + 1))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pg++) = channel2;
+
+ channel = (unsigned char) (tb - (bsign * (*(xt++) + *(yt + 2))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pb++) = channel2;
+ }
+ }
+ }
+ }
+#endif // INTERLACE
+}
+
+
+void BImage::rgradient(void) {
+ // rectangle gradient - based on original dgradient, written by
+ // Mosfet (mosfet@kde.org)
+ // adapted from kde sources for Openbox by Brad Hughes
+
+ float drx, dgx, dbx, dry, dgy, dby, xr, xg, xb, yr, yg, yb;
+ int rsign, gsign, bsign;
+ unsigned char *pr = red, *pg = green, *pb = blue;
+ unsigned int tr = to->getRed(), tg = to->getGreen(), tb = to->getBlue(),
+ *xt = xtable, *yt = ytable;
+
+ register unsigned int x, y;
+
+ dry = drx = (float) (to->getRed() - from->getRed());
+ dgy = dgx = (float) (to->getGreen() - from->getGreen());
+ dby = dbx = (float) (to->getBlue() - from->getBlue());
+
+ rsign = (drx < 0) ? -2 : 2;
+ gsign = (dgx < 0) ? -2 : 2;
+ bsign = (dbx < 0) ? -2 : 2;
+
+ xr = yr = (drx / 2);
+ xg = yg = (dgx / 2);
+ xb = yb = (dbx / 2);
+
+ // Create X table
+ drx /= width;
+ dgx /= width;
+ dbx /= width;
+
+ for (x = 0; x < width; x++) {
+ *(xt++) = (unsigned char) ((xr < 0) ? -xr : xr);
+ *(xt++) = (unsigned char) ((xg < 0) ? -xg : xg);
+ *(xt++) = (unsigned char) ((xb < 0) ? -xb : xb);
+
+ xr -= drx;
+ xg -= dgx;
+ xb -= dbx;
+ }
+
+ // Create Y table
+ dry /= height;
+ dgy /= height;
+ dby /= height;
+
+ for (y = 0; y < height; y++) {
+ *(yt++) = ((unsigned char) ((yr < 0) ? -yr : yr));
+ *(yt++) = ((unsigned char) ((yg < 0) ? -yg : yg));
+ *(yt++) = ((unsigned char) ((yb < 0) ? -yb : yb));
+
+ yr -= dry;
+ yg -= dgy;
+ yb -= dby;
+ }
+
+ // Combine tables to create gradient
+
+#ifdef INTERLACE
+ if (! interlaced) {
+#endif // INTERLACE
+
+ // normal rgradient
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ *(pr++) = (unsigned char) (tr - (rsign * max(*(xt++), *(yt))));
+ *(pg++) = (unsigned char) (tg - (gsign * max(*(xt++), *(yt + 1))));
+ *(pb++) = (unsigned char) (tb - (bsign * max(*(xt++), *(yt + 2))));
+ }
+ }
+
+#ifdef INTERLACE
+ } else {
+ // faked interlacing effect
+ unsigned char channel, channel2;
+
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ if (y & 1) {
+ channel = (unsigned char) (tr - (rsign * max(*(xt++), *(yt))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pr++) = channel2;
+
+ channel = (unsigned char) (tg - (gsign * max(*(xt++), *(yt + 1))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pg++) = channel2;
+
+ channel = (unsigned char) (tb - (bsign * max(*(xt++), *(yt + 2))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pb++) = channel2;
+ } else {
+ channel = (unsigned char) (tr - (rsign * max(*(xt++), *(yt))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pr++) = channel2;
+
+ channel = (unsigned char) (tg - (gsign * max(*(xt++), *(yt + 1))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pg++) = channel2;
+
+ channel = (unsigned char) (tb - (bsign * max(*(xt++), *(yt + 2))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pb++) = channel2;
+ }
+ }
+ }
+ }
+#endif // INTERLACE
+}
+
+
+void BImage::egradient(void) {
+ // elliptic gradient - based on original dgradient, written by
+ // Mosfet (mosfet@kde.org)
+ // adapted from kde sources for Openbox by Brad Hughes
+
+ float drx, dgx, dbx, dry, dgy, dby, yr, yg, yb, xr, xg, xb;
+ int rsign, gsign, bsign;
+ unsigned char *pr = red, *pg = green, *pb = blue;
+ unsigned int *xt = xtable, *yt = ytable,
+ tr = (unsigned long) to->getRed(),
+ tg = (unsigned long) to->getGreen(),
+ tb = (unsigned long) to->getBlue();
+
+ register unsigned int x, y;
+
+ dry = drx = (float) (to->getRed() - from->getRed());
+ dgy = dgx = (float) (to->getGreen() - from->getGreen());
+ dby = dbx = (float) (to->getBlue() - from->getBlue());
+
+ rsign = (drx < 0) ? -1 : 1;
+ gsign = (dgx < 0) ? -1 : 1;
+ bsign = (dbx < 0) ? -1 : 1;
+
+ xr = yr = (drx / 2);
+ xg = yg = (dgx / 2);
+ xb = yb = (dbx / 2);
+
+ // Create X table
+ drx /= width;
+ dgx /= width;
+ dbx /= width;
+
+ for (x = 0; x < width; x++) {
+ *(xt++) = (unsigned long) (xr * xr);
+ *(xt++) = (unsigned long) (xg * xg);
+ *(xt++) = (unsigned long) (xb * xb);
+
+ xr -= drx;
+ xg -= dgx;
+ xb -= dbx;
+ }
+
+ // Create Y table
+ dry /= height;
+ dgy /= height;
+ dby /= height;
+
+ for (y = 0; y < height; y++) {
+ *(yt++) = (unsigned long) (yr * yr);
+ *(yt++) = (unsigned long) (yg * yg);
+ *(yt++) = (unsigned long) (yb * yb);
+
+ yr -= dry;
+ yg -= dgy;
+ yb -= dby;
+ }
+
+ // Combine tables to create gradient
+
+#ifdef INTERLACE
+ if (! interlaced) {
+#endif // INTERLACE
+
+ // normal egradient
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ *(pr++) = (unsigned char)
+ (tr - (rsign * control->getSqrt(*(xt++) + *(yt))));
+ *(pg++) = (unsigned char)
+ (tg - (gsign * control->getSqrt(*(xt++) + *(yt + 1))));
+ *(pb++) = (unsigned char)
+ (tb - (bsign * control->getSqrt(*(xt++) + *(yt + 2))));
+ }
+ }
+
+#ifdef INTERLACE
+ } else {
+ // faked interlacing effect
+ unsigned char channel, channel2;
+
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ if (y & 1) {
+ channel = (unsigned char)
+ (tr - (rsign * control->getSqrt(*(xt++) + *(yt))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pr++) = channel2;
+
+ channel = (unsigned char)
+ (tg - (gsign * control->getSqrt(*(xt++) + *(yt + 1))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pg++) = channel2;
+
+ channel = (unsigned char)
+ (tb - (bsign * control->getSqrt(*(xt++) + *(yt + 2))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pb++) = channel2;
+ } else {
+ channel = (unsigned char)
+ (tr - (rsign * control->getSqrt(*(xt++) + *(yt))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pr++) = channel2;
+
+ channel = (unsigned char)
+ (tg - (gsign * control->getSqrt(*(xt++) + *(yt + 1))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pg++) = channel2;
+
+ channel = (unsigned char)
+ (tb - (bsign * control->getSqrt(*(xt++) + *(yt + 2))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pb++) = channel2;
+ }
+ }
+ }
+ }
+#endif // INTERLACE
+}
+
+
+void BImage::pcgradient(void) {
+ // pipe cross gradient - based on original dgradient, written by
+ // Mosfet (mosfet@kde.org)
+ // adapted from kde sources for Openbox by Brad Hughes
+
+ float drx, dgx, dbx, dry, dgy, dby, xr, xg, xb, yr, yg, yb;
+ int rsign, gsign, bsign;
+ unsigned char *pr = red, *pg = green, *pb = blue;
+ unsigned int *xt = xtable, *yt = ytable,
+ tr = to->getRed(),
+ tg = to->getGreen(),
+ tb = to->getBlue();
+
+ register unsigned int x, y;
+
+ dry = drx = (float) (to->getRed() - from->getRed());
+ dgy = dgx = (float) (to->getGreen() - from->getGreen());
+ dby = dbx = (float) (to->getBlue() - from->getBlue());
+
+ rsign = (drx < 0) ? -2 : 2;
+ gsign = (dgx < 0) ? -2 : 2;
+ bsign = (dbx < 0) ? -2 : 2;
+
+ xr = yr = (drx / 2);
+ xg = yg = (dgx / 2);
+ xb = yb = (dbx / 2);
+
+ // Create X table
+ drx /= width;
+ dgx /= width;
+ dbx /= width;
+
+ for (x = 0; x < width; x++) {
+ *(xt++) = (unsigned char) ((xr < 0) ? -xr : xr);
+ *(xt++) = (unsigned char) ((xg < 0) ? -xg : xg);
+ *(xt++) = (unsigned char) ((xb < 0) ? -xb : xb);
+
+ xr -= drx;
+ xg -= dgx;
+ xb -= dbx;
+ }
+
+ // Create Y table
+ dry /= height;
+ dgy /= height;
+ dby /= height;
+
+ for (y = 0; y < height; y++) {
+ *(yt++) = ((unsigned char) ((yr < 0) ? -yr : yr));
+ *(yt++) = ((unsigned char) ((yg < 0) ? -yg : yg));
+ *(yt++) = ((unsigned char) ((yb < 0) ? -yb : yb));
+
+ yr -= dry;
+ yg -= dgy;
+ yb -= dby;
+ }
+
+ // Combine tables to create gradient
+
+#ifdef INTERLACE
+ if (! interlaced) {
+#endif // INTERLACE
+
+ // normal pcgradient
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ *(pr++) = (unsigned char) (tr - (rsign * min(*(xt++), *(yt))));
+ *(pg++) = (unsigned char) (tg - (gsign * min(*(xt++), *(yt + 1))));
+ *(pb++) = (unsigned char) (tb - (bsign * min(*(xt++), *(yt + 2))));
+ }
+ }
+
+#ifdef INTERLACE
+ } else {
+ // faked interlacing effect
+ unsigned char channel, channel2;
+
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ if (y & 1) {
+ channel = (unsigned char) (tr - (rsign * min(*(xt++), *(yt))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pr++) = channel2;
+
+ channel = (unsigned char) (tg - (bsign * min(*(xt++), *(yt + 1))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pg++) = channel2;
+
+ channel = (unsigned char) (tb - (gsign * min(*(xt++), *(yt + 2))));
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pb++) = channel2;
+ } else {
+ channel = (unsigned char) (tr - (rsign * min(*(xt++), *(yt))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pr++) = channel2;
+
+ channel = (unsigned char) (tg - (gsign * min(*(xt++), *(yt + 1))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pg++) = channel2;
+
+ channel = (unsigned char) (tb - (bsign * min(*(xt++), *(yt + 2))));
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pb++) = channel2;
+ }
+ }
+ }
+ }
+#endif // INTERLACE
+}
+
+
+void BImage::cdgradient(void) {
+ // cross diagonal gradient - based on original dgradient, written by
+ // Mosfet (mosfet@kde.org)
+ // adapted from kde sources for Openbox by Brad Hughes
+
+ float drx, dgx, dbx, dry, dgy, dby, yr = 0.0, yg = 0.0, yb = 0.0,
+ xr = (float) from->getRed(),
+ xg = (float) from->getGreen(),
+ xb = (float) from->getBlue();
+ unsigned char *pr = red, *pg = green, *pb = blue;
+ unsigned int w = width * 2, h = height * 2, *xt, *yt;
+
+ register unsigned int x, y;
+
+ dry = drx = (float) (to->getRed() - from->getRed());
+ dgy = dgx = (float) (to->getGreen() - from->getGreen());
+ dby = dbx = (float) (to->getBlue() - from->getBlue());
+
+ // Create X table
+ drx /= w;
+ dgx /= w;
+ dbx /= w;
+
+ for (xt = (xtable + (width * 3) - 1), x = 0; x < width; x++) {
+ *(xt--) = (unsigned char) xb;
+ *(xt--) = (unsigned char) xg;
+ *(xt--) = (unsigned char) xr;
+
+ xr += drx;
+ xg += dgx;
+ xb += dbx;
+ }
+
+ // Create Y table
+ dry /= h;
+ dgy /= h;
+ dby /= h;
+
+ for (yt = ytable, y = 0; y < height; y++) {
+ *(yt++) = (unsigned char) yr;
+ *(yt++) = (unsigned char) yg;
+ *(yt++) = (unsigned char) yb;
+
+ yr += dry;
+ yg += dgy;
+ yb += dby;
+ }
+
+ // Combine tables to create gradient
+
+#ifdef INTERLACE
+ if (! interlaced) {
+#endif // INTERLACE
+
+ // normal cdgradient
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ *(pr++) = *(xt++) + *(yt);
+ *(pg++) = *(xt++) + *(yt + 1);
+ *(pb++) = *(xt++) + *(yt + 2);
+ }
+ }
+
+#ifdef INTERLACE
+ } else {
+ // faked interlacing effect
+ unsigned char channel, channel2;
+
+ for (yt = ytable, y = 0; y < height; y++, yt += 3) {
+ for (xt = xtable, x = 0; x < width; x++) {
+ if (y & 1) {
+ channel = *(xt++) + *(yt);
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pr++) = channel2;
+
+ channel = *(xt++) + *(yt + 1);
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pg++) = channel2;
+
+ channel = *(xt++) + *(yt + 2);
+ channel2 = (channel >> 1) + (channel >> 2);
+ if (channel2 > channel) channel2 = 0;
+ *(pb++) = channel2;
+ } else {
+ channel = *(xt++) + *(yt);
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pr++) = channel2;
+
+ channel = *(xt++) + *(yt + 1);
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pg++) = channel2;
+
+ channel = *(xt++) + *(yt + 2);
+ channel2 = channel + (channel >> 3);
+ if (channel2 < channel) channel2 = ~0;
+ *(pb++) = channel2;
+ }
+ }
+ }
+ }
+#endif // INTERLACE
+}
+
+
+BImageControl::BImageControl(BaseDisplay *dpy, ScreenInfo *scrn, Bool _dither,
+ int _cpc, unsigned long cache_timeout,
+ unsigned long cmax)
+{
+ basedisplay = dpy;
+ screeninfo = scrn;
+ setDither(_dither);
+ setColorsPerChannel(_cpc);
+
+ cache_max = cmax;
+#ifdef TIMEDCACHE
+ if (cache_timeout) {
+ timer = new BTimer(basedisplay, this);
+ timer->setTimeout(cache_timeout);
+ timer->start();
+ } else
+ timer = (BTimer *) 0;
+#endif // TIMEDCACHE
+
+ colors = (XColor *) 0;
+ ncolors = 0;
+
+ grad_xbuffer = grad_ybuffer = (unsigned int *) 0;
+ grad_buffer_width = grad_buffer_height = 0;
+
+ sqrt_table = (unsigned long *) 0;
+
+ screen_depth = screeninfo->getDepth();
+ window = screeninfo->getRootWindow();
+ screen_number = screeninfo->getScreenNumber();
+
+ int count;
+ XPixmapFormatValues *pmv = XListPixmapFormats(basedisplay->getXDisplay(),
+ &count);
+ colormap = screeninfo->getColormap();
+
+ if (pmv) {
+ bits_per_pixel = 0;
+ for (int i = 0; i < count; i++)
+ if (pmv[i].depth == screen_depth) {
+ bits_per_pixel = pmv[i].bits_per_pixel;
+ break;
+ }
+
+ XFree(pmv);
+ }
+
+ if (bits_per_pixel == 0) bits_per_pixel = screen_depth;
+ if (bits_per_pixel >= 24) setDither(False);
+
+ red_offset = green_offset = blue_offset = 0;
+
+ switch (getVisual()->c_class) {
+ case TrueColor:
+ {
+ int i;
+
+ // compute color tables
+ unsigned long red_mask = getVisual()->red_mask,
+ green_mask = getVisual()->green_mask,
+ blue_mask = getVisual()->blue_mask;
+
+ while (! (red_mask & 1)) { red_offset++; red_mask >>= 1; }
+ while (! (green_mask & 1)) { green_offset++; green_mask >>= 1; }
+ while (! (blue_mask & 1)) { blue_offset++; blue_mask >>= 1; }
+
+ red_bits = 255 / red_mask;
+ green_bits = 255 / green_mask;
+ blue_bits = 255 / blue_mask;
+
+ for (i = 0; i < 256; i++) {
+ red_color_table[i] = i / red_bits;
+ green_color_table[i] = i / green_bits;
+ blue_color_table[i] = i / blue_bits;
+ }
+ }
+
+ break;
+
+ case PseudoColor:
+ case StaticColor:
+ {
+ ncolors = colors_per_channel * colors_per_channel * colors_per_channel;
+
+ if (ncolors > (1 << screen_depth)) {
+ colors_per_channel = (1 << screen_depth) / 3;
+ ncolors = colors_per_channel * colors_per_channel * colors_per_channel;
+ }
+
+ if (colors_per_channel < 2 || ncolors > (1 << screen_depth)) {
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageInvalidColormapSize,
+ "BImageControl::BImageControl: invalid colormap size %d "
+ "(%d/%d/%d) - reducing"),
+ ncolors, colors_per_channel, colors_per_channel,
+ colors_per_channel);
+
+ colors_per_channel = (1 << screen_depth) / 3;
+ }
+
+ colors = new XColor[ncolors];
+ if (! colors) {
+ fprintf(stderr, i18n->getMessage(ImageSet,
+ ImageErrorAllocatingColormap,
+ "BImageControl::BImageControl: error allocating "
+ "colormap\n"));
+ exit(1);
+ }
+
+ int i = 0, ii, p, r, g, b,
+
+#ifdef ORDEREDPSEUDO
+ bits = 256 / colors_per_channel;
+#else // !ORDEREDPSEUDO
+ bits = 255 / (colors_per_channel - 1);
+#endif // ORDEREDPSEUDO
+
+ red_bits = green_bits = blue_bits = bits;
+
+ for (i = 0; i < 256; i++)
+ red_color_table[i] = green_color_table[i] = blue_color_table[i] =
+ i / bits;
+
+ for (r = 0, i = 0; r < colors_per_channel; r++)
+ for (g = 0; g < colors_per_channel; g++)
+ for (b = 0; b < colors_per_channel; b++, i++) {
+ colors[i].red = (r * 0xffff) / (colors_per_channel - 1);
+ colors[i].green = (g * 0xffff) / (colors_per_channel - 1);
+ colors[i].blue = (b * 0xffff) / (colors_per_channel - 1);;
+ colors[i].flags = DoRed|DoGreen|DoBlue;
+ }
+
+ basedisplay->grab();
+
+ for (i = 0; i < ncolors; i++)
+ if (! XAllocColor(basedisplay->getXDisplay(), colormap, &colors[i])) {
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageColorAllocFail,
+ "couldn't alloc color %i %i %i\n"),
+ colors[i].red, colors[i].green, colors[i].blue);
+ colors[i].flags = 0;
+ } else
+ colors[i].flags = DoRed|DoGreen|DoBlue;
+
+ basedisplay->ungrab();
+
+ XColor icolors[256];
+ int incolors = (((1 << screen_depth) > 256) ? 256 : (1 << screen_depth));
+
+ for (i = 0; i < incolors; i++)
+ icolors[i].pixel = i;
+
+ XQueryColors(basedisplay->getXDisplay(), colormap, icolors, incolors);
+ for (i = 0; i < ncolors; i++) {
+ if (! colors[i].flags) {
+ unsigned long chk = 0xffffffff, pixel, close = 0;
+
+ p = 2;
+ while (p--) {
+ for (ii = 0; ii < incolors; ii++) {
+ r = (colors[i].red - icolors[i].red) >> 8;
+ g = (colors[i].green - icolors[i].green) >> 8;
+ b = (colors[i].blue - icolors[i].blue) >> 8;
+ pixel = (r * r) + (g * g) + (b * b);
+
+ if (pixel < chk) {
+ chk = pixel;
+ close = ii;
+ }
+
+ colors[i].red = icolors[close].red;
+ colors[i].green = icolors[close].green;
+ colors[i].blue = icolors[close].blue;
+
+ if (XAllocColor(basedisplay->getXDisplay(), colormap,
+ &colors[i])) {
+ colors[i].flags = DoRed|DoGreen|DoBlue;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ break;
+ }
+
+ case GrayScale:
+ case StaticGray:
+ {
+
+ if (getVisual()->c_class == StaticGray) {
+ ncolors = 1 << screen_depth;
+ } else {
+ ncolors = colors_per_channel * colors_per_channel * colors_per_channel;
+
+ if (ncolors > (1 << screen_depth)) {
+ colors_per_channel = (1 << screen_depth) / 3;
+ ncolors =
+ colors_per_channel * colors_per_channel * colors_per_channel;
+ }
+ }
+
+ if (colors_per_channel < 2 || ncolors > (1 << screen_depth)) {
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageInvalidColormapSize,
+ "BImageControl::BImageControl: invalid colormap size %d "
+ "(%d/%d/%d) - reducing"),
+ ncolors, colors_per_channel, colors_per_channel,
+ colors_per_channel);
+
+ colors_per_channel = (1 << screen_depth) / 3;
+ }
+
+ colors = new XColor[ncolors];
+ if (! colors) {
+ fprintf(stderr, i18n->getMessage(ImageSet,
+ ImageErrorAllocatingColormap,
+ "BImageControl::BImageControl: error allocating "
+ "colormap\n"));
+ exit(1);
+ }
+
+ int i = 0, ii, p, bits = 255 / (colors_per_channel - 1);
+ red_bits = green_bits = blue_bits = bits;
+
+ for (i = 0; i < 256; i++)
+ red_color_table[i] = green_color_table[i] = blue_color_table[i] =
+ i / bits;
+
+ basedisplay->grab();
+ for (i = 0; i < ncolors; i++) {
+ colors[i].red = (i * 0xffff) / (colors_per_channel - 1);
+ colors[i].green = (i * 0xffff) / (colors_per_channel - 1);
+ colors[i].blue = (i * 0xffff) / (colors_per_channel - 1);;
+ colors[i].flags = DoRed|DoGreen|DoBlue;
+
+ if (! XAllocColor(basedisplay->getXDisplay(), colormap,
+ &colors[i])) {
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageColorAllocFail,
+ "couldn't alloc color %i %i %i\n"),
+ colors[i].red, colors[i].green, colors[i].blue);
+ colors[i].flags = 0;
+ } else
+ colors[i].flags = DoRed|DoGreen|DoBlue;
+ }
+
+ basedisplay->ungrab();
+
+ XColor icolors[256];
+ int incolors = (((1 << screen_depth) > 256) ? 256 :
+ (1 << screen_depth));
+
+ for (i = 0; i < incolors; i++)
+ icolors[i].pixel = i;
+
+ XQueryColors(basedisplay->getXDisplay(), colormap, icolors, incolors);
+ for (i = 0; i < ncolors; i++) {
+ if (! colors[i].flags) {
+ unsigned long chk = 0xffffffff, pixel, close = 0;
+
+ p = 2;
+ while (p--) {
+ for (ii = 0; ii < incolors; ii++) {
+ int r = (colors[i].red - icolors[i].red) >> 8;
+ int g = (colors[i].green - icolors[i].green) >> 8;
+ int b = (colors[i].blue - icolors[i].blue) >> 8;
+ pixel = (r * r) + (g * g) + (b * b);
+
+ if (pixel < chk) {
+ chk = pixel;
+ close = ii;
+ }
+
+ colors[i].red = icolors[close].red;
+ colors[i].green = icolors[close].green;
+ colors[i].blue = icolors[close].blue;
+
+ if (XAllocColor(basedisplay->getXDisplay(), colormap,
+ &colors[i])) {
+ colors[i].flags = DoRed|DoGreen|DoBlue;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ break;
+ }
+
+ default:
+ fprintf(stderr, i18n->getMessage(ImageSet, ImageUnsupVisual,
+ "BImageControl::BImageControl: unsupported visual %d\n"),
+ getVisual()->c_class);
+ exit(1);
+ }
+
+ cache = new LinkedList<Cache>;
+}
+
+
+BImageControl::~BImageControl(void) {
+ if (sqrt_table) {
+ delete [] sqrt_table;
+ }
+
+ if (grad_xbuffer) {
+ delete [] grad_xbuffer;
+ }
+
+ if (grad_ybuffer) {
+ delete [] grad_ybuffer;
+ }
+
+ if (colors) {
+ unsigned long *pixels = new unsigned long [ncolors];
+
+ int i;
+ for (i = 0; i < ncolors; i++)
+ *(pixels + i) = (*(colors + i)).pixel;
+
+ XFreeColors(basedisplay->getXDisplay(), colormap, pixels, ncolors, 0);
+
+ delete [] colors;
+ }
+
+ if (cache->count()) {
+ int i, n = cache->count();
+ fprintf(stderr, i18n->getMessage(ImageSet, ImagePixmapRelease,
+ "BImageContol::~BImageControl: pixmap cache - "
+ "releasing %d pixmaps\n"), n);
+
+ for (i = 0; i < n; i++) {
+ Cache *tmp = cache->first();
+ XFreePixmap(basedisplay->getXDisplay(), tmp->pixmap);
+ cache->remove(tmp);
+ delete tmp;
+ }
+
+#ifdef TIMEDCACHE
+ if (timer) {
+ timer->stop();
+ delete timer;
+ }
+#endif // TIMEDCACHE
+ }
+
+ delete cache;
+}
+
+
+Pixmap BImageControl::searchCache(unsigned int width, unsigned int height,
+ unsigned long texture,
+ BColor *c1, BColor *c2) {
+ if (cache->count()) {
+ LinkedListIterator<Cache> it(cache);
+
+ for (Cache *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if ((tmp->width == width) && (tmp->height == height) &&
+ (tmp->texture == texture) && (tmp->pixel1 == c1->getPixel()))
+ if (texture & BImage_Gradient) {
+ if (tmp->pixel2 == c2->getPixel()) {
+ tmp->count++;
+ return tmp->pixmap;
+ }
+ } else {
+ tmp->count++;
+ return tmp->pixmap;
+ }
+ }
+ }
+
+ return None;
+}
+
+
+Pixmap BImageControl::renderImage(unsigned int width, unsigned int height,
+ BTexture *texture) {
+ if (texture->getTexture() & BImage_ParentRelative) return ParentRelative;
+
+ Pixmap pixmap = searchCache(width, height, texture->getTexture(),
+ texture->getColor(), texture->getColorTo());
+ if (pixmap) return pixmap;
+
+ BImage image(this, width, height);
+ pixmap = image.render(texture);
+
+ if (pixmap) {
+ Cache *tmp = new Cache;
+
+ tmp->pixmap = pixmap;
+ tmp->width = width;
+ tmp->height = height;
+ tmp->count = 1;
+ tmp->texture = texture->getTexture();
+ tmp->pixel1 = texture->getColor()->getPixel();
+
+ if (texture->getTexture() & BImage_Gradient)
+ tmp->pixel2 = texture->getColorTo()->getPixel();
+ else
+ tmp->pixel2 = 0l;
+
+ cache->insert(tmp);
+
+ if ((unsigned) cache->count() > cache_max) {
+#ifdef DEBUG
+ fprintf(stderr, i18n->getMessage(ImageSet, ImagePixmapCacheLarge,
+ "BImageControl::renderImage: cache is large, "
+ "forcing cleanout\n"));
+#endif // DEBUG
+
+ timeout();
+ }
+
+ return pixmap;
+ }
+
+ return None;
+}
+
+
+void BImageControl::removeImage(Pixmap pixmap) {
+ if (pixmap) {
+ LinkedListIterator<Cache> it(cache);
+ for (Cache *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->pixmap == pixmap) {
+ if (tmp->count) {
+ tmp->count--;
+
+#ifdef TIMEDCACHE
+ if (! timer) timeout();
+#else // !TIMEDCACHE
+ if (! tmp->count) timeout();
+#endif // TIMEDCACHE
+ }
+
+ return;
+ }
+ }
+ }
+}
+
+
+unsigned long BImageControl::getColor(const char *colorname,
+ unsigned char *r, unsigned char *g,
+ unsigned char *b)
+{
+ XColor color;
+ color.pixel = 0;
+
+ if (! XParseColor(basedisplay->getXDisplay(), colormap, colorname, &color))
+ fprintf(stderr, "BImageControl::getColor: color parse error: \"%s\"\n",
+ colorname);
+ else if (! XAllocColor(basedisplay->getXDisplay(), colormap, &color))
+ fprintf(stderr, "BImageControl::getColor: color alloc error: \"%s\"\n",
+ colorname);
+
+ if (color.red == 65535) *r = 0xff;
+ else *r = (unsigned char) (color.red / 0xff);
+ if (color.green == 65535) *g = 0xff;
+ else *g = (unsigned char) (color.green / 0xff);
+ if (color.blue == 65535) *b = 0xff;
+ else *b = (unsigned char) (color.blue / 0xff);
+
+ return color.pixel;
+}
+
+
+unsigned long BImageControl::getColor(const char *colorname) {
+ XColor color;
+ color.pixel = 0;
+
+ if (! XParseColor(basedisplay->getXDisplay(), colormap, colorname, &color))
+ fprintf(stderr, "BImageControl::getColor: color parse error: \"%s\"\n",
+ colorname);
+ else if (! XAllocColor(basedisplay->getXDisplay(), colormap, &color))
+ fprintf(stderr, "BImageControl::getColor: color alloc error: \"%s\"\n",
+ colorname);
+
+ return color.pixel;
+}
+
+
+void BImageControl::getColorTables(unsigned char **rmt, unsigned char **gmt,
+ unsigned char **bmt,
+ int *roff, int *goff, int *boff,
+ int *rbit, int *gbit, int *bbit) {
+ if (rmt) *rmt = red_color_table;
+ if (gmt) *gmt = green_color_table;
+ if (bmt) *bmt = blue_color_table;
+
+ if (roff) *roff = red_offset;
+ if (goff) *goff = green_offset;
+ if (boff) *boff = blue_offset;
+
+ if (rbit) *rbit = red_bits;
+ if (gbit) *gbit = green_bits;
+ if (bbit) *bbit = blue_bits;
+}
+
+
+void BImageControl::getXColorTable(XColor **c, int *n) {
+ if (c) *c = colors;
+ if (n) *n = ncolors;
+}
+
+
+void BImageControl::getGradientBuffers(unsigned int w,
+ unsigned int h,
+ unsigned int **xbuf,
+ unsigned int **ybuf)
+{
+ if (w > grad_buffer_width) {
+ if (grad_xbuffer) {
+ delete [] grad_xbuffer;
+ }
+
+ grad_buffer_width = w;
+
+ grad_xbuffer = new unsigned int[grad_buffer_width * 3];
+ }
+
+ if (h > grad_buffer_height) {
+ if (grad_ybuffer) {
+ delete [] grad_ybuffer;
+ }
+
+ grad_buffer_height = h;
+
+ grad_ybuffer = new unsigned int[grad_buffer_height * 3];
+ }
+
+ *xbuf = grad_xbuffer;
+ *ybuf = grad_ybuffer;
+}
+
+
+void BImageControl::installRootColormap(void) {
+ basedisplay->grab();
+
+ Bool install = True;
+ int i = 0, ncmap = 0;
+ Colormap *cmaps =
+ XListInstalledColormaps(basedisplay->getXDisplay(), window, &ncmap);
+
+ if (cmaps) {
+ for (i = 0; i < ncmap; i++)
+ if (*(cmaps + i) == colormap)
+ install = False;
+
+ if (install)
+ XInstallColormap(basedisplay->getXDisplay(), colormap);
+
+ XFree(cmaps);
+ }
+
+ basedisplay->ungrab();
+}
+
+
+void BImageControl::setColorsPerChannel(int cpc) {
+ if (cpc < 2) cpc = 2;
+ if (cpc > 6) cpc = 6;
+
+ colors_per_channel = cpc;
+}
+
+
+unsigned long BImageControl::getSqrt(unsigned int x) {
+ if (! sqrt_table) {
+ // build sqrt table for use with elliptic gradient
+
+ sqrt_table = new unsigned long[(256 * 256 * 2) + 1];
+ int i = 0;
+
+ for (; i < (256 * 256 * 2); i++)
+ *(sqrt_table + i) = bsqrt(i);
+ }
+
+ return (*(sqrt_table + x));
+}
+
+
+void BImageControl::parseTexture(BTexture *texture, char *t) {
+ if ((! texture) || (! t)) return;
+
+ int t_len = strlen(t) + 1, i;
+ char *ts = new char[t_len];
+ if (! ts) return;
+
+ // convert to lower case
+ for (i = 0; i < t_len; i++)
+ *(ts + i) = tolower(*(t + i));
+
+ if (strstr(ts, "parentrelative")) {
+ texture->setTexture(BImage_ParentRelative);
+ } else {
+ texture->setTexture(0);
+
+ if (strstr(ts, "solid"))
+ texture->addTexture(BImage_Solid);
+ else if (strstr(ts, "gradient")) {
+ texture->addTexture(BImage_Gradient);
+ if (strstr(ts, "crossdiagonal"))
+ texture->addTexture(BImage_CrossDiagonal);
+ else if (strstr(ts, "rectangle"))
+ texture->addTexture(BImage_Rectangle);
+ else if (strstr(ts, "pyramid"))
+ texture->addTexture(BImage_Pyramid);
+ else if (strstr(ts, "pipecross"))
+ texture->addTexture(BImage_PipeCross);
+ else if (strstr(ts, "elliptic"))
+ texture->addTexture(BImage_Elliptic);
+ else if (strstr(ts, "diagonal"))
+ texture->addTexture(BImage_Diagonal);
+ else if (strstr(ts, "horizontal"))
+ texture->addTexture(BImage_Horizontal);
+ else if (strstr(ts, "vertical"))
+ texture->addTexture(BImage_Vertical);
+ else
+ texture->addTexture(BImage_Diagonal);
+ } else
+ texture->addTexture(BImage_Solid);
+
+ if (strstr(ts, "raised"))
+ texture->addTexture(BImage_Raised);
+ else if (strstr(ts, "sunken"))
+ texture->addTexture(BImage_Sunken);
+ else if (strstr(ts, "flat"))
+ texture->addTexture(BImage_Flat);
+ else
+ texture->addTexture(BImage_Raised);
+
+ if (! (texture->getTexture() & BImage_Flat))
+ if (strstr(ts, "bevel2"))
+ texture->addTexture(BImage_Bevel2);
+ else
+ texture->addTexture(BImage_Bevel1);
+
+#ifdef INTERLACE
+ if (strstr(ts, "interlaced"))
+ texture->addTexture(BImage_Interlaced);
+#endif // INTERLACE
+ }
+
+ delete [] ts;
+}
+
+
+void BImageControl::parseColor(BColor *color, char *c) {
+ if (! color) return;
+
+ if (color->isAllocated()) {
+ unsigned long pixel = color->getPixel();
+
+ XFreeColors(basedisplay->getXDisplay(), colormap, &pixel, 1, 0);
+
+ color->setPixel(0l);
+ color->setRGB(0, 0, 0);
+ color->setAllocated(False);
+ }
+
+ if (c) {
+ unsigned char r, g, b;
+
+ color->setPixel(getColor(c, &r, &g, &b));
+ color->setRGB(r, g, b);
+ color->setAllocated(True);
+ }
+}
+
+
+void BImageControl::timeout(void) {
+ LinkedListIterator<Cache> it(cache);
+ for (Cache *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->count <= 0) {
+ XFreePixmap(basedisplay->getXDisplay(), tmp->pixmap);
+ cache->remove(tmp);
+ delete tmp;
+ }
+ }
+}
--- /dev/null
+// Image.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Image_hh
+#define __Image_hh
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include "LinkedList.h"
+#include "Timer.h"
+
+class ScreenInfo;
+class BImage;
+class BImageControl;
+
+
+// bevel options
+#define BImage_Flat (1l<<1)
+#define BImage_Sunken (1l<<2)
+#define BImage_Raised (1l<<3)
+
+// textures
+#define BImage_Solid (1l<<4)
+#define BImage_Gradient (1l<<5)
+
+// gradients
+#define BImage_Horizontal (1l<<6)
+#define BImage_Vertical (1l<<7)
+#define BImage_Diagonal (1l<<8)
+#define BImage_CrossDiagonal (1l<<9)
+#define BImage_Rectangle (1l<<10)
+#define BImage_Pyramid (1l<<11)
+#define BImage_PipeCross (1l<<12)
+#define BImage_Elliptic (1l<<13)
+
+// bevel types
+#define BImage_Bevel1 (1l<<14)
+#define BImage_Bevel2 (1l<<15)
+
+// inverted image
+#define BImage_Invert (1l<<16)
+
+// parent relative image
+#define BImage_ParentRelative (1l<<17)
+
+#ifdef INTERLACE
+// fake interlaced image
+# define BImage_Interlaced (1l<<18)
+#endif // INTERLACE
+
+class BColor {
+private:
+ int allocated;
+ unsigned char red, green, blue;
+ unsigned long pixel;
+
+public:
+ BColor(char r = 0, char g = 0, char b = 0)
+ { red = r; green = g; blue = b; pixel = 0; allocated = 0; }
+
+ inline const int &isAllocated(void) const { return allocated; }
+
+ inline const unsigned char &getRed(void) const { return red; }
+ inline const unsigned char &getGreen(void) const { return green; }
+ inline const unsigned char &getBlue(void) const { return blue; }
+
+ inline const unsigned long &getPixel(void) const { return pixel; }
+
+ inline void setAllocated(int a) { allocated = a; }
+ inline void setRGB(char r, char g, char b) { red = r; green = g; blue = b; }
+ inline void setPixel(unsigned long p) { pixel = p; }
+};
+
+
+class BTexture {
+private:
+ BColor color, colorTo, hiColor, loColor;
+ unsigned long texture;
+
+public:
+ BTexture(void) { texture = 0; }
+
+ inline BColor *getColor(void) { return &color; }
+ inline BColor *getColorTo(void) { return &colorTo; }
+ inline BColor *getHiColor(void) { return &hiColor; }
+ inline BColor *getLoColor(void) { return &loColor; }
+
+ inline const unsigned long &getTexture(void) const { return texture; }
+
+ inline void setTexture(unsigned long t) { texture = t; }
+ inline void addTexture(unsigned long t) { texture |= t; }
+};
+
+
+class BImage {
+private:
+ BImageControl *control;
+
+#ifdef INTERLACE
+ Bool interlaced;
+#endif // INTERLACE
+
+ XColor *colors;
+
+ BColor *from, *to;
+ int red_offset, green_offset, blue_offset, red_bits, green_bits, blue_bits,
+ ncolors, cpc, cpccpc;
+ unsigned char *red, *green, *blue, *red_table, *green_table, *blue_table;
+ unsigned int width, height, *xtable, *ytable;
+
+
+protected:
+ Pixmap renderPixmap(void);
+
+ XImage *renderXImage(void);
+
+ void invert(void);
+ void bevel1(void);
+ void bevel2(void);
+ void dgradient(void);
+ void egradient(void);
+ void hgradient(void);
+ void pgradient(void);
+ void rgradient(void);
+ void vgradient(void);
+ void cdgradient(void);
+ void pcgradient(void);
+
+
+public:
+ BImage(BImageControl *, unsigned int, unsigned int);
+ ~BImage(void);
+
+ Pixmap render(BTexture *);
+ Pixmap render_solid(BTexture *);
+ Pixmap render_gradient(BTexture *);
+};
+
+
+class BImageControl : public TimeoutHandler {
+private:
+ Bool dither;
+ BaseDisplay *basedisplay;
+ ScreenInfo *screeninfo;
+#ifdef TIMEDCACHE
+ BTimer *timer;
+#endif // TIMEDCACHE
+
+ Colormap colormap;
+
+ Window window;
+ XColor *colors;
+ int colors_per_channel, ncolors, screen_number, screen_depth,
+ bits_per_pixel, red_offset, green_offset, blue_offset,
+ red_bits, green_bits, blue_bits;
+ unsigned char red_color_table[256], green_color_table[256],
+ blue_color_table[256];
+ unsigned int *grad_xbuffer, *grad_ybuffer, grad_buffer_width,
+ grad_buffer_height;
+ unsigned long *sqrt_table, cache_max;
+
+ typedef struct Cache {
+ Pixmap pixmap;
+
+ unsigned int count, width, height;
+ unsigned long pixel1, pixel2, texture;
+ } Cache;
+
+ LinkedList<Cache> *cache;
+
+
+protected:
+ Pixmap searchCache(unsigned int, unsigned int, unsigned long, BColor *,
+ BColor *);
+
+
+public:
+ BImageControl(BaseDisplay *, ScreenInfo *, Bool = False, int = 4,
+ unsigned long = 300000l, unsigned long = 200l);
+ virtual ~BImageControl(void);
+
+ inline BaseDisplay *getBaseDisplay(void) { return basedisplay; }
+
+ inline const Bool &doDither(void) { return dither; }
+
+ inline ScreenInfo *getScreenInfo(void) { return screeninfo; }
+
+ inline const Window &getDrawable(void) const { return window; }
+
+ inline Visual *getVisual(void) { return screeninfo->getVisual(); }
+
+ inline const int &getBitsPerPixel(void) const { return bits_per_pixel; }
+ inline const int &getDepth(void) const { return screen_depth; }
+ inline const int &getColorsPerChannel(void) const
+ { return colors_per_channel; }
+
+ unsigned long getColor(const char *);
+ unsigned long getColor(const char *, unsigned char *, unsigned char *,
+ unsigned char *);
+ unsigned long getSqrt(unsigned int);
+
+ Pixmap renderImage(unsigned int, unsigned int, BTexture *);
+
+ void installRootColormap(void);
+ void removeImage(Pixmap);
+ void getColorTables(unsigned char **, unsigned char **, unsigned char **,
+ int *, int *, int *, int *, int *, int *);
+ void getXColorTable(XColor **, int *);
+ void getGradientBuffers(unsigned int, unsigned int,
+ unsigned int **, unsigned int **);
+ void setDither(Bool d) { dither = d; }
+ void setColorsPerChannel(int);
+ void parseTexture(BTexture *, char *);
+ void parseColor(BColor *, char * = 0);
+
+ virtual void timeout(void);
+};
+
+
+#endif // __Image_hh
+
--- /dev/null
+// LinkedList.cc for Openbox
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#include "LinkedList.h"
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+
+__llist_iterator::__llist_iterator(__llist *l) {
+ // initialize the iterator...
+ list = l;
+
+ if (list) {
+ if (! list->iterators)
+ list->iterators = new __llist;
+
+ list->iterators->insert(this);
+ }
+
+ reset();
+}
+
+
+__llist_iterator::~__llist_iterator(void) {
+ if (list && list->iterators)
+ list->iterators->remove(this);
+}
+
+
+void *__llist_iterator::current(void) {
+ // return the current node data... if any
+ return ((node) ? node->getData() : 0);
+}
+
+
+void __llist_iterator::reset(void) {
+ // update the iterator's current node to the first node in the linked list
+ if (list)
+ node = list->_first;
+}
+
+
+const int __llist_iterator::set(const int index) {
+ // set the current node to index
+ if (list) {
+ if (index < list->elements && index >= 0 && list->_first) {
+ node = list->_first;
+
+ for (register int i = 0; i < index; i++)
+ node = node->getNext();
+
+ return 1;
+ }
+ }
+
+ node = (__llist_node *) 0;
+ return 0;
+}
+
+
+void __llist_iterator::operator++(void) {
+ // iterate to the next node in the list...
+ node = ((node) ? node->getNext() : 0);
+}
+
+
+void __llist_iterator::operator++(int) {
+ // iterate to the next node in the list...
+ node = ((node) ? node->getNext() : 0);
+}
+
+
+__llist::__llist(void *d) {
+ // initialize the linked list...
+ _first = (__llist_node *) 0;
+ _last = (__llist_node *) 0;
+ iterators = (__llist *) 0;
+ elements = 0;
+
+ if (d) insert(d);
+}
+
+
+__llist::~__llist(void) {
+ // remove all the items in the list...
+ for (register int i = 0; i < elements; i++)
+ remove(0);
+
+ if (iterators) {
+ __llist_node *n = iterators->_first;
+
+ while (n) {
+ __llist_iterator *p = (__llist_iterator *) n->getData();
+ p->list = (__llist *) 0;
+ p->node = (__llist_node *) 0;
+
+ n = n->getNext();
+ }
+
+ delete iterators;
+ }
+}
+
+
+const int __llist::insert(void *d, int index) {
+ // insert item into linked list at specified index...
+
+ __llist_node *nnode = new __llist_node;
+ if (! nnode) return -1;
+
+ if ((! _first) || (! _last)) {
+ // list is empty... insert the item as the first item, regardless of the
+ // index given
+ _first = nnode;
+ _first->setData(d);
+ _first->setNext((__llist_node *) 0);
+ _last = _first;
+ } else {
+ if (index == 0) {
+ // if index is 0... prepend the data on the list
+
+ nnode->setData(d);
+ nnode->setNext(_first);
+
+ _first = nnode;
+ } else if ((index == -1) || (index == elements)) {
+ // if index is -1... append the data on the list
+
+ nnode->setData(d);
+ nnode->setNext((__llist_node *) 0);
+ _last->setNext(nnode);
+
+ _last = nnode;
+ } else if (index < elements) {
+ // otherwise... insert the item at the position specified by index
+ __llist_node *inode = _first;
+
+ for (register int i = 1; i < index; i++) {
+ if (inode) {
+ inode = inode->getNext();
+ } else {
+ delete nnode;
+ return -1;
+ }
+ }
+
+ nnode->setData(d);
+
+ if ((! inode) || inode == _last) {
+ nnode->setNext((__llist_node *) 0);
+ _last->setNext(nnode);
+
+ _last = nnode;
+ } else {
+ nnode->setNext(inode->getNext());
+ inode->setNext(nnode);
+ }
+ }
+ }
+
+ return ++elements;
+}
+
+
+const int __llist::remove(void *d) {
+ // remove list item whose data pointer address matches the pointer address
+ // given
+
+ if ((! _first) || (! _last))
+ return -1;
+
+ if (_first->getData() == d) {
+ // remove the first item in the list...
+ __llist_node *node = _first;
+ _first = _first->getNext();
+
+ if (iterators && iterators->_first) {
+ __llist_node *n = iterators->_first;
+ while (n) {
+ ((__llist_iterator *) n->getData())->reset();
+ n = n->getNext();
+ }
+ }
+
+ --elements;
+ delete node;
+ return 0;
+ } else {
+ // iterate through the list and remove the first occurance of the item
+
+ // NOTE: we don't validate _first in this assignment, because it is checked
+ // for validity above...
+ __llist_node *rnode = _first->getNext(), *prev = _first;
+
+ for (register int i = 1; i < elements; i++) {
+ if (rnode) {
+ if (rnode->getData() == d) {
+ // we found the item... update the previous node and delete the
+ // now useless rnode...
+ prev->setNext(rnode->getNext());
+
+ if (rnode == _last)
+ _last = prev;
+
+ if (iterators && iterators->_first) {
+ __llist_node *n = iterators->_first;
+ while (n) {
+ ((__llist_iterator *) n->getData())->reset();
+ n = n->getNext();
+ }
+ }
+
+ --elements;
+ delete rnode;
+ return i;
+ } else {
+ prev = rnode;
+ rnode = rnode->getNext();
+ }
+ }
+ }
+
+ return -1;
+ }
+}
+
+
+void *__llist::remove(const int index) {
+ if (index >= elements || index < 0 || (! _first) || (! _last))
+ return (void *) 0;
+
+ // remove list item at specified index within the list
+ if (index == 0) {
+ // remove the first item in the list...
+ __llist_node *node = _first;
+ void *data_return = _first->getData();
+
+ _first = _first->getNext();
+
+ if (iterators && iterators->_first) {
+ __llist_node *n = iterators->_first;
+ while (n) {
+ ((__llist_iterator *) n->getData())->reset();
+ n = n->getNext();
+ }
+ }
+
+ --elements;
+ delete node;
+
+ return data_return;
+ } else {
+ __llist_node *rnode = _first->getNext(), *prev = _first;
+ void *data_return = (void *) 0;
+
+ for (register int i = 1; i < index; i++) {
+ if (rnode) {
+ prev = rnode;
+ rnode = rnode->getNext();
+ } else {
+ return (void *) 0;
+ }
+ }
+
+ if (! rnode) return (void *) 0;
+
+ prev->setNext(rnode->getNext());
+ data_return = rnode->getData();
+
+ if (rnode == _last)
+ _last = prev;
+
+ if (iterators && iterators->_first) {
+ __llist_node *n = iterators->_first;
+ while (n) {
+ ((__llist_iterator *) n->getData())->reset();
+ n = n->getNext();
+ }
+ }
+
+ --elements;
+ data_return = rnode->getData();
+ delete rnode;
+ return data_return;
+ }
+
+ return (void *) 0;
+}
+
+
+void *__llist::find(const int index) {
+ if (index >= elements || index < 0 || (! _first) || (! _last))
+ return (void *) 0;
+
+ if (index == 0) // return the first item
+ return first();
+ if (index == (elements - 1)) // return the last item
+ return last();
+
+ __llist_node *fnode = _first->getNext();
+
+ for (register int i = 1; i < index; i++) {
+ if (fnode)
+ fnode = fnode->getNext();
+ else
+ return (void *) 0;
+ }
+
+ return fnode->getData();
+}
+
+
+void *__llist::first(void) {
+ if (_first)
+ return _first->getData();
+
+ return (void *) 0;
+}
+
+
+void *__llist::last(void) {
+ if (_last)
+ return _last->getData();
+
+ return (void *) 0;
+}
--- /dev/null
+// LinkedList.h for Openbox
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __LinkedList_hh
+#define __LinkedList_hh
+
+
+class __llist_node {
+private:
+ __llist_node *next;
+ void *data;
+
+protected:
+
+public:
+ __llist_node(void) { next = (__llist_node *) 0; data = (void *) 0; }
+
+ inline __llist_node *getNext(void) { return next; }
+
+ inline void *getData(void) { return data; }
+ inline void setData(void *d) { data = d; }
+ inline void setNext(__llist_node *n) { next = n; }
+};
+
+
+// forward declaration
+class __llist;
+
+
+class __llist_iterator {
+private:
+ __llist *list;
+ __llist_node *node;
+
+ friend class __llist;
+
+
+protected:
+ __llist_iterator(__llist *);
+ ~__llist_iterator(void);
+
+ const int set(const int);
+
+ void *current(void);
+ void reset(void);
+
+ void operator++(void);
+ void operator++(int);
+};
+
+
+class __llist {
+private:
+ int elements;
+ __llist_node *_first, *_last;
+ __llist *iterators;
+
+ friend class __llist_iterator;
+
+
+protected:
+ __llist(void * = 0);
+ ~__llist(void);
+
+ inline const int &count(void) const { return elements; }
+ inline const int empty(void) const { return (elements == 0); }
+
+ const int insert(void *, int = -1);
+ const int remove(void *);
+
+ void *find(const int);
+ void *remove(const int);
+ void *first(void);
+ void *last(void);
+};
+
+
+template <class Z>
+class LinkedListIterator : public __llist_iterator {
+public:
+ LinkedListIterator(__llist *d = 0) : __llist_iterator(d) { return; }
+
+ inline Z *current(void) { return (Z *) __llist_iterator::current(); }
+
+ inline const int set(const int i) { return __llist_iterator::set(i); }
+
+ inline void reset(void) { __llist_iterator::reset(); }
+
+ inline void operator++(void) { __llist_iterator::operator++(); }
+ inline void operator++(int) { __llist_iterator::operator++(0); }
+};
+
+
+template <class Z>
+class LinkedList : public __llist {
+public:
+ LinkedList(Z *d = 0) : __llist(d) { return; }
+
+ inline Z *find(const int i) { return (Z *) __llist::find(i); }
+ inline Z *remove(const int i) { return (Z *) __llist::remove(i); }
+ inline Z *first(void) { return (Z *) __llist::first(); }
+ inline Z *last(void) { return (Z *) __llist::last(); }
+
+ inline const int count(void) const { return __llist::count(); }
+ inline const int empty(void) const { return __llist::empty(); }
+
+ inline const int insert(Z *d, int i = -1) { return __llist::insert((void *) d, i); }
+ inline const int remove(Z *d) { return __llist::remove((void *) d); }
+};
+
+
+#endif // __LinkedList_hh
--- /dev/null
+# src/Makefile.am for Openbox
+# Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+DEFAULT_MENU=$(pkgdatadir)/menu
+DEFAULT_STYLE=$(pkgdatadir)/styles/steelblue
+
+CPPFLAGS= @CPPFLAGS@ @SHAPE@ @SLIT@ @INTERLACE@ @ORDEREDPSEUDO@ \
+@DEBUG@ @NEWWMSPEC@ @NLS@ @TIMEDCACHE@ @CLOBBER@ \
+-DLOCALEPATH=\"$(pkgdatadir)/nls\" \
+-DDEFAULTMENU=\"$(DEFAULT_MENU)\" \
+-DDEFAULTSTYLE=\"$(DEFAULT_STYLE)\"
+
+bin_PROGRAMS= openbox
+
+openbox_SOURCES= BaseDisplay.cc Basemenu.cc Clientmenu.cc Configmenu.cc Iconmenu.cc Image.cc LinkedList.cc Netizen.cc Rootmenu.cc Screen.cc Slit.cc Timer.cc Toolbar.cc Window.cc Windowmenu.cc Workspace.cc Workspacemenu.cc openbox.cc bsd-snprintf.c i18n.cc main.cc
+
+MAINTAINERCLEANFILES= Makefile.in
+
+distclean-local:
+ rm -f *\~ *.orig *.rej
+
+# local dependencies
+
+BaseDisplay.o: BaseDisplay.cc i18n.h BaseDisplay.h LinkedList.h \
+ Timer.h
+Basemenu.o: Basemenu.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Screen.h Configmenu.h Netizen.h Rootmenu.h \
+ Workspace.h Workspacemenu.h
+Clientmenu.o: Clientmenu.cc openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Clientmenu.h Workspace.h Screen.h Configmenu.h Netizen.h \
+ Rootmenu.h Workspacemenu.h
+Configmenu.o: Configmenu.cc i18n.h Configmenu.h Basemenu.h \
+ LinkedList.h Screen.h BaseDisplay.h Timer.h Iconmenu.h Netizen.h \
+ Rootmenu.h Workspace.h Workspacemenu.h openbox.h Image.h \
+ Window.h Windowmenu.h Slit.h Toolbar.h
+Icon.o: Iconmenu.cc i18n.h openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Screen.h Configmenu.h Netizen.h Rootmenu.h Workspace.h \
+ Workspacemenu.h Toolbar.h
+Image.o: Image.cc i18n.h BaseDisplay.h LinkedList.h Timer.h \
+ Image.h
+LinkedList.o: LinkedList.cc LinkedList.h
+Netizen.o: Netizen.cc Netizen.h BaseDisplay.h LinkedList.h Timer.h \
+ Screen.h Configmenu.h Basemenu.h openbox.h Image.h Window.h \
+ Iconmenu.h Windowmenu.h Slit.h Rootmenu.h Workspace.h \
+ Workspacemenu.h
+Rootmenu.o: Rootmenu.cc openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Rootmenu.h Screen.h Configmenu.h Netizen.h Workspace.h \
+ Workspacemenu.h
+Screen.o: Screen.cc i18n.h bsd-snprintf.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Clientmenu.h Workspace.h Screen.h Configmenu.h \
+ Netizen.h Rootmenu.h Workspacemenu.h Toolbar.h
+Slit.o: Slit.cc i18n.h openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Screen.h Configmenu.h Netizen.h Rootmenu.h Workspace.h \
+ Workspacemenu.h Toolbar.h
+Timer.o: Timer.cc BaseDisplay.h LinkedList.h Timer.h
+Toolbar.o: Toolbar.cc i18n.h openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Clientmenu.h Workspace.h Rootmenu.h Screen.h Configmenu.h \
+ Netizen.h Workspacemenu.h Toolbar.h
+Window.o: Window.cc i18n.h openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Screen.h Configmenu.h Netizen.h Rootmenu.h Workspace.h \
+ Workspacemenu.h Toolbar.h
+Windowmenu.o: Windowmenu.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Screen.h Configmenu.h Netizen.h Rootmenu.h \
+ Workspace.h Workspacemenu.h
+Workspace.o: Workspace.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Clientmenu.h Workspace.h Screen.h \
+ Configmenu.h Netizen.h Rootmenu.h Workspacemenu.h Toolbar.h
+Workspacemenu.o: Workspacemenu.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Screen.h Configmenu.h Netizen.h Rootmenu.h \
+ Workspace.h Workspacemenu.h Toolbar.h
+openbox.o: openbox.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Clientmenu.h Workspace.h Rootmenu.h \
+ Screen.h Configmenu.h Netizen.h Workspacemenu.h Toolbar.h
+bsd-snprintf.o: bsd-snprintf.c bsd-snprintf.h
+i18n.o: i18n.cc i18n.h
+main.o: main.cc ../version.h i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# src/Makefile.am for Openbox
+# Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+DEFAULT_MENU = $(pkgdatadir)/menu
+DEFAULT_STYLE = $(pkgdatadir)/styles/steelblue
+
+CPPFLAGS = @CPPFLAGS@ @SHAPE@ @SLIT@ @INTERLACE@ @ORDEREDPSEUDO@ @DEBUG@ @NEWWMSPEC@ @NLS@ @TIMEDCACHE@ @CLOBBER@ -DLOCALEPATH=\"$(pkgdatadir)/nls\" -DDEFAULTMENU=\"$(DEFAULT_MENU)\" -DDEFAULTSTYLE=\"$(DEFAULT_STYLE)\"
+
+
+bin_PROGRAMS = openbox
+
+openbox_SOURCES = BaseDisplay.cc Basemenu.cc Clientmenu.cc Configmenu.cc Iconmenu.cc Image.cc LinkedList.cc Netizen.cc Rootmenu.cc Screen.cc Slit.cc Timer.cc Toolbar.cc Window.cc Windowmenu.cc Workspace.cc Workspacemenu.cc openbox.cc bsd-snprintf.c i18n.cc main.cc
+
+MAINTAINERCLEANFILES = Makefile.in
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(bin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I..
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_LIBS = @X_LIBS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+openbox_OBJECTS = BaseDisplay.o Basemenu.o Clientmenu.o Configmenu.o \
+Iconmenu.o Image.o LinkedList.o Netizen.o Rootmenu.o Screen.o Slit.o \
+Timer.o Toolbar.o Window.o Windowmenu.o Workspace.o Workspacemenu.o \
+openbox.o bsd-snprintf.o i18n.o main.o
+openbox_LDADD = $(LDADD)
+openbox_DEPENDENCIES =
+openbox_LDFLAGS =
+CXXFLAGS = @CXXFLAGS@
+CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+DEP_FILES = .deps/BaseDisplay.P .deps/Basemenu.P .deps/Clientmenu.P \
+.deps/Configmenu.P .deps/Iconmenu.P .deps/Image.P .deps/LinkedList.P \
+.deps/Netizen.P .deps/Rootmenu.P .deps/Screen.P .deps/Slit.P \
+.deps/Timer.P .deps/Toolbar.P .deps/Window.P .deps/Windowmenu.P \
+.deps/Workspace.P .deps/Workspacemenu.P .deps/bsd-snprintf.P \
+.deps/i18n.P .deps/main.P .deps/openbox.P
+SOURCES = $(openbox_SOURCES)
+OBJECTS = $(openbox_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .cc .o .s
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ list='$(bin_PROGRAMS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ done
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+openbox: $(openbox_OBJECTS) $(openbox_DEPENDENCIES)
+ @rm -f openbox
+ $(CXXLINK) $(openbox_LDFLAGS) $(openbox_OBJECTS) $(openbox_LDADD) $(LIBS)
+.cc.o:
+ $(CXXCOMPILE) -c $<
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = src
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+
+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+
+-include $(DEP_FILES)
+
+mostlyclean-depend:
+
+clean-depend:
+
+distclean-depend:
+ -rm -rf .deps
+
+maintainer-clean-depend:
+
+%.o: %.c
+ @echo '$(COMPILE) -c $<'; \
+ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-cp .deps/$(*F).pp .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm .deps/$(*F).pp
+
+%.lo: %.c
+ @echo '$(LTCOMPILE) -c $<'; \
+ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
+ < .deps/$(*F).pp > .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm -f .deps/$(*F).pp
+
+%.o: %.cc
+ @echo '$(CXXCOMPILE) -c $<'; \
+ $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-cp .deps/$(*F).pp .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm .deps/$(*F).pp
+
+%.lo: %.cc
+ @echo '$(LTCXXCOMPILE) -c $<'; \
+ $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
+ < .deps/$(*F).pp > .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm -f .deps/$(*F).pp
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-binPROGRAMS
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-binPROGRAMS
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \
+ mostlyclean-tags mostlyclean-depend mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-binPROGRAMS clean-compile clean-tags clean-depend \
+ clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-binPROGRAMS distclean-compile distclean-tags \
+ distclean-depend distclean-generic clean-am \
+ distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-binPROGRAMS \
+ maintainer-clean-compile maintainer-clean-tags \
+ maintainer-clean-depend maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir mostlyclean-depend \
+distclean-depend clean-depend maintainer-clean-depend info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+distclean-local:
+ rm -f *\~ *.orig *.rej
+
+# local dependencies
+
+BaseDisplay.o: BaseDisplay.cc i18n.h BaseDisplay.h LinkedList.h \
+ Timer.h
+Basemenu.o: Basemenu.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Screen.h Configmenu.h Netizen.h Rootmenu.h \
+ Workspace.h Workspacemenu.h
+Clientmenu.o: Clientmenu.cc openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Clientmenu.h Workspace.h Screen.h Configmenu.h Netizen.h \
+ Rootmenu.h Workspacemenu.h
+Configmenu.o: Configmenu.cc i18n.h Configmenu.h Basemenu.h \
+ LinkedList.h Screen.h BaseDisplay.h Timer.h Iconmenu.h Netizen.h \
+ Rootmenu.h Workspace.h Workspacemenu.h openbox.h Image.h \
+ Window.h Windowmenu.h Slit.h Toolbar.h
+Icon.o: Iconmenu.cc i18n.h openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Screen.h Configmenu.h Netizen.h Rootmenu.h Workspace.h \
+ Workspacemenu.h Toolbar.h
+Image.o: Image.cc i18n.h BaseDisplay.h LinkedList.h Timer.h \
+ Image.h
+LinkedList.o: LinkedList.cc LinkedList.h
+Netizen.o: Netizen.cc Netizen.h BaseDisplay.h LinkedList.h Timer.h \
+ Screen.h Configmenu.h Basemenu.h openbox.h Image.h Window.h \
+ Iconmenu.h Windowmenu.h Slit.h Rootmenu.h Workspace.h \
+ Workspacemenu.h
+Rootmenu.o: Rootmenu.cc openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Rootmenu.h Screen.h Configmenu.h Netizen.h Workspace.h \
+ Workspacemenu.h
+Screen.o: Screen.cc i18n.h bsd-snprintf.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Clientmenu.h Workspace.h Screen.h Configmenu.h \
+ Netizen.h Rootmenu.h Workspacemenu.h Toolbar.h
+Slit.o: Slit.cc i18n.h openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Screen.h Configmenu.h Netizen.h Rootmenu.h Workspace.h \
+ Workspacemenu.h Toolbar.h
+Timer.o: Timer.cc BaseDisplay.h LinkedList.h Timer.h
+Toolbar.o: Toolbar.cc i18n.h openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Clientmenu.h Workspace.h Rootmenu.h Screen.h Configmenu.h \
+ Netizen.h Workspacemenu.h Toolbar.h
+Window.o: Window.cc i18n.h openbox.h BaseDisplay.h LinkedList.h \
+ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \
+ Screen.h Configmenu.h Netizen.h Rootmenu.h Workspace.h \
+ Workspacemenu.h Toolbar.h
+Windowmenu.o: Windowmenu.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Screen.h Configmenu.h Netizen.h Rootmenu.h \
+ Workspace.h Workspacemenu.h
+Workspace.o: Workspace.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Clientmenu.h Workspace.h Screen.h \
+ Configmenu.h Netizen.h Rootmenu.h Workspacemenu.h Toolbar.h
+Workspacemenu.o: Workspacemenu.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Screen.h Configmenu.h Netizen.h Rootmenu.h \
+ Workspace.h Workspacemenu.h Toolbar.h
+openbox.o: openbox.cc i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h Clientmenu.h Workspace.h Rootmenu.h \
+ Screen.h Configmenu.h Netizen.h Workspacemenu.h Toolbar.h
+bsd-snprintf.o: bsd-snprintf.c bsd-snprintf.h
+i18n.o: i18n.cc i18n.h
+main.o: main.cc ../version.h i18n.h openbox.h BaseDisplay.h \
+ LinkedList.h Timer.h Image.h Window.h Iconmenu.h Basemenu.h \
+ Windowmenu.h Slit.h
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+// Netizen.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+#include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "Netizen.h"
+#include "Screen.h"
+
+Netizen::Netizen(BScreen *scr, Window win) {
+ screen = scr;
+ basedisplay = screen->getBaseDisplay();
+ window = win;
+
+ event.type = ClientMessage;
+ event.xclient.message_type = basedisplay->getOpenboxStructureMessagesAtom();
+ event.xclient.display = basedisplay->getXDisplay();
+ event.xclient.window = window;
+ event.xclient.format = 32;
+ event.xclient.data.l[0] = basedisplay->getOpenboxNotifyStartupAtom();
+ event.xclient.data.l[1] = event.xclient.data.l[2] =
+ event.xclient.data.l[3] = event.xclient.data.l[4] = 0l;
+
+ XSendEvent(basedisplay->getXDisplay(), window, False, NoEventMask, &event);
+}
+
+
+void Netizen::sendWorkspaceCount(void) {
+ event.xclient.data.l[0] = basedisplay->getOpenboxNotifyWorkspaceCountAtom();
+ event.xclient.data.l[1] = screen->getCount();
+
+ XSendEvent(basedisplay->getXDisplay(), window, False, NoEventMask, &event);
+}
+
+
+void Netizen::sendCurrentWorkspace(void) {
+ event.xclient.data.l[0] = basedisplay->getOpenboxNotifyCurrentWorkspaceAtom();
+ event.xclient.data.l[1] = screen->getCurrentWorkspaceID();
+
+ XSendEvent(basedisplay->getXDisplay(), window, False, NoEventMask, &event);
+}
+
+
+void Netizen::sendWindowFocus(Window w) {
+ event.xclient.data.l[0] = basedisplay->getOpenboxNotifyWindowFocusAtom();
+ event.xclient.data.l[1] = w;
+
+ XSendEvent(basedisplay->getXDisplay(), window, False, NoEventMask, &event);
+}
+
+
+void Netizen::sendWindowAdd(Window w, unsigned long p) {
+ event.xclient.data.l[0] = basedisplay->getOpenboxNotifyWindowAddAtom();
+ event.xclient.data.l[1] = w;
+ event.xclient.data.l[2] = p;
+
+ XSendEvent(basedisplay->getXDisplay(), window, False, NoEventMask, &event);
+
+ event.xclient.data.l[2] = 0l;
+}
+
+
+void Netizen::sendWindowDel(Window w) {
+ event.xclient.data.l[0] = basedisplay->getOpenboxNotifyWindowDelAtom();
+ event.xclient.data.l[1] = w;
+
+ XSendEvent(basedisplay->getXDisplay(), window, False, NoEventMask, &event);
+}
+
+
+void Netizen::sendWindowRaise(Window w) {
+ event.xclient.data.l[0] = basedisplay->getOpenboxNotifyWindowRaiseAtom();
+ event.xclient.data.l[1] = w;
+
+ XSendEvent(basedisplay->getXDisplay(), window, False, NoEventMask, &event);
+}
+
+
+void Netizen::sendWindowLower(Window w) {
+ event.xclient.data.l[0] = basedisplay->getOpenboxNotifyWindowLowerAtom();
+ event.xclient.data.l[1] = w;
+
+ XSendEvent(basedisplay->getXDisplay(), window, False, NoEventMask, &event);
+}
+
+
+void Netizen::sendConfigNotify(XEvent *e) {
+ XSendEvent(basedisplay->getXDisplay(), window, False,
+ StructureNotifyMask, e);
+}
--- /dev/null
+// Netizen.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Netizen_hh
+#define __Netizen_hh
+
+#include <X11/Xlib.h>
+
+// forward declaration
+class BaseDisplay;
+class BScreen;
+class Netizen;
+
+class Netizen {
+private:
+ BaseDisplay *basedisplay;
+ BScreen *screen;
+ Window window;
+ XEvent event;
+
+protected:
+
+public:
+ Netizen(BScreen *, Window);
+
+ inline const Window &getWindowID(void) const { return window; }
+
+ void sendWorkspaceCount(void);
+ void sendCurrentWorkspace(void);
+
+ void sendWindowFocus(Window);
+ void sendWindowAdd(Window, unsigned long);
+ void sendWindowDel(Window);
+ void sendWindowRaise(Window);
+ void sendWindowLower(Window);
+
+ void sendConfigNotify(XEvent *);
+};
+
+
+#endif // __Netizen_hh
--- /dev/null
+// Rootmenu.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "openbox.h"
+#include "Rootmenu.h"
+#include "Screen.h"
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif // HAVE_SYS_PARAM_H
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 255
+#endif // MAXPATHLEN
+
+
+Rootmenu::Rootmenu(BScreen *scrn) : Basemenu(scrn) {
+ screen = scrn;
+ openbox = screen->getOpenbox();
+}
+
+
+void Rootmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+
+ if (!item->function())
+ return;
+
+ switch (item->function()) {
+ case BScreen::Execute:
+ if (item->exec()) {
+#ifndef __EMX__
+ char displaystring[MAXPATHLEN];
+ sprintf(displaystring, "DISPLAY=%s",
+ DisplayString(screen->getBaseDisplay()->getXDisplay()));
+ sprintf(displaystring + strlen(displaystring) - 1, "%d",
+ screen->getScreenNumber());
+
+ bexec(item->exec(), displaystring);
+#else // __EMX__
+ spawnlp(P_NOWAIT, "cmd.exe", "cmd.exe", "/c", item->exec(), NULL);
+#endif // !__EMX__
+ }
+ break;
+
+ case BScreen::Restart:
+ openbox->restart();
+ break;
+
+ case BScreen::RestartOther:
+ if (item->exec())
+ openbox->restart(item->exec());
+ break;
+
+ case BScreen::Exit:
+ openbox->shutdown();
+ break;
+
+ case BScreen::SetStyle:
+ if (item->exec())
+ openbox->saveStyleFilename(item->exec());
+
+ case BScreen::Reconfigure:
+ openbox->reconfigure();
+ return;
+ }
+
+ if (! (screen->getRootmenu()->isTorn() || isTorn()) &&
+ item->function() != BScreen::Reconfigure &&
+ item->function() != BScreen::SetStyle)
+ hide();
+}
--- /dev/null
+// Rootmenu.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Rootmenu_hh
+#define __Rootmenu_hh
+
+// forward declarations
+class Rootmenu;
+
+class Openbox;
+class BScreen;
+
+#include "Basemenu.h"
+
+
+class Rootmenu : public Basemenu {
+private:
+ Openbox *openbox;
+ BScreen *screen;
+
+
+protected:
+ virtual void itemSelected(int, int);
+
+
+public:
+ Rootmenu(BScreen *);
+};
+
+
+#endif // __Rootmenu_hh
+
--- /dev/null
+// Screen.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include <X11/Xatom.h>
+#include <X11/keysym.h>
+#include <assert.h>
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Clientmenu.h"
+#include "Iconmenu.h"
+#include "Image.h"
+#include "Screen.h"
+
+#ifdef SLIT
+#include "Slit.h"
+#endif // SLIT
+
+#include "Rootmenu.h"
+#include "Toolbar.h"
+#include "Window.h"
+#include "Workspace.h"
+#include "Workspacemenu.h"
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+# include <sys/types.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_CTYPE_H
+# include <ctype.h>
+#endif // HAVE_CTYPE_H
+
+#ifdef HAVE_DIRENT_H
+# include <dirent.h>
+#endif // HAVE_DIRENT_H
+
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#endif // HAVE_LOCALE_H
+
+#ifdef HAVE_UNISTD_H
+# include <sys/types.h>
+# include <unistd.h>
+#endif // HAVE_UNISTD_H
+
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif // HAVE_SYS_STAT_H
+
+#ifdef HAVE_STDARG_H
+# include <stdarg.h>
+#endif // HAVE_STDARG_H
+
+#ifndef HAVE_SNPRINTF
+# include "bsd-snprintf.h"
+#endif // !HAVE_SNPRINTF
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 255
+#endif // MAXPATHLEN
+
+#ifndef FONT_ELEMENT_SIZE
+#define FONT_ELEMENT_SIZE 50
+#endif // FONT_ELEMENT_SIZE
+
+#include <algorithm>
+
+static Bool running = True;
+
+static int anotherWMRunning(Display *display, XErrorEvent *) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenAnotherWMRunning,
+ "BScreen::BScreen: an error occured while querying the X server.\n"
+ " another window manager already running on display %s.\n"),
+ DisplayString(display));
+
+ running = False;
+
+ return(-1);
+}
+
+struct dcmp {
+ bool operator()(const char *one, const char *two) const {
+ return (strcmp(one, two) < 0) ? True : False;
+ }
+};
+
+#ifndef HAVE_STRCASESTR
+static const char * strcasestr(const char *str, const char *ptn) {
+ const char *s2, *p2;
+ for( ; *str; str++) {
+ for(s2=str,p2=ptn; ; s2++,p2++) {
+ if (!*p2) return str;
+ if (toupper(*s2) != toupper(*p2)) break;
+ }
+ }
+ return NULL;
+}
+#endif // HAVE_STRCASESTR
+
+static const char *getFontElement(const char *pattern, char *buf, int bufsiz, ...) {
+ const char *p, *v;
+ char *p2;
+ va_list va;
+
+ va_start(va, bufsiz);
+ buf[bufsiz-1] = 0;
+ buf[bufsiz-2] = '*';
+ while((v = va_arg(va, char *)) != NULL) {
+ p = strcasestr(pattern, v);
+ if (p) {
+ strncpy(buf, p+1, bufsiz-2);
+ p2 = strchr(buf, '-');
+ if (p2) *p2=0;
+ va_end(va);
+ return p;
+ }
+ }
+ va_end(va);
+ strncpy(buf, "*", bufsiz);
+ return NULL;
+}
+
+static const char *getFontSize(const char *pattern, int *size) {
+ const char *p;
+ const char *p2=NULL;
+ int n=0;
+
+ for (p=pattern; 1; p++) {
+ if (!*p) {
+ if (p2!=NULL && n>1 && n<72) {
+ *size = n; return p2+1;
+ } else {
+ *size = 16; return NULL;
+ }
+ } else if (*p=='-') {
+ if (n>1 && n<72 && p2!=NULL) {
+ *size = n;
+ return p2+1;
+ }
+ p2=p; n=0;
+ } else if (*p>='0' && *p<='9' && p2!=NULL) {
+ n *= 10;
+ n += *p-'0';
+ } else {
+ p2=NULL; n=0;
+ }
+ }
+}
+
+
+BScreen::BScreen(Openbox *bb, int scrn) : ScreenInfo(bb, scrn) {
+ openbox = bb;
+
+ event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
+ SubstructureRedirectMask | KeyPressMask | KeyReleaseMask |
+ ButtonPressMask | ButtonReleaseMask;
+
+ XErrorHandler old = XSetErrorHandler((XErrorHandler) anotherWMRunning);
+ XSelectInput(getBaseDisplay()->getXDisplay(), getRootWindow(), event_mask);
+ XSync(getBaseDisplay()->getXDisplay(), False);
+ XSetErrorHandler((XErrorHandler) old);
+
+ managed = running;
+ if (! managed) return;
+
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenManagingScreen,
+ "BScreen::BScreen: managing screen %d "
+ "using visual 0x%lx, depth %d\n"),
+ getScreenNumber(), XVisualIDFromVisual(getVisual()),
+ getDepth());
+
+ rootmenu = 0;
+ resource.stylerc = 0;
+
+ resource.mstyle.t_fontset = resource.mstyle.f_fontset =
+ resource.tstyle.fontset = resource.wstyle.fontset = (XFontSet) 0;
+ resource.mstyle.t_font = resource.mstyle.f_font = resource.tstyle.font =
+ resource.wstyle.font = (XFontStruct *) 0;
+ resource.root_command = NULL;
+
+#ifdef HAVE_STRFTIME
+ resource.strftime_format = 0;
+#endif // HAVE_STRFTIME
+
+#ifdef HAVE_GETPID
+ pid_t bpid = getpid();
+
+ XChangeProperty(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ openbox->getOpenboxPidAtom(), XA_CARDINAL,
+ sizeof(pid_t) * 8, PropModeReplace,
+ (unsigned char *) &bpid, 1);
+#endif // HAVE_GETPID
+
+ XDefineCursor(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ openbox->getSessionCursor());
+
+ workspaceNames = new LinkedList<char>;
+ workspacesList = new LinkedList<Workspace>;
+ rootmenuList = new LinkedList<Rootmenu>;
+ netizenList = new LinkedList<Netizen>;
+ iconList = new LinkedList<OpenboxWindow>;
+
+ image_control =
+ new BImageControl(openbox, this, True, openbox->getColorsPerChannel(),
+ openbox->getCacheLife(), openbox->getCacheMax());
+ image_control->installRootColormap();
+ root_colormap_installed = True;
+
+ openbox->load_rc(this);
+
+ image_control->setDither(resource.image_dither);
+
+ LoadStyle();
+
+ XGCValues gcv;
+ unsigned long gc_value_mask = GCForeground;
+ if (! i18n->multibyte()) gc_value_mask |= GCFont;
+
+ gcv.foreground = WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber())
+ ^ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber());
+ gcv.function = GXxor;
+ gcv.subwindow_mode = IncludeInferiors;
+ opGC = XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ GCForeground | GCFunction | GCSubwindowMode, &gcv);
+
+ gcv.foreground = resource.wstyle.l_text_focus.getPixel();
+ if (resource.wstyle.font)
+ gcv.font = resource.wstyle.font->fid;
+ resource.wstyle.l_text_focus_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.wstyle.l_text_unfocus.getPixel();
+ if (resource.wstyle.font)
+ gcv.font = resource.wstyle.font->fid;
+ resource.wstyle.l_text_unfocus_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.wstyle.b_pic_focus.getPixel();
+ resource.wstyle.b_pic_focus_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ GCForeground, &gcv);
+
+ gcv.foreground = resource.wstyle.b_pic_unfocus.getPixel();
+ resource.wstyle.b_pic_unfocus_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ GCForeground, &gcv);
+
+ gcv.foreground = resource.mstyle.t_text.getPixel();
+ if (resource.mstyle.t_font)
+ gcv.font = resource.mstyle.t_font->fid;
+ resource.mstyle.t_text_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.mstyle.f_text.getPixel();
+ if (resource.mstyle.f_font)
+ gcv.font = resource.mstyle.f_font->fid;
+ resource.mstyle.f_text_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.mstyle.h_text.getPixel();
+ resource.mstyle.h_text_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.mstyle.d_text.getPixel();
+ resource.mstyle.d_text_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.mstyle.hilite.getColor()->getPixel();
+ resource.mstyle.hilite_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.tstyle.l_text.getPixel();
+ if (resource.tstyle.font)
+ gcv.font = resource.tstyle.font->fid;
+ resource.tstyle.l_text_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.tstyle.w_text.getPixel();
+ resource.tstyle.w_text_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.tstyle.c_text.getPixel();
+ resource.tstyle.c_text_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.tstyle.b_pic.getPixel();
+ resource.tstyle.b_pic_gc =
+ XCreateGC(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ gc_value_mask, &gcv);
+
+ const char *s = i18n->getMessage(ScreenSet, ScreenPositionLength,
+ "0: 0000 x 0: 0000");
+ int l = strlen(s);
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(resource.wstyle.fontset, s, l, &ink, &logical);
+ geom_w = logical.width;
+
+ geom_h = resource.wstyle.fontset_extents->max_ink_extent.height;
+ } else {
+ geom_h = resource.wstyle.font->ascent +
+ resource.wstyle.font->descent;
+
+ geom_w = XTextWidth(resource.wstyle.font, s, l);
+ }
+
+ geom_w += (resource.bevel_width * 2);
+ geom_h += (resource.bevel_width * 2);
+
+ XSetWindowAttributes attrib;
+ unsigned long mask = CWBorderPixel | CWColormap | CWSaveUnder;
+ attrib.border_pixel = getBorderColor()->getPixel();
+ attrib.colormap = getColormap();
+ attrib.save_under = True;
+
+ geom_window =
+ XCreateWindow(getBaseDisplay()->getXDisplay(), getRootWindow(),
+ 0, 0, geom_w, geom_h, resource.border_width, getDepth(),
+ InputOutput, getVisual(), mask, &attrib);
+ geom_visible = False;
+
+ if (resource.wstyle.l_focus.getTexture() & BImage_ParentRelative) {
+ if (resource.wstyle.t_focus.getTexture() ==
+ (BImage_Flat | BImage_Solid)) {
+ geom_pixmap = None;
+ XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.wstyle.t_focus.getColor()->getPixel());
+ } else {
+ geom_pixmap = image_control->renderImage(geom_w, geom_h,
+ &resource.wstyle.t_focus);
+ XSetWindowBackgroundPixmap(getBaseDisplay()->getXDisplay(),
+ geom_window, geom_pixmap);
+ }
+ } else {
+ if (resource.wstyle.l_focus.getTexture() ==
+ (BImage_Flat | BImage_Solid)) {
+ geom_pixmap = None;
+ XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.wstyle.l_focus.getColor()->getPixel());
+ } else {
+ geom_pixmap = image_control->renderImage(geom_w, geom_h,
+ &resource.wstyle.l_focus);
+ XSetWindowBackgroundPixmap(getBaseDisplay()->getXDisplay(),
+ geom_window, geom_pixmap);
+ }
+ }
+
+ workspacemenu = new Workspacemenu(this);
+ iconmenu = new Iconmenu(this);
+ configmenu = new Configmenu(this);
+
+ Workspace *wkspc = (Workspace *) 0;
+ if (resource.workspaces != 0) {
+ for (int i = 0; i < resource.workspaces; ++i) {
+ wkspc = new Workspace(this, workspacesList->count());
+ workspacesList->insert(wkspc);
+ workspacemenu->insert(wkspc->getName(), wkspc->getMenu());
+ }
+ } else {
+ wkspc = new Workspace(this, workspacesList->count());
+ workspacesList->insert(wkspc);
+ workspacemenu->insert(wkspc->getName(), wkspc->getMenu());
+ }
+
+ workspacemenu->insert(i18n->getMessage(IconSet, IconIcons, "Icons"),
+ iconmenu);
+ workspacemenu->update();
+
+ current_workspace = workspacesList->first();
+ workspacemenu->setItemSelected(2, True);
+
+ toolbar = new Toolbar(this);
+
+#ifdef SLIT
+ slit = new Slit(this);
+#endif // SLIT
+
+ InitMenu();
+
+ raiseWindows(0, 0);
+ rootmenu->update();
+
+ changeWorkspaceID(0);
+
+ int i;
+ unsigned int nchild;
+ Window r, p, *children;
+ XQueryTree(getBaseDisplay()->getXDisplay(), getRootWindow(), &r, &p,
+ &children, &nchild);
+
+ // preen the window list of all icon windows... for better dockapp support
+ for (i = 0; i < (int) nchild; i++) {
+ if (children[i] == None) continue;
+
+ XWMHints *wmhints = XGetWMHints(getBaseDisplay()->getXDisplay(),
+ children[i]);
+
+ if (wmhints) {
+ if ((wmhints->flags & IconWindowHint) &&
+ (wmhints->icon_window != children[i]))
+ for (int j = 0; j < (int) nchild; j++)
+ if (children[j] == wmhints->icon_window) {
+ children[j] = None;
+
+ break;
+ }
+
+ XFree(wmhints);
+ }
+ }
+
+ // manage shown windows
+ for (i = 0; i < (int) nchild; ++i) {
+ if (children[i] == None || (! openbox->validateWindow(children[i])))
+ continue;
+
+ XWindowAttributes attrib;
+ if (XGetWindowAttributes(getBaseDisplay()->getXDisplay(), children[i],
+ &attrib)) {
+ if (attrib.override_redirect) continue;
+
+ if (attrib.map_state != IsUnmapped) {
+ new OpenboxWindow(openbox, children[i], this);
+
+ OpenboxWindow *win = openbox->searchWindow(children[i]);
+ if (win) {
+ XMapRequestEvent mre;
+ mre.window = children[i];
+ win->restoreAttributes();
+ win->mapRequestEvent(&mre);
+ }
+ }
+ }
+ }
+
+ if (! resource.sloppy_focus)
+ XSetInputFocus(getBaseDisplay()->getXDisplay(), toolbar->getWindowID(),
+ RevertToParent, CurrentTime);
+
+ XFree(children);
+ XFlush(getBaseDisplay()->getXDisplay());
+}
+
+
+BScreen::~BScreen(void) {
+ if (! managed) return;
+
+ if (geom_pixmap != None)
+ image_control->removeImage(geom_pixmap);
+
+ if (geom_window != None)
+ XDestroyWindow(getBaseDisplay()->getXDisplay(), geom_window);
+
+ removeWorkspaceNames();
+
+ while (workspacesList->count())
+ delete workspacesList->remove(0);
+
+ while (rootmenuList->count())
+ rootmenuList->remove(0);
+
+ while (iconList->count())
+ delete iconList->remove(0);
+
+ while (netizenList->count())
+ delete netizenList->remove(0);
+
+#ifdef HAVE_STRFTIME
+ if (resource.strftime_format)
+ delete [] resource.strftime_format;
+#endif // HAVE_STRFTIME
+
+ delete rootmenu;
+ delete workspacemenu;
+ delete iconmenu;
+ delete configmenu;
+
+#ifdef SLIT
+ delete slit;
+#endif // SLIT
+
+ delete toolbar;
+ delete image_control;
+
+ delete workspacesList;
+ delete workspaceNames;
+ delete rootmenuList;
+ delete iconList;
+ delete netizenList;
+
+ if (resource.wstyle.fontset)
+ XFreeFontSet(getBaseDisplay()->getXDisplay(), resource.wstyle.fontset);
+ if (resource.mstyle.t_fontset)
+ XFreeFontSet(getBaseDisplay()->getXDisplay(), resource.mstyle.t_fontset);
+ if (resource.mstyle.f_fontset)
+ XFreeFontSet(getBaseDisplay()->getXDisplay(), resource.mstyle.f_fontset);
+ if (resource.tstyle.fontset)
+ XFreeFontSet(getBaseDisplay()->getXDisplay(), resource.tstyle.fontset);
+
+ if (resource.wstyle.font)
+ XFreeFont(getBaseDisplay()->getXDisplay(), resource.wstyle.font);
+ if (resource.mstyle.t_font)
+ XFreeFont(getBaseDisplay()->getXDisplay(), resource.mstyle.t_font);
+ if (resource.mstyle.f_font)
+ XFreeFont(getBaseDisplay()->getXDisplay(), resource.mstyle.f_font);
+ if (resource.tstyle.font)
+ XFreeFont(getBaseDisplay()->getXDisplay(), resource.tstyle.font);
+ if (resource.root_command != NULL)
+ delete [] resource.root_command;
+
+ XFreeGC(getBaseDisplay()->getXDisplay(), opGC);
+
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.wstyle.l_text_focus_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.wstyle.l_text_unfocus_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.wstyle.b_pic_focus_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.wstyle.b_pic_unfocus_gc);
+
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.mstyle.t_text_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.mstyle.f_text_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.mstyle.h_text_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.mstyle.d_text_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.mstyle.hilite_gc);
+
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.tstyle.l_text_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.tstyle.w_text_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.tstyle.c_text_gc);
+ XFreeGC(getBaseDisplay()->getXDisplay(),
+ resource.tstyle.b_pic_gc);
+}
+
+void BScreen::readDatabaseTexture(char *rname, char *rclass,
+ BTexture *texture,
+ unsigned long default_pixel)
+{
+ XrmValue value;
+ char *value_type;
+
+ if (XrmGetResource(resource.stylerc, rname, rclass, &value_type,
+ &value))
+ image_control->parseTexture(texture, value.addr);
+ else
+ texture->setTexture(BImage_Solid | BImage_Flat);
+
+ if (texture->getTexture() & BImage_Solid) {
+ int clen = strlen(rclass) + 32, nlen = strlen(rname) + 32;
+
+ char *colorclass = new char[clen], *colorname = new char[nlen];
+
+ sprintf(colorclass, "%s.Color", rclass);
+ sprintf(colorname, "%s.color", rname);
+
+ readDatabaseColor(colorname, colorclass, texture->getColor(),
+ default_pixel);
+
+#ifdef INTERLACE
+ sprintf(colorclass, "%s.ColorTo", rclass);
+ sprintf(colorname, "%s.colorTo", rname);
+
+ readDatabaseColor(colorname, colorclass, texture->getColorTo(),
+ default_pixel);
+#endif // INTERLACE
+
+ delete [] colorclass;
+ delete [] colorname;
+
+ if ((! texture->getColor()->isAllocated()) ||
+ (texture->getTexture() & BImage_Flat))
+ return;
+
+ XColor xcol;
+
+ xcol.red = (unsigned int) (texture->getColor()->getRed() +
+ (texture->getColor()->getRed() >> 1));
+ if (xcol.red >= 0xff) xcol.red = 0xffff;
+ else xcol.red *= 0xff;
+ xcol.green = (unsigned int) (texture->getColor()->getGreen() +
+ (texture->getColor()->getGreen() >> 1));
+ if (xcol.green >= 0xff) xcol.green = 0xffff;
+ else xcol.green *= 0xff;
+ xcol.blue = (unsigned int) (texture->getColor()->getBlue() +
+ (texture->getColor()->getBlue() >> 1));
+ if (xcol.blue >= 0xff) xcol.blue = 0xffff;
+ else xcol.blue *= 0xff;
+
+ if (! XAllocColor(getBaseDisplay()->getXDisplay(),
+ getColormap(), &xcol))
+ xcol.pixel = 0;
+
+ texture->getHiColor()->setPixel(xcol.pixel);
+
+ xcol.red =
+ (unsigned int) ((texture->getColor()->getRed() >> 2) +
+ (texture->getColor()->getRed() >> 1)) * 0xff;
+ xcol.green =
+ (unsigned int) ((texture->getColor()->getGreen() >> 2) +
+ (texture->getColor()->getGreen() >> 1)) * 0xff;
+ xcol.blue =
+ (unsigned int) ((texture->getColor()->getBlue() >> 2) +
+ (texture->getColor()->getBlue() >> 1)) * 0xff;
+
+ if (! XAllocColor(getBaseDisplay()->getXDisplay(),
+ getColormap(), &xcol))
+ xcol.pixel = 0;
+
+ texture->getLoColor()->setPixel(xcol.pixel);
+ } else if (texture->getTexture() & BImage_Gradient) {
+ int clen = strlen(rclass) + 10, nlen = strlen(rname) + 10;
+
+ char *colorclass = new char[clen], *colorname = new char[nlen],
+ *colortoclass = new char[clen], *colortoname = new char[nlen];
+
+ sprintf(colorclass, "%s.Color", rclass);
+ sprintf(colorname, "%s.color", rname);
+
+ sprintf(colortoclass, "%s.ColorTo", rclass);
+ sprintf(colortoname, "%s.colorTo", rname);
+
+ readDatabaseColor(colorname, colorclass, texture->getColor(),
+ default_pixel);
+ readDatabaseColor(colortoname, colortoclass, texture->getColorTo(),
+ default_pixel);
+
+ delete [] colorclass;
+ delete [] colorname;
+ delete [] colortoclass;
+ delete [] colortoname;
+ }
+}
+
+
+void BScreen::readDatabaseColor(char *rname, char *rclass, BColor *color,
+ unsigned long default_pixel)
+{
+ XrmValue value;
+ char *value_type;
+
+ if (XrmGetResource(resource.stylerc, rname, rclass, &value_type,
+ &value)) {
+ image_control->parseColor(color, value.addr);
+ } else {
+ // parsing with no color string just deallocates the color, if it has
+ // been previously allocated
+ image_control->parseColor(color);
+ color->setPixel(default_pixel);
+ }
+}
+
+
+void BScreen::readDatabaseFontSet(char *rname, char *rclass,
+ XFontSet *fontset) {
+ if (! fontset) return;
+
+ static char *defaultFont = "fixed";
+
+ Bool load_default = False;
+ XrmValue value;
+ char *value_type;
+
+ if (*fontset)
+ XFreeFontSet(getBaseDisplay()->getXDisplay(), *fontset);
+
+ if (XrmGetResource(resource.stylerc, rname, rclass, &value_type, &value)) {
+ char *fontname = value.addr;
+ if (! (*fontset = createFontSet(fontname)))
+ load_default = True;
+ } else {
+ load_default = True;
+ }
+
+ if (load_default) {
+ *fontset = createFontSet(defaultFont);
+
+ if (! *fontset) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenDefaultFontLoadFail,
+ "BScreen::LoadStyle(): couldn't load default font.\n"));
+ exit(2);
+ }
+ }
+}
+
+
+void BScreen::readDatabaseFont(char *rname, char *rclass, XFontStruct **font) {
+ if (! font) return;
+
+ static char *defaultFont = "fixed";
+
+ Bool load_default = False;
+ XrmValue value;
+ char *value_type;
+
+ if (*font)
+ XFreeFont(getBaseDisplay()->getXDisplay(), *font);
+
+ if (XrmGetResource(resource.stylerc, rname, rclass, &value_type, &value)) {
+ if ((*font = XLoadQueryFont(getBaseDisplay()->getXDisplay(),
+ value.addr)) == NULL) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenFontLoadFail,
+ "BScreen::LoadStyle(): couldn't load font '%s'\n"),
+ value.addr);
+
+ load_default = True;
+ }
+ } else {
+ load_default = True;
+ }
+
+ if (load_default) {
+ if ((*font = XLoadQueryFont(getBaseDisplay()->getXDisplay(),
+ defaultFont)) == NULL) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenDefaultFontLoadFail,
+ "BScreen::LoadStyle(): couldn't load default font.\n"));
+ exit(2);
+ }
+ }
+}
+
+
+XFontSet BScreen::createFontSet(char *fontname) {
+ XFontSet fs;
+ char **missing, *def = "-";
+ int nmissing, pixel_size = 0, buf_size = 0;
+ char weight[FONT_ELEMENT_SIZE], slant[FONT_ELEMENT_SIZE];
+
+ fs = XCreateFontSet(getBaseDisplay()->getXDisplay(),
+ fontname, &missing, &nmissing, &def);
+ if (fs && (! nmissing)) return fs;
+
+#ifdef HAVE_SETLOCALE
+ if (! fs) {
+ if (nmissing) XFreeStringList(missing);
+
+ setlocale(LC_CTYPE, "C");
+ fs = XCreateFontSet(getBaseDisplay()->getXDisplay(), fontname,
+ &missing, &nmissing, &def);
+ setlocale(LC_CTYPE, "");
+ }
+#endif // HAVE_SETLOCALE
+
+ if (fs) {
+ XFontStruct **fontstructs;
+ char **fontnames;
+ XFontsOfFontSet(fs, &fontstructs, &fontnames);
+ fontname = fontnames[0];
+ }
+
+ getFontElement(fontname, weight, FONT_ELEMENT_SIZE,
+ "-medium-", "-bold-", "-demibold-", "-regular-", NULL);
+ getFontElement(fontname, slant, FONT_ELEMENT_SIZE,
+ "-r-", "-i-", "-o-", "-ri-", "-ro-", NULL);
+ getFontSize(fontname, &pixel_size);
+
+ if (! strcmp(weight, "*")) strncpy(weight, "medium", FONT_ELEMENT_SIZE);
+ if (! strcmp(slant, "*")) strncpy(slant, "r", FONT_ELEMENT_SIZE);
+ if (pixel_size < 3) pixel_size = 3;
+ else if (pixel_size > 97) pixel_size = 97;
+
+ buf_size = strlen(fontname) + (FONT_ELEMENT_SIZE * 2) + 64;
+ char *pattern2 = new char[buf_size];
+ snprintf(pattern2, buf_size - 1,
+ "%s,"
+ "-*-*-%s-%s-*-*-%d-*-*-*-*-*-*-*,"
+ "-*-*-*-*-*-*-%d-*-*-*-*-*-*-*,*",
+ fontname, weight, slant, pixel_size, pixel_size);
+ fontname = pattern2;
+
+ if (nmissing) XFreeStringList(missing);
+ if (fs) XFreeFontSet(getBaseDisplay()->getXDisplay(), fs);
+
+ fs = XCreateFontSet(getBaseDisplay()->getXDisplay(), fontname,
+ &missing, &nmissing, &def);
+ delete [] pattern2;
+
+ return fs;
+}
+
+
+void BScreen::reconfigure(void) {
+ LoadStyle();
+
+ XGCValues gcv;
+ unsigned long gc_value_mask = GCForeground;
+ if (! i18n->multibyte()) gc_value_mask |= GCFont;
+
+ gcv.foreground = WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber());
+ gcv.function = GXinvert;
+ gcv.subwindow_mode = IncludeInferiors;
+ XChangeGC(getBaseDisplay()->getXDisplay(), opGC,
+ GCForeground | GCFunction | GCSubwindowMode, &gcv);
+
+ gcv.foreground = resource.wstyle.l_text_focus.getPixel();
+ if (resource.wstyle.font)
+ gcv.font = resource.wstyle.font->fid;
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.wstyle.l_text_focus_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.wstyle.l_text_unfocus.getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.wstyle.l_text_unfocus_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.wstyle.b_pic_focus.getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.wstyle.b_pic_focus_gc,
+ GCForeground, &gcv);
+
+ gcv.foreground = resource.wstyle.b_pic_unfocus.getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.wstyle.b_pic_unfocus_gc,
+ GCForeground, &gcv);
+
+ gcv.foreground = resource.mstyle.t_text.getPixel();
+ if (resource.mstyle.t_font)
+ gcv.font = resource.mstyle.t_font->fid;
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.mstyle.t_text_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.mstyle.f_text.getPixel();
+ if (resource.mstyle.f_font)
+ gcv.font = resource.mstyle.f_font->fid;
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.mstyle.f_text_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.mstyle.h_text.getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.mstyle.h_text_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.mstyle.d_text.getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.mstyle.d_text_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.mstyle.hilite.getColor()->getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.mstyle.hilite_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.tstyle.l_text.getPixel();
+ if (resource.tstyle.font)
+ gcv.font = resource.tstyle.font->fid;
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.tstyle.l_text_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.tstyle.w_text.getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.tstyle.w_text_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.tstyle.c_text.getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.tstyle.c_text_gc,
+ gc_value_mask, &gcv);
+
+ gcv.foreground = resource.tstyle.b_pic.getPixel();
+ XChangeGC(getBaseDisplay()->getXDisplay(), resource.tstyle.b_pic_gc,
+ gc_value_mask, &gcv);
+
+ const char *s = i18n->getMessage(ScreenSet, ScreenPositionLength,
+ "0: 0000 x 0: 0000");
+ int l = strlen(s);
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(resource.wstyle.fontset, s, l, &ink, &logical);
+ geom_w = logical.width;
+
+ geom_h = resource.wstyle.fontset_extents->max_ink_extent.height;
+ } else {
+ geom_w = XTextWidth(resource.wstyle.font, s, l);
+
+ geom_h = resource.wstyle.font->ascent +
+ resource.wstyle.font->descent;
+ }
+
+ geom_w += (resource.bevel_width * 2);
+ geom_h += (resource.bevel_width * 2);
+
+ Pixmap tmp = geom_pixmap;
+ if (resource.wstyle.l_focus.getTexture() & BImage_ParentRelative) {
+ if (resource.wstyle.t_focus.getTexture() ==
+ (BImage_Flat | BImage_Solid)) {
+ geom_pixmap = None;
+ XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.wstyle.t_focus.getColor()->getPixel());
+ } else {
+ geom_pixmap = image_control->renderImage(geom_w, geom_h,
+ &resource.wstyle.t_focus);
+ XSetWindowBackgroundPixmap(getBaseDisplay()->getXDisplay(),
+ geom_window, geom_pixmap);
+ }
+ } else {
+ if (resource.wstyle.l_focus.getTexture() ==
+ (BImage_Flat | BImage_Solid)) {
+ geom_pixmap = None;
+ XSetWindowBackground(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.wstyle.l_focus.getColor()->getPixel());
+ } else {
+ geom_pixmap = image_control->renderImage(geom_w, geom_h,
+ &resource.wstyle.l_focus);
+ XSetWindowBackgroundPixmap(getBaseDisplay()->getXDisplay(),
+ geom_window, geom_pixmap);
+ }
+ }
+ if (tmp) image_control->removeImage(tmp);
+
+ XSetWindowBorderWidth(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.border_width);
+ XSetWindowBorder(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.border_color.getPixel());
+
+ workspacemenu->reconfigure();
+ iconmenu->reconfigure();
+
+ {
+ int remember_sub = rootmenu->getCurrentSubmenu();
+ InitMenu();
+ raiseWindows(0, 0);
+ rootmenu->reconfigure();
+ rootmenu->drawSubmenu(remember_sub);
+ }
+
+ configmenu->reconfigure();
+
+ toolbar->reconfigure();
+
+#ifdef SLIT
+ slit->reconfigure();
+#endif // SLIT
+
+ LinkedListIterator<Workspace> wit(workspacesList);
+ for (Workspace *w = wit.current(); w; wit++, w = wit.current())
+ w->reconfigure();
+
+ LinkedListIterator<OpenboxWindow> iit(iconList);
+ for (OpenboxWindow *bw = iit.current(); bw; iit++, bw = iit.current())
+ if (bw->validateClient())
+ bw->reconfigure();
+
+ image_control->timeout();
+}
+
+
+void BScreen::rereadMenu(void) {
+ InitMenu();
+ raiseWindows(0, 0);
+
+ rootmenu->reconfigure();
+}
+
+
+void BScreen::removeWorkspaceNames(void) {
+ while (workspaceNames->count())
+ delete [] workspaceNames->remove(0);
+}
+
+
+void BScreen::LoadStyle(void) {
+ resource.stylerc = XrmGetFileDatabase(openbox->getStyleFilename());
+ if (resource.stylerc == NULL)
+ resource.stylerc = XrmGetFileDatabase(DEFAULTSTYLE);
+ assert(resource.stylerc != NULL);
+
+ XrmValue value;
+ char *value_type;
+
+ // load fonts/fontsets
+
+ if (i18n->multibyte()) {
+ readDatabaseFontSet("window.font", "Window.Font",
+ &resource.wstyle.fontset);
+ readDatabaseFontSet("toolbar.font", "Toolbar.Font",
+ &resource.tstyle.fontset);
+ readDatabaseFontSet("menu.title.font", "Menu.Title.Font",
+ &resource.mstyle.t_fontset);
+ readDatabaseFontSet("menu.frame.font", "Menu.Frame.Font",
+ &resource.mstyle.f_fontset);
+
+ resource.mstyle.t_fontset_extents =
+ XExtentsOfFontSet(resource.mstyle.t_fontset);
+ resource.mstyle.f_fontset_extents =
+ XExtentsOfFontSet(resource.mstyle.f_fontset);
+ resource.tstyle.fontset_extents =
+ XExtentsOfFontSet(resource.tstyle.fontset);
+ resource.wstyle.fontset_extents =
+ XExtentsOfFontSet(resource.wstyle.fontset);
+ } else {
+ readDatabaseFont("window.font", "Window.Font",
+ &resource.wstyle.font);
+ readDatabaseFont("menu.title.font", "Menu.Title.Font",
+ &resource.mstyle.t_font);
+ readDatabaseFont("menu.frame.font", "Menu.Frame.Font",
+ &resource.mstyle.f_font);
+ readDatabaseFont("toolbar.font", "Toolbar.Font",
+ &resource.tstyle.font);
+ }
+
+ // load window config
+ readDatabaseTexture("window.title.focus", "Window.Title.Focus",
+ &resource.wstyle.t_focus,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.title.unfocus", "Window.Title.Unfocus",
+ &resource.wstyle.t_unfocus,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.label.focus", "Window.Label.Focus",
+ &resource.wstyle.l_focus,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.label.unfocus", "Window.Label.Unfocus",
+ &resource.wstyle.l_unfocus,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.handle.focus", "Window.Handle.Focus",
+ &resource.wstyle.h_focus,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.handle.unfocus", "Window.Handle.Unfocus",
+ &resource.wstyle.h_unfocus,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.grip.focus", "Window.Grip.Focus",
+ &resource.wstyle.g_focus,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.grip.unfocus", "Window.Grip.Unfocus",
+ &resource.wstyle.g_unfocus,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.button.focus", "Window.Button.Focus",
+ &resource.wstyle.b_focus,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.button.unfocus", "Window.Button.Unfocus",
+ &resource.wstyle.b_unfocus,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("window.button.pressed", "Window.Button.Pressed",
+ &resource.wstyle.b_pressed,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("window.frame.focusColor",
+ "Window.Frame.FocusColor",
+ &resource.wstyle.f_focus,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("window.frame.unfocusColor",
+ "Window.Frame.UnfocusColor",
+ &resource.wstyle.f_unfocus,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("window.label.focus.textColor",
+ "Window.Label.Focus.TextColor",
+ &resource.wstyle.l_text_focus,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("window.label.unfocus.textColor",
+ "Window.Label.Unfocus.TextColor",
+ &resource.wstyle.l_text_unfocus,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("window.button.focus.picColor",
+ "Window.Button.Focus.PicColor",
+ &resource.wstyle.b_pic_focus,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("window.button.unfocus.picColor",
+ "Window.Button.Unfocus.PicColor",
+ &resource.wstyle.b_pic_unfocus,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+
+ if (XrmGetResource(resource.stylerc, "window.justify", "Window.Justify",
+ &value_type, &value)) {
+ if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
+ resource.wstyle.justify = BScreen::RightJustify;
+ else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
+ resource.wstyle.justify = BScreen::CenterJustify;
+ else
+ resource.wstyle.justify = BScreen::LeftJustify;
+ } else {
+ resource.wstyle.justify = BScreen::LeftJustify;
+ }
+ // load toolbar config
+ readDatabaseTexture("toolbar", "Toolbar",
+ &resource.tstyle.toolbar,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("toolbar.label", "Toolbar.Label",
+ &resource.tstyle.label,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("toolbar.windowLabel", "Toolbar.WindowLabel",
+ &resource.tstyle.window,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("toolbar.button", "Toolbar.Button",
+ &resource.tstyle.button,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("toolbar.button.pressed", "Toolbar.Button.Pressed",
+ &resource.tstyle.pressed,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("toolbar.clock", "Toolbar.Clock",
+ &resource.tstyle.clock,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("toolbar.label.textColor", "Toolbar.Label.TextColor",
+ &resource.tstyle.l_text,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("toolbar.windowLabel.textColor",
+ "Toolbar.WindowLabel.TextColor",
+ &resource.tstyle.w_text,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("toolbar.clock.textColor", "Toolbar.Clock.TextColor",
+ &resource.tstyle.c_text,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("toolbar.button.picColor", "Toolbar.Button.PicColor",
+ &resource.tstyle.b_pic,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+
+ if (XrmGetResource(resource.stylerc, "toolbar.justify",
+ "Toolbar.Justify", &value_type, &value)) {
+ if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
+ resource.tstyle.justify = BScreen::RightJustify;
+ else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
+ resource.tstyle.justify = BScreen::CenterJustify;
+ else
+ resource.tstyle.justify = BScreen::LeftJustify;
+ } else {
+ resource.tstyle.justify = BScreen::LeftJustify;
+ }
+ // load menu config
+ readDatabaseTexture("menu.title", "Menu.Title",
+ &resource.mstyle.title,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("menu.frame", "Menu.Frame",
+ &resource.mstyle.frame,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseTexture("menu.hilite", "Menu.Hilite",
+ &resource.mstyle.hilite,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("menu.title.textColor", "Menu.Title.TextColor",
+ &resource.mstyle.t_text,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("menu.frame.textColor", "Menu.Frame.TextColor",
+ &resource.mstyle.f_text,
+ WhitePixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("menu.frame.disableColor", "Menu.Frame.DisableColor",
+ &resource.mstyle.d_text,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+ readDatabaseColor("menu.hilite.textColor", "Menu.Hilite.TextColor",
+ &resource.mstyle.h_text,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+
+ if (XrmGetResource(resource.stylerc, "menu.title.justify",
+ "Menu.Title.Justify",
+ &value_type, &value)) {
+ if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
+ resource.mstyle.t_justify = BScreen::RightJustify;
+ else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
+ resource.mstyle.t_justify = BScreen::CenterJustify;
+ else
+ resource.mstyle.t_justify = BScreen::LeftJustify;
+ } else {
+ resource.mstyle.t_justify = BScreen::LeftJustify;
+ }
+ if (XrmGetResource(resource.stylerc, "menu.frame.justify",
+ "Menu.Frame.Justify",
+ &value_type, &value)) {
+ if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
+ resource.mstyle.f_justify = BScreen::RightJustify;
+ else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
+ resource.mstyle.f_justify = BScreen::CenterJustify;
+ else
+ resource.mstyle.f_justify = BScreen::LeftJustify;
+ } else {
+ resource.mstyle.f_justify = BScreen::LeftJustify;
+ }
+ if (XrmGetResource(resource.stylerc, "menu.bullet", "Menu.Bullet",
+ &value_type, &value)) {
+ if (! strncasecmp(value.addr, "empty", value.size))
+ resource.mstyle.bullet = Basemenu::Empty;
+ else if (! strncasecmp(value.addr, "square", value.size))
+ resource.mstyle.bullet = Basemenu::Square;
+ else if (! strncasecmp(value.addr, "diamond", value.size))
+ resource.mstyle.bullet = Basemenu::Diamond;
+ else
+ resource.mstyle.bullet = Basemenu::Triangle;
+ } else {
+ resource.mstyle.bullet = Basemenu::Triangle;
+ }
+ if (XrmGetResource(resource.stylerc, "menu.bullet.position",
+ "Menu.Bullet.Position", &value_type, &value)) {
+ if (! strncasecmp(value.addr, "right", value.size))
+ resource.mstyle.bullet_pos = Basemenu::Right;
+ else
+ resource.mstyle.bullet_pos = Basemenu::Left;
+ } else {
+ resource.mstyle.bullet_pos = Basemenu::Left;
+ }
+ readDatabaseColor("borderColor", "BorderColor", &resource.border_color,
+ BlackPixel(getBaseDisplay()->getXDisplay(),
+ getScreenNumber()));
+
+ // load bevel, border and handle widths
+ if (XrmGetResource(resource.stylerc, "handleWidth", "HandleWidth",
+ &value_type, &value)) {
+ if (sscanf(value.addr, "%u", &resource.handle_width) != 1 ||
+ resource.handle_width > getWidth() / 2 || resource.handle_width == 0)
+ resource.handle_width = 6;
+ } else {
+ resource.handle_width = 6;
+ }
+ if (XrmGetResource(resource.stylerc, "borderWidth", "BorderWidth",
+ &value_type, &value)) {
+ if (sscanf(value.addr, "%u", &resource.border_width) != 1)
+ resource.border_width = 1;
+ } else {
+ resource.border_width = 1;
+ }
+
+ if (XrmGetResource(resource.stylerc, "bevelWidth", "BevelWidth",
+ &value_type, &value)) {
+ if (sscanf(value.addr, "%u", &resource.bevel_width) != 1 ||
+ resource.bevel_width > getWidth() / 2 || resource.bevel_width == 0)
+ resource.bevel_width = 3;
+ } else {
+ resource.bevel_width = 3;
+ }
+ if (XrmGetResource(resource.stylerc, "frameWidth", "FrameWidth",
+ &value_type, &value)) {
+ if (sscanf(value.addr, "%u", &resource.frame_width) != 1 ||
+ resource.frame_width > getWidth() / 2)
+ resource.frame_width = resource.bevel_width;
+ } else {
+ resource.frame_width = resource.bevel_width;
+ }
+ const char *cmd = resource.root_command;
+ if (cmd != NULL || XrmGetResource(resource.stylerc,
+ "rootCommand",
+ "RootCommand", &value_type, &value)) {
+ if (cmd == NULL)
+ cmd = value.addr; // not specified by the screen, so use the one from the
+ // style file
+#ifndef __EMX__
+ char displaystring[MAXPATHLEN];
+ sprintf(displaystring, "DISPLAY=%s",
+ DisplayString(getBaseDisplay()->getXDisplay()));
+ sprintf(displaystring + strlen(displaystring) - 1, "%d",
+ getScreenNumber());
+
+ bexec(cmd, displaystring);
+#else // __EMX__
+ spawnlp(P_NOWAIT, "cmd.exe", "cmd.exe", "/c", cmd, NULL);
+#endif // !__EMX__
+ }
+
+ XrmDestroyDatabase(resource.stylerc);
+}
+
+
+void BScreen::addIcon(OpenboxWindow *w) {
+ if (! w) return;
+
+ w->setWorkspace(-1);
+ w->setWindowNumber(iconList->count());
+
+ iconList->insert(w);
+
+ iconmenu->insert((const char **) w->getIconTitle());
+ iconmenu->update();
+}
+
+
+void BScreen::removeIcon(OpenboxWindow *w) {
+ if (! w) return;
+
+ iconList->remove(w->getWindowNumber());
+
+ iconmenu->remove(w->getWindowNumber());
+ iconmenu->update();
+
+ LinkedListIterator<OpenboxWindow> it(iconList);
+ OpenboxWindow *bw = it.current();
+ for (int i = 0; bw; it++, bw = it.current())
+ bw->setWindowNumber(i++);
+}
+
+
+OpenboxWindow *BScreen::getIcon(int index) {
+ if (index >= 0 && index < iconList->count())
+ return iconList->find(index);
+
+ return (OpenboxWindow *) 0;
+}
+
+
+int BScreen::addWorkspace(void) {
+ Workspace *wkspc = new Workspace(this, workspacesList->count());
+ workspacesList->insert(wkspc);
+
+ workspacemenu->insert(wkspc->getName(), wkspc->getMenu(),
+ wkspc->getWorkspaceID() + 2);
+ workspacemenu->update();
+
+ toolbar->reconfigure();
+
+ updateNetizenWorkspaceCount();
+
+ return workspacesList->count();
+}
+
+
+int BScreen::removeLastWorkspace(void) {
+ if (workspacesList->count() == 1)
+ return 0;
+
+ Workspace *wkspc = workspacesList->last();
+
+ if (current_workspace->getWorkspaceID() == wkspc->getWorkspaceID())
+ changeWorkspaceID(current_workspace->getWorkspaceID() - 1);
+
+ wkspc->removeAll();
+
+ workspacemenu->remove(wkspc->getWorkspaceID() + 2);
+ workspacemenu->update();
+
+ workspacesList->remove(wkspc);
+ delete wkspc;
+
+ toolbar->reconfigure();
+
+ updateNetizenWorkspaceCount();
+
+ return workspacesList->count();
+}
+
+
+void BScreen::changeWorkspaceID(int id) {
+ if (! current_workspace) return;
+
+ if (id != current_workspace->getWorkspaceID()) {
+ current_workspace->hideAll();
+
+ workspacemenu->setItemSelected(current_workspace->getWorkspaceID() + 2,
+ False);
+
+ if (openbox->getFocusedWindow() &&
+ openbox->getFocusedWindow()->getScreen() == this &&
+ (! openbox->getFocusedWindow()->isStuck())) {
+ current_workspace->setLastFocusedWindow(openbox->getFocusedWindow());
+ openbox->setFocusedWindow((OpenboxWindow *) 0);
+ }
+
+ current_workspace = getWorkspace(id);
+
+ workspacemenu->setItemSelected(current_workspace->getWorkspaceID() + 2,
+ True);
+ toolbar->redrawWorkspaceLabel(True);
+
+ current_workspace->showAll();
+
+ if (resource.focus_last && current_workspace->getLastFocusedWindow()) {
+ XSync(openbox->getXDisplay(), False);
+ current_workspace->getLastFocusedWindow()->setInputFocus();
+ }
+ }
+
+ updateNetizenCurrentWorkspace();
+}
+
+
+void BScreen::addNetizen(Netizen *n) {
+ netizenList->insert(n);
+
+ n->sendWorkspaceCount();
+ n->sendCurrentWorkspace();
+
+ LinkedListIterator<Workspace> it(workspacesList);
+ for (Workspace *w = it.current(); w; it++, w = it.current()) {
+ for (int i = 0; i < w->getCount(); i++)
+ n->sendWindowAdd(w->getWindow(i)->getClientWindow(),
+ w->getWorkspaceID());
+ }
+
+ Window f = ((openbox->getFocusedWindow()) ?
+ openbox->getFocusedWindow()->getClientWindow() : None);
+ n->sendWindowFocus(f);
+}
+
+
+void BScreen::removeNetizen(Window w) {
+ LinkedListIterator<Netizen> it(netizenList);
+ int i = 0;
+
+ for (Netizen *n = it.current(); n; it++, i++, n = it.current())
+ if (n->getWindowID() == w) {
+ Netizen *tmp = netizenList->remove(i);
+ delete tmp;
+
+ break;
+ }
+}
+
+
+void BScreen::updateNetizenCurrentWorkspace(void) {
+ LinkedListIterator<Netizen> it(netizenList);
+ for (Netizen *n = it.current(); n; it++, n = it.current())
+ n->sendCurrentWorkspace();
+}
+
+
+void BScreen::updateNetizenWorkspaceCount(void) {
+ LinkedListIterator<Netizen> it(netizenList);
+ for (Netizen *n = it.current(); n; it++, n = it.current())
+ n->sendWorkspaceCount();
+}
+
+
+void BScreen::updateNetizenWindowFocus(void) {
+ Window f = ((openbox->getFocusedWindow()) ?
+ openbox->getFocusedWindow()->getClientWindow() : None);
+ LinkedListIterator<Netizen> it(netizenList);
+ for (Netizen *n = it.current(); n; it++, n = it.current())
+ n->sendWindowFocus(f);
+}
+
+
+void BScreen::updateNetizenWindowAdd(Window w, unsigned long p) {
+ LinkedListIterator<Netizen> it(netizenList);
+ for (Netizen *n = it.current(); n; it++, n = it.current())
+ n->sendWindowAdd(w, p);
+}
+
+
+void BScreen::updateNetizenWindowDel(Window w) {
+ LinkedListIterator<Netizen> it(netizenList);
+ for (Netizen *n = it.current(); n; it++, n = it.current())
+ n->sendWindowDel(w);
+}
+
+
+void BScreen::updateNetizenWindowRaise(Window w) {
+ LinkedListIterator<Netizen> it(netizenList);
+ for (Netizen *n = it.current(); n; it++, n = it.current())
+ n->sendWindowRaise(w);
+}
+
+
+void BScreen::updateNetizenWindowLower(Window w) {
+ LinkedListIterator<Netizen> it(netizenList);
+ for (Netizen *n = it.current(); n; it++, n = it.current())
+ n->sendWindowLower(w);
+}
+
+
+void BScreen::updateNetizenConfigNotify(XEvent *e) {
+ LinkedListIterator<Netizen> it(netizenList);
+ for (Netizen *n = it.current(); n; it++, n = it.current())
+ n->sendConfigNotify(e);
+}
+
+
+void BScreen::raiseWindows(Window *workspace_stack, int num) {
+ Window *session_stack = new
+ Window[(num + workspacesList->count() + rootmenuList->count() + 13)];
+ int i = 0, k = num;
+
+ XRaiseWindow(getBaseDisplay()->getXDisplay(), iconmenu->getWindowID());
+ *(session_stack + i++) = iconmenu->getWindowID();
+
+ LinkedListIterator<Workspace> wit(workspacesList);
+ for (Workspace *tmp = wit.current(); tmp; wit++, tmp = wit.current())
+ *(session_stack + i++) = tmp->getMenu()->getWindowID();
+
+ *(session_stack + i++) = workspacemenu->getWindowID();
+
+ *(session_stack + i++) = configmenu->getFocusmenu()->getWindowID();
+ *(session_stack + i++) = configmenu->getPlacementmenu()->getWindowID();
+ *(session_stack + i++) = configmenu->getWindowID();
+
+#ifdef SLIT
+ *(session_stack + i++) = slit->getMenu()->getDirectionmenu()->getWindowID();
+ *(session_stack + i++) = slit->getMenu()->getPlacementmenu()->getWindowID();
+ *(session_stack + i++) = slit->getMenu()->getWindowID();
+#endif // SLIT
+
+ *(session_stack + i++) =
+ toolbar->getMenu()->getPlacementmenu()->getWindowID();
+ *(session_stack + i++) = toolbar->getMenu()->getWindowID();
+
+ LinkedListIterator<Rootmenu> rit(rootmenuList);
+ for (Rootmenu *tmp = rit.current(); tmp; rit++, tmp = rit.current())
+ *(session_stack + i++) = tmp->getWindowID();
+ *(session_stack + i++) = rootmenu->getWindowID();
+
+ if (toolbar->isOnTop())
+ *(session_stack + i++) = toolbar->getWindowID();
+
+#ifdef SLIT
+ if (slit->isOnTop())
+ *(session_stack + i++) = slit->getWindowID();
+#endif // SLIT
+
+ while (k--)
+ *(session_stack + i++) = *(workspace_stack + k);
+
+ XRestackWindows(getBaseDisplay()->getXDisplay(), session_stack, i);
+
+ delete [] session_stack;
+}
+
+
+#ifdef HAVE_STRFTIME
+void BScreen::saveStrftimeFormat(char *format) {
+ if (resource.strftime_format)
+ delete [] resource.strftime_format;
+
+ resource.strftime_format = bstrdup(format);
+}
+#endif // HAVE_STRFTIME
+
+
+void BScreen::addWorkspaceName(char *name) {
+ workspaceNames->insert(bstrdup(name));
+}
+
+
+char* BScreen::getNameOfWorkspace(int id) {
+ char *name = (char *) 0;
+
+ if (id >= 0 && id < workspaceNames->count()) {
+ char *wkspc_name = workspaceNames->find(id);
+
+ if (wkspc_name)
+ name = wkspc_name;
+ }
+ return name;
+}
+
+
+void BScreen::reassociateWindow(OpenboxWindow *w, int wkspc_id, Bool ignore_sticky) {
+ if (! w) return;
+
+ if (wkspc_id == -1)
+ wkspc_id = current_workspace->getWorkspaceID();
+
+ if (w->getWorkspaceNumber() == wkspc_id)
+ return;
+
+ if (w->isIconic()) {
+ removeIcon(w);
+ getWorkspace(wkspc_id)->addWindow(w);
+ } else if (ignore_sticky || ! w->isStuck()) {
+ getWorkspace(w->getWorkspaceNumber())->removeWindow(w);
+ getWorkspace(wkspc_id)->addWindow(w);
+ }
+}
+
+
+void BScreen::nextFocus(void) {
+ Bool have_focused = False;
+ int focused_window_number = -1;
+ OpenboxWindow *next;
+
+ if (openbox->getFocusedWindow()) {
+ if (openbox->getFocusedWindow()->getScreen()->getScreenNumber() ==
+ getScreenNumber()) {
+ have_focused = True;
+ focused_window_number = openbox->getFocusedWindow()->getWindowNumber();
+ }
+ }
+
+ if ((getCurrentWorkspace()->getCount() > 1) && have_focused) {
+ int next_window_number = focused_window_number;
+ do {
+ if ((++next_window_number) >= getCurrentWorkspace()->getCount())
+ next_window_number = 0;
+
+ next = getCurrentWorkspace()->getWindow(next_window_number);
+ } while ((! next->setInputFocus()) && (next_window_number !=
+ focused_window_number));
+
+ if (next_window_number != focused_window_number)
+ getCurrentWorkspace()->raiseWindow(next);
+ } else if (getCurrentWorkspace()->getCount() >= 1) {
+ next = current_workspace->getWindow(0);
+
+ current_workspace->raiseWindow(next);
+ next->setInputFocus();
+ }
+}
+
+
+void BScreen::prevFocus(void) {
+ Bool have_focused = False;
+ int focused_window_number = -1;
+ OpenboxWindow *prev;
+
+ if (openbox->getFocusedWindow()) {
+ if (openbox->getFocusedWindow()->getScreen()->getScreenNumber() ==
+ getScreenNumber()) {
+ have_focused = True;
+ focused_window_number = openbox->getFocusedWindow()->getWindowNumber();
+ }
+ }
+
+ if ((getCurrentWorkspace()->getCount() > 1) && have_focused) {
+ int prev_window_number = focused_window_number;
+ do {
+ if ((--prev_window_number) < 0)
+ prev_window_number = getCurrentWorkspace()->getCount() - 1;
+
+ prev = getCurrentWorkspace()->getWindow(prev_window_number);
+ } while ((! prev->setInputFocus()) && (prev_window_number !=
+ focused_window_number));
+
+ if (prev_window_number != focused_window_number)
+ getCurrentWorkspace()->raiseWindow(prev);
+ } else if (getCurrentWorkspace()->getCount() >= 1) {
+ prev = current_workspace->getWindow(0);
+
+ current_workspace->raiseWindow(prev);
+ prev->setInputFocus();
+ }
+}
+
+
+void BScreen::raiseFocus(void) {
+ Bool have_focused = False;
+ int focused_window_number = -1;
+
+ if (openbox->getFocusedWindow()) {
+ if (openbox->getFocusedWindow()->getScreen()->getScreenNumber() ==
+ getScreenNumber()) {
+ have_focused = True;
+ focused_window_number = openbox->getFocusedWindow()->getWindowNumber();
+ }
+ }
+
+ if ((getCurrentWorkspace()->getCount() > 1) && have_focused)
+ getWorkspace(openbox->getFocusedWindow()->getWorkspaceNumber())->
+ raiseWindow(openbox->getFocusedWindow());
+}
+
+
+void BScreen::InitMenu(void) {
+ if (rootmenu) {
+ while (rootmenuList->count())
+ rootmenuList->remove(0);
+
+ while (rootmenu->getCount())
+ rootmenu->remove(0);
+ } else {
+ rootmenu = new Rootmenu(this);
+ }
+ Bool defaultMenu = True;
+
+ if (openbox->getMenuFilename()) {
+ FILE *menu_file = fopen(openbox->getMenuFilename(), "r");
+
+ if (!menu_file) {
+ perror(openbox->getMenuFilename());
+ } else {
+ if (feof(menu_file)) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenEmptyMenuFile,
+ "%s: Empty menu file"),
+ openbox->getMenuFilename());
+ } else {
+ char line[1024], label[1024];
+ memset(line, 0, 1024);
+ memset(label, 0, 1024);
+
+ while (fgets(line, 1024, menu_file) && ! feof(menu_file)) {
+ if (line[0] != '#') {
+ int i, key = 0, index = -1, len = strlen(line);
+
+ key = 0;
+ for (i = 0; i < len; i++) {
+ if (line[i] == '[') index = 0;
+ else if (line[i] == ']') break;
+ else if (line[i] != ' ')
+ if (index++ >= 0)
+ key += tolower(line[i]);
+ }
+
+ if (key == 517) {
+ index = -1;
+ for (i = index; i < len; i++) {
+ if (line[i] == '(') index = 0;
+ else if (line[i] == ')') break;
+ else if (index++ >= 0) {
+ if (line[i] == '\\' && i < len - 1) i++;
+ label[index - 1] = line[i];
+ }
+ }
+
+ if (index == -1) index = 0;
+ label[index] = '\0';
+
+ rootmenu->setLabel(label);
+ defaultMenu = parseMenuFile(menu_file, rootmenu);
+ break;
+ }
+ }
+ }
+ }
+ fclose(menu_file);
+ }
+ }
+
+ if (defaultMenu) {
+ rootmenu->setInternalMenu();
+ rootmenu->insert(i18n->getMessage(ScreenSet, Screenxterm, "xterm"),
+ BScreen::Execute,
+ i18n->getMessage(ScreenSet, Screenxterm, "xterm"));
+ rootmenu->insert(i18n->getMessage(ScreenSet, ScreenRestart, "Restart"),
+ BScreen::Restart);
+ rootmenu->insert(i18n->getMessage(ScreenSet, ScreenExit, "Exit"),
+ BScreen::Exit);
+ } else {
+ openbox->saveMenuFilename(openbox->getMenuFilename());
+ }
+}
+
+
+Bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
+ char line[1024], label[1024], command[1024];
+
+ while (! feof(file)) {
+ memset(line, 0, 1024);
+ memset(label, 0, 1024);
+ memset(command, 0, 1024);
+
+ if (fgets(line, 1024, file)) {
+ if (line[0] != '#') {
+ register int i, key = 0, parse = 0, index = -1,
+ line_length = strlen(line),
+ label_length = 0, command_length = 0;
+
+ // determine the keyword
+ key = 0;
+ for (i = 0; i < line_length; i++) {
+ if (line[i] == '[') parse = 1;
+ else if (line[i] == ']') break;
+ else if (line[i] != ' ')
+ if (parse)
+ key += tolower(line[i]);
+ }
+
+ // get the label enclosed in ()'s
+ parse = 0;
+
+ for (i = 0; i < line_length; i++) {
+ if (line[i] == '(') {
+ index = 0;
+ parse = 1;
+ } else if (line[i] == ')') break;
+ else if (index++ >= 0) {
+ if (line[i] == '\\' && i < line_length - 1) i++;
+ label[index - 1] = line[i];
+ }
+ }
+
+ if (parse) {
+ label[index] = '\0';
+ label_length = index;
+ } else {
+ label[0] = '\0';
+ label_length = 0;
+ }
+
+ // get the command enclosed in {}'s
+ parse = 0;
+ index = -1;
+ for (i = 0; i < line_length; i++) {
+ if (line[i] == '{') {
+ index = 0;
+ parse = 1;
+ } else if (line[i] == '}') break;
+ else if (index++ >= 0) {
+ if (line[i] == '\\' && i < line_length - 1) i++;
+ command[index - 1] = line[i];
+ }
+ }
+
+ if (parse) {
+ command[index] = '\0';
+ command_length = index;
+ } else {
+ command[0] = '\0';
+ command_length = 0;
+ }
+
+ switch (key) {
+ case 311: //end
+ return ((menu->getCount() == 0) ? True : False);
+
+ break;
+
+ case 333: // nop
+ menu->insert(label);
+
+ break;
+
+ case 421: // exec
+ if ((! *label) && (! *command)) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenEXECError,
+ "BScreen::parseMenuFile: [exec] error, "
+ "no menu label and/or command defined\n"));
+ continue;
+ }
+
+ menu->insert(label, BScreen::Execute, command);
+
+ break;
+
+ case 442: // exit
+ if (! *label) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenEXITError,
+ "BScreen::parseMenuFile: [exit] error, "
+ "no menu label defined\n"));
+ continue;
+ }
+
+ menu->insert(label, BScreen::Exit);
+
+ break;
+
+ case 561: // style
+ {
+ if ((! *label) || (! *command)) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenSTYLEError,
+ "BScreen::parseMenuFile: [style] error, "
+ "no menu label and/or filename defined\n"));
+ continue;
+ }
+
+ char style[MAXPATHLEN];
+
+ // perform shell style ~ home directory expansion
+ char *homedir = 0;
+ int homedir_len = 0;
+ if (*command == '~' && *(command + 1) == '/') {
+ homedir = getenv("HOME");
+ homedir_len = strlen(homedir);
+ }
+
+ if (homedir && homedir_len != 0) {
+ strncpy(style, homedir, homedir_len);
+
+ strncpy(style + homedir_len, command + 1,
+ command_length - 1);
+ *(style + command_length + homedir_len - 1) = '\0';
+ } else {
+ strncpy(style, command, command_length);
+ *(style + command_length) = '\0';
+ }
+
+ menu->insert(label, BScreen::SetStyle, style);
+ }
+
+ break;
+
+ case 630: // config
+ if (! *label) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenCONFIGError,
+ "BScreen::parseMenufile: [config] error, "
+ "no label defined"));
+ continue;
+ }
+
+ menu->insert(label, configmenu);
+
+ break;
+
+ case 740: // include
+ {
+ if (! *label) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenINCLUDEError,
+ "BScreen::parseMenuFile: [include] error, "
+ "no filename defined\n"));
+ continue;
+ }
+
+ char newfile[MAXPATHLEN];
+
+ // perform shell style ~ home directory expansion
+ char *homedir = 0;
+ int homedir_len = 0;
+ if (*label == '~' && *(label + 1) == '/') {
+ homedir = getenv("HOME");
+ homedir_len = strlen(homedir);
+ }
+
+ if (homedir && homedir_len != 0) {
+ strncpy(newfile, homedir, homedir_len);
+
+ strncpy(newfile + homedir_len, label + 1,
+ label_length - 1);
+ *(newfile + label_length + homedir_len - 1) = '\0';
+ } else {
+ strncpy(newfile, label, label_length);
+ *(newfile + label_length) = '\0';
+ }
+
+ if (newfile) {
+ FILE *submenufile = fopen(newfile, "r");
+
+ if (submenufile) {
+ struct stat buf;
+ if (fstat(fileno(submenufile), &buf) ||
+ (! S_ISREG(buf.st_mode))) {
+ fprintf(stderr,
+ i18n->getMessage(ScreenSet, ScreenINCLUDEErrorReg,
+ "BScreen::parseMenuFile: [include] error: "
+ "'%s' is not a regular file\n"), newfile);
+ break;
+ }
+
+ if (! feof(submenufile)) {
+ if (! parseMenuFile(submenufile, menu))
+ openbox->saveMenuFilename(newfile);
+
+ fclose(submenufile);
+ }
+ } else
+ perror(newfile);
+ }
+ }
+
+ break;
+
+ case 767: // submenu
+ {
+ if (! *label) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenSUBMENUError,
+ "BScreen::parseMenuFile: [submenu] error, "
+ "no menu label defined\n"));
+ continue;
+ }
+
+ Rootmenu *submenu = new Rootmenu(this);
+
+ if (*command)
+ submenu->setLabel(command);
+ else
+ submenu->setLabel(label);
+
+ parseMenuFile(file, submenu);
+ submenu->update();
+ menu->insert(label, submenu);
+ rootmenuList->insert(submenu);
+ }
+
+ break;
+
+ case 773: // restart
+ {
+ if (! *label) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenRESTARTError,
+ "BScreen::parseMenuFile: [restart] error, "
+ "no menu label defined\n"));
+ continue;
+ }
+
+ if (*command)
+ menu->insert(label, BScreen::RestartOther, command);
+ else
+ menu->insert(label, BScreen::Restart);
+ }
+
+ break;
+
+ case 845: // reconfig
+ {
+ if (! *label) {
+ fprintf(stderr, i18n->getMessage(ScreenSet, ScreenRECONFIGError,
+ "BScreen::parseMenuFile: [reconfig] error, "
+ "no menu label defined\n"));
+ continue;
+ }
+
+ menu->insert(label, BScreen::Reconfigure);
+ }
+
+ break;
+
+ case 995: // stylesdir
+ case 1113: // stylesmenu
+ {
+ Bool newmenu = ((key == 1113) ? True : False);
+
+ if ((! *label) || ((! *command) && newmenu)) {
+ fprintf(stderr,
+ i18n->getMessage(ScreenSet, ScreenSTYLESDIRError,
+ "BScreen::parseMenuFile: [stylesdir/stylesmenu]"
+ " error, no directory defined\n"));
+ continue;
+ }
+
+ char stylesdir[MAXPATHLEN];
+
+ char *directory = ((newmenu) ? command : label);
+ int directory_length = ((newmenu) ? command_length : label_length);
+
+ // perform shell style ~ home directory expansion
+ char *homedir = 0;
+ int homedir_len = 0;
+
+ if (*directory == '~' && *(directory + 1) == '/') {
+ homedir = getenv("HOME");
+ homedir_len = strlen(homedir);
+ }
+
+ if (homedir && homedir_len != 0) {
+ strncpy(stylesdir, homedir, homedir_len);
+
+ strncpy(stylesdir + homedir_len, directory + 1,
+ directory_length - 1);
+ *(stylesdir + directory_length + homedir_len - 1) = '\0';
+ } else {
+ strncpy(stylesdir, directory, directory_length);
+ *(stylesdir + directory_length) = '\0';
+ }
+
+ struct stat statbuf;
+
+ if (! stat(stylesdir, &statbuf)) {
+ if (S_ISDIR(statbuf.st_mode)) {
+ Rootmenu *stylesmenu;
+
+ if (newmenu)
+ stylesmenu = new Rootmenu(this);
+ else
+ stylesmenu = menu;
+
+ DIR *d = opendir(stylesdir);
+ int entries = 0;
+ struct dirent *p;
+
+ // get the total number of directory entries
+ while ((p = readdir(d))) entries++;
+ rewinddir(d);
+
+ char **ls = new char* [entries];
+ int index = 0;
+ while ((p = readdir(d)))
+ ls[index++] = bstrdup(p->d_name);
+
+ closedir(d);
+
+ std::sort(ls, ls + entries, dcmp());
+
+ int n, slen = strlen(stylesdir);
+ for (n = 0; n < entries; n++) {
+ if (ls[n][strlen(ls[n])-1] != '~') {
+ int nlen = strlen(ls[n]);
+ char style[MAXPATHLEN + 1];
+
+ strncpy(style, stylesdir, slen);
+ *(style + slen) = '/';
+ strncpy(style + slen + 1, ls[n], nlen + 1);
+
+ if ((! stat(style, &statbuf)) && S_ISREG(statbuf.st_mode))
+ stylesmenu->insert(ls[n], BScreen::SetStyle, style);
+ }
+
+ delete [] ls[n];
+ }
+
+ delete [] ls;
+
+ stylesmenu->update();
+
+ if (newmenu) {
+ stylesmenu->setLabel(label);
+ menu->insert(label, stylesmenu);
+ rootmenuList->insert(stylesmenu);
+ }
+
+ openbox->saveMenuFilename(stylesdir);
+ } else {
+ fprintf(stderr, i18n->getMessage(ScreenSet,
+ ScreenSTYLESDIRErrorNotDir,
+ "BScreen::parseMenuFile:"
+ " [stylesdir/stylesmenu] error, %s is not a"
+ " directory\n"), stylesdir);
+ }
+ } else {
+ fprintf(stderr,
+ i18n->getMessage(ScreenSet, ScreenSTYLESDIRErrorNoExist,
+ "BScreen::parseMenuFile: [stylesdir/stylesmenu]"
+ " error, %s does not exist\n"), stylesdir);
+ }
+
+ break;
+ }
+
+ case 1090: // workspaces
+ {
+ if (! *label) {
+ fprintf(stderr,
+ i18n->getMessage(ScreenSet, ScreenWORKSPACESError,
+ "BScreen:parseMenuFile: [workspaces] error, "
+ "no menu label defined\n"));
+ continue;
+ }
+
+ menu->insert(label, workspacemenu);
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ((menu->getCount() == 0) ? True : False);
+}
+
+
+void BScreen::shutdown(void) {
+ openbox->grab();
+
+ XSelectInput(getBaseDisplay()->getXDisplay(), getRootWindow(), NoEventMask);
+ XSync(getBaseDisplay()->getXDisplay(), False);
+
+ LinkedListIterator<Workspace> it(workspacesList);
+ for (Workspace *w = it.current(); w; it++, w = it.current())
+ w->shutdown();
+
+ while (iconList->count()) {
+ iconList->first()->restore();
+ delete iconList->first();
+ }
+
+#ifdef SLIT
+ slit->shutdown();
+#endif // SLIT
+
+ openbox->ungrab();
+}
+
+
+void BScreen::showPosition(int x, int y) {
+ if (! geom_visible) {
+ XMoveResizeWindow(getBaseDisplay()->getXDisplay(), geom_window,
+ (getWidth() - geom_w) / 2,
+ (getHeight() - geom_h) / 2, geom_w, geom_h);
+ XMapWindow(getBaseDisplay()->getXDisplay(), geom_window);
+ XRaiseWindow(getBaseDisplay()->getXDisplay(), geom_window);
+
+ geom_visible = True;
+ }
+
+ char label[1024];
+
+ sprintf(label, i18n->getMessage(ScreenSet, ScreenPositionFormat,
+ "X: %4d x Y: %4d"), x, y);
+
+ XClearWindow(getBaseDisplay()->getXDisplay(), geom_window);
+
+ if (i18n->multibyte()) {
+ XmbDrawString(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.wstyle.fontset, resource.wstyle.l_text_focus_gc,
+ resource.bevel_width, resource.bevel_width -
+ resource.wstyle.fontset_extents->max_ink_extent.y,
+ label, strlen(label));
+ } else {
+ XDrawString(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.wstyle.l_text_focus_gc,
+ resource.bevel_width,
+ resource.wstyle.font->ascent +
+ resource.bevel_width, label, strlen(label));
+ }
+}
+
+
+void BScreen::showGeometry(unsigned int gx, unsigned int gy) {
+ if (! geom_visible) {
+ XMoveResizeWindow(getBaseDisplay()->getXDisplay(), geom_window,
+ (getWidth() - geom_w) / 2,
+ (getHeight() - geom_h) / 2, geom_w, geom_h);
+ XMapWindow(getBaseDisplay()->getXDisplay(), geom_window);
+ XRaiseWindow(getBaseDisplay()->getXDisplay(), geom_window);
+
+ geom_visible = True;
+ }
+
+ char label[1024];
+
+ sprintf(label, i18n->getMessage(ScreenSet, ScreenGeometryFormat,
+ "W: %4d x H: %4d"), gx, gy);
+
+ XClearWindow(getBaseDisplay()->getXDisplay(), geom_window);
+
+ if (i18n->multibyte()) {
+ XmbDrawString(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.wstyle.fontset, resource.wstyle.l_text_focus_gc,
+ resource.bevel_width, resource.bevel_width -
+ resource.wstyle.fontset_extents->max_ink_extent.y,
+ label, strlen(label));
+ } else {
+ XDrawString(getBaseDisplay()->getXDisplay(), geom_window,
+ resource.wstyle.l_text_focus_gc,
+ resource.bevel_width,
+ resource.wstyle.font->ascent +
+ resource.bevel_width, label, strlen(label));
+ }
+}
+
+
+void BScreen::hideGeometry(void) {
+ if (geom_visible) {
+ XUnmapWindow(getBaseDisplay()->getXDisplay(), geom_window);
+ geom_visible = False;
+ }
+}
--- /dev/null
+// Screen.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Screen_hh
+#define __Screen_hh
+
+#include <X11/Xlib.h>
+#include <X11/Xresource.h>
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else // !TIME_WITH_SYS_TIME
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else // !HAVE_SYS_TIME_H
+# include <time.h>
+# endif // HAVE_SYS_TIME_H
+#endif // TIME_WITH_SYS_TIME
+
+#include "BaseDisplay.h"
+#include "Configmenu.h"
+#include "Iconmenu.h"
+#include "LinkedList.h"
+#include "Netizen.h"
+#include "Rootmenu.h"
+#include "Timer.h"
+#include "Workspace.h"
+#include "Workspacemenu.h"
+#include "openbox.h"
+#ifdef SLIT
+# include "Slit.h"
+#endif // SLIT
+#include "Image.h"
+
+// forward declaration
+class BScreen;
+
+struct WindowStyle {
+ BColor f_focus, f_unfocus, l_text_focus, l_text_unfocus, b_pic_focus,
+ b_pic_unfocus;
+ BTexture t_focus, t_unfocus, l_focus, l_unfocus, h_focus, h_unfocus,
+ b_focus, b_unfocus, b_pressed, g_focus, g_unfocus;
+ GC l_text_focus_gc, l_text_unfocus_gc, b_pic_focus_gc, b_pic_unfocus_gc;
+
+ XFontSet fontset;
+ XFontSetExtents *fontset_extents;
+ XFontStruct *font;
+
+ int justify;
+};
+
+struct ToolbarStyle {
+ BColor l_text, w_text, c_text, b_pic;
+ BTexture toolbar, label, window, button, pressed, clock;
+ GC l_text_gc, w_text_gc, c_text_gc, b_pic_gc;
+
+ XFontSet fontset;
+ XFontSetExtents *fontset_extents;
+ XFontStruct *font;
+
+ int justify;
+};
+
+struct MenuStyle {
+ BColor t_text, f_text, h_text, d_text;
+ BTexture title, frame, hilite;
+ GC t_text_gc, f_text_gc, h_text_gc, d_text_gc, hilite_gc;
+
+ XFontSet t_fontset, f_fontset;
+ XFontSetExtents *t_fontset_extents, *f_fontset_extents;
+ XFontStruct *t_font, *f_font;
+
+ int t_justify, f_justify, bullet, bullet_pos;
+};
+
+
+class BScreen : public ScreenInfo {
+private:
+ Bool root_colormap_installed, managed, geom_visible;
+ GC opGC;
+ Pixmap geom_pixmap;
+ Window geom_window;
+
+ Openbox *openbox;
+ BImageControl *image_control;
+ Configmenu *configmenu;
+ Iconmenu *iconmenu;
+ Rootmenu *rootmenu;
+
+ LinkedList<Rootmenu> *rootmenuList;
+ LinkedList<Netizen> *netizenList;
+ LinkedList<OpenboxWindow> *iconList;
+
+#ifdef SLIT
+ Slit *slit;
+#endif // SLIT
+
+ Toolbar *toolbar;
+ Workspace *current_workspace;
+ Workspacemenu *workspacemenu;
+
+ unsigned int geom_w, geom_h;
+ unsigned long event_mask;
+
+ LinkedList<char> *workspaceNames;
+ LinkedList<Workspace> *workspacesList;
+
+ struct resource {
+ WindowStyle wstyle;
+ ToolbarStyle tstyle;
+ MenuStyle mstyle;
+
+ Bool toolbar_on_top, toolbar_auto_hide, sloppy_focus, auto_raise,
+ auto_edge_balance, image_dither, ordered_dither, opaque_move, full_max,
+ focus_new, focus_last;
+ BColor border_color;
+ XrmDatabase stylerc;
+
+ int workspaces, toolbar_placement, toolbar_width_percent, placement_policy,
+ edge_snap_threshold, row_direction, col_direction;
+
+#ifdef SLIT
+ Bool slit_on_top, slit_auto_hide;
+ int slit_placement, slit_direction;
+#endif // SLIT
+
+ unsigned int handle_width, bevel_width, frame_width, border_width;
+ unsigned int zones; // number of zones to be used when alt-resizing a window
+
+#ifdef HAVE_STRFTIME
+ char *strftime_format;
+#else // !HAVE_STRFTIME
+ Bool clock24hour;
+ int date_format;
+#endif // HAVE_STRFTIME
+
+ char *root_command;
+ } resource;
+
+
+protected:
+ Bool parseMenuFile(FILE *, Rootmenu *);
+
+ void readDatabaseTexture(char *, char *, BTexture *, unsigned long);
+ void readDatabaseColor(char *, char *, BColor *, unsigned long);
+
+ void readDatabaseFontSet(char *, char *, XFontSet *);
+ XFontSet createFontSet(char *);
+ void readDatabaseFont(char *, char *, XFontStruct **);
+
+ void InitMenu(void);
+ void LoadStyle(void);
+
+
+public:
+ BScreen(Openbox *, int);
+ ~BScreen(void);
+
+ inline const Bool &isToolbarOnTop(void) const
+ { return resource.toolbar_on_top; }
+ inline const Bool &doToolbarAutoHide(void) const
+ { return resource.toolbar_auto_hide; }
+ inline const Bool &isSloppyFocus(void) const
+ { return resource.sloppy_focus; }
+ inline const Bool &isRootColormapInstalled(void) const
+ { return root_colormap_installed; }
+ inline const Bool &doAutoRaise(void) const { return resource.auto_raise; }
+ inline const Bool &isScreenManaged(void) const { return managed; }
+ inline const Bool &doImageDither(void) const
+ { return resource.image_dither; }
+ inline const Bool &doOrderedDither(void) const
+ { return resource.ordered_dither; }
+ inline const Bool &doOpaqueMove(void) const { return resource.opaque_move; }
+ inline const Bool &doFullMax(void) const { return resource.full_max; }
+ inline const Bool &doFocusNew(void) const { return resource.focus_new; }
+ inline const Bool &doFocusLast(void) const { return resource.focus_last; }
+
+ inline const GC &getOpGC() const { return opGC; }
+
+ inline Openbox *getOpenbox(void) { return openbox; }
+ inline BColor *getBorderColor(void) { return &resource.border_color; }
+ inline BImageControl *getImageControl(void) { return image_control; }
+ inline Rootmenu *getRootmenu(void) { return rootmenu; }
+
+#ifdef SLIT
+ inline const Bool &isSlitOnTop(void) const { return resource.slit_on_top; }
+ inline const Bool &doSlitAutoHide(void) const
+ { return resource.slit_auto_hide; }
+ inline Slit *getSlit(void) { return slit; }
+ inline const int &getSlitPlacement(void) const
+ { return resource.slit_placement; }
+ inline const int &getSlitDirection(void) const
+ { return resource.slit_direction; }
+ inline void saveSlitPlacement(int p) { resource.slit_placement = p; }
+ inline void saveSlitDirection(int d) { resource.slit_direction = d; }
+ inline void saveSlitOnTop(Bool t) { resource.slit_on_top = t; }
+ inline void saveSlitAutoHide(Bool t) { resource.slit_auto_hide = t; }
+#endif // SLIT
+
+ inline int getWindowZones(void) const
+ { return resource.zones; }
+ inline void saveWindowZones(int z) { resource.zones = z; }
+
+ inline Toolbar *getToolbar(void) { return toolbar; }
+
+ inline Workspace *getWorkspace(int w) { return workspacesList->find(w); }
+ inline Workspace *getCurrentWorkspace(void) { return current_workspace; }
+
+ inline Workspacemenu *getWorkspacemenu(void) { return workspacemenu; }
+
+ inline const unsigned int &getHandleWidth(void) const
+ { return resource.handle_width; }
+ inline const unsigned int &getBevelWidth(void) const
+ { return resource.bevel_width; }
+ inline const unsigned int &getFrameWidth(void) const
+ { return resource.frame_width; }
+ inline const unsigned int &getBorderWidth(void) const
+ { return resource.border_width; }
+
+ inline const int getCurrentWorkspaceID()
+ { return current_workspace->getWorkspaceID(); }
+ inline const int getCount(void) { return workspacesList->count(); }
+ inline const int getIconCount(void) { return iconList->count(); }
+ inline const int &getNumberOfWorkspaces(void) const
+ { return resource.workspaces; }
+ inline const int &getToolbarPlacement(void) const
+ { return resource.toolbar_placement; }
+ inline const int &getToolbarWidthPercent(void) const
+ { return resource.toolbar_width_percent; }
+ inline const int &getPlacementPolicy(void) const
+ { return resource.placement_policy; }
+ inline const int &getEdgeSnapThreshold(void) const
+ { return resource.edge_snap_threshold; }
+ inline const int &getRowPlacementDirection(void) const
+ { return resource.row_direction; }
+ inline const int &getColPlacementDirection(void) const
+ { return resource.col_direction; }
+
+ inline void saveRootCommand(const char *cmd) {
+ if (resource.root_command != NULL)
+ delete [] resource.root_command;
+ if (cmd != NULL)
+ resource.root_command = bstrdup(cmd);
+ else
+ resource.root_command = NULL;
+ }
+ inline const char *getRootCommand(void) const
+ { return resource.root_command; }
+
+ inline void setRootColormapInstalled(Bool r) { root_colormap_installed = r; }
+ inline void saveSloppyFocus(Bool s) { resource.sloppy_focus = s; }
+ inline void saveAutoRaise(Bool a) { resource.auto_raise = a; }
+ inline void saveWorkspaces(int w) { resource.workspaces = w; }
+ inline void saveToolbarOnTop(Bool r) { resource.toolbar_on_top = r; }
+ inline void saveToolbarAutoHide(Bool r) { resource.toolbar_auto_hide = r; }
+ inline void saveToolbarWidthPercent(int w)
+ { resource.toolbar_width_percent = w; }
+ inline void saveToolbarPlacement(int p) { resource.toolbar_placement = p; }
+ inline void savePlacementPolicy(int p) { resource.placement_policy = p; }
+ inline void saveRowPlacementDirection(int d) { resource.row_direction = d; }
+ inline void saveColPlacementDirection(int d) { resource.col_direction = d; }
+ inline void saveEdgeSnapThreshold(int t)
+ { resource.edge_snap_threshold = t; }
+ inline void saveImageDither(Bool d) { resource.image_dither = d; }
+ inline void saveOpaqueMove(Bool o) { resource.opaque_move = o; }
+ inline void saveFullMax(Bool f) { resource.full_max = f; }
+ inline void saveFocusNew(Bool f) { resource.focus_new = f; }
+ inline void saveFocusLast(Bool f) { resource.focus_last = f; }
+ inline void iconUpdate(void) { iconmenu->update(); }
+
+#ifdef HAVE_STRFTIME
+ inline char *getStrftimeFormat(void) { return resource.strftime_format; }
+ void saveStrftimeFormat(char *);
+#else // !HAVE_STRFTIME
+ inline int getDateFormat(void) { return resource.date_format; }
+ inline void saveDateFormat(int f) { resource.date_format = f; }
+ inline Bool isClock24Hour(void) { return resource.clock24hour; }
+ inline void saveClock24Hour(Bool c) { resource.clock24hour = c; }
+#endif // HAVE_STRFTIME
+
+ inline WindowStyle *getWindowStyle(void) { return &resource.wstyle; }
+ inline MenuStyle *getMenuStyle(void) { return &resource.mstyle; }
+ inline ToolbarStyle *getToolbarStyle(void) { return &resource.tstyle; }
+
+ OpenboxWindow *getIcon(int);
+
+ int addWorkspace(void);
+ int removeLastWorkspace(void);
+
+ void removeWorkspaceNames(void);
+ void addWorkspaceName(char *);
+ void addNetizen(Netizen *);
+ void removeNetizen(Window);
+ void addIcon(OpenboxWindow *);
+ void removeIcon(OpenboxWindow *);
+ char* getNameOfWorkspace(int);
+ void changeWorkspaceID(int);
+ void raiseWindows(Window *, int);
+ void reassociateWindow(OpenboxWindow *, int, Bool);
+ void prevFocus(void);
+ void nextFocus(void);
+ void raiseFocus(void);
+ void reconfigure(void);
+ void rereadMenu(void);
+ void shutdown(void);
+ void showPosition(int, int);
+ void showGeometry(unsigned int, unsigned int);
+ void hideGeometry(void);
+
+ void updateNetizenCurrentWorkspace(void);
+ void updateNetizenWorkspaceCount(void);
+ void updateNetizenWindowFocus(void);
+ void updateNetizenWindowAdd(Window, unsigned long);
+ void updateNetizenWindowDel(Window);
+ void updateNetizenConfigNotify(XEvent *);
+ void updateNetizenWindowRaise(Window);
+ void updateNetizenWindowLower(Window);
+
+ enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement, LeftRight,
+ RightLeft, TopBottom, BottomTop };
+ enum { LeftJustify = 1, RightJustify, CenterJustify };
+ enum { RoundBullet = 1, TriangleBullet, SquareBullet, NoBullet };
+ enum { Restart = 1, RestartOther, Exit, Shutdown, Execute, Reconfigure,
+ WindowShade, WindowIconify, WindowMaximize, WindowClose, WindowRaise,
+ WindowLower, WindowStick, WindowKill, SetStyle };
+};
+
+
+#endif // __Screen_hh
--- /dev/null
+// Slit.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#ifdef SLIT
+
+#include <X11/keysym.h>
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Image.h"
+#include "Screen.h"
+#include "Slit.h"
+#include "Toolbar.h"
+
+
+Slit::Slit(BScreen *scr) {
+ screen = scr;
+ openbox = screen->getOpenbox();
+
+ on_top = screen->isSlitOnTop();
+ hidden = do_auto_hide = screen->doSlitAutoHide();
+
+ display = screen->getBaseDisplay()->getXDisplay();
+ frame.window = frame.pixmap = None;
+
+ timer = new BTimer(openbox, this);
+ timer->setTimeout(openbox->getAutoRaiseDelay());
+ timer->fireOnce(True);
+
+ clientList = new LinkedList<SlitClient>;
+
+ slitmenu = new Slitmenu(this);
+
+ XSetWindowAttributes attrib;
+ unsigned long create_mask = CWBackPixmap | CWBackPixel | CWBorderPixel |
+ CWColormap | CWOverrideRedirect | CWEventMask;
+ attrib.background_pixmap = None;
+ attrib.background_pixel = attrib.border_pixel =
+ screen->getBorderColor()->getPixel();
+ attrib.colormap = screen->getColormap();
+ attrib.override_redirect = True;
+ attrib.event_mask = SubstructureRedirectMask | ButtonPressMask |
+ EnterWindowMask | LeaveWindowMask;
+
+ frame.x = frame.y = 0;
+ frame.width = frame.height = 1;
+
+ frame.window =
+ XCreateWindow(display, screen->getRootWindow(), frame.x, frame.y,
+ frame.width, frame.height, screen->getBorderWidth(),
+ screen->getDepth(), InputOutput, screen->getVisual(),
+ create_mask, &attrib);
+ openbox->saveSlitSearch(frame.window, this);
+
+ reconfigure();
+}
+
+
+Slit::~Slit() {
+ openbox->grab();
+
+ if (timer->isTiming()) timer->stop();
+ delete timer;
+
+ delete clientList;
+ delete slitmenu;
+
+ screen->getImageControl()->removeImage(frame.pixmap);
+
+ openbox->removeSlitSearch(frame.window);
+
+ XDestroyWindow(display, frame.window);
+
+ openbox->ungrab();
+}
+
+
+void Slit::addClient(Window w) {
+ openbox->grab();
+
+ if (openbox->validateWindow(w)) {
+ SlitClient *client = new SlitClient;
+ client->client_window = w;
+
+ XWMHints *wmhints = XGetWMHints(display, w);
+
+ if (wmhints) {
+ if ((wmhints->flags & IconWindowHint) &&
+ (wmhints->icon_window != None)) {
+ XMoveWindow(display, client->client_window, screen->getWidth() + 10,
+ screen->getHeight() + 10);
+ XMapWindow(display, client->client_window);
+
+ client->icon_window = wmhints->icon_window;
+ client->window = client->icon_window;
+ } else {
+ client->icon_window = None;
+ client->window = client->client_window;
+ }
+
+ XFree(wmhints);
+ } else {
+ client->icon_window = None;
+ client->window = client->client_window;
+ }
+
+ XWindowAttributes attrib;
+ if (XGetWindowAttributes(display, client->window, &attrib)) {
+ client->width = attrib.width;
+ client->height = attrib.height;
+ } else {
+ client->width = client->height = 64;
+ }
+
+ XSetWindowBorderWidth(display, client->window, 0);
+
+ XSelectInput(display, frame.window, NoEventMask);
+ XSelectInput(display, client->window, NoEventMask);
+
+ XReparentWindow(display, client->window, frame.window, 0, 0);
+ XMapRaised(display, client->window);
+ XChangeSaveSet(display, client->window, SetModeInsert);
+
+ XSelectInput(display, frame.window, SubstructureRedirectMask |
+ ButtonPressMask | EnterWindowMask | LeaveWindowMask);
+ XSelectInput(display, client->window, StructureNotifyMask |
+ SubstructureNotifyMask | EnterWindowMask);
+ XFlush(display);
+
+ clientList->insert(client);
+
+ openbox->saveSlitSearch(client->client_window, this);
+ openbox->saveSlitSearch(client->icon_window, this);
+ reconfigure();
+ }
+
+ openbox->ungrab();
+}
+
+
+void Slit::removeClient(SlitClient *client, Bool remap) {
+ openbox->removeSlitSearch(client->client_window);
+ openbox->removeSlitSearch(client->icon_window);
+ clientList->remove(client);
+
+ screen->removeNetizen(client->window);
+
+ if (remap && openbox->validateWindow(client->window)) {
+ XSelectInput(display, frame.window, NoEventMask);
+ XSelectInput(display, client->window, NoEventMask);
+ XReparentWindow(display, client->window, screen->getRootWindow(),
+ client->x, client->y);
+ XChangeSaveSet(display, client->window, SetModeDelete);
+ XSelectInput(display, frame.window, SubstructureRedirectMask |
+ ButtonPressMask | EnterWindowMask | LeaveWindowMask);
+ XFlush(display);
+ }
+
+ delete client;
+ client = (SlitClient *) 0;
+}
+
+
+void Slit::removeClient(Window w, Bool remap) {
+ openbox->grab();
+
+ Bool reconf = False;
+
+ LinkedListIterator<SlitClient> it(clientList);
+ for (SlitClient *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->window == w) {
+ removeClient(tmp, remap);
+ reconf = True;
+
+ break;
+ }
+ }
+
+ if (reconf) reconfigure();
+
+ openbox->ungrab();
+}
+
+
+void Slit::reconfigure(void) {
+ frame.width = 0;
+ frame.height = 0;
+ LinkedListIterator<SlitClient> it(clientList);
+ SlitClient *client;
+
+ switch (screen->getSlitDirection()) {
+ case Vertical:
+ for (client = it.current(); client; it++, client = it.current()) {
+ frame.height += client->height + screen->getBevelWidth();
+
+ if (frame.width < client->width)
+ frame.width = client->width;
+ }
+
+ if (frame.width < 1)
+ frame.width = 1;
+ else
+ frame.width += (screen->getBevelWidth() * 2);
+
+ if (frame.height < 1)
+ frame.height = 1;
+ else
+ frame.height += screen->getBevelWidth();
+
+ break;
+
+ case Horizontal:
+ for (client = it.current(); client; it++, client = it.current()) {
+ frame.width += client->width + screen->getBevelWidth();
+
+ if (frame.height < client->height)
+ frame.height = client->height;
+ }
+
+ if (frame.width < 1)
+ frame.width = 1;
+ else
+ frame.width += screen->getBevelWidth();
+
+ if (frame.height < 1)
+ frame.height = 1;
+ else
+ frame.height += (screen->getBevelWidth() * 2);
+
+ break;
+ }
+
+ reposition();
+
+ XSetWindowBorderWidth(display ,frame.window, screen->getBorderWidth());
+ XSetWindowBorder(display, frame.window,
+ screen->getBorderColor()->getPixel());
+
+ if (! clientList->count())
+ XUnmapWindow(display, frame.window);
+ else
+ XMapWindow(display, frame.window);
+
+ Pixmap tmp = frame.pixmap;
+ BImageControl *image_ctrl = screen->getImageControl();
+ BTexture *texture = &(screen->getToolbarStyle()->toolbar);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.pixmap = None;
+ XSetWindowBackground(display, frame.window,
+ texture->getColor()->getPixel());
+ } else {
+ frame.pixmap = image_ctrl->renderImage(frame.width, frame.height,
+ texture);
+ XSetWindowBackgroundPixmap(display, frame.window, frame.pixmap);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+ XClearWindow(display, frame.window);
+
+ int x, y;
+ it.reset();
+
+ switch (screen->getSlitDirection()) {
+ case Vertical:
+ x = 0;
+ y = screen->getBevelWidth();
+
+ for (client = it.current(); client; it++, client = it.current()) {
+ x = (frame.width - client->width) / 2;
+
+ XMoveResizeWindow(display, client->window, x, y,
+ client->width, client->height);
+ XMapWindow(display, client->window);
+
+ // for ICCCM compliance
+ client->x = x;
+ client->y = y;
+
+ XEvent event;
+ event.type = ConfigureNotify;
+
+ event.xconfigure.display = display;
+ event.xconfigure.event = client->window;
+ event.xconfigure.window = client->window;
+ event.xconfigure.x = x;
+ event.xconfigure.y = y;
+ event.xconfigure.width = client->width;
+ event.xconfigure.height = client->height;
+ event.xconfigure.border_width = 0;
+ event.xconfigure.above = frame.window;
+ event.xconfigure.override_redirect = False;
+
+ XSendEvent(display, client->window, False, StructureNotifyMask, &event);
+
+ y += client->height + screen->getBevelWidth();
+ }
+
+ break;
+
+ case Horizontal:
+ x = screen->getBevelWidth();
+ y = 0;
+
+ for (client = it.current(); client; it++, client = it.current()) {
+ y = (frame.height - client->height) / 2;
+
+ XMoveResizeWindow(display, client->window, x, y,
+ client->width, client->height);
+ XMapWindow(display, client->window);
+
+ // for ICCCM compliance
+ client->x = x;
+ client->y = y;
+
+ XEvent event;
+ event.type = ConfigureNotify;
+
+ event.xconfigure.display = display;
+ event.xconfigure.event = client->window;
+ event.xconfigure.window = client->window;
+ event.xconfigure.x = x;
+ event.xconfigure.y = y;
+ event.xconfigure.width = client->width;
+ event.xconfigure.height = client->height;
+ event.xconfigure.border_width = 0;
+ event.xconfigure.above = frame.window;
+ event.xconfigure.override_redirect = False;
+
+ XSendEvent(display, client->window, False, StructureNotifyMask, &event);
+
+ x += client->width + screen->getBevelWidth();
+ }
+
+ break;
+ }
+
+ slitmenu->reconfigure();
+}
+
+
+void Slit::reposition(void) {
+ // place the slit in the appropriate place
+ switch (screen->getSlitPlacement()) {
+ case TopLeft:
+ frame.x = 0;
+ frame.y = 0;
+ if (screen->getSlitDirection() == Vertical) {
+ frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.width;
+ frame.y_hidden = 0;
+ } else {
+ frame.x_hidden = 0;
+ frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.height;
+ }
+ break;
+
+ case CenterLeft:
+ frame.x = 0;
+ frame.y = (screen->getHeight() - frame.height) / 2;
+ frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.width;
+ frame.y_hidden = frame.y;
+ break;
+
+ case BottomLeft:
+ frame.x = 0;
+ frame.y = screen->getHeight() - frame.height
+ - (screen->getBorderWidth() * 2);
+ if (screen->getSlitDirection() == Vertical) {
+ frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.width;
+ frame.y_hidden = frame.y;
+ } else {
+ frame.x_hidden = 0;
+ frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ }
+ break;
+
+ case TopCenter:
+ frame.x = (screen->getWidth() - frame.width) / 2;
+ frame.y = 0;
+ frame.x_hidden = frame.x;
+ frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.height;
+ break;
+
+ case BottomCenter:
+ frame.x = (screen->getWidth() - frame.width) / 2;
+ frame.y = screen->getHeight() - frame.height
+ - (screen->getBorderWidth() * 2);
+ frame.x_hidden = frame.x;
+ frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ break;
+
+ case TopRight:
+ frame.x = screen->getWidth() - frame.width
+ - (screen->getBorderWidth() * 2);
+ frame.y = 0;
+ if (screen->getSlitDirection() == Vertical) {
+ frame.x_hidden = screen->getWidth() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ frame.y_hidden = 0;
+ } else {
+ frame.x_hidden = frame.x;
+ frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.height;
+ }
+ break;
+
+ case CenterRight:
+ default:
+ frame.x = screen->getWidth() - frame.width
+ - (screen->getBorderWidth() * 2);
+ frame.y = (screen->getHeight() - frame.height) / 2;
+ frame.x_hidden = screen->getWidth() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ frame.y_hidden = frame.y;
+ break;
+
+ case BottomRight:
+ frame.x = screen->getWidth() - frame.width
+ - (screen->getBorderWidth() * 2);
+ frame.y = screen->getHeight() - frame.height
+ - (screen->getBorderWidth() * 2);
+ if (screen->getSlitDirection() == Vertical) {
+ frame.x_hidden = screen->getWidth() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ frame.y_hidden = frame.y;
+ } else {
+ frame.x_hidden = frame.x;
+ frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ }
+ break;
+ }
+
+ Toolbar *tbar = screen->getToolbar();
+ int sw = frame.width + (screen->getBorderWidth() * 2),
+ sh = frame.height + (screen->getBorderWidth() * 2),
+ tw = tbar->getWidth() + screen->getBorderWidth(),
+ th = tbar->getHeight() + screen->getBorderWidth();
+
+ if (tbar->getX() < frame.x + sw && tbar->getX() + tw > frame.x &&
+ tbar->getY() < frame.y + sh && tbar->getY() + th > frame.y) {
+ if (frame.y < th) {
+ frame.y += tbar->getExposedHeight();
+ if (screen->getSlitDirection() == Vertical)
+ frame.y_hidden += tbar->getExposedHeight();
+ else
+ frame.y_hidden = frame.y;
+ } else {
+ frame.y -= tbar->getExposedHeight();
+ if (screen->getSlitDirection() == Vertical)
+ frame.y_hidden -= tbar->getExposedHeight();
+ else
+ frame.y_hidden = frame.y;
+ }
+ }
+
+ if (hidden)
+ XMoveResizeWindow(display, frame.window, frame.x_hidden,
+ frame.y_hidden, frame.width, frame.height);
+ else
+ XMoveResizeWindow(display, frame.window, frame.x,
+ frame.y, frame.width, frame.height);
+}
+
+
+void Slit::shutdown(void) {
+ while (clientList->count())
+ removeClient(clientList->first());
+}
+
+
+void Slit::buttonPressEvent(XButtonEvent *e) {
+ if (e->window != frame.window) return;
+
+ if (e->button == Button1 && (! on_top)) {
+ Window w[1] = { frame.window };
+ screen->raiseWindows(w, 1);
+ } else if (e->button == Button2 && (! on_top)) {
+ XLowerWindow(display, frame.window);
+ } else if (e->button == Button3) {
+ if (! slitmenu->isVisible()) {
+ int x, y;
+
+ x = e->x_root - (slitmenu->getWidth() / 2);
+ y = e->y_root - (slitmenu->getHeight() / 2);
+
+ if (x < 0)
+ x = 0;
+ else if (x + slitmenu->getWidth() > screen->getWidth())
+ x = screen->getWidth() - slitmenu->getWidth();
+
+ if (y < 0)
+ y = 0;
+ else if (y + slitmenu->getHeight() > screen->getHeight())
+ y = screen->getHeight() - slitmenu->getHeight();
+
+ slitmenu->move(x, y);
+ slitmenu->show();
+ } else {
+ slitmenu->hide();
+ }
+ }
+}
+
+
+void Slit::enterNotifyEvent(XCrossingEvent *) {
+ if (! do_auto_hide)
+ return;
+
+ if (hidden) {
+ if (! timer->isTiming()) timer->start();
+ } else {
+ if (timer->isTiming()) timer->stop();
+ }
+}
+
+
+void Slit::leaveNotifyEvent(XCrossingEvent *) {
+ if (! do_auto_hide)
+ return;
+
+ if (hidden) {
+ if (timer->isTiming()) timer->stop();
+ } else if (! slitmenu->isVisible()) {
+ if (! timer->isTiming()) timer->start();
+ }
+}
+
+
+void Slit::configureRequestEvent(XConfigureRequestEvent *e) {
+ openbox->grab();
+
+ if (openbox->validateWindow(e->window)) {
+ Bool reconf = False;
+ XWindowChanges xwc;
+
+ xwc.x = e->x;
+ xwc.y = e->y;
+ xwc.width = e->width;
+ xwc.height = e->height;
+ xwc.border_width = 0;
+ xwc.sibling = e->above;
+ xwc.stack_mode = e->detail;
+
+ XConfigureWindow(display, e->window, e->value_mask, &xwc);
+
+ LinkedListIterator<SlitClient> it(clientList);
+ SlitClient *client = it.current();
+ for (; client; it++, client = it.current())
+ if (client->window == e->window)
+ if (client->width != ((unsigned) e->width) ||
+ client->height != ((unsigned) e->height)) {
+ client->width = (unsigned) e->width;
+ client->height = (unsigned) e->height;
+
+ reconf = True;
+
+ break;
+ }
+
+ if (reconf) reconfigure();
+
+ }
+
+ openbox->ungrab();
+}
+
+
+void Slit::timeout(void) {
+ hidden = ! hidden;
+ if (hidden)
+ XMoveWindow(display, frame.window, frame.x_hidden, frame.y_hidden);
+ else
+ XMoveWindow(display, frame.window, frame.x, frame.y);
+}
+
+
+Slitmenu::Slitmenu(Slit *sl) : Basemenu(sl->screen) {
+ slit = sl;
+
+ setLabel(i18n->getMessage(SlitSet, SlitSlitTitle, "Slit"));
+ setInternalMenu();
+
+ directionmenu = new Directionmenu(this);
+ placementmenu = new Placementmenu(this);
+
+ insert(i18n->getMessage(CommonSet, CommonDirectionTitle, "Direction"),
+ directionmenu);
+ insert(i18n->getMessage(CommonSet, CommonPlacementTitle, "Placement"),
+ placementmenu);
+ insert(i18n->getMessage(CommonSet, CommonAlwaysOnTop, "Always on top"), 1);
+ insert(i18n->getMessage(CommonSet, CommonAutoHide, "Auto hide"), 2);
+
+ update();
+
+ if (slit->isOnTop()) setItemSelected(2, True);
+ if (slit->doAutoHide()) setItemSelected(3, True);
+}
+
+
+Slitmenu::~Slitmenu(void) {
+ delete directionmenu;
+ delete placementmenu;
+}
+
+
+void Slitmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+ if (! item) return;
+
+ switch (item->function()) {
+ case 1: { // always on top
+ Bool change = ((slit->isOnTop()) ? False : True);
+ slit->on_top = change;
+ setItemSelected(2, change);
+
+ if (slit->isOnTop()) slit->screen->raiseWindows((Window *) 0, 0);
+ break;
+ }
+
+ case 2: { // auto hide
+ Bool change = ((slit->doAutoHide()) ? False : True);
+ slit->do_auto_hide = change;
+ setItemSelected(3, change);
+
+ break;
+ }
+ } // switch
+}
+
+
+void Slitmenu::internal_hide(void) {
+ Basemenu::internal_hide();
+ if (slit->doAutoHide())
+ slit->timeout();
+}
+
+
+void Slitmenu::reconfigure(void) {
+ directionmenu->reconfigure();
+ placementmenu->reconfigure();
+
+ Basemenu::reconfigure();
+}
+
+
+Slitmenu::Directionmenu::Directionmenu(Slitmenu *sm)
+ : Basemenu(sm->slit->screen) {
+ slitmenu = sm;
+
+ setLabel(i18n->getMessage(SlitSet, SlitSlitDirection, "Slit Direction"));
+ setInternalMenu();
+
+ insert(i18n->getMessage(CommonSet, CommonDirectionHoriz, "Horizontal"),
+ Slit::Horizontal);
+ insert(i18n->getMessage(CommonSet, CommonDirectionVert, "Vertical"),
+ Slit::Vertical);
+
+ update();
+
+ if (sm->slit->screen->getSlitDirection() == Slit::Horizontal)
+ setItemSelected(0, True);
+ else
+ setItemSelected(1, True);
+}
+
+
+void Slitmenu::Directionmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+ if (! item) return;
+
+ slitmenu->slit->screen->saveSlitDirection(item->function());
+
+ if (item->function() == Slit::Horizontal) {
+ setItemSelected(0, True);
+ setItemSelected(1, False);
+ } else {
+ setItemSelected(0, False);
+ setItemSelected(1, True);
+ }
+
+ hide();
+ slitmenu->slit->reconfigure();
+}
+
+
+Slitmenu::Placementmenu::Placementmenu(Slitmenu *sm)
+ : Basemenu(sm->slit->screen) {
+ slitmenu = sm;
+
+ setLabel(i18n->getMessage(SlitSet, SlitSlitPlacement, "Slit Placement"));
+ setMinimumSublevels(3);
+ setInternalMenu();
+
+ insert(i18n->getMessage(CommonSet, CommonPlacementTopLeft, "Top Left"),
+ Slit::TopLeft);
+ insert(i18n->getMessage(CommonSet, CommonPlacementCenterLeft, "Center Left"),
+ Slit::CenterLeft);
+ insert(i18n->getMessage(CommonSet, CommonPlacementBottomLeft, "Bottom Left"),
+ Slit::BottomLeft);
+ insert(i18n->getMessage(CommonSet, CommonPlacementTopCenter, "Top Center"),
+ Slit::TopCenter);
+ insert("");
+ insert(i18n->getMessage(CommonSet, CommonPlacementBottomCenter,
+ "Bottom Center"),
+ Slit::BottomCenter);
+ insert(i18n->getMessage(CommonSet, CommonPlacementTopRight, "Top Right"),
+ Slit::TopRight);
+ insert(i18n->getMessage(CommonSet, CommonPlacementCenterRight,
+ "Center Right"),
+ Slit::CenterRight);
+ insert(i18n->getMessage(CommonSet, CommonPlacementBottomRight,
+ "Bottom Right"),
+ Slit::BottomRight);
+
+ update();
+}
+
+
+void Slitmenu::Placementmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+ if (! (item && item->function())) return;
+
+ slitmenu->slit->screen->saveSlitPlacement(item->function());
+ hide();
+ slitmenu->slit->reconfigure();
+}
+
+
+#endif // SLIT
--- /dev/null
+// Slit.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Slit_hh
+#define __Slit_hh
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include "Basemenu.h"
+#include "LinkedList.h"
+
+// forward declaration
+class Slit;
+class Slitmenu;
+
+class Slitmenu : public Basemenu {
+private:
+ class Directionmenu : public Basemenu {
+ private:
+ Slitmenu *slitmenu;
+
+ protected:
+ virtual void itemSelected(int, int);
+
+ public:
+ Directionmenu(Slitmenu *);
+ };
+
+ class Placementmenu : public Basemenu {
+ private:
+ Slitmenu *slitmenu;
+
+ protected:
+ virtual void itemSelected(int, int);
+
+ public:
+ Placementmenu(Slitmenu *);
+ };
+
+ Directionmenu *directionmenu;
+ Placementmenu *placementmenu;
+
+ Slit *slit;
+
+ friend class Directionmenu;
+ friend class Placementmenu;
+ friend class Slit;
+
+
+protected:
+ virtual void itemSelected(int, int);
+ virtual void internal_hide(void);
+
+
+public:
+ Slitmenu(Slit *);
+ virtual ~Slitmenu(void);
+
+ inline Basemenu *getDirectionmenu(void) { return directionmenu; }
+ inline Basemenu *getPlacementmenu(void) { return placementmenu; }
+
+ void reconfigure(void);
+};
+
+
+class Slit : public TimeoutHandler {
+private:
+ class SlitClient {
+ public:
+ Window window, client_window, icon_window;
+
+ int x, y;
+ unsigned int width, height;
+ };
+
+ Bool on_top, hidden, do_auto_hide;
+ Display *display;
+
+ Openbox *openbox;
+ BScreen *screen;
+ BTimer *timer;
+
+ LinkedList<SlitClient> *clientList;
+ Slitmenu *slitmenu;
+
+ struct frame {
+ Pixmap pixmap;
+ Window window;
+
+ int x, y, x_hidden, y_hidden;
+ unsigned int width, height;
+ } frame;
+
+ friend class Slitmenu;
+ friend class Slitmenu::Directionmenu;
+ friend class Slitmenu::Placementmenu;
+
+
+public:
+ Slit(BScreen *);
+ virtual ~Slit();
+
+ inline const Bool &isOnTop(void) const { return on_top; }
+ inline const Bool &isHidden(void) const { return hidden; }
+ inline const Bool &doAutoHide(void) const { return do_auto_hide; }
+
+ inline Slitmenu *getMenu() { return slitmenu; }
+
+ inline const Window &getWindowID() const { return frame.window; }
+
+ inline const int &getX(void) const
+ { return ((hidden) ? frame.x_hidden : frame.x); }
+ inline const int &getY(void) const
+ { return ((hidden) ? frame.y_hidden : frame.y); }
+
+ inline const unsigned int &getWidth(void) const { return frame.width; }
+ inline const unsigned int &getHeight(void) const { return frame.height; }
+
+ void addClient(Window);
+ void removeClient(SlitClient *, Bool = True);
+ void removeClient(Window, Bool = True);
+ void reconfigure(void);
+ void reposition(void);
+ void shutdown(void);
+
+ void buttonPressEvent(XButtonEvent *);
+ void enterNotifyEvent(XCrossingEvent *);
+ void leaveNotifyEvent(XCrossingEvent *);
+ void configureRequestEvent(XConfigureRequestEvent *);
+
+ virtual void timeout(void);
+
+ enum { Vertical = 1, Horizontal };
+ enum { TopLeft = 1, CenterLeft, BottomLeft, TopCenter, BottomCenter,
+ TopRight, CenterRight, BottomRight };
+};
+
+
+#endif // __Slit_hh
--- /dev/null
+// Timer.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "BaseDisplay.h"
+#include "Timer.h"
+
+BTimer::BTimer(BaseDisplay *d, TimeoutHandler *h) {
+ display = d;
+ handler = h;
+
+ once = timing = False;
+}
+
+BTimer::~BTimer(void) {
+ if (timing) stop();
+}
+
+void BTimer::setTimeout(long t) {
+ _timeout.tv_sec = t / 1000;
+ _timeout.tv_usec = t;
+ _timeout.tv_usec -= (_timeout.tv_sec * 1000);
+ _timeout.tv_usec *= 1000;
+}
+
+void BTimer::setTimeout(timeval t) {
+ _timeout.tv_sec = t.tv_sec;
+ _timeout.tv_usec = t.tv_usec;
+}
+
+void BTimer::start(void) {
+ gettimeofday(&_start, 0);
+
+ if (! timing) {
+ timing = True;
+ display->addTimer(this);
+ }
+}
+
+void BTimer::stop(void) {
+ timing = False;
+
+ display->removeTimer(this);
+}
+
+void BTimer::fireTimeout(void) {
+ if (handler) handler->timeout();
+}
--- /dev/null
+// Timer.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Timer_hh
+#define __Timer_hh
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else // !TIME_WITH_SYS_TIME
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else // !HAVE_SYS_TIME_H
+# include <time.h>
+# endif // HAVE_SYS_TIME_H
+#endif // TIME_WITH_SYS_TIME
+
+// forward declaration
+class BTimer;
+class TimeoutHandler;
+class BaseDisplay;
+
+class TimeoutHandler {
+public:
+ virtual void timeout(void) = 0;
+};
+
+class BTimer {
+ friend class BaseDisplay;
+private:
+ BaseDisplay *display;
+ TimeoutHandler *handler;
+ int timing, once;
+
+ timeval _start, _timeout;
+
+protected:
+ void fireTimeout(void);
+
+public:
+ BTimer(BaseDisplay *, TimeoutHandler *);
+ virtual ~BTimer(void);
+
+ inline const int &isTiming(void) const { return timing; }
+ inline const int &doOnce(void) const { return once; }
+
+ inline const timeval &getTimeout(void) const { return _timeout; }
+ inline const timeval &getStartTime(void) const { return _start; }
+
+ inline void fireOnce(int o) { once = o; }
+
+ void setTimeout(long);
+ void setTimeout(timeval);
+ void start(void);
+ void stop(void);
+};
+
+#endif // __Timer_hh
+
--- /dev/null
+// Toolbar.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Clientmenu.h"
+#include "Iconmenu.h"
+#include "Rootmenu.h"
+#include "Screen.h"
+#include "Toolbar.h"
+#include "Window.h"
+#include "Workspace.h"
+#include "Workspacemenu.h"
+
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+
+#ifdef STDC_HEADERS
+# include <string.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else // !TIME_WITH_SYS_TIME
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else // !HAVE_SYS_TIME_H
+# include <time.h>
+# endif // HAVE_SYS_TIME_H
+#endif // TIME_WITH_SYS_TIME
+
+
+Toolbar::Toolbar(BScreen *scrn) {
+ screen = scrn;
+ openbox = screen->getOpenbox();
+
+ // get the clock updating every minute
+ clock_timer = new BTimer(openbox, this);
+ timeval now;
+ gettimeofday(&now, 0);
+ clock_timer->setTimeout((60 - (now.tv_sec % 60)) * 1000);
+ clock_timer->start();
+
+ hide_handler.toolbar = this;
+ hide_timer = new BTimer(openbox, &hide_handler);
+ hide_timer->setTimeout(openbox->getAutoRaiseDelay());
+ hide_timer->fireOnce(True);
+
+ image_ctrl = screen->getImageControl();
+
+ on_top = screen->isToolbarOnTop();
+ hidden = do_auto_hide = screen->doToolbarAutoHide();
+
+ editing = False;
+ new_workspace_name = (char *) 0;
+ new_name_pos = 0;
+ frame.grab_x = frame.grab_y = 0;
+
+ toolbarmenu = new Toolbarmenu(this);
+
+ display = openbox->getXDisplay();
+ XSetWindowAttributes attrib;
+ unsigned long create_mask = CWBackPixmap | CWBackPixel | CWBorderPixel |
+ CWColormap | CWOverrideRedirect | CWEventMask;
+ attrib.background_pixmap = None;
+ attrib.background_pixel = attrib.border_pixel =
+ screen->getBorderColor()->getPixel();
+ attrib.colormap = screen->getColormap();
+ attrib.override_redirect = True;
+ attrib.event_mask = ButtonPressMask | ButtonReleaseMask |
+ EnterWindowMask | LeaveWindowMask;
+
+ frame.window =
+ XCreateWindow(display, screen->getRootWindow(), 0, 0, 1, 1, 0,
+ screen->getDepth(), InputOutput, screen->getVisual(),
+ create_mask, &attrib);
+ openbox->saveToolbarSearch(frame.window, this);
+
+ attrib.event_mask = ButtonPressMask | ButtonReleaseMask | ExposureMask |
+ KeyPressMask | EnterWindowMask;
+
+ frame.workspace_label =
+ XCreateWindow(display, frame.window, 0, 0, 1, 1, 0, screen->getDepth(),
+ InputOutput, screen->getVisual(), create_mask, &attrib);
+ openbox->saveToolbarSearch(frame.workspace_label, this);
+
+ frame.window_label =
+ XCreateWindow(display, frame.window, 0, 0, 1, 1, 0, screen->getDepth(),
+ InputOutput, screen->getVisual(), create_mask, &attrib);
+ openbox->saveToolbarSearch(frame.window_label, this);
+
+ frame.clock =
+ XCreateWindow(display, frame.window, 0, 0, 1, 1, 0, screen->getDepth(),
+ InputOutput, screen->getVisual(), create_mask, &attrib);
+ openbox->saveToolbarSearch(frame.clock, this);
+
+ frame.psbutton =
+ XCreateWindow(display ,frame.window, 0, 0, 1, 1, 0, screen->getDepth(),
+ InputOutput, screen->getVisual(), create_mask, &attrib);
+ openbox->saveToolbarSearch(frame.psbutton, this);
+
+ frame.nsbutton =
+ XCreateWindow(display ,frame.window, 0, 0, 1, 1, 0, screen->getDepth(),
+ InputOutput, screen->getVisual(), create_mask, &attrib);
+ openbox->saveToolbarSearch(frame.nsbutton, this);
+
+ frame.pwbutton =
+ XCreateWindow(display ,frame.window, 0, 0, 1, 1, 0, screen->getDepth(),
+ InputOutput, screen->getVisual(), create_mask, &attrib);
+ openbox->saveToolbarSearch(frame.pwbutton, this);
+
+ frame.nwbutton =
+ XCreateWindow(display ,frame.window, 0, 0, 1, 1, 0, screen->getDepth(),
+ InputOutput, screen->getVisual(), create_mask, &attrib);
+ openbox->saveToolbarSearch(frame.nwbutton, this);
+
+ frame.base = frame.label = frame.wlabel = frame.clk = frame.button =
+ frame.pbutton = None;
+
+ reconfigure();
+
+ XMapSubwindows(display, frame.window);
+ XMapWindow(display, frame.window);
+}
+
+
+Toolbar::~Toolbar(void) {
+ XUnmapWindow(display, frame.window);
+
+ if (frame.base) image_ctrl->removeImage(frame.base);
+ if (frame.label) image_ctrl->removeImage(frame.label);
+ if (frame.wlabel) image_ctrl->removeImage(frame.wlabel);
+ if (frame.clk) image_ctrl->removeImage(frame.clk);
+ if (frame.button) image_ctrl->removeImage(frame.button);
+ if (frame.pbutton) image_ctrl->removeImage(frame.pbutton);
+
+ openbox->removeToolbarSearch(frame.window);
+ openbox->removeToolbarSearch(frame.workspace_label);
+ openbox->removeToolbarSearch(frame.window_label);
+ openbox->removeToolbarSearch(frame.clock);
+ openbox->removeToolbarSearch(frame.psbutton);
+ openbox->removeToolbarSearch(frame.nsbutton);
+ openbox->removeToolbarSearch(frame.pwbutton);
+ openbox->removeToolbarSearch(frame.nwbutton);
+
+ XDestroyWindow(display, frame.workspace_label);
+ XDestroyWindow(display, frame.window_label);
+ XDestroyWindow(display, frame.clock);
+
+ XDestroyWindow(display, frame.window);
+
+ delete hide_timer;
+ delete clock_timer;
+ delete toolbarmenu;
+}
+
+
+void Toolbar::reconfigure(void) {
+ frame.bevel_w = screen->getBevelWidth();
+ frame.width = screen->getWidth() * screen->getToolbarWidthPercent() / 100;
+
+ if (i18n->multibyte())
+ frame.height =
+ screen->getToolbarStyle()->fontset_extents->max_ink_extent.height;
+ else
+ frame.height = screen->getToolbarStyle()->font->ascent +
+ screen->getToolbarStyle()->font->descent;
+ frame.button_w = frame.height;
+ frame.height += 2;
+ frame.label_h = frame.height;
+ frame.height += (frame.bevel_w * 2);
+
+ switch (screen->getToolbarPlacement()) {
+ case TopLeft:
+ frame.x = 0;
+ frame.y = 0;
+ frame.x_hidden = 0;
+ frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.height;
+ break;
+
+ case BottomLeft:
+ frame.x = 0;
+ frame.y = screen->getHeight() - frame.height
+ - (screen->getBorderWidth() * 2);
+ frame.x_hidden = 0;
+ frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ break;
+
+ case TopCenter:
+ frame.x = (screen->getWidth() - frame.width) / 2;
+ frame.y = 0;
+ frame.x_hidden = frame.x;
+ frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.height;
+ break;
+
+ case BottomCenter:
+ default:
+ frame.x = (screen->getWidth() - frame.width) / 2;
+ frame.y = screen->getHeight() - frame.height
+ - (screen->getBorderWidth() * 2);
+ frame.x_hidden = frame.x;
+ frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ break;
+
+ case TopRight:
+ frame.x = screen->getWidth() - frame.width
+ - (screen->getBorderWidth() * 2);
+ frame.y = 0;
+ frame.x_hidden = frame.x;
+ frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth()
+ - frame.height;
+ break;
+
+ case BottomRight:
+ frame.x = screen->getWidth() - frame.width
+ - (screen->getBorderWidth() * 2);
+ frame.y = screen->getHeight() - frame.height
+ - (screen->getBorderWidth() * 2);
+ frame.x_hidden = frame.x;
+ frame.y_hidden = screen->getHeight() - screen->getBevelWidth()
+ - screen->getBorderWidth();
+ break;
+ }
+
+#ifdef HAVE_STRFTIME
+ time_t ttmp = time(NULL);
+ struct tm *tt = 0;
+
+ if (ttmp != -1) {
+ tt = localtime(&ttmp);
+ if (tt) {
+ char t[1024], *time_string = (char *) 0;
+ int len = strftime(t, 1024, screen->getStrftimeFormat(), tt);
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset, t, len, &ink,
+ &logical);
+ frame.clock_w = logical.width;
+
+ // ben's additional solution to pad some space beside the numbers
+ frame.clock_w +=
+ screen->getToolbarStyle()->fontset_extents->max_logical_extent.width *
+ 4;
+
+ // brad's solution, which is currently buggy, too big
+ //frame.clock_w =
+ // screen->getToolbarStyle()->fontset_extents->max_logical_extent.width
+ // * len;
+ } else {
+ frame.clock_w = XTextWidth(screen->getToolbarStyle()->font, t, len);
+ // ben's additional solution to pad some space beside the numbers
+ frame.clock_w += screen->getToolbarStyle()->font->max_bounds.width * 4;
+ // brad's solution again, too big
+ //frame.clock_w = screen->getToolbarStyle()->font->max_bounds.width * len;
+ }
+ frame.clock_w += (frame.bevel_w * 4);
+
+ delete [] time_string;
+ } else {
+ frame.clock_w = 0;
+ }
+ } else {
+ frame.clock_w = 0;
+ }
+#else // !HAVE_STRFTIME
+ frame.clock_w =
+ XTextWidth(screen->getToolbarStyle()->font,
+ i18n->getMessage(ToolbarSet, ToolbarNoStrftimeLength,
+ "00:00000"),
+ strlen(i18n->getMessage(ToolbarSet, ToolbarNoStrftimeLength,
+ "00:00000"))) + (frame.bevel_w * 4);
+#endif // HAVE_STRFTIME
+
+ int i;
+ unsigned int w = 0;
+ frame.workspace_label_w = 0;
+
+ for (i = 0; i < screen->getCount(); i++) {
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset,
+ screen->getWorkspace(i)->getName(),
+ strlen(screen->getWorkspace(i)->getName()),
+ &ink, &logical);
+ w = logical.width;
+ } else {
+ w = XTextWidth(screen->getToolbarStyle()->font,
+ screen->getWorkspace(i)->getName(),
+ strlen(screen->getWorkspace(i)->getName()));
+ }
+ w += (frame.bevel_w * 4);
+
+ if (w > frame.workspace_label_w) frame.workspace_label_w = w;
+ }
+
+ if (frame.workspace_label_w < frame.clock_w)
+ frame.workspace_label_w = frame.clock_w;
+ else if (frame.workspace_label_w > frame.clock_w)
+ frame.clock_w = frame.workspace_label_w;
+
+ frame.window_label_w =
+ (frame.width - (frame.clock_w + (frame.button_w * 4) +
+ frame.workspace_label_w + (frame.bevel_w * 8) + 6));
+
+ if (hidden) {
+ XMoveResizeWindow(display, frame.window, frame.x_hidden, frame.y_hidden,
+ frame.width, frame.height);
+ } else {
+ XMoveResizeWindow(display, frame.window, frame.x, frame.y,
+ frame.width, frame.height);
+ }
+
+ XMoveResizeWindow(display, frame.workspace_label, frame.bevel_w,
+ frame.bevel_w, frame.workspace_label_w,
+ frame.label_h);
+ XMoveResizeWindow(display, frame.psbutton, (frame.bevel_w * 2) +
+ frame.workspace_label_w + 1, frame.bevel_w + 1,
+ frame.button_w, frame.button_w);
+ XMoveResizeWindow(display ,frame.nsbutton, (frame.bevel_w * 3) +
+ frame.workspace_label_w + frame.button_w + 2,
+ frame.bevel_w + 1, frame.button_w, frame.button_w);
+ XMoveResizeWindow(display, frame.window_label, (frame.bevel_w * 4) +
+ (frame.button_w * 2) + frame.workspace_label_w + 3,
+ frame.bevel_w, frame.window_label_w, frame.label_h);
+ XMoveResizeWindow(display, frame.pwbutton, (frame.bevel_w * 5) +
+ (frame.button_w * 2) + frame.workspace_label_w +
+ frame.window_label_w + 4, frame.bevel_w + 1,
+ frame.button_w, frame.button_w);
+ XMoveResizeWindow(display, frame.nwbutton, (frame.bevel_w * 6) +
+ (frame.button_w * 3) + frame.workspace_label_w +
+ frame.window_label_w + 5, frame.bevel_w + 1,
+ frame.button_w, frame.button_w);
+ XMoveResizeWindow(display, frame.clock, frame.width - frame.clock_w -
+ frame.bevel_w, frame.bevel_w, frame.clock_w,
+ frame.label_h);
+
+ Pixmap tmp = frame.base;
+ BTexture *texture = &(screen->getToolbarStyle()->toolbar);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.base = None;
+ XSetWindowBackground(display, frame.window,
+ texture->getColor()->getPixel());
+ } else {
+ frame.base =
+ image_ctrl->renderImage(frame.width, frame.height, texture);
+ XSetWindowBackgroundPixmap(display, frame.window, frame.base);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.label;
+ texture = &(screen->getToolbarStyle()->window);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.label = None;
+ XSetWindowBackground(display, frame.window_label,
+ texture->getColor()->getPixel());
+ } else {
+ frame.label =
+ image_ctrl->renderImage(frame.window_label_w, frame.label_h, texture);
+ XSetWindowBackgroundPixmap(display, frame.window_label, frame.label);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.wlabel;
+ texture = &(screen->getToolbarStyle()->label);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.wlabel = None;
+ XSetWindowBackground(display, frame.workspace_label,
+ texture->getColor()->getPixel());
+ } else {
+ frame.wlabel =
+ image_ctrl->renderImage(frame.workspace_label_w, frame.label_h, texture);
+ XSetWindowBackgroundPixmap(display, frame.workspace_label, frame.wlabel);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.clk;
+ texture = &(screen->getToolbarStyle()->clock);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.clk = None;
+ XSetWindowBackground(display, frame.clock,
+ texture->getColor()->getPixel());
+ } else {
+ frame.clk =
+ image_ctrl->renderImage(frame.clock_w, frame.label_h, texture);
+ XSetWindowBackgroundPixmap(display, frame.clock, frame.clk);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.button;
+ texture = &(screen->getToolbarStyle()->button);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.button = None;
+
+ frame.button_pixel = texture->getColor()->getPixel();
+ XSetWindowBackground(display, frame.psbutton, frame.button_pixel);
+ XSetWindowBackground(display, frame.nsbutton, frame.button_pixel);
+ XSetWindowBackground(display, frame.pwbutton, frame.button_pixel);
+ XSetWindowBackground(display, frame.nwbutton, frame.button_pixel);
+ } else {
+ frame.button =
+ image_ctrl->renderImage(frame.button_w, frame.button_w, texture);
+
+ XSetWindowBackgroundPixmap(display, frame.psbutton, frame.button);
+ XSetWindowBackgroundPixmap(display, frame.nsbutton, frame.button);
+ XSetWindowBackgroundPixmap(display, frame.pwbutton, frame.button);
+ XSetWindowBackgroundPixmap(display, frame.nwbutton, frame.button);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.pbutton;
+ texture = &(screen->getToolbarStyle()->pressed);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.pbutton = None;
+ frame.pbutton_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.pbutton =
+ image_ctrl->renderImage(frame.button_w, frame.button_w, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ XSetWindowBorder(display, frame.window,
+ screen->getBorderColor()->getPixel());
+ XSetWindowBorderWidth(display, frame.window, screen->getBorderWidth());
+
+ XClearWindow(display, frame.window);
+ XClearWindow(display, frame.workspace_label);
+ XClearWindow(display, frame.window_label);
+ XClearWindow(display, frame.clock);
+ XClearWindow(display, frame.psbutton);
+ XClearWindow(display, frame.nsbutton);
+ XClearWindow(display, frame.pwbutton);
+ XClearWindow(display, frame.nwbutton);
+
+ redrawWindowLabel();
+ redrawWorkspaceLabel();
+ redrawPrevWorkspaceButton();
+ redrawNextWorkspaceButton();
+ redrawPrevWindowButton();
+ redrawNextWindowButton();
+ checkClock(True);
+
+ toolbarmenu->reconfigure();
+}
+
+
+#ifdef HAVE_STRFTIME
+void Toolbar::checkClock(Bool redraw) {
+#else // !HAVE_STRFTIME
+void Toolbar::checkClock(Bool redraw, Bool date) {
+#endif // HAVE_STRFTIME
+ time_t tmp = 0;
+ struct tm *tt = 0;
+
+ if ((tmp = time(NULL)) != -1) {
+ if (! (tt = localtime(&tmp))) return;
+ if (tt->tm_min != frame.minute || tt->tm_hour != frame.hour) {
+ frame.hour = tt->tm_hour;
+ frame.minute = tt->tm_min;
+ XClearWindow(display, frame.clock);
+ redraw = True;
+ }
+ }
+
+ if (redraw) {
+#ifdef HAVE_STRFTIME
+ char t[1024];
+ if (! strftime(t, 1024, screen->getStrftimeFormat(), tt))
+ return;
+#else // !HAVE_STRFTIME
+ char t[9];
+ if (date) {
+ // format the date... with special consideration for y2k ;)
+ if (screen->getDateFormat() == Openbox::B_EuropeanDate)
+ sprintf(t, 18n->getMessage(ToolbarSet, ToolbarNoStrftimeDateFormatEu,
+ "%02d.%02d.%02d"),
+ tt->tm_mday, tt->tm_mon + 1,
+ (tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year);
+ else
+ sprintf(t, i18n->getMessage(ToolbarSet, ToolbarNoStrftimeDateFormat,
+ "%02d/%02d/%02d"),
+ tt->tm_mon + 1, tt->tm_mday,
+ (tt->tm_year >= 100) ? tt->tm_year - 100 : tt->tm_year);
+ } else {
+ if (screen->isClock24Hour())
+ sprintf(t, i18n->getMessage(ToolbarSet, ToolbarNoStrftimeTimeFormat24,
+ " %02d:%02d "),
+ frame.hour, frame.minute);
+ else
+ sprintf(t, i18n->getMessage(ToolbarSet, ToolbarNoStrftimeTimeFormat12,
+ "%02d:%02d %sm"),
+ ((frame.hour > 12) ? frame.hour - 12 :
+ ((frame.hour == 0) ? 12 : frame.hour)), frame.minute,
+ ((frame.hour >= 12) ?
+ i18n->getMessage(ToolbarSet,
+ ToolbarNoStrftimeTimeFormatP, "p") :
+ i18n->getMessage(ToolbarSet,
+ ToolbarNoStrftimeTimeFormatA, "a")));
+ }
+#endif // HAVE_STRFTIME
+
+ int dx = (frame.bevel_w * 2), dlen = strlen(t);
+ unsigned int l;
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset,
+ t, dlen, &ink, &logical);
+ l = logical.width;
+ } else {
+ l = XTextWidth(screen->getToolbarStyle()->font, t, dlen);
+ }
+
+ l += (frame.bevel_w * 4);
+
+ if (l > frame.clock_w) {
+ for (; dlen >= 0; dlen--) {
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset,
+ t, dlen, &ink, &logical);
+ l = logical.width;
+ } else {
+ l = XTextWidth(screen->getToolbarStyle()->font, t, dlen);
+ }
+ l+= (frame.bevel_w * 4);
+
+ if (l < frame.clock_w)
+ break;
+ }
+ }
+ switch (screen->getToolbarStyle()->justify) {
+ case BScreen::RightJustify:
+ dx += frame.clock_w - l;
+ break;
+
+ case BScreen::CenterJustify:
+ dx += (frame.clock_w - l) / 2;
+ break;
+ }
+
+ ToolbarStyle *style = screen->getToolbarStyle();
+ if (i18n->multibyte())
+ XmbDrawString(display, frame.clock, style->fontset, style->c_text_gc,
+ dx, (1 - style->fontset_extents->max_ink_extent.y),
+ t, dlen);
+ else
+ XDrawString(display, frame.clock, style->c_text_gc, dx,
+ (style->font->ascent + 1), t, dlen);
+ }
+}
+
+
+void Toolbar::redrawWindowLabel(Bool redraw) {
+ if (screen->getOpenbox()->getFocusedWindow()) {
+ if (redraw)
+ XClearWindow(display, frame.window_label);
+
+ OpenboxWindow *foc = screen->getOpenbox()->getFocusedWindow();
+ if (foc->getScreen() != screen) return;
+
+ int dx = (frame.bevel_w * 2), dlen = strlen(*foc->getTitle());
+ unsigned int l;
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset, *foc->getTitle(),
+ dlen, &ink, &logical);
+ l = logical.width;
+ } else {
+ l = XTextWidth(screen->getToolbarStyle()->font, *foc->getTitle(), dlen);
+ }
+ l += (frame.bevel_w * 4);
+
+ if (l > frame.window_label_w) {
+ for (; dlen >= 0; dlen--) {
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset,
+ *foc->getTitle(), dlen, &ink, &logical);
+ l = logical.width;
+ } else {
+ l = XTextWidth(screen->getToolbarStyle()->font,
+ *foc->getTitle(), dlen);
+ }
+ l += (frame.bevel_w * 4);
+
+ if (l < frame.window_label_w)
+ break;
+ }
+ }
+ switch (screen->getToolbarStyle()->justify) {
+ case BScreen::RightJustify:
+ dx += frame.window_label_w - l;
+ break;
+
+ case BScreen::CenterJustify:
+ dx += (frame.window_label_w - l) / 2;
+ break;
+ }
+
+ ToolbarStyle *style = screen->getToolbarStyle();
+ if (i18n->multibyte())
+ XmbDrawString(display, frame.window_label, style->fontset,
+ style->w_text_gc, dx,
+ (1 - style->fontset_extents->max_ink_extent.y),
+ *foc->getTitle(), dlen);
+ else
+ XDrawString(display, frame.window_label, style->w_text_gc, dx,
+ (style->font->ascent + 1), *foc->getTitle(), dlen);
+ } else {
+ XClearWindow(display, frame.window_label);
+ }
+}
+
+
+void Toolbar::redrawWorkspaceLabel(Bool redraw) {
+ if (screen->getCurrentWorkspace()->getName()) {
+ if (redraw)
+ XClearWindow(display, frame.workspace_label);
+
+ int dx = (frame.bevel_w * 2), dlen =
+ strlen(screen->getCurrentWorkspace()->getName());
+ unsigned int l;
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset,
+ screen->getCurrentWorkspace()->getName(), dlen,
+ &ink, &logical);
+ l = logical.width;
+ } else {
+ l = XTextWidth(screen->getToolbarStyle()->font,
+ screen->getCurrentWorkspace()->getName(), dlen);
+ }
+ l += (frame.bevel_w * 4);
+
+ if (l > frame.workspace_label_w) {
+ for (; dlen >= 0; dlen--) {
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset,
+ screen->getCurrentWorkspace()->getName(), dlen,
+ &ink, &logical);
+ l = logical.width;
+ } else {
+ l = XTextWidth(screen->getWindowStyle()->font,
+ screen->getCurrentWorkspace()->getName(), dlen);
+ }
+ l += (frame.bevel_w * 4);
+
+ if (l < frame.workspace_label_w)
+ break;
+ }
+ }
+ switch (screen->getToolbarStyle()->justify) {
+ case BScreen::RightJustify:
+ dx += frame.workspace_label_w - l;
+ break;
+
+ case BScreen::CenterJustify:
+ dx += (frame.workspace_label_w - l) / 2;
+ break;
+ }
+
+ ToolbarStyle *style = screen->getToolbarStyle();
+ if (i18n->multibyte())
+ XmbDrawString(display, frame.workspace_label, style->fontset,
+ style->l_text_gc, dx,
+ (1 - style->fontset_extents->max_ink_extent.y),
+ (char *) screen->getCurrentWorkspace()->getName(), dlen);
+ else
+ XDrawString(display, frame.workspace_label, style->l_text_gc, dx,
+ (style->font->ascent + 1),
+ (char *) screen->getCurrentWorkspace()->getName(), dlen);
+ }
+}
+
+
+void Toolbar::redrawPrevWorkspaceButton(Bool pressed, Bool redraw) {
+ if (redraw) {
+ if (pressed) {
+ if (frame.pbutton)
+ XSetWindowBackgroundPixmap(display, frame.psbutton, frame.pbutton);
+ else
+ XSetWindowBackground(display, frame.psbutton, frame.pbutton_pixel);
+ } else {
+ if (frame.button)
+ XSetWindowBackgroundPixmap(display, frame.psbutton, frame.button);
+ else
+ XSetWindowBackground(display, frame.psbutton, frame.button_pixel);
+ }
+ XClearWindow(display, frame.psbutton);
+ }
+
+ int hh = frame.button_w / 2, hw = frame.button_w / 2;
+
+ XPoint pts[3];
+ pts[0].x = hw - 2; pts[0].y = hh;
+ pts[1].x = 4; pts[1].y = 2;
+ pts[2].x = 0; pts[2].y = -4;
+
+ XFillPolygon(display, frame.psbutton, screen->getToolbarStyle()->b_pic_gc,
+ pts, 3, Convex, CoordModePrevious);
+}
+
+
+void Toolbar::redrawNextWorkspaceButton(Bool pressed, Bool redraw) {
+ if (redraw) {
+ if (pressed) {
+ if (frame.pbutton)
+ XSetWindowBackgroundPixmap(display, frame.nsbutton, frame.pbutton);
+ else
+ XSetWindowBackground(display, frame.nsbutton, frame.pbutton_pixel);
+ } else {
+ if (frame.button)
+ XSetWindowBackgroundPixmap(display, frame.nsbutton, frame.button);
+ else
+ XSetWindowBackground(display, frame.nsbutton, frame.button_pixel);
+ }
+ XClearWindow(display, frame.nsbutton);
+ }
+
+ int hh = frame.button_w / 2, hw = frame.button_w / 2;
+
+ XPoint pts[3];
+ pts[0].x = hw - 2; pts[0].y = hh - 2;
+ pts[1].x = 4; pts[1].y = 2;
+ pts[2].x = -4; pts[2].y = 2;
+
+ XFillPolygon(display, frame.nsbutton, screen->getToolbarStyle()->b_pic_gc,
+ pts, 3, Convex, CoordModePrevious);
+}
+
+
+void Toolbar::redrawPrevWindowButton(Bool pressed, Bool redraw) {
+ if (redraw) {
+ if (pressed) {
+ if (frame.pbutton)
+ XSetWindowBackgroundPixmap(display, frame.pwbutton, frame.pbutton);
+ else
+ XSetWindowBackground(display, frame.pwbutton, frame.pbutton_pixel);
+ } else {
+ if (frame.button)
+ XSetWindowBackgroundPixmap(display, frame.pwbutton, frame.button);
+ else
+ XSetWindowBackground(display, frame.pwbutton, frame.button_pixel);
+ }
+ XClearWindow(display, frame.pwbutton);
+ }
+
+ int hh = frame.button_w / 2, hw = frame.button_w / 2;
+
+ XPoint pts[3];
+ pts[0].x = hw - 2; pts[0].y = hh;
+ pts[1].x = 4; pts[1].y = 2;
+ pts[2].x = 0; pts[2].y = -4;
+
+ XFillPolygon(display, frame.pwbutton, screen->getToolbarStyle()->b_pic_gc,
+ pts, 3, Convex, CoordModePrevious);
+}
+
+
+void Toolbar::redrawNextWindowButton(Bool pressed, Bool redraw) {
+ if (redraw) {
+ if (pressed) {
+ if (frame.pbutton)
+ XSetWindowBackgroundPixmap(display, frame.nwbutton, frame.pbutton);
+ else
+ XSetWindowBackground(display, frame.nwbutton, frame.pbutton_pixel);
+ } else {
+ if (frame.button)
+ XSetWindowBackgroundPixmap(display, frame.nwbutton, frame.button);
+ else
+ XSetWindowBackground(display, frame.nwbutton, frame.button_pixel);
+ }
+ XClearWindow(display, frame.nwbutton);
+ }
+
+ int hh = frame.button_w / 2, hw = frame.button_w / 2;
+
+ XPoint pts[3];
+ pts[0].x = hw - 2; pts[0].y = hh - 2;
+ pts[1].x = 4; pts[1].y = 2;
+ pts[2].x = -4; pts[2].y = 2;
+
+ XFillPolygon(display, frame.nwbutton, screen->getToolbarStyle()->b_pic_gc,
+ pts, 3, Convex, CoordModePrevious);
+}
+
+
+void Toolbar::edit(void) {
+ Window window;
+ int foo;
+
+ editing = True;
+ if (XGetInputFocus(display, &window, &foo) &&
+ window == frame.workspace_label)
+ return;
+
+ XSetInputFocus(display, frame.workspace_label,
+ ((screen->isSloppyFocus()) ? RevertToPointerRoot :
+ RevertToParent),
+ CurrentTime);
+ XClearWindow(display, frame.workspace_label);
+
+ openbox->setNoFocus(True);
+ if (openbox->getFocusedWindow())
+ openbox->getFocusedWindow()->setFocusFlag(False);
+
+ XDrawRectangle(display, frame.workspace_label,
+ screen->getWindowStyle()->l_text_focus_gc,
+ frame.workspace_label_w / 2, 0, 1,
+ frame.label_h - 1);
+
+ // change the background of the window to that of an active window label
+ Pixmap tmp = frame.wlabel;
+ BTexture *texture = &(screen->getWindowStyle()->l_focus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.wlabel = None;
+ XSetWindowBackground(display, frame.workspace_label,
+ texture->getColor()->getPixel());
+ } else {
+ frame.wlabel =
+ image_ctrl->renderImage(frame.workspace_label_w, frame.label_h, texture);
+ XSetWindowBackgroundPixmap(display, frame.workspace_label, frame.wlabel);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+}
+
+
+void Toolbar::buttonPressEvent(XButtonEvent *be) {
+ if (be->button == 1) {
+ if (be->window == frame.psbutton)
+ redrawPrevWorkspaceButton(True, True);
+ else if (be->window == frame.nsbutton)
+ redrawNextWorkspaceButton(True, True);
+ else if (be->window == frame.pwbutton)
+ redrawPrevWindowButton(True, True);
+ else if (be->window == frame.nwbutton)
+ redrawNextWindowButton(True, True);
+#ifndef HAVE_STRFTIME
+ else if (be->window == frame.clock) {
+ XClearWindow(display, frame.clock);
+ checkClock(True, True);
+ }
+#endif // HAVE_STRFTIME
+ else if (! on_top) {
+ Window w[1] = { frame.window };
+ screen->raiseWindows(w, 1);
+ }
+ } else if (be->button == 2 && (! on_top)) {
+ XLowerWindow(display, frame.window);
+ } else if (be->button == 3) {
+ if (! toolbarmenu->isVisible()) {
+ int x, y;
+
+ x = be->x_root - (toolbarmenu->getWidth() / 2);
+ y = be->y_root - (toolbarmenu->getHeight() / 2);
+
+ if (x < 0)
+ x = 0;
+ else if (x + toolbarmenu->getWidth() > screen->getWidth())
+ x = screen->getWidth() - toolbarmenu->getWidth();
+
+ if (y < 0)
+ y = 0;
+ else if (y + toolbarmenu->getHeight() > screen->getHeight())
+ y = screen->getHeight() - toolbarmenu->getHeight();
+
+ toolbarmenu->move(x, y);
+ toolbarmenu->show();
+ } else
+ toolbarmenu->hide();
+ }
+}
+
+
+
+void Toolbar::buttonReleaseEvent(XButtonEvent *re) {
+ if (re->button == 1) {
+ if (re->window == frame.psbutton) {
+ redrawPrevWorkspaceButton(False, True);
+
+ if (re->x >= 0 && re->x < (signed) frame.button_w &&
+ re->y >= 0 && re->y < (signed) frame.button_w)
+ if (screen->getCurrentWorkspace()->getWorkspaceID() > 0)
+ screen->changeWorkspaceID(screen->getCurrentWorkspace()->
+ getWorkspaceID() - 1);
+ else
+ screen->changeWorkspaceID(screen->getCount() - 1);
+ } else if (re->window == frame.nsbutton) {
+ redrawNextWorkspaceButton(False, True);
+
+ if (re->x >= 0 && re->x < (signed) frame.button_w &&
+ re->y >= 0 && re->y < (signed) frame.button_w)
+ if (screen->getCurrentWorkspace()->getWorkspaceID() <
+ screen->getCount() - 1)
+ screen->changeWorkspaceID(screen->getCurrentWorkspace()->
+ getWorkspaceID() + 1);
+ else
+ screen->changeWorkspaceID(0);
+ } else if (re->window == frame.pwbutton) {
+ redrawPrevWindowButton(False, True);
+
+ if (re->x >= 0 && re->x < (signed) frame.button_w &&
+ re->y >= 0 && re->y < (signed) frame.button_w)
+ screen->prevFocus();
+ } else if (re->window == frame.nwbutton) {
+ redrawNextWindowButton(False, True);
+
+ if (re->x >= 0 && re->x < (signed) frame.button_w &&
+ re->y >= 0 && re->y < (signed) frame.button_w)
+ screen->nextFocus();
+ } else if (re->window == frame.window_label)
+ screen->raiseFocus();
+#ifndef HAVE_STRFTIME
+ else if (re->window == frame.clock) {
+ XClearWindow(display, frame.clock);
+ checkClock(True);
+ }
+#endif // HAVE_STRFTIME
+ }
+}
+
+
+void Toolbar::enterNotifyEvent(XCrossingEvent *) {
+ if (! do_auto_hide)
+ return;
+
+ if (hidden) {
+ if (! hide_timer->isTiming()) hide_timer->start();
+ } else {
+ if (hide_timer->isTiming()) hide_timer->stop();
+ }
+}
+
+void Toolbar::leaveNotifyEvent(XCrossingEvent *) {
+ if (! do_auto_hide)
+ return;
+
+ if (hidden) {
+ if (hide_timer->isTiming()) hide_timer->stop();
+ } else if (! toolbarmenu->isVisible()) {
+ if (! hide_timer->isTiming()) hide_timer->start();
+ }
+}
+
+
+void Toolbar::exposeEvent(XExposeEvent *ee) {
+ if (ee->window == frame.clock) checkClock(True);
+ else if (ee->window == frame.workspace_label && (! editing))
+ redrawWorkspaceLabel();
+ else if (ee->window == frame.window_label) redrawWindowLabel();
+ else if (ee->window == frame.psbutton) redrawPrevWorkspaceButton();
+ else if (ee->window == frame.nsbutton) redrawNextWorkspaceButton();
+ else if (ee->window == frame.pwbutton) redrawPrevWindowButton();
+ else if (ee->window == frame.nwbutton) redrawNextWindowButton();
+}
+
+
+void Toolbar::keyPressEvent(XKeyEvent *ke) {
+ if (ke->window == frame.workspace_label && editing) {
+ openbox->grab();
+
+ if (! new_workspace_name) {
+ new_workspace_name = new char[128];
+ new_name_pos = 0;
+
+ if (! new_workspace_name) return;
+ }
+
+ KeySym ks;
+ char keychar[1];
+ XLookupString(ke, keychar, 1, &ks, 0);
+
+ // either we are told to end with a return or we hit the end of the buffer
+ if (ks == XK_Return || new_name_pos == 127) {
+ *(new_workspace_name + new_name_pos) = 0;
+
+ editing = False;
+
+ openbox->setNoFocus(False);
+ if (openbox->getFocusedWindow()) {
+ openbox->getFocusedWindow()->setInputFocus();
+ openbox->getFocusedWindow()->setFocusFlag(True);
+ } else {
+ XSetInputFocus(display, PointerRoot, None, CurrentTime);
+ }
+ // check to make sure that new_name[0] != 0... otherwise we have a null
+ // workspace name which causes serious problems, especially for the
+ // Openbox::LoadRC() method.
+ if (*new_workspace_name) {
+ screen->getCurrentWorkspace()->setName(new_workspace_name);
+ screen->getCurrentWorkspace()->getMenu()->hide();
+ screen->getWorkspacemenu()->
+ remove(screen->getCurrentWorkspace()->getWorkspaceID() + 2);
+ screen->getWorkspacemenu()->
+ insert(screen->getCurrentWorkspace()->getName(),
+ screen->getCurrentWorkspace()->getMenu(),
+ screen->getCurrentWorkspace()->getWorkspaceID() + 2);
+ screen->getWorkspacemenu()->update();
+ }
+
+ delete [] new_workspace_name;
+ new_workspace_name = (char *) 0;
+ new_name_pos = 0;
+
+ // reset the background to that of the workspace label (its normal
+ // setting)
+ Pixmap tmp = frame.wlabel;
+ BTexture *texture = &(screen->getToolbarStyle()->label);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.wlabel = None;
+ XSetWindowBackground(display, frame.workspace_label,
+ texture->getColor()->getPixel());
+ } else {
+ frame.wlabel =
+ image_ctrl->renderImage(frame.workspace_label_w, frame.label_h, texture);
+ XSetWindowBackgroundPixmap(display, frame.workspace_label, frame.wlabel);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ reconfigure();
+ } else if (! (ks == XK_Shift_L || ks == XK_Shift_R ||
+ ks == XK_Control_L || ks == XK_Control_R ||
+ ks == XK_Caps_Lock || ks == XK_Shift_Lock ||
+ ks == XK_Meta_L || ks == XK_Meta_R ||
+ ks == XK_Alt_L || ks == XK_Alt_R ||
+ ks == XK_Super_L || ks == XK_Super_R ||
+ ks == XK_Hyper_L || ks == XK_Hyper_R)) {
+ if (ks == XK_BackSpace) {
+ if (new_name_pos > 0) {
+ --new_name_pos;
+ *(new_workspace_name + new_name_pos) = '\0';
+ } else {
+ *new_workspace_name = '\0';
+ }
+ } else {
+ *(new_workspace_name + new_name_pos) = *keychar;
+ ++new_name_pos;
+ *(new_workspace_name + new_name_pos) = '\0';
+ }
+
+ XClearWindow(display, frame.workspace_label);
+ int l = strlen(new_workspace_name), tw, x;
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset,
+ new_workspace_name, l, &ink, &logical);
+ tw = logical.width;
+ } else {
+ tw = XTextWidth(screen->getToolbarStyle()->font,
+ new_workspace_name, l);
+ }
+ x = (frame.workspace_label_w - tw) / 2;
+
+ if (x < (signed) frame.bevel_w) x = frame.bevel_w;
+
+ WindowStyle *style = screen->getWindowStyle();
+ if (i18n->multibyte())
+ XmbDrawString(display, frame.workspace_label, style->fontset,
+ style->l_text_focus_gc, x,
+ (1 - style->fontset_extents->max_ink_extent.y),
+ new_workspace_name, l);
+ else
+ XDrawString(display, frame.workspace_label, style->l_text_focus_gc, x,
+ (style->font->ascent + 1),
+ new_workspace_name, l);
+
+ XDrawRectangle(display, frame.workspace_label,
+ screen->getWindowStyle()->l_text_focus_gc, x + tw, 0, 1,
+ frame.label_h - 1);
+ }
+
+ openbox->ungrab();
+ }
+}
+
+
+void Toolbar::timeout(void) {
+ checkClock(True);
+
+ timeval now;
+ gettimeofday(&now, 0);
+ clock_timer->setTimeout((60 - (now.tv_sec % 60)) * 1000);
+}
+
+
+void Toolbar::HideHandler::timeout(void) {
+ toolbar->hidden = ! toolbar->hidden;
+ if (toolbar->hidden)
+ XMoveWindow(toolbar->display, toolbar->frame.window,
+ toolbar->frame.x_hidden, toolbar->frame.y_hidden);
+ else
+ XMoveWindow(toolbar->display, toolbar->frame.window,
+ toolbar->frame.x, toolbar->frame.y);
+}
+
+
+Toolbarmenu::Toolbarmenu(Toolbar *tb) : Basemenu(tb->screen) {
+ toolbar = tb;
+
+ setLabel(i18n->getMessage(ToolbarSet, ToolbarToolbarTitle, "Toolbar"));
+ setInternalMenu();
+
+ placementmenu = new Placementmenu(this);
+
+ insert(i18n->getMessage(CommonSet, CommonPlacementTitle, "Placement"),
+ placementmenu);
+ insert(i18n->getMessage(CommonSet, CommonAlwaysOnTop, "Always on top"), 1);
+ insert(i18n->getMessage(CommonSet, CommonAutoHide, "Auto hide"), 2);
+ insert(i18n->getMessage(ToolbarSet, ToolbarEditWkspcName,
+ "Edit current workspace name"), 3);
+
+ update();
+
+ if (toolbar->isOnTop()) setItemSelected(1, True);
+ if (toolbar->doAutoHide()) setItemSelected(2, True);
+}
+
+
+Toolbarmenu::~Toolbarmenu(void) {
+ delete placementmenu;
+}
+
+
+void Toolbarmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+ if (! item) return;
+
+ switch (item->function()) {
+ case 1: { // always on top
+ Bool change = ((toolbar->isOnTop()) ? False : True);
+ toolbar->on_top = change;
+ setItemSelected(1, change);
+
+ if (toolbar->isOnTop()) toolbar->screen->raiseWindows((Window *) 0, 0);
+ break;
+ }
+
+ case 2: { // auto hide
+ Bool change = ((toolbar->doAutoHide()) ? False : True);
+ toolbar->do_auto_hide = change;
+ setItemSelected(2, change);
+
+#ifdef SLIT
+ toolbar->screen->getSlit()->reposition();
+#endif // SLIT
+ break;
+ }
+
+ case 3: { // edit current workspace name
+ toolbar->edit();
+ hide();
+
+ break;
+ }
+ } // switch
+}
+
+
+void Toolbarmenu::internal_hide(void) {
+ Basemenu::internal_hide();
+ if (toolbar->doAutoHide() && ! toolbar->isEditing())
+ toolbar->hide_handler.timeout();
+}
+
+
+void Toolbarmenu::reconfigure(void) {
+ placementmenu->reconfigure();
+
+ Basemenu::reconfigure();
+}
+
+
+Toolbarmenu::Placementmenu::Placementmenu(Toolbarmenu *tm)
+ : Basemenu(tm->toolbar->screen) {
+ toolbarmenu = tm;
+
+ setLabel(i18n->getMessage(ToolbarSet, ToolbarToolbarPlacement,
+ "Toolbar Placement"));
+ setInternalMenu();
+ setMinimumSublevels(3);
+
+ insert(i18n->getMessage(CommonSet, CommonPlacementTopLeft,
+ "Top Left"), Toolbar::TopLeft);
+ insert(i18n->getMessage(CommonSet, CommonPlacementBottomLeft,
+ "Bottom Left"), Toolbar::BottomLeft);
+ insert(i18n->getMessage(CommonSet, CommonPlacementTopCenter,
+ "Top Center"), Toolbar::TopCenter);
+ insert(i18n->getMessage(CommonSet, CommonPlacementBottomCenter,
+ "Bottom Center"), Toolbar::BottomCenter);
+ insert(i18n->getMessage(CommonSet, CommonPlacementTopRight,
+ "Top Right"), Toolbar::TopRight);
+ insert(i18n->getMessage(CommonSet, CommonPlacementBottomRight,
+ "Bottom Right"), Toolbar::BottomRight);
+ update();
+}
+
+
+void Toolbarmenu::Placementmenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ BasemenuItem *item = find(index);
+ if (! item) return;
+
+ toolbarmenu->toolbar->screen->saveToolbarPlacement(item->function());
+ hide();
+ toolbarmenu->toolbar->reconfigure();
+
+#ifdef SLIT
+ // reposition the slit as well to make sure it doesn't intersect the
+ // toolbar
+ toolbarmenu->toolbar->screen->getSlit()->reposition();
+#endif // SLIT
+}
--- /dev/null
+// Toolbar.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Toolbar_hh
+#define __Toolbar_hh
+
+#include <X11/Xlib.h>
+
+#include "Basemenu.h"
+#include "Timer.h"
+
+// forward declaration
+class Toolbar;
+
+class Toolbarmenu : public Basemenu {
+private:
+ class Placementmenu : public Basemenu {
+ private:
+ Toolbarmenu *toolbarmenu;
+
+ protected:
+ virtual void itemSelected(int, int);
+
+ public:
+ Placementmenu(Toolbarmenu *);
+ };
+
+ Toolbar *toolbar;
+ Placementmenu *placementmenu;
+
+ friend class Placementmenu;
+ friend class Toolbar;
+
+
+protected:
+ virtual void itemSelected(int, int);
+ virtual void internal_hide(void);
+
+public:
+ Toolbarmenu(Toolbar *);
+ ~Toolbarmenu(void);
+
+ inline Basemenu *getPlacementmenu(void) { return placementmenu; }
+
+ void reconfigure(void);
+};
+
+
+class Toolbar : public TimeoutHandler {
+private:
+ Bool on_top, editing, hidden, do_auto_hide;
+ Display *display;
+
+ struct frame {
+ unsigned long button_pixel, pbutton_pixel;
+ Pixmap base, label, wlabel, clk, button, pbutton;
+ Window window, workspace_label, window_label, clock, psbutton, nsbutton,
+ pwbutton, nwbutton;
+
+ int x, y, x_hidden, y_hidden, hour, minute, grab_x, grab_y;
+ unsigned int width, height, window_label_w, workspace_label_w, clock_w,
+ button_w, bevel_w, label_h;
+ } frame;
+
+ class HideHandler : public TimeoutHandler {
+ public:
+ Toolbar *toolbar;
+
+ virtual void timeout(void);
+ } hide_handler;
+
+ Openbox *openbox;
+ BImageControl *image_ctrl;
+ BScreen *screen;
+ BTimer *clock_timer, *hide_timer;
+ Toolbarmenu *toolbarmenu;
+
+ char *new_workspace_name;
+ size_t new_name_pos;
+
+ friend class HideHandler;
+ friend class Toolbarmenu;
+ friend class Toolbarmenu::Placementmenu;
+
+
+public:
+ Toolbar(BScreen *);
+ virtual ~Toolbar(void);
+
+ inline Toolbarmenu *getMenu(void) { return toolbarmenu; }
+
+ inline const Bool &isEditing(void) const { return editing; }
+ inline const Bool &isOnTop(void) const { return on_top; }
+ inline const Bool &isHidden(void) const { return hidden; }
+ inline const Bool &doAutoHide(void) const { return do_auto_hide; }
+
+ inline const Window &getWindowID(void) const { return frame.window; }
+
+ inline const unsigned int &getWidth(void) const { return frame.width; }
+ inline const unsigned int &getHeight(void) const { return frame.height; }
+ inline const unsigned int &getExposedHeight(void) const
+ { return ((do_auto_hide) ? frame.bevel_w : frame.height); }
+ inline const int &getX(void) const
+ { return ((hidden) ? frame.x_hidden : frame.x); }
+ inline const int &getY(void) const
+ { return ((hidden) ? frame.y_hidden : frame.y); }
+
+ void buttonPressEvent(XButtonEvent *);
+ void buttonReleaseEvent(XButtonEvent *);
+ void enterNotifyEvent(XCrossingEvent *);
+ void leaveNotifyEvent(XCrossingEvent *);
+ void exposeEvent(XExposeEvent *);
+ void keyPressEvent(XKeyEvent *);
+
+ void redrawWindowLabel(Bool = False);
+ void redrawWorkspaceLabel(Bool = False);
+ void redrawPrevWorkspaceButton(Bool = False, Bool = False);
+ void redrawNextWorkspaceButton(Bool = False, Bool = False);
+ void redrawPrevWindowButton(Bool = False, Bool = False);
+ void redrawNextWindowButton(Bool = False, Bool = False);
+ void edit(void);
+ void reconfigure(void);
+
+#ifdef HAVE_STRFTIME
+ void checkClock(Bool = False);
+#else // HAVE_STRFTIME
+ void checkClock(Bool = False, Bool = False);
+#endif // HAVE_STRFTIME
+
+ virtual void timeout(void);
+
+ enum { TopLeft = 1, BottomLeft, TopCenter,
+ BottomCenter, TopRight, BottomRight };
+};
+
+
+#endif // __Toolbar_hh
--- /dev/null
+// Window.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include <X11/Xatom.h>
+#include <X11/keysym.h>
+
+#ifdef STDC_HEADERS
+# include <string.h>
+#endif // STDC_HEADERS
+
+#ifdef DEBUG
+# ifdef HAVE_STDIO_H
+# include <stdio.h>
+# endif // HAVE_STDIO_H
+#endif // DEBUG
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Iconmenu.h"
+#include "Screen.h"
+#include "Toolbar.h"
+#include "Window.h"
+#include "Windowmenu.h"
+#include "Workspace.h"
+#ifdef SLIT
+# include "Slit.h"
+#endif // SLIT
+
+/*
+ * Initializes the class with default values/the window's set initial values.
+ */
+OpenboxWindow::OpenboxWindow(Openbox *b, Window w, BScreen *s) {
+#ifdef DEBUG
+ fprintf(stderr, i18n->getMessage(WindowSet, WindowCreating,
+ "OpenboxWindow::OpenboxWindow(): creating 0x%lx\n"),
+ w);
+#endif // DEBUG
+
+ client.window = w;
+ openbox = b;
+ display = openbox->getXDisplay();
+
+ openbox->grab();
+ if (! validateClient()) return;
+
+ // fetch client size and placement
+ XWindowAttributes wattrib;
+ if ((! XGetWindowAttributes(display, client.window, &wattrib)) ||
+ (! wattrib.screen) || wattrib.override_redirect) {
+#ifdef DEBUG
+ fprintf(stderr,
+ i18n->getMessage(WindowSet, WindowXGetWindowAttributesFail,
+ "OpenboxWindow::OpenboxWindow(): XGetWindowAttributes "
+ "failed\n"));
+#endif // DEBUG
+
+ b->ungrab();
+ return;
+ }
+
+ if (s) {
+ screen = s;
+ } else {
+ screen = openbox->searchScreen(RootWindowOfScreen(wattrib.screen));
+ if (! screen) {
+#ifdef DEBUG
+ fprintf(stderr, i18n->getMessage(WindowSet, WindowCannotFindScreen,
+ "OpenboxWindow::OpenboxWindow(): can't find screen\n"
+ "\tfor root window 0x%lx\n"),
+ RootWindowOfScreen(wattrib.screen));
+#endif // DEBUG
+
+ b->ungrab();
+ return;
+ }
+ }
+
+ flags.moving = flags.resizing = flags.shaded = flags.visible =
+ flags.iconic = flags.transient = flags.focused =
+ flags.stuck = flags.modal = flags.send_focus_message =
+ flags.shaped = flags.managed = False;
+ flags.maximized = 0;
+
+ openbox_attrib.workspace = workspace_number = window_number = -1;
+
+ openbox_attrib.flags = openbox_attrib.attrib = openbox_attrib.stack
+ = openbox_attrib.decoration = 0l;
+ openbox_attrib.premax_x = openbox_attrib.premax_y = 0;
+ openbox_attrib.premax_w = openbox_attrib.premax_h = 0;
+
+ frame.window = frame.plate = frame.title = frame.handle = None;
+ frame.close_button = frame.iconify_button = frame.maximize_button = None;
+ frame.right_grip = frame.left_grip = None;
+
+ frame.utitle = frame.ftitle = frame.uhandle = frame.fhandle = None;
+ frame.ulabel = frame.flabel = frame.ubutton = frame.fbutton = None;
+ frame.pbutton = frame.ugrip = frame.fgrip = None;
+
+ decorations.titlebar = decorations.border = decorations.handle = True;
+ decorations.iconify = decorations.maximize = decorations.menu = True;
+ functions.resize = functions.move = functions.iconify =
+ functions.maximize = True;
+ functions.close = decorations.close = False;
+
+ client.wm_hint_flags = client.normal_hint_flags = 0;
+ client.transient_for = client.transient = 0;
+ client.title = 0;
+ client.title_len = 0;
+ client.icon_title = 0;
+ client.mwm_hint = (MwmHints *) 0;
+ client.openbox_hint = (OpenboxHints *) 0;
+
+ // get the initial size and location of client window (relative to the
+ // _root window_). This position is the reference point used with the
+ // window's gravity to find the window's initial position.
+ client.x = wattrib.x;
+ client.y = wattrib.y;
+ client.width = wattrib.width;
+ client.height = wattrib.height;
+ client.old_bw = wattrib.border_width;
+
+ windowmenu = 0;
+ lastButtonPressTime = 0;
+ image_ctrl = screen->getImageControl();
+
+ timer = new BTimer(openbox, this);
+ timer->setTimeout(openbox->getAutoRaiseDelay());
+ timer->fireOnce(True);
+
+ getOpenboxHints();
+ if (! client.openbox_hint)
+ getMWMHints();
+
+ // get size, aspect, minimum/maximum size and other hints set by the
+ // client
+ getWMProtocols();
+ getWMHints();
+ getWMNormalHints();
+
+#ifdef SLIT
+ if (client.initial_state == WithdrawnState) {
+ screen->getSlit()->addClient(client.window);
+ delete this;
+
+ b->ungrab();
+ return;
+ }
+#endif // SLIT
+
+ flags.managed = True;
+ openbox->saveWindowSearch(client.window, this);
+
+ // determine if this is a transient window
+ Window win;
+ if (XGetTransientForHint(display, client.window, &win)) {
+ if (win && (win != client.window)) {
+ OpenboxWindow *tr;
+ if ((tr = openbox->searchWindow(win))) {
+ while (tr->client.transient) tr = tr->client.transient;
+ client.transient_for = tr;
+ tr->client.transient = this;
+ flags.stuck = client.transient_for->flags.stuck;
+ flags.transient = True;
+ } else if (win == client.window_group) {
+ if ((tr = openbox->searchGroup(win, this))) {
+ while (tr->client.transient) tr = tr->client.transient;
+ client.transient_for = tr;
+ tr->client.transient = this;
+ flags.stuck = client.transient_for->flags.stuck;
+ flags.transient = True;
+ }
+ }
+ }
+
+ if (win == screen->getRootWindow()) flags.modal = True;
+ }
+
+ // adjust the window decorations based on transience and window sizes
+ if (flags.transient)
+ decorations.maximize = decorations.handle = functions.maximize = False;
+
+ if ((client.normal_hint_flags & PMinSize) &&
+ (client.normal_hint_flags & PMaxSize) &&
+ client.max_width <= client.min_width &&
+ client.max_height <= client.min_height) {
+ decorations.maximize = decorations.handle =
+ functions.resize = functions.maximize = False;
+ }
+ upsize();
+
+ Bool place_window = True;
+ if (openbox->isStartup() || flags.transient ||
+ client.normal_hint_flags & (PPosition|USPosition)) {
+ setGravityOffsets();
+
+ if ((openbox->isStartup()) ||
+ (frame.x >= 0 &&
+ (signed) (frame.y + frame.y_border) >= 0 &&
+ frame.x <= (signed) screen->getWidth() &&
+ frame.y <= (signed) screen->getHeight()))
+ place_window = False;
+ }
+
+ frame.window = createToplevelWindow(frame.x, frame.y, frame.width,
+ frame.height,
+ frame.border_w);
+ openbox->saveWindowSearch(frame.window, this);
+
+ frame.plate = createChildWindow(frame.window);
+ openbox->saveWindowSearch(frame.plate, this);
+
+ if (decorations.titlebar) {
+ frame.title = createChildWindow(frame.window);
+ frame.label = createChildWindow(frame.title);
+ openbox->saveWindowSearch(frame.title, this);
+ openbox->saveWindowSearch(frame.label, this);
+ }
+
+ if (decorations.handle) {
+ frame.handle = createChildWindow(frame.window);
+ openbox->saveWindowSearch(frame.handle, this);
+
+ frame.left_grip =
+ createChildWindow(frame.handle, openbox->getLowerLeftAngleCursor());
+ openbox->saveWindowSearch(frame.left_grip, this);
+
+ frame.right_grip =
+ createChildWindow(frame.handle, openbox->getLowerRightAngleCursor());
+ openbox->saveWindowSearch(frame.right_grip, this);
+ }
+
+ associateClientWindow();
+
+ if (! screen->isSloppyFocus())
+ openbox->grabButton(Button1, 0, frame.plate, True, ButtonPressMask,
+ GrabModeSync, GrabModeSync, None, None);
+
+ openbox->grabButton(Button1, Mod1Mask, frame.window, True,
+ ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
+ GrabModeAsync, None, openbox->getMoveCursor());
+ openbox->grabButton(Button2, Mod1Mask, frame.window, True,
+ ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None);
+ openbox->grabButton(Button3, Mod1Mask, frame.window, True,
+ ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
+ GrabModeAsync, None, None);
+
+ positionWindows();
+ XRaiseWindow(display, frame.plate);
+ XMapSubwindows(display, frame.plate);
+ if (decorations.titlebar) XMapSubwindows(display, frame.title);
+ XMapSubwindows(display, frame.window);
+
+ if (decorations.menu)
+ windowmenu = new Windowmenu(this);
+
+ decorate();
+
+ if (workspace_number < 0 || workspace_number >= screen->getCount())
+ screen->getCurrentWorkspace()->addWindow(this, place_window);
+ else
+ screen->getWorkspace(workspace_number)->addWindow(this, place_window);
+
+ configure(frame.x, frame.y, frame.width, frame.height);
+
+ if (flags.shaded) {
+ flags.shaded = False;
+ shade();
+ }
+
+ if (flags.maximized && functions.maximize) {
+ unsigned int button = flags.maximized;
+ flags.maximized = 0;
+ maximize(button);
+ }
+
+ setFocusFlag(False);
+
+ openbox->ungrab();
+}
+
+
+OpenboxWindow::~OpenboxWindow(void) {
+ if (flags.moving || flags.resizing) {
+ screen->hideGeometry();
+ XUngrabPointer(display, CurrentTime);
+ }
+
+ if (workspace_number != -1 && window_number != -1)
+ screen->getWorkspace(workspace_number)->removeWindow(this);
+ else if (flags.iconic)
+ screen->removeIcon(this);
+
+ if (timer) {
+ if (timer->isTiming()) timer->stop();
+ delete timer;
+ }
+
+ if (windowmenu) delete windowmenu;
+
+ if (client.title)
+ delete [] client.title;
+
+ if (client.icon_title)
+ delete [] client.icon_title;
+
+ if (client.mwm_hint)
+ XFree(client.mwm_hint);
+
+ if (client.openbox_hint)
+ XFree(client.openbox_hint);
+
+ if (client.window_group)
+ openbox->removeGroupSearch(client.window_group);
+
+ if (flags.transient && client.transient_for)
+ client.transient_for->client.transient = client.transient;
+ if (client.transient)
+ client.transient->client.transient_for = client.transient_for;
+
+ if (frame.close_button) {
+ openbox->removeWindowSearch(frame.close_button);
+ XDestroyWindow(display, frame.close_button);
+ }
+
+ if (frame.iconify_button) {
+ openbox->removeWindowSearch(frame.iconify_button);
+ XDestroyWindow(display, frame.iconify_button);
+ }
+
+ if (frame.maximize_button) {
+ openbox->removeWindowSearch(frame.maximize_button);
+ XDestroyWindow(display, frame.maximize_button);
+ }
+
+ if (frame.title) {
+ if (frame.ftitle)
+ image_ctrl->removeImage(frame.ftitle);
+
+ if (frame.utitle)
+ image_ctrl->removeImage(frame.utitle);
+
+ if (frame.flabel)
+ image_ctrl->removeImage(frame.flabel);
+
+ if( frame.ulabel)
+ image_ctrl->removeImage(frame.ulabel);
+
+ openbox->removeWindowSearch(frame.label);
+ openbox->removeWindowSearch(frame.title);
+ XDestroyWindow(display, frame.label);
+ XDestroyWindow(display, frame.title);
+ }
+
+ if (frame.handle) {
+ if (frame.fhandle)
+ image_ctrl->removeImage(frame.fhandle);
+
+ if (frame.uhandle)
+ image_ctrl->removeImage(frame.uhandle);
+
+ if (frame.fgrip)
+ image_ctrl->removeImage(frame.fgrip);
+
+ if (frame.ugrip)
+ image_ctrl->removeImage(frame.ugrip);
+
+ openbox->removeWindowSearch(frame.handle);
+ openbox->removeWindowSearch(frame.right_grip);
+ openbox->removeWindowSearch(frame.left_grip);
+ XDestroyWindow(display, frame.right_grip);
+ XDestroyWindow(display, frame.left_grip);
+ XDestroyWindow(display, frame.handle);
+ }
+
+ if (frame.fbutton)
+ image_ctrl->removeImage(frame.fbutton);
+
+ if (frame.ubutton)
+ image_ctrl->removeImage(frame.ubutton);
+
+ if (frame.pbutton)
+ image_ctrl->removeImage(frame.pbutton);
+
+ if (frame.plate) {
+ openbox->removeWindowSearch(frame.plate);
+ XDestroyWindow(display, frame.plate);
+ }
+
+ if (frame.window) {
+ openbox->removeWindowSearch(frame.window);
+ XDestroyWindow(display, frame.window);
+ }
+
+ if (flags.managed) {
+ openbox->removeWindowSearch(client.window);
+ screen->removeNetizen(client.window);
+ }
+}
+
+
+/*
+ * Creates a new top level window, with a given location, size, and border
+ * width.
+ * Returns: the newly created window
+ */
+Window OpenboxWindow::createToplevelWindow(int x, int y, unsigned int width,
+ unsigned int height,
+ unsigned int borderwidth)
+{
+ XSetWindowAttributes attrib_create;
+ unsigned long create_mask = CWBackPixmap | CWBorderPixel | CWColormap |
+ CWOverrideRedirect | CWEventMask;
+
+ attrib_create.background_pixmap = None;
+ attrib_create.colormap = screen->getColormap();
+ attrib_create.override_redirect = True;
+ attrib_create.event_mask = ButtonPressMask | ButtonReleaseMask |
+ ButtonMotionMask | EnterWindowMask;
+
+ return XCreateWindow(display, screen->getRootWindow(), x, y, width, height,
+ borderwidth, screen->getDepth(), InputOutput,
+ screen->getVisual(), create_mask,
+ &attrib_create);
+}
+
+
+/*
+ * Creates a child window, and optionally associates a given cursor with
+ * the new window.
+ */
+Window OpenboxWindow::createChildWindow(Window parent, Cursor cursor) {
+ XSetWindowAttributes attrib_create;
+ unsigned long create_mask = CWBackPixmap | CWBorderPixel |
+ CWEventMask;
+
+ attrib_create.background_pixmap = None;
+ attrib_create.event_mask = ButtonPressMask | ButtonReleaseMask |
+ ButtonMotionMask | ExposureMask |
+ EnterWindowMask | LeaveWindowMask;
+
+ if (cursor) {
+ create_mask |= CWCursor;
+ attrib_create.cursor = cursor;
+ }
+
+ return XCreateWindow(display, parent, 0, 0, 1, 1, 0, screen->getDepth(),
+ InputOutput, screen->getVisual(), create_mask,
+ &attrib_create);
+}
+
+
+void OpenboxWindow::associateClientWindow(void) {
+ XSetWindowBorderWidth(display, client.window, 0);
+ getWMName();
+ getWMIconName();
+
+ XChangeSaveSet(display, client.window, SetModeInsert);
+ XSetWindowAttributes attrib_set;
+
+ XSelectInput(display, frame.plate, NoEventMask);
+ XReparentWindow(display, client.window, frame.plate, 0, 0);
+ XSelectInput(display, frame.plate, SubstructureRedirectMask);
+
+ XFlush(display);
+
+ attrib_set.event_mask = PropertyChangeMask | StructureNotifyMask |
+ FocusChangeMask;
+ attrib_set.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask |
+ ButtonMotionMask;
+
+ XChangeWindowAttributes(display, client.window, CWEventMask|CWDontPropagate,
+ &attrib_set);
+
+#ifdef SHAPE
+ if (openbox->hasShapeExtensions()) {
+ XShapeSelectInput(display, client.window, ShapeNotifyMask);
+
+ int foo;
+ unsigned int ufoo;
+
+ XShapeQueryExtents(display, client.window, &flags.shaped, &foo, &foo,
+ &ufoo, &ufoo, &foo, &foo, &foo, &ufoo, &ufoo);
+
+ if (flags.shaped) {
+ XShapeCombineShape(display, frame.window, ShapeBounding,
+ frame.mwm_border_w, frame.y_border +
+ frame.mwm_border_w, client.window,
+ ShapeBounding, ShapeSet);
+
+ int num = 1;
+ XRectangle xrect[2];
+ xrect[0].x = xrect[0].y = 0;
+ xrect[0].width = frame.width;
+ xrect[0].height = frame.y_border;
+
+ if (decorations.handle) {
+ xrect[1].x = 0;
+ xrect[1].y = frame.y_handle;
+ xrect[1].width = frame.width;
+ xrect[1].height = frame.handle_h + frame.border_w;
+ num++;
+ }
+
+ XShapeCombineRectangles(display, frame.window, ShapeBounding, 0, 0,
+ xrect, num, ShapeUnion, Unsorted);
+ }
+ }
+#endif // SHAPE
+
+ if (decorations.iconify) createIconifyButton();
+ if (decorations.maximize) createMaximizeButton();
+ if (decorations.close) createCloseButton();
+
+ if (frame.ubutton) {
+ if (frame.close_button)
+ XSetWindowBackgroundPixmap(display, frame.close_button, frame.ubutton);
+ if (frame.maximize_button)
+ XSetWindowBackgroundPixmap(display, frame.maximize_button,
+ frame.ubutton);
+ if (frame.iconify_button)
+ XSetWindowBackgroundPixmap(display, frame.iconify_button, frame.ubutton);
+ } else {
+ if (frame.close_button)
+ XSetWindowBackground(display, frame.close_button, frame.ubutton_pixel);
+ if (frame.maximize_button)
+ XSetWindowBackground(display, frame.maximize_button,
+ frame.ubutton_pixel);
+ if (frame.iconify_button)
+ XSetWindowBackground(display, frame.iconify_button, frame.ubutton_pixel);
+ }
+}
+
+
+void OpenboxWindow::decorate(void) {
+ Pixmap tmp = frame.fbutton;
+ BTexture *texture = &(screen->getWindowStyle()->b_focus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.fbutton = None;
+ frame.fbutton_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.fbutton =
+ image_ctrl->renderImage(frame.button_w, frame.button_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.ubutton;
+ texture = &(screen->getWindowStyle()->b_unfocus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.ubutton = None;
+ frame.ubutton_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.ubutton =
+ image_ctrl->renderImage(frame.button_w, frame.button_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.pbutton;
+ texture = &(screen->getWindowStyle()->b_pressed);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.pbutton = None;
+ frame.pbutton_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.pbutton =
+ image_ctrl->renderImage(frame.button_w, frame.button_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ if (decorations.titlebar) {
+ tmp = frame.ftitle;
+ texture = &(screen->getWindowStyle()->t_focus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.ftitle = None;
+ frame.ftitle_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.ftitle =
+ image_ctrl->renderImage(frame.width, frame.title_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.utitle;
+ texture = &(screen->getWindowStyle()->t_unfocus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.utitle = None;
+ frame.utitle_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.utitle =
+ image_ctrl->renderImage(frame.width, frame.title_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ XSetWindowBorder(display, frame.title,
+ screen->getBorderColor()->getPixel());
+
+ decorateLabel();
+ }
+
+ if (decorations.border) {
+ frame.fborder_pixel = screen->getWindowStyle()->f_focus.getPixel();
+ frame.uborder_pixel = screen->getWindowStyle()->f_unfocus.getPixel();
+ openbox_attrib.flags |= AttribDecoration;
+ openbox_attrib.decoration = DecorNormal;
+ } else {
+ openbox_attrib.flags |= AttribDecoration;
+ openbox_attrib.decoration = DecorNone;
+ }
+
+ if (decorations.handle) {
+ tmp = frame.fhandle;
+ texture = &(screen->getWindowStyle()->h_focus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.fhandle = None;
+ frame.fhandle_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.fhandle =
+ image_ctrl->renderImage(frame.width, frame.handle_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.uhandle;
+ texture = &(screen->getWindowStyle()->h_unfocus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.uhandle = None;
+ frame.uhandle_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.uhandle =
+ image_ctrl->renderImage(frame.width, frame.handle_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.fgrip;
+ texture = &(screen->getWindowStyle()->g_focus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.fgrip = None;
+ frame.fgrip_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.fgrip =
+ image_ctrl->renderImage(frame.grip_w, frame.grip_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.ugrip;
+ texture = &(screen->getWindowStyle()->g_unfocus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.ugrip = None;
+ frame.ugrip_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.ugrip =
+ image_ctrl->renderImage(frame.grip_w, frame.grip_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ XSetWindowBorder(display, frame.handle,
+ screen->getBorderColor()->getPixel());
+ XSetWindowBorder(display, frame.left_grip,
+ screen->getBorderColor()->getPixel());
+ XSetWindowBorder(display, frame.right_grip,
+ screen->getBorderColor()->getPixel());
+ }
+
+ XSetWindowBorder(display, frame.window,
+ screen->getBorderColor()->getPixel());
+}
+
+
+void OpenboxWindow::decorateLabel(void) {
+ Pixmap tmp = frame.flabel;
+ BTexture *texture = &(screen->getWindowStyle()->l_focus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.flabel = None;
+ frame.flabel_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.flabel =
+ image_ctrl->renderImage(frame.label_w, frame.label_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+
+ tmp = frame.ulabel;
+ texture = &(screen->getWindowStyle()->l_unfocus);
+ if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
+ frame.ulabel = None;
+ frame.ulabel_pixel = texture->getColor()->getPixel();
+ } else {
+ frame.ulabel =
+ image_ctrl->renderImage(frame.label_w, frame.label_h, texture);
+ }
+ if (tmp) image_ctrl->removeImage(tmp);
+}
+
+
+void OpenboxWindow::createCloseButton(void) {
+ if (decorations.close && frame.title != None) {
+ frame.close_button = createChildWindow(frame.title);
+ openbox->saveWindowSearch(frame.close_button, this);
+ }
+}
+
+
+void OpenboxWindow::createIconifyButton(void) {
+ if (decorations.iconify && frame.title != None) {
+ frame.iconify_button = createChildWindow(frame.title);
+ openbox->saveWindowSearch(frame.iconify_button, this);
+ }
+}
+
+
+void OpenboxWindow::createMaximizeButton(void) {
+ if (decorations.maximize && frame.title != None) {
+ frame.maximize_button = createChildWindow(frame.title);
+ openbox->saveWindowSearch(frame.maximize_button, this);
+ }
+}
+
+
+void OpenboxWindow::positionButtons(Bool redecorate_label) {
+ const char *format = openbox->getTitleBarLayout();
+ const unsigned int bw = frame.bevel_w + 1;
+ const unsigned int by = frame.bevel_w + 1;
+ unsigned int bx = frame.bevel_w + 1;
+ unsigned int bcount = strlen(format) - 1;
+
+ if (!decorations.close)
+ bcount--;
+ if (!decorations.maximize)
+ bcount--;
+ if (!decorations.iconify)
+ bcount--;
+ frame.label_w = frame.width - bx * 2 - (frame.button_w + bw) * bcount;
+
+ bool hasclose, hasiconify, hasmaximize;
+ hasclose = hasiconify = hasmaximize = false;
+
+ for (int i = 0; format[i] != '\0' && i < 4; i++) {
+ switch(format[i]) {
+ case 'C':
+ if (decorations.close && frame.close_button != None) {
+ XMoveResizeWindow(display, frame.close_button, bx, by,
+ frame.button_w, frame.button_h);
+ XMapWindow(display, frame.close_button);
+ XClearWindow(display, frame.close_button);
+ bx += frame.button_w + bw;
+ hasclose = true;
+ } else if (frame.close_button)
+ XUnmapWindow(display, frame.close_button);
+ break;
+ case 'I':
+ if (decorations.iconify && frame.iconify_button != None) {
+ XMoveResizeWindow(display, frame.iconify_button, bx, by,
+ frame.button_w, frame.button_h);
+ XMapWindow(display, frame.iconify_button);
+ XClearWindow(display, frame.iconify_button);
+ bx += frame.button_w + bw;
+ hasiconify = true;
+ } else if (frame.close_button)
+ XUnmapWindow(display, frame.close_button);
+ break;
+ case 'M':
+ if (decorations.maximize && frame.maximize_button != None) {
+ XMoveResizeWindow(display, frame.maximize_button, bx, by,
+ frame.button_w, frame.button_h);
+ XMapWindow(display, frame.maximize_button);
+ XClearWindow(display, frame.maximize_button);
+ bx += frame.button_w + bw;
+ hasmaximize = true;
+ } else if (frame.close_button)
+ XUnmapWindow(display, frame.close_button);
+ break;
+ case 'L':
+ XMoveResizeWindow(display, frame.label, bx, by - 1,
+ frame.label_w, frame.label_h);
+ bx += frame.label_w + bw;
+ break;
+ }
+ }
+
+ if (!hasclose) {
+ openbox->removeWindowSearch(frame.close_button);
+ XDestroyWindow(display, frame.close_button);
+ }
+ if (!hasiconify) {
+ openbox->removeWindowSearch(frame.iconify_button);
+ XDestroyWindow(display, frame.iconify_button);
+ }
+ if (!hasmaximize) {
+ openbox->removeWindowSearch(frame.maximize_button);
+ XDestroyWindow(display, frame.maximize_button);
+ }
+ if (redecorate_label)
+ decorateLabel();
+ redrawLabel();
+ redrawAllButtons();
+}
+
+
+void OpenboxWindow::reconfigure(void) {
+ upsize();
+
+ client.x = frame.x + frame.mwm_border_w + frame.border_w;
+ client.y = frame.y + frame.y_border + frame.mwm_border_w +
+ frame.border_w;
+
+ if (client.title) {
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getWindowStyle()->fontset,
+ client.title, client.title_len, &ink, &logical);
+ client.title_text_w = logical.width;
+ } else {
+ client.title_text_w = XTextWidth(screen->getWindowStyle()->font,
+ client.title, client.title_len);
+ }
+ client.title_text_w += (frame.bevel_w * 4);
+ }
+
+ positionWindows();
+ decorate();
+
+ XClearWindow(display, frame.window);
+ setFocusFlag(flags.focused);
+
+ configure(frame.x, frame.y, frame.width, frame.height);
+
+ if (! screen->isSloppyFocus())
+ openbox->grabButton(Button1, 0, frame.plate, True, ButtonPressMask,
+ GrabModeSync, GrabModeSync, None, None);
+ else
+ openbox->ungrabButton(Button1, 0, frame.plate);
+
+ if (windowmenu) {
+ windowmenu->move(windowmenu->getX(), frame.y + frame.title_h);
+ windowmenu->reconfigure();
+ }
+}
+
+
+void OpenboxWindow::positionWindows(void) {
+ XResizeWindow(display, frame.window, frame.width,
+ ((flags.shaded) ? frame.title_h : frame.height));
+ XSetWindowBorderWidth(display, frame.window, frame.border_w);
+ XSetWindowBorderWidth(display, frame.plate, frame.mwm_border_w);
+ XMoveResizeWindow(display, frame.plate, 0, frame.y_border,
+ client.width, client.height);
+ XMoveResizeWindow(display, client.window, 0, 0, client.width, client.height);
+
+ if (decorations.titlebar) {
+ XSetWindowBorderWidth(display, frame.title, frame.border_w);
+ XMoveResizeWindow(display, frame.title, -frame.border_w,
+ -frame.border_w, frame.width, frame.title_h);
+
+ positionButtons();
+ } else if (frame.title) {
+ XUnmapWindow(display, frame.title);
+ }
+ if (decorations.handle) {
+ XSetWindowBorderWidth(display, frame.handle, frame.border_w);
+ XSetWindowBorderWidth(display, frame.left_grip, frame.border_w);
+ XSetWindowBorderWidth(display, frame.right_grip, frame.border_w);
+
+ XMoveResizeWindow(display, frame.handle, -frame.border_w,
+ frame.y_handle - frame.border_w,
+ frame.width, frame.handle_h);
+ XMoveResizeWindow(display, frame.left_grip, -frame.border_w,
+ -frame.border_w, frame.grip_w, frame.grip_h);
+ XMoveResizeWindow(display, frame.right_grip,
+ frame.width - frame.grip_w - frame.border_w,
+ -frame.border_w, frame.grip_w, frame.grip_h);
+ XMapSubwindows(display, frame.handle);
+ } else if (frame.handle) {
+ XUnmapWindow(display, frame.handle);
+ }
+}
+
+
+void OpenboxWindow::getWMName(void) {
+ if (client.title) {
+ delete [] client.title;
+ client.title = (char *) 0;
+ }
+
+ XTextProperty text_prop;
+ char **list;
+ int num;
+
+ if (XGetWMName(display, client.window, &text_prop)) {
+ if (text_prop.value && text_prop.nitems > 0) {
+ if (text_prop.encoding != XA_STRING) {
+ text_prop.nitems = strlen((char *) text_prop.value);
+
+ if ((XmbTextPropertyToTextList(display, &text_prop,
+ &list, &num) == Success) &&
+ (num > 0) && *list) {
+ client.title = bstrdup(*list);
+ XFreeStringList(list);
+ } else {
+ client.title = bstrdup((char *) text_prop.value);
+ }
+ } else {
+ client.title = bstrdup((char *) text_prop.value);
+ }
+ XFree((char *) text_prop.value);
+ } else {
+ client.title = bstrdup(i18n->getMessage(WindowSet, WindowUnnamed,
+ "Unnamed"));
+ }
+ } else {
+ client.title = bstrdup(i18n->getMessage(WindowSet, WindowUnnamed,
+ "Unnamed"));
+ }
+ client.title_len = strlen(client.title);
+
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getWindowStyle()->fontset,
+ client.title, client.title_len, &ink, &logical);
+ client.title_text_w = logical.width;
+ } else {
+ client.title_len = strlen(client.title);
+ client.title_text_w = XTextWidth(screen->getWindowStyle()->font,
+ client.title, client.title_len);
+ }
+
+ client.title_text_w += (frame.bevel_w * 4);
+}
+
+
+void OpenboxWindow::getWMIconName(void) {
+ if (client.icon_title) {
+ delete [] client.icon_title;
+ client.icon_title = (char *) 0;
+ }
+
+ XTextProperty text_prop;
+ char **list;
+ int num;
+
+ if (XGetWMIconName(display, client.window, &text_prop)) {
+ if (text_prop.value && text_prop.nitems > 0) {
+ if (text_prop.encoding != XA_STRING) {
+ text_prop.nitems = strlen((char *) text_prop.value);
+
+ if ((XmbTextPropertyToTextList(display, &text_prop,
+ &list, &num) == Success) &&
+ (num > 0) && *list) {
+ client.icon_title = bstrdup(*list);
+ XFreeStringList(list);
+ } else {
+ client.icon_title = bstrdup((char *) text_prop.value);
+ }
+ } else {
+ client.icon_title = bstrdup((char *) text_prop.value);
+ }
+ XFree((char *) text_prop.value);
+ } else {
+ client.icon_title = bstrdup(client.title);
+ }
+ } else {
+ client.icon_title = bstrdup(client.title);
+ }
+}
+
+
+/*
+ * Retrieve which WM Protocols are supported by the client window.
+ * If the WM_DELETE_WINDOW protocol is supported, add the close button to the
+ * window's decorations and allow the close behavior.
+ * If the WM_TAKE_FOCUS protocol is supported, save a value that indicates
+ * this.
+ */
+void OpenboxWindow::getWMProtocols(void) {
+ Atom *proto;
+ int num_return = 0;
+
+ if (XGetWMProtocols(display, client.window, &proto, &num_return)) {
+ for (int i = 0; i < num_return; ++i) {
+ if (proto[i] == openbox->getWMDeleteAtom())
+ functions.close = decorations.close = True;
+ else if (proto[i] == openbox->getWMTakeFocusAtom())
+ flags.send_focus_message = True;
+ else if (proto[i] == openbox->getOpenboxStructureMessagesAtom())
+ screen->addNetizen(new Netizen(screen, client.window));
+ }
+
+ XFree(proto);
+ }
+}
+
+
+/*
+ * Gets the value of the WM_HINTS property.
+ * If the property is not set, then use a set of default values.
+ */
+void OpenboxWindow::getWMHints(void) {
+ XWMHints *wmhint = XGetWMHints(display, client.window);
+ if (! wmhint) {
+ flags.visible = True;
+ flags.iconic = False;
+ focus_mode = F_Passive;
+ client.window_group = None;
+ client.initial_state = NormalState;
+ return;
+ }
+ client.wm_hint_flags = wmhint->flags;
+ if (wmhint->flags & InputHint) {
+ if (wmhint->input == True) {
+ if (flags.send_focus_message)
+ focus_mode = F_LocallyActive;
+ else
+ focus_mode = F_Passive;
+ } else {
+ if (flags.send_focus_message)
+ focus_mode = F_GloballyActive;
+ else
+ focus_mode = F_NoInput;
+ }
+ } else {
+ focus_mode = F_Passive;
+ }
+
+ if (wmhint->flags & StateHint)
+ client.initial_state = wmhint->initial_state;
+ else
+ client.initial_state = NormalState;
+
+ if (wmhint->flags & WindowGroupHint) {
+ if (! client.window_group) {
+ client.window_group = wmhint->window_group;
+ openbox->saveGroupSearch(client.window_group, this);
+ }
+ } else {
+ client.window_group = None;
+ }
+ XFree(wmhint);
+}
+
+
+/*
+ * Gets the value of the WM_NORMAL_HINTS property.
+ * If the property is not set, then use a set of default values.
+ */
+void OpenboxWindow::getWMNormalHints(void) {
+ long icccm_mask;
+ XSizeHints sizehint;
+
+ client.min_width = client.min_height =
+ client.base_width = client.base_height =
+ client.width_inc = client.height_inc = 1;
+ client.max_width = screen->getWidth();
+ client.max_height = screen->getHeight();
+ client.min_aspect_x = client.min_aspect_y =
+ client.max_aspect_x = client.max_aspect_y = 1;
+ client.win_gravity = NorthWestGravity;
+
+ if (! XGetWMNormalHints(display, client.window, &sizehint, &icccm_mask))
+ return;
+
+ client.normal_hint_flags = sizehint.flags;
+
+ if (sizehint.flags & PMinSize) {
+ client.min_width = sizehint.min_width;
+ client.min_height = sizehint.min_height;
+ }
+
+ if (sizehint.flags & PMaxSize) {
+ client.max_width = sizehint.max_width;
+ client.max_height = sizehint.max_height;
+ }
+
+ if (sizehint.flags & PResizeInc) {
+ client.width_inc = sizehint.width_inc;
+ client.height_inc = sizehint.height_inc;
+ }
+
+ if (sizehint.flags & PAspect) {
+ client.min_aspect_x = sizehint.min_aspect.x;
+ client.min_aspect_y = sizehint.min_aspect.y;
+ client.max_aspect_x = sizehint.max_aspect.x;
+ client.max_aspect_y = sizehint.max_aspect.y;
+ }
+
+ if (sizehint.flags & PBaseSize) {
+ client.base_width = sizehint.base_width;
+ client.base_height = sizehint.base_height;
+ }
+
+ if (sizehint.flags & PWinGravity)
+ client.win_gravity = sizehint.win_gravity;
+}
+
+
+/*
+ * Gets the MWM hints for the class' contained window.
+ * This is used while initializing the window to its first state, and not
+ * thereafter.
+ * Returns: true if the MWM hints are successfully retreived and applied; false
+ * if they are not.
+ */
+void OpenboxWindow::getMWMHints(void) {
+ int format;
+ Atom atom_return;
+ unsigned long num, len;
+
+ int ret = XGetWindowProperty(display, client.window,
+ openbox->getMotifWMHintsAtom(), 0,
+ PropMwmHintsElements, False,
+ openbox->getMotifWMHintsAtom(), &atom_return,
+ &format, &num, &len,
+ (unsigned char **) &client.mwm_hint);
+
+ if (ret != Success || !client.mwm_hint || num != PropMwmHintsElements)
+ return;
+
+ if (client.mwm_hint->flags & MwmHintsDecorations) {
+ if (client.mwm_hint->decorations & MwmDecorAll) {
+ decorations.titlebar = decorations.handle = decorations.border =
+ decorations.iconify = decorations.maximize =
+ decorations.close = decorations.menu = True;
+ } else {
+ decorations.titlebar = decorations.handle = decorations.border =
+ decorations.iconify = decorations.maximize =
+ decorations.close = decorations.menu = False;
+
+ if (client.mwm_hint->decorations & MwmDecorBorder)
+ decorations.border = True;
+ if (client.mwm_hint->decorations & MwmDecorHandle)
+ decorations.handle = True;
+ if (client.mwm_hint->decorations & MwmDecorTitle)
+ decorations.titlebar = True;
+ if (client.mwm_hint->decorations & MwmDecorMenu)
+ decorations.menu = True;
+ if (client.mwm_hint->decorations & MwmDecorIconify)
+ decorations.iconify = True;
+ if (client.mwm_hint->decorations & MwmDecorMaximize)
+ decorations.maximize = True;
+ }
+ }
+
+ if (client.mwm_hint->flags & MwmHintsFunctions) {
+ if (client.mwm_hint->functions & MwmFuncAll) {
+ functions.resize = functions.move = functions.iconify =
+ functions.maximize = functions.close = True;
+ } else {
+ functions.resize = functions.move = functions.iconify =
+ functions.maximize = functions.close = False;
+
+ if (client.mwm_hint->functions & MwmFuncResize)
+ functions.resize = True;
+ if (client.mwm_hint->functions & MwmFuncMove)
+ functions.move = True;
+ if (client.mwm_hint->functions & MwmFuncIconify)
+ functions.iconify = True;
+ if (client.mwm_hint->functions & MwmFuncMaximize)
+ functions.maximize = True;
+ if (client.mwm_hint->functions & MwmFuncClose)
+ functions.close = True;
+ }
+ }
+}
+
+
+/*
+ * Gets the openbox hints from the class' contained window.
+ * This is used while initializing the window to its first state, and not
+ * thereafter.
+ * Returns: true if the hints are successfully retreived and applied; false if
+ * they are not.
+ */
+void OpenboxWindow::getOpenboxHints(void) {
+ int format;
+ Atom atom_return;
+ unsigned long num, len;
+
+ int ret = XGetWindowProperty(display, client.window,
+ openbox->getOpenboxHintsAtom(), 0,
+ PropOpenboxHintsElements, False,
+ openbox->getOpenboxHintsAtom(), &atom_return,
+ &format, &num, &len,
+ (unsigned char **) &client.openbox_hint);
+ if (ret != Success || !client.openbox_hint ||
+ num != PropOpenboxHintsElements)
+ return;
+
+ if (client.openbox_hint->flags & AttribShaded)
+ flags.shaded = (client.openbox_hint->attrib & AttribShaded);
+
+ if ((client.openbox_hint->flags & AttribMaxHoriz) &&
+ (client.openbox_hint->flags & AttribMaxVert))
+ flags.maximized = (client.openbox_hint->attrib &
+ (AttribMaxHoriz | AttribMaxVert)) ? 1 : 0;
+ else if (client.openbox_hint->flags & AttribMaxVert)
+ flags.maximized = (client.openbox_hint->attrib & AttribMaxVert) ? 2 : 0;
+ else if (client.openbox_hint->flags & AttribMaxHoriz)
+ flags.maximized = (client.openbox_hint->attrib & AttribMaxHoriz) ? 3 : 0;
+
+ if (client.openbox_hint->flags & AttribOmnipresent)
+ flags.stuck = (client.openbox_hint->attrib & AttribOmnipresent);
+
+ if (client.openbox_hint->flags & AttribWorkspace)
+ workspace_number = client.openbox_hint->workspace;
+
+ // if (client.openbox_hint->flags & AttribStack)
+ // don't yet have always on top/bottom for openbox yet... working
+ // on that
+
+ if (client.openbox_hint->flags & AttribDecoration) {
+ switch (client.openbox_hint->decoration) {
+ case DecorNone:
+ decorations.titlebar = decorations.border = decorations.handle =
+ decorations.iconify = decorations.maximize =
+ decorations.menu = False;
+ functions.resize = functions.move = functions.iconify =
+ functions.maximize = False;
+
+ break;
+
+ case DecorTiny:
+ decorations.titlebar = decorations.iconify = decorations.menu =
+ functions.move = functions.iconify = True;
+ decorations.border = decorations.handle = decorations.maximize =
+ functions.resize = functions.maximize = False;
+
+ break;
+
+ case DecorTool:
+ decorations.titlebar = decorations.menu = functions.move = True;
+ decorations.iconify = decorations.border = decorations.handle =
+ decorations.maximize = functions.resize = functions.maximize =
+ functions.iconify = False;
+
+ break;
+
+ case DecorNormal:
+ default:
+ decorations.titlebar = decorations.border = decorations.handle =
+ decorations.iconify = decorations.maximize =
+ decorations.menu = True;
+ functions.resize = functions.move = functions.iconify =
+ functions.maximize = True;
+
+ break;
+ }
+
+ reconfigure();
+ }
+}
+
+
+void OpenboxWindow::configure(int dx, int dy,
+ unsigned int dw, unsigned int dh) {
+ Bool send_event = (frame.x != dx || frame.y != dy);
+
+ if ((dw != frame.width) || (dh != frame.height)) {
+ if ((((signed) frame.width) + dx) < 0) dx = 0;
+ if ((((signed) frame.height) + dy) < 0) dy = 0;
+
+ frame.x = dx;
+ frame.y = dy;
+ frame.width = dw;
+ frame.height = dh;
+
+ downsize();
+
+#ifdef SHAPE
+ if (openbox->hasShapeExtensions() && flags.shaped) {
+ XShapeCombineShape(display, frame.window, ShapeBounding,
+ frame.mwm_border_w, frame.y_border +
+ frame.mwm_border_w, client.window,
+ ShapeBounding, ShapeSet);
+
+ int num = 1;
+ XRectangle xrect[2];
+ xrect[0].x = xrect[0].y = 0;
+ xrect[0].width = frame.width;
+ xrect[0].height = frame.y_border;
+
+ if (decorations.handle) {
+ xrect[1].x = 0;
+ xrect[1].y = frame.y_handle;
+ xrect[1].width = frame.width;
+ xrect[1].height = frame.handle_h + frame.border_w;
+ num++;
+ }
+
+ XShapeCombineRectangles(display, frame.window, ShapeBounding, 0, 0,
+ xrect, num, ShapeUnion, Unsorted);
+ }
+#endif // SHAPE
+
+ XMoveWindow(display, frame.window, frame.x, frame.y);
+
+ positionWindows();
+ decorate();
+ setFocusFlag(flags.focused);
+ redrawAllButtons();
+ } else {
+ frame.x = dx;
+ frame.y = dy;
+
+ XMoveWindow(display, frame.window, frame.x, frame.y);
+
+ if (! flags.moving) send_event = True;
+ }
+
+ if (send_event && ! flags.moving) {
+ client.x = dx + frame.mwm_border_w + frame.border_w;
+ client.y = dy + frame.y_border + frame.mwm_border_w +
+ frame.border_w;
+
+ XEvent event;
+ event.type = ConfigureNotify;
+
+ event.xconfigure.display = display;
+ event.xconfigure.event = client.window;
+ event.xconfigure.window = client.window;
+ event.xconfigure.x = client.x;
+ event.xconfigure.y = client.y;
+ event.xconfigure.width = client.width;
+ event.xconfigure.height = client.height;
+ event.xconfigure.border_width = client.old_bw;
+ event.xconfigure.above = frame.window;
+ event.xconfigure.override_redirect = False;
+
+ XSendEvent(display, client.window, True, NoEventMask, &event);
+
+ screen->updateNetizenConfigNotify(&event);
+ }
+}
+
+
+Bool OpenboxWindow::setInputFocus(void) {
+ if (((signed) (frame.x + frame.width)) < 0) {
+ if (((signed) (frame.y + frame.y_border)) < 0)
+ configure(frame.border_w, frame.border_w, frame.width, frame.height);
+ else if (frame.y > (signed) screen->getHeight())
+ configure(frame.border_w, screen->getHeight() - frame.height,
+ frame.width, frame.height);
+ else
+ configure(frame.border_w, frame.y + frame.border_w,
+ frame.width, frame.height);
+ } else if (frame.x > (signed) screen->getWidth()) {
+ if (((signed) (frame.y + frame.y_border)) < 0)
+ configure(screen->getWidth() - frame.width, frame.border_w,
+ frame.width, frame.height);
+ else if (frame.y > (signed) screen->getHeight())
+ configure(screen->getWidth() - frame.width,
+ screen->getHeight() - frame.height, frame.width, frame.height);
+ else
+ configure(screen->getWidth() - frame.width,
+ frame.y + frame.border_w, frame.width, frame.height);
+ }
+
+ openbox->grab();
+ if (! validateClient()) return False;
+
+ Bool ret = False;
+
+ if (client.transient && flags.modal) {
+ ret = client.transient->setInputFocus();
+ } else if (! flags.focused) {
+ if (focus_mode == F_LocallyActive || focus_mode == F_Passive)
+ XSetInputFocus(display, client.window,
+ RevertToPointerRoot, CurrentTime);
+ else
+ XSetInputFocus(display, screen->getRootWindow(),
+ RevertToNone, CurrentTime);
+
+ openbox->setFocusedWindow(this);
+
+ if (flags.send_focus_message) {
+ XEvent ce;
+ ce.xclient.type = ClientMessage;
+ ce.xclient.message_type = openbox->getWMProtocolsAtom();
+ ce.xclient.display = display;
+ ce.xclient.window = client.window;
+ ce.xclient.format = 32;
+ ce.xclient.data.l[0] = openbox->getWMTakeFocusAtom();
+ ce.xclient.data.l[1] = openbox->getLastTime();
+ ce.xclient.data.l[2] = 0l;
+ ce.xclient.data.l[3] = 0l;
+ ce.xclient.data.l[4] = 0l;
+ XSendEvent(display, client.window, False, NoEventMask, &ce);
+ }
+
+ if (screen->isSloppyFocus() && screen->doAutoRaise())
+ timer->start();
+
+ ret = True;
+ }
+
+ openbox->ungrab();
+
+ return ret;
+}
+
+
+void OpenboxWindow::iconify(void) {
+ if (flags.iconic) return;
+
+ if (windowmenu) windowmenu->hide();
+
+ setState(IconicState);
+
+ XSelectInput(display, client.window, NoEventMask);
+ XUnmapWindow(display, client.window);
+ XSelectInput(display, client.window,
+ PropertyChangeMask | StructureNotifyMask | FocusChangeMask);
+
+ XUnmapWindow(display, frame.window);
+ flags.visible = False;
+ flags.iconic = True;
+
+ screen->getWorkspace(workspace_number)->removeWindow(this);
+
+ if (flags.transient && client.transient_for &&
+ !client.transient_for->flags.iconic) {
+ client.transient_for->iconify();
+ }
+ screen->addIcon(this);
+
+ if (client.transient && !client.transient->flags.iconic) {
+ client.transient->iconify();
+ }
+}
+
+
+void OpenboxWindow::deiconify(Bool reassoc, Bool raise) {
+ if (flags.iconic || reassoc)
+ screen->reassociateWindow(this, -1, False);
+ else if (workspace_number != screen->getCurrentWorkspace()->getWorkspaceID())
+ return;
+
+ setState(NormalState);
+
+ XSelectInput(display, client.window, NoEventMask);
+ XMapWindow(display, client.window);
+ XSelectInput(display, client.window,
+ PropertyChangeMask | StructureNotifyMask | FocusChangeMask);
+
+ XMapSubwindows(display, frame.window);
+ XMapWindow(display, frame.window);
+
+ if (flags.iconic && screen->doFocusNew()) setInputFocus();
+
+ flags.visible = True;
+ flags.iconic = False;
+
+ if (reassoc && client.transient) client.transient->deiconify(True, False);
+
+ if (raise)
+ screen->getWorkspace(workspace_number)->raiseWindow(this);
+}
+
+
+void OpenboxWindow::close(void) {
+ XEvent ce;
+ ce.xclient.type = ClientMessage;
+ ce.xclient.message_type = openbox->getWMProtocolsAtom();
+ ce.xclient.display = display;
+ ce.xclient.window = client.window;
+ ce.xclient.format = 32;
+ ce.xclient.data.l[0] = openbox->getWMDeleteAtom();
+ ce.xclient.data.l[1] = CurrentTime;
+ ce.xclient.data.l[2] = 0l;
+ ce.xclient.data.l[3] = 0l;
+ ce.xclient.data.l[4] = 0l;
+ XSendEvent(display, client.window, False, NoEventMask, &ce);
+}
+
+
+void OpenboxWindow::withdraw(void) {
+ flags.visible = False;
+ flags.iconic = False;
+
+ XUnmapWindow(display, frame.window);
+
+ XSelectInput(display, client.window, NoEventMask);
+ XUnmapWindow(display, client.window);
+ XSelectInput(display, client.window,
+ PropertyChangeMask | StructureNotifyMask | FocusChangeMask);
+
+ if (windowmenu) windowmenu->hide();
+}
+
+
+void OpenboxWindow::maximize(unsigned int button) {
+ // handle case where menu is open then the max button is used instead
+ if (windowmenu && windowmenu->isVisible()) windowmenu->hide();
+
+ if (flags.maximized) {
+ flags.maximized = 0;
+
+ openbox_attrib.flags &= ! (AttribMaxHoriz | AttribMaxVert);
+ openbox_attrib.attrib &= ! (AttribMaxHoriz | AttribMaxVert);
+
+ // when a resize is begun, maximize(0) is called to clear any maximization
+ // flags currently set. Otherwise it still thinks it is maximized.
+ // so we do not need to call configure() because resizing will handle it
+ if (!flags.resizing)
+ configure(openbox_attrib.premax_x, openbox_attrib.premax_y,
+ openbox_attrib.premax_w, openbox_attrib.premax_h);
+
+ openbox_attrib.premax_x = openbox_attrib.premax_y = 0;
+ openbox_attrib.premax_w = openbox_attrib.premax_h = 0;
+
+ redrawAllButtons();
+ setState(current_state);
+ return;
+ }
+
+ int dx = 0, dy = 0;
+ unsigned int dw, dh;
+
+ openbox_attrib.premax_x = frame.x;
+ openbox_attrib.premax_y = frame.y;
+ openbox_attrib.premax_w = frame.width;
+ openbox_attrib.premax_h = frame.height;
+
+ dw = screen->getWidth();
+ dw -= frame.border_w * 2;
+ dw -= frame.mwm_border_w * 2;
+ dw -= client.base_width;
+
+ dh = screen->getHeight();
+ dh -= frame.border_w * 2;
+ dh -= frame.mwm_border_w * 2;
+ dh -= ((frame.handle_h + frame.border_w) * decorations.handle);
+ dh -= client.base_height;
+ dh -= frame.y_border;
+
+ if (! screen->doFullMax())
+ dh -= screen->getToolbar()->getExposedHeight() + frame.border_w;
+
+ if (dw < client.min_width) dw = client.min_width;
+ if (dh < client.min_height) dh = client.min_height;
+ if (dw > client.max_width) dw = client.max_width;
+ if (dh > client.max_height) dh = client.max_height;
+
+ dw -= (dw % client.width_inc);
+ dw += client.base_width;
+ dw += frame.mwm_border_w * 2;
+
+ dh -= (dh % client.height_inc);
+ dh += client.base_height;
+ dh += frame.y_border;
+ dh += ((frame.handle_h + frame.border_w) * decorations.handle);
+ dh += frame.mwm_border_w * 2;
+
+ dx += ((screen->getWidth() - dw) / 2) - frame.border_w;
+
+ if (screen->doFullMax()) {
+ dy += ((screen->getHeight() - dh) / 2) - frame.border_w;
+ } else {
+ dy += (((screen->getHeight() - screen->getToolbar()->getExposedHeight())
+ - dh) / 2) - frame.border_w;
+
+ switch (screen->getToolbarPlacement()) {
+ case Toolbar::TopLeft:
+ case Toolbar::TopCenter:
+ case Toolbar::TopRight:
+ dy += screen->getToolbar()->getExposedHeight() +
+ frame.border_w;
+ break;
+ }
+ }
+
+ switch(button) {
+ case 1:
+ openbox_attrib.flags |= AttribMaxHoriz | AttribMaxVert;
+ openbox_attrib.attrib |= AttribMaxHoriz | AttribMaxVert;
+ break;
+
+ case 2:
+ openbox_attrib.flags |= AttribMaxVert;
+ openbox_attrib.attrib |= AttribMaxVert;
+
+ dw = frame.width;
+ dx = frame.x;
+ break;
+
+ case 3:
+ openbox_attrib.flags |= AttribMaxHoriz;
+ openbox_attrib.attrib |= AttribMaxHoriz;
+
+ dh = frame.height;
+ dy = frame.y;
+ break;
+ }
+
+ if (flags.shaded) {
+ openbox_attrib.flags ^= AttribShaded;
+ openbox_attrib.attrib ^= AttribShaded;
+ flags.shaded = False;
+ }
+
+ flags.maximized = button;
+
+ configure(dx, dy, dw, dh);
+ screen->getWorkspace(workspace_number)->raiseWindow(this);
+ redrawAllButtons();
+ setState(current_state);
+}
+
+
+void OpenboxWindow::setWorkspace(int n) {
+ workspace_number = n;
+
+ openbox_attrib.flags |= AttribWorkspace;
+ openbox_attrib.workspace = workspace_number;
+}
+
+
+void OpenboxWindow::shade(void) {
+ if (!decorations.titlebar)
+ return;
+
+ if (flags.shaded) {
+ XResizeWindow(display, frame.window, frame.width, frame.height);
+ flags.shaded = False;
+ openbox_attrib.flags ^= AttribShaded;
+ openbox_attrib.attrib ^= AttribShaded;
+
+ setState(NormalState);
+ } else {
+ XResizeWindow(display, frame.window, frame.width, frame.title_h);
+ flags.shaded = True;
+ openbox_attrib.flags |= AttribShaded;
+ openbox_attrib.attrib |= AttribShaded;
+
+ setState(IconicState);
+ }
+}
+
+
+void OpenboxWindow::stick(void) {
+ if (flags.stuck) {
+ openbox_attrib.flags ^= AttribOmnipresent;
+ openbox_attrib.attrib ^= AttribOmnipresent;
+
+ flags.stuck = False;
+
+ if (! flags.iconic)
+ screen->reassociateWindow(this, -1, True);
+
+ setState(current_state);
+ } else {
+ flags.stuck = True;
+
+ openbox_attrib.flags |= AttribOmnipresent;
+ openbox_attrib.attrib |= AttribOmnipresent;
+
+ setState(current_state);
+ }
+}
+
+
+void OpenboxWindow::setFocusFlag(Bool focus) {
+ flags.focused = focus;
+
+ if (decorations.titlebar) {
+ if (flags.focused) {
+ if (frame.ftitle)
+ XSetWindowBackgroundPixmap(display, frame.title, frame.ftitle);
+ else
+ XSetWindowBackground(display, frame.title, frame.ftitle_pixel);
+ } else {
+ if (frame.utitle)
+ XSetWindowBackgroundPixmap(display, frame.title, frame.utitle);
+ else
+ XSetWindowBackground(display, frame.title, frame.utitle_pixel);
+ }
+ XClearWindow(display, frame.title);
+
+ redrawLabel();
+ redrawAllButtons();
+ }
+
+ if (decorations.handle) {
+ if (flags.focused) {
+ if (frame.fhandle)
+ XSetWindowBackgroundPixmap(display, frame.handle, frame.fhandle);
+ else
+ XSetWindowBackground(display, frame.handle, frame.fhandle_pixel);
+
+ if (frame.fgrip) {
+ XSetWindowBackgroundPixmap(display, frame.right_grip, frame.fgrip);
+ XSetWindowBackgroundPixmap(display, frame.left_grip, frame.fgrip);
+ } else {
+ XSetWindowBackground(display, frame.right_grip, frame.fgrip_pixel);
+ XSetWindowBackground(display, frame.left_grip, frame.fgrip_pixel);
+ }
+ } else {
+ if (frame.uhandle)
+ XSetWindowBackgroundPixmap(display, frame.handle, frame.uhandle);
+ else
+ XSetWindowBackground(display, frame.handle, frame.uhandle_pixel);
+
+ if (frame.ugrip) {
+ XSetWindowBackgroundPixmap(display, frame.right_grip, frame.ugrip);
+ XSetWindowBackgroundPixmap(display, frame.left_grip, frame.ugrip);
+ } else {
+ XSetWindowBackground(display, frame.right_grip, frame.ugrip_pixel);
+ XSetWindowBackground(display, frame.left_grip, frame.ugrip_pixel);
+ }
+ }
+ XClearWindow(display, frame.handle);
+ XClearWindow(display, frame.right_grip);
+ XClearWindow(display, frame.left_grip);
+ }
+
+ if (decorations.border) {
+ if (flags.focused)
+ XSetWindowBorder(display, frame.plate, frame.fborder_pixel);
+ else
+ XSetWindowBorder(display, frame.plate, frame.uborder_pixel);
+ }
+
+ if (screen->isSloppyFocus() && screen->doAutoRaise() && timer->isTiming())
+ timer->stop();
+}
+
+
+void OpenboxWindow::installColormap(Bool install) {
+ openbox->grab();
+ if (! validateClient()) return;
+
+ int i = 0, ncmap = 0;
+ Colormap *cmaps = XListInstalledColormaps(display, client.window, &ncmap);
+ XWindowAttributes wattrib;
+ if (cmaps) {
+ if (XGetWindowAttributes(display, client.window, &wattrib)) {
+ if (install) {
+ // install the window's colormap
+ for (i = 0; i < ncmap; i++) {
+ if (*(cmaps + i) == wattrib.colormap)
+ // this window is using an installed color map... do not install
+ install = False;
+ }
+ // otherwise, install the window's colormap
+ if (install)
+ XInstallColormap(display, wattrib.colormap);
+ } else {
+ // uninstall the window's colormap
+ for (i = 0; i < ncmap; i++) {
+ if (*(cmaps + i) == wattrib.colormap)
+ // we found the colormap to uninstall
+ XUninstallColormap(display, wattrib.colormap);
+ }
+ }
+ }
+
+ XFree(cmaps);
+ }
+
+ openbox->ungrab();
+}
+
+
+void OpenboxWindow::setState(unsigned long new_state) {
+ current_state = new_state;
+
+ unsigned long state[2];
+ state[0] = (unsigned long) current_state;
+ state[1] = (unsigned long) None;
+ XChangeProperty(display, client.window, openbox->getWMStateAtom(),
+ openbox->getWMStateAtom(), 32, PropModeReplace,
+ (unsigned char *) state, 2);
+
+ XChangeProperty(display, client.window,
+ openbox->getOpenboxAttributesAtom(),
+ openbox->getOpenboxAttributesAtom(), 32, PropModeReplace,
+ (unsigned char *) &openbox_attrib,
+ PropOpenboxAttributesElements);
+}
+
+
+Bool OpenboxWindow::getState(void) {
+ current_state = 0;
+
+ Atom atom_return;
+ Bool ret = False;
+ int foo;
+ unsigned long *state, ulfoo, nitems;
+
+ if ((XGetWindowProperty(display, client.window, openbox->getWMStateAtom(),
+ 0l, 2l, False, openbox->getWMStateAtom(),
+ &atom_return, &foo, &nitems, &ulfoo,
+ (unsigned char **) &state) != Success) ||
+ (! state)) {
+ openbox->ungrab();
+ return False;
+ }
+
+ if (nitems >= 1) {
+ current_state = (unsigned long) state[0];
+
+ ret = True;
+ }
+
+ XFree((void *) state);
+
+ return ret;
+}
+
+
+void OpenboxWindow::setGravityOffsets(void) {
+ // x coordinates for each gravity type
+ const int x_west = client.x;
+ const int x_east = client.x + client.width - frame.width;
+ const int x_center = client.x + client.width - frame.width/2;
+ // y coordinates for each gravity type
+ const int y_north = client.y;
+ const int y_south = client.y + client.height - frame.height;
+ const int y_center = client.y + client.height - frame.height/2;
+
+ switch (client.win_gravity) {
+ case NorthWestGravity:
+ default:
+ frame.x = x_west;
+ frame.y = y_north;
+ break;
+ case NorthGravity:
+ frame.x = x_center;
+ frame.y = y_north;
+ break;
+ case NorthEastGravity:
+ frame.x = x_east;
+ frame.y = y_north;
+ break;
+ case SouthWestGravity:
+ frame.x = x_west;
+ frame.y = y_south;
+ break;
+ case SouthGravity:
+ frame.x = x_center;
+ frame.y = y_south;
+ break;
+ case SouthEastGravity:
+ frame.x = x_east;
+ frame.y = y_south;
+ break;
+ case WestGravity:
+ frame.x = x_west;
+ frame.y = y_center;
+ break;
+ case EastGravity:
+ frame.x = x_east;
+ frame.y = y_center;
+ break;
+ case CenterGravity:
+ frame.x = x_center;
+ frame.y = y_center;
+ break;
+ case ForgetGravity:
+ case StaticGravity:
+ frame.x = client.x - frame.mwm_border_w + frame.border_w;
+ frame.y = client.y - frame.y_border - frame.mwm_border_w - frame.border_w;
+ break;
+ }
+}
+
+
+void OpenboxWindow::restoreAttributes(void) {
+ if (! getState()) current_state = NormalState;
+
+ Atom atom_return;
+ int foo;
+ unsigned long ulfoo, nitems;
+
+ OpenboxAttributes *net;
+ int ret = XGetWindowProperty(display, client.window,
+ openbox->getOpenboxAttributesAtom(), 0l,
+ PropOpenboxAttributesElements, False,
+ openbox->getOpenboxAttributesAtom(),
+ &atom_return, &foo, &nitems, &ulfoo,
+ (unsigned char **) &net);
+ if (ret != Success || !net || nitems != PropOpenboxAttributesElements)
+ return;
+
+ openbox_attrib.flags = net->flags;
+ openbox_attrib.attrib = net->attrib;
+ openbox_attrib.decoration = net->decoration;
+ openbox_attrib.workspace = net->workspace;
+ openbox_attrib.stack = net->stack;
+ openbox_attrib.premax_x = net->premax_x;
+ openbox_attrib.premax_y = net->premax_y;
+ openbox_attrib.premax_w = net->premax_w;
+ openbox_attrib.premax_h = net->premax_h;
+
+ XFree((void *) net);
+
+ if (openbox_attrib.flags & AttribShaded &&
+ openbox_attrib.attrib & AttribShaded) {
+ int save_state =
+ ((current_state == IconicState) ? NormalState : current_state);
+
+ flags.shaded = False;
+ shade();
+
+ current_state = save_state;
+ }
+
+ if (((int) openbox_attrib.workspace != screen->getCurrentWorkspaceID()) &&
+ ((int) openbox_attrib.workspace < screen->getCount())) {
+ screen->reassociateWindow(this, openbox_attrib.workspace, True);
+
+ if (current_state == NormalState) current_state = WithdrawnState;
+ } else if (current_state == WithdrawnState) {
+ current_state = NormalState;
+ }
+
+ if (openbox_attrib.flags & AttribOmnipresent &&
+ openbox_attrib.attrib & AttribOmnipresent) {
+ flags.stuck = False;
+ stick();
+
+ current_state = NormalState;
+ }
+
+ if ((openbox_attrib.flags & AttribMaxHoriz) ||
+ (openbox_attrib.flags & AttribMaxVert)) {
+ int x = openbox_attrib.premax_x, y = openbox_attrib.premax_y;
+ unsigned int w = openbox_attrib.premax_w, h = openbox_attrib.premax_h;
+ flags.maximized = 0;
+
+ unsigned int m = False;
+ if ((openbox_attrib.flags & AttribMaxHoriz) &&
+ (openbox_attrib.flags & AttribMaxVert))
+ m = (openbox_attrib.attrib & (AttribMaxHoriz | AttribMaxVert)) ? 1 : 0;
+ else if (openbox_attrib.flags & AttribMaxVert)
+ m = (openbox_attrib.attrib & AttribMaxVert) ? 2 : 0;
+ else if (openbox_attrib.flags & AttribMaxHoriz)
+ m = (openbox_attrib.attrib & AttribMaxHoriz) ? 3 : 0;
+
+ if (m) maximize(m);
+
+ openbox_attrib.premax_x = x;
+ openbox_attrib.premax_y = y;
+ openbox_attrib.premax_w = w;
+ openbox_attrib.premax_h = h;
+ }
+
+ setState(current_state);
+}
+
+
+/*
+ * The reverse of the setGravityOffsets function. Uses the frame window's
+ * position to find the window's reference point.
+ */
+void OpenboxWindow::restoreGravity(void) {
+ // x coordinates for each gravity type
+ const int x_west = frame.x;
+ const int x_east = frame.x + frame.width - client.width;
+ const int x_center = frame.x + (frame.width/2) - client.width;
+ // y coordinates for each gravity type
+ const int y_north = frame.y;
+ const int y_south = frame.y + frame.height - client.height;
+ const int y_center = frame.y + (frame.height/2) - client.height;
+
+ switch(client.win_gravity) {
+ default:
+ case NorthWestGravity:
+ client.x = x_west;
+ client.y = y_north;
+ break;
+ case NorthGravity:
+ client.x = x_center;
+ client.y = y_north;
+ break;
+ case NorthEastGravity:
+ client.x = x_east;
+ client.y = y_north;
+ break;
+ case SouthWestGravity:
+ client.x = x_west;
+ client.y = y_south;
+ break;
+ case SouthGravity:
+ client.x = x_center;
+ client.y = y_south;
+ break;
+ case SouthEastGravity:
+ client.x = x_east;
+ client.y = y_south;
+ break;
+ case WestGravity:
+ client.x = x_west;
+ client.y = y_center;
+ break;
+ case EastGravity:
+ client.x = x_east;
+ client.y = y_center;
+ break;
+ case CenterGravity:
+ client.x = x_center;
+ client.y = y_center;
+ break;
+ case ForgetGravity:
+ case StaticGravity:
+ client.x = frame.x + frame.mwm_border_w + frame.border_w;
+ client.y = frame.y + frame.y_border + frame.mwm_border_w +
+ frame.border_w;
+ break;
+ }
+}
+
+
+void OpenboxWindow::redrawLabel(void) {
+ int dx = frame.bevel_w * 2, dlen = client.title_len;
+ unsigned int l = client.title_text_w;
+
+ if (flags.focused) {
+ if (frame.flabel)
+ XSetWindowBackgroundPixmap(display, frame.label, frame.flabel);
+ else
+ XSetWindowBackground(display, frame.label, frame.flabel_pixel);
+ } else {
+ if (frame.ulabel)
+ XSetWindowBackgroundPixmap(display, frame.label, frame.ulabel);
+ else
+ XSetWindowBackground(display, frame.label, frame.ulabel_pixel);
+ }
+ XClearWindow(display, frame.label);
+
+ if (client.title_text_w > frame.label_w) {
+ for (; dlen >= 0; dlen--) {
+ if (i18n->multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getWindowStyle()->fontset, client.title, dlen,
+ &ink, &logical);
+ l = logical.width;
+ } else {
+ l = XTextWidth(screen->getWindowStyle()->font, client.title, dlen);
+ }
+ l += (frame.bevel_w * 4);
+
+ if (l < frame.label_w)
+ break;
+ }
+ }
+
+ switch (screen->getWindowStyle()->justify) {
+ case BScreen::RightJustify:
+ dx += frame.label_w - l;
+ break;
+
+ case BScreen::CenterJustify:
+ dx += (frame.label_w - l) / 2;
+ break;
+ }
+
+ WindowStyle *style = screen->getWindowStyle();
+ GC text_gc = (flags.focused) ? style->l_text_focus_gc :
+ style->l_text_unfocus_gc;
+ if (i18n->multibyte())
+ XmbDrawString(display, frame.label, style->fontset, text_gc, dx,
+ (1 - style->fontset_extents->max_ink_extent.y),
+ client.title, dlen);
+ else
+ XDrawString(display, frame.label, text_gc, dx,
+ (style->font->ascent + 1), client.title, dlen);
+}
+
+
+void OpenboxWindow::redrawAllButtons(void) {
+ if (frame.iconify_button) redrawIconifyButton(False);
+ if (frame.maximize_button) redrawMaximizeButton(flags.maximized);
+ if (frame.close_button) redrawCloseButton(False);
+}
+
+
+void OpenboxWindow::redrawIconifyButton(Bool pressed) {
+ if (! pressed) {
+ if (flags.focused) {
+ if (frame.fbutton)
+ XSetWindowBackgroundPixmap(display, frame.iconify_button,
+ frame.fbutton);
+ else
+ XSetWindowBackground(display, frame.iconify_button,
+ frame.fbutton_pixel);
+ } else {
+ if (frame.ubutton)
+ XSetWindowBackgroundPixmap(display, frame.iconify_button,
+ frame.ubutton);
+ else
+ XSetWindowBackground(display, frame.iconify_button,
+ frame.ubutton_pixel);
+ }
+ } else {
+ if (frame.pbutton)
+ XSetWindowBackgroundPixmap(display, frame.iconify_button, frame.pbutton);
+ else
+ XSetWindowBackground(display, frame.iconify_button, frame.pbutton_pixel);
+ }
+ XClearWindow(display, frame.iconify_button);
+
+ XDrawRectangle(display, frame.iconify_button,
+ ((flags.focused) ? screen->getWindowStyle()->b_pic_focus_gc :
+ screen->getWindowStyle()->b_pic_unfocus_gc),
+ 2, (frame.button_h - 5), (frame.button_w - 5), 2);
+}
+
+
+void OpenboxWindow::redrawMaximizeButton(Bool pressed) {
+ if (! pressed) {
+ if (flags.focused) {
+ if (frame.fbutton)
+ XSetWindowBackgroundPixmap(display, frame.maximize_button,
+ frame.fbutton);
+ else
+ XSetWindowBackground(display, frame.maximize_button,
+ frame.fbutton_pixel);
+ } else {
+ if (frame.ubutton)
+ XSetWindowBackgroundPixmap(display, frame.maximize_button,
+ frame.ubutton);
+ else
+ XSetWindowBackground(display, frame.maximize_button,
+ frame.ubutton_pixel);
+ }
+ } else {
+ if (frame.pbutton)
+ XSetWindowBackgroundPixmap(display, frame.maximize_button,
+ frame.pbutton);
+ else
+ XSetWindowBackground(display, frame.maximize_button,
+ frame.pbutton_pixel);
+ }
+ XClearWindow(display, frame.maximize_button);
+
+ XDrawRectangle(display, frame.maximize_button,
+ ((flags.focused) ? screen->getWindowStyle()->b_pic_focus_gc :
+ screen->getWindowStyle()->b_pic_unfocus_gc),
+ 2, 2, (frame.button_w - 5), (frame.button_h - 5));
+ XDrawLine(display, frame.maximize_button,
+ ((flags.focused) ? screen->getWindowStyle()->b_pic_focus_gc :
+ screen->getWindowStyle()->b_pic_unfocus_gc),
+ 2, 3, (frame.button_w - 3), 3);
+}
+
+
+void OpenboxWindow::redrawCloseButton(Bool pressed) {
+ if (! pressed) {
+ if (flags.focused) {
+ if (frame.fbutton)
+ XSetWindowBackgroundPixmap(display, frame.close_button,
+ frame.fbutton);
+ else
+ XSetWindowBackground(display, frame.close_button,
+ frame.fbutton_pixel);
+ } else {
+ if (frame.ubutton)
+ XSetWindowBackgroundPixmap(display, frame.close_button,
+ frame.ubutton);
+ else
+ XSetWindowBackground(display, frame.close_button,
+ frame.ubutton_pixel);
+ }
+ } else {
+ if (frame.pbutton)
+ XSetWindowBackgroundPixmap(display, frame.close_button, frame.pbutton);
+ else
+ XSetWindowBackground(display, frame.close_button, frame.pbutton_pixel);
+ }
+ XClearWindow(display, frame.close_button);
+
+ XDrawLine(display, frame.close_button,
+ ((flags.focused) ? screen->getWindowStyle()->b_pic_focus_gc :
+ screen->getWindowStyle()->b_pic_unfocus_gc), 2, 2,
+ (frame.button_w - 3), (frame.button_h - 3));
+ XDrawLine(display, frame.close_button,
+ ((flags.focused) ? screen->getWindowStyle()->b_pic_focus_gc :
+ screen->getWindowStyle()->b_pic_unfocus_gc), 2,
+ (frame.button_h - 3),
+ (frame.button_w - 3), 2);
+}
+
+
+void OpenboxWindow::mapRequestEvent(XMapRequestEvent *re) {
+ if (re->window == client.window) {
+#ifdef DEBUG
+ fprintf(stderr, i18n->getMessage(WindowSet, WindowMapRequest,
+ "OpenboxWindow::mapRequestEvent() for 0x%lx\n"),
+ client.window);
+#endif // DEBUG
+
+ openbox->grab();
+ if (! validateClient()) return;
+
+ Bool get_state_ret = getState();
+ if (! (get_state_ret && openbox->isStartup())) {
+ if ((client.wm_hint_flags & StateHint) &&
+ (! (current_state == NormalState || current_state == IconicState)))
+ current_state = client.initial_state;
+ else
+ current_state = NormalState;
+ } else if (flags.iconic) {
+ current_state = NormalState;
+ }
+
+ switch (current_state) {
+ case IconicState:
+ iconify();
+ break;
+
+ case WithdrawnState:
+ withdraw();
+ break;
+
+ case NormalState:
+ case InactiveState:
+ case ZoomState:
+ default:
+ deiconify(False);
+ break;
+ }
+
+ openbox->ungrab();
+ }
+}
+
+
+void OpenboxWindow::mapNotifyEvent(XMapEvent *ne) {
+ if ((ne->window == client.window) && (! ne->override_redirect)
+ && (flags.visible)) {
+ openbox->grab();
+ if (! validateClient()) return;
+
+ if (decorations.titlebar) positionButtons();
+
+ setState(NormalState);
+
+ redrawAllButtons();
+
+ if (flags.transient || screen->doFocusNew())
+ setInputFocus();
+ else
+ setFocusFlag(False);
+
+ flags.visible = True;
+ flags.iconic = False;
+
+ openbox->ungrab();
+ }
+}
+
+
+void OpenboxWindow::unmapNotifyEvent(XUnmapEvent *ue) {
+ if (ue->window == client.window) {
+#ifdef DEBUG
+ fprintf(stderr, i18n->getMessage(WindowSet, WindowUnmapNotify,
+ "OpenboxWindow::unmapNotifyEvent() for 0x%lx\n"),
+ client.window);
+#endif // DEBUG
+
+ openbox->grab();
+ if (! validateClient()) return;
+
+ XChangeSaveSet(display, client.window, SetModeDelete);
+ XSelectInput(display, client.window, NoEventMask);
+
+ XDeleteProperty(display, client.window, openbox->getWMStateAtom());
+ XDeleteProperty(display, client.window,
+ openbox->getOpenboxAttributesAtom());
+
+ XUnmapWindow(display, frame.window);
+ XUnmapWindow(display, client.window);
+
+ XEvent dummy;
+ if (! XCheckTypedWindowEvent(display, client.window, ReparentNotify,
+ &dummy)) {
+#ifdef DEBUG
+ fprintf(stderr, i18n->getMessage(WindowSet, WindowUnmapNotifyReparent,
+ "OpenboxWindow::unmapNotifyEvent(): reparent 0x%lx to "
+ "root.\n"), client.window);
+#endif // DEBUG
+
+ restoreGravity();
+ XReparentWindow(display, client.window, screen->getRootWindow(),
+ client.x, client.y);
+ }
+
+ XFlush(display);
+
+ openbox->ungrab();
+
+ delete this;
+ }
+}
+
+
+void OpenboxWindow::destroyNotifyEvent(XDestroyWindowEvent *de) {
+ if (de->window == client.window) {
+ XUnmapWindow(display, frame.window);
+
+ delete this;
+ }
+}
+
+
+void OpenboxWindow::propertyNotifyEvent(Atom atom) {
+ openbox->grab();
+ if (! validateClient()) return;
+
+ switch(atom) {
+ case XA_WM_CLASS:
+ case XA_WM_CLIENT_MACHINE:
+ case XA_WM_COMMAND:
+ break;
+
+ case XA_WM_TRANSIENT_FOR:
+ // determine if this is a transient window
+ Window win;
+ if (XGetTransientForHint(display, client.window, &win)) {
+ if (win && (win != client.window)) {
+ if ((client.transient_for = openbox->searchWindow(win))) {
+ client.transient_for->client.transient = this;
+ flags.stuck = client.transient_for->flags.stuck;
+ flags.transient = True;
+ } else if (win == client.window_group) {
+ //jr This doesn't look quite right...
+ if ((client.transient_for = openbox->searchGroup(win, this))) {
+ client.transient_for->client.transient = this;
+ flags.stuck = client.transient_for->flags.stuck;
+ flags.transient = True;
+ }
+ }
+ }
+
+ if (win == screen->getRootWindow()) flags.modal = True;
+ }
+
+ // adjust the window decorations based on transience
+ if (flags.transient)
+ decorations.maximize = decorations.handle = functions.maximize = False;
+
+ reconfigure();
+
+ break;
+
+ case XA_WM_HINTS:
+ getWMHints();
+ break;
+
+ case XA_WM_ICON_NAME:
+ getWMIconName();
+ if (flags.iconic) screen->iconUpdate();
+ break;
+
+ case XA_WM_NAME:
+ getWMName();
+
+ if (decorations.titlebar)
+ redrawLabel();
+
+ if (! flags.iconic)
+ screen->getWorkspace(workspace_number)->update();
+
+ break;
+
+ case XA_WM_NORMAL_HINTS: {
+ getWMNormalHints();
+
+ if ((client.normal_hint_flags & PMinSize) &&
+ (client.normal_hint_flags & PMaxSize)) {
+ if (client.max_width <= client.min_width &&
+ client.max_height <= client.min_height)
+ decorations.maximize = decorations.handle =
+ functions.resize = functions.maximize = False;
+ else
+ decorations.maximize = decorations.handle =
+ functions.resize = functions.maximize = True;
+ }
+
+ int x = frame.x, y = frame.y;
+ unsigned int w = frame.width, h = frame.height;
+
+ upsize();
+
+ if ((x != frame.x) || (y != frame.y) ||
+ (w != frame.width) || (h != frame.height))
+ reconfigure();
+
+ break;
+ }
+
+ default:
+ if (atom == openbox->getWMProtocolsAtom()) {
+ getWMProtocols();
+
+ if (decorations.close && (! frame.close_button)) {
+ createCloseButton();
+ if (decorations.titlebar) positionButtons(True);
+ if (windowmenu) windowmenu->reconfigure();
+ }
+ }
+
+ break;
+ }
+
+ openbox->ungrab();
+}
+
+
+void OpenboxWindow::exposeEvent(XExposeEvent *ee) {
+ if (frame.label == ee->window && decorations.titlebar)
+ redrawLabel();
+ else if (frame.close_button == ee->window)
+ redrawCloseButton(False);
+ else if (frame.maximize_button == ee->window)
+ redrawMaximizeButton(flags.maximized);
+ else if (frame.iconify_button == ee->window)
+ redrawIconifyButton(False);
+}
+
+
+void OpenboxWindow::configureRequestEvent(XConfigureRequestEvent *cr) {
+ if (cr->window == client.window) {
+ openbox->grab();
+ if (! validateClient()) return;
+
+ int cx = frame.x, cy = frame.y;
+ unsigned int cw = frame.width, ch = frame.height;
+
+ if (cr->value_mask & CWBorderWidth)
+ client.old_bw = cr->border_width;
+
+ if (cr->value_mask & CWX)
+ cx = cr->x - frame.mwm_border_w - frame.border_w;
+
+ if (cr->value_mask & CWY)
+ cy = cr->y - frame.y_border - frame.mwm_border_w -
+ frame.border_w;
+
+ if (cr->value_mask & CWWidth)
+ cw = cr->width + (frame.mwm_border_w * 2);
+
+ if (cr->value_mask & CWHeight)
+ ch = cr->height + frame.y_border + (frame.mwm_border_w * 2) +
+ (frame.border_w * decorations.handle) + frame.handle_h;
+
+ if (frame.x != cx || frame.y != cy ||
+ frame.width != cw || frame.height != ch)
+ configure(cx, cy, cw, ch);
+
+ if (cr->value_mask & CWStackMode) {
+ switch (cr->detail) {
+ case Above:
+ case TopIf:
+ default:
+ if (flags.iconic) deiconify();
+ screen->getWorkspace(workspace_number)->raiseWindow(this);
+ break;
+
+ case Below:
+ case BottomIf:
+ if (flags.iconic) deiconify();
+ screen->getWorkspace(workspace_number)->lowerWindow(this);
+ break;
+ }
+ }
+
+ openbox->ungrab();
+ }
+}
+
+
+void OpenboxWindow::buttonPressEvent(XButtonEvent *be) {
+ openbox->grab();
+ if (! validateClient())
+ return;
+
+ int stack_change = 1; // < 0 means to lower the window
+ // > 0 means to raise the window
+ // 0 means to leave it where it is
+
+ // alt + left/right click begins interactively moving/resizing the window
+ // when the mouse is moved
+ if (be->state == Mod1Mask && (be->button == 1 || be->button == 3)) {
+ frame.grab_x = be->x_root - frame.x - frame.border_w;
+ frame.grab_y = be->y_root - frame.y - frame.border_w;
+ if (be->button == 3) {
+ if (screen->getWindowZones() == 4 &&
+ be->y < (signed) frame.height / 2) {
+ resize_zone = ZoneTop;
+ } else {
+ resize_zone = ZoneBottom;
+ }
+ if (screen->getWindowZones() >= 2 &&
+ be->x < (signed) frame.width / 2) {
+ resize_zone |= ZoneLeft;
+ } else {
+ resize_zone |= ZoneRight;
+ }
+ }
+ // control + left click on the titlebar shades the window
+ } else if (be->state == ControlMask && be->button == 1) {
+ if (be->window == frame.title ||
+ be->window == frame.label)
+ shade();
+ // left click
+ } else if (be->state == 0 && be->button == 1) {
+ if (windowmenu && windowmenu->isVisible())
+ windowmenu->hide();
+
+ if (be->window == frame.maximize_button) {
+ redrawMaximizeButton(True);
+ } else if (be->window == frame.iconify_button) {
+ redrawIconifyButton(True);
+ } else if (be->window == frame.close_button) {
+ redrawCloseButton(True);
+ } else if (be->window == frame.plate) {
+ XAllowEvents(display, ReplayPointer, be->time);
+ } else if (be->window == frame.title ||
+ be->window == frame.label) {
+ // shade the window when the titlebar is double clicked
+ if ( (be->time - lastButtonPressTime) <=
+ openbox->getDoubleClickInterval()) {
+ lastButtonPressTime = 0;
+ shade();
+ } else {
+ lastButtonPressTime = be->time;
+ }
+ // clicking and dragging on the titlebar moves the window, so on a click
+ // we need to save the coords of the click in case the user drags
+ frame.grab_x = be->x_root - frame.x - frame.border_w;
+ frame.grab_y = be->y_root - frame.y - frame.border_w;
+ } else if (be->window == frame.handle ||
+ be->window == frame.left_grip ||
+ be->window == frame.right_grip ||
+ be->window == frame.window) {
+ // clicking and dragging on the window's frame moves the window, so on a
+ // click we need to save the coords of the click in case the user drags
+ frame.grab_x = be->x_root - frame.x - frame.border_w;
+ frame.grab_y = be->y_root - frame.y - frame.border_w;
+ if (be->window == frame.left_grip)
+ resize_zone = ZoneBottom | ZoneLeft;
+ else if (be->window == frame.right_grip)
+ resize_zone = ZoneBottom | ZoneRight;
+ }
+ // middle click
+ } else if (be->state == 0 && be->button == 2) {
+ if (be->window == frame.maximize_button) {
+ redrawMaximizeButton(True);
+ // a middle click anywhere on the window's frame except for on the buttons
+ // will lower the window
+ } else if (! (be->window == frame.iconify_button ||
+ be->window == frame.close_button) ) {
+ stack_change = -1;
+ }
+ // right click
+ } else if (be->state == 0 && be->button == 3) {
+ if (be->window == frame.maximize_button) {
+ redrawMaximizeButton(True);
+ // a right click on the window's frame will show or hide the window's
+ // windowmenu
+ } else if (be->window == frame.title ||
+ be->window == frame.label ||
+ be->window == frame.handle ||
+ be->window == frame.window) {
+ int mx, my;
+ if (windowmenu) {
+ if (windowmenu->isVisible()) {
+ windowmenu->hide();
+ } else {
+ // get the coords for the menu
+ mx = be->x_root - windowmenu->getWidth() / 2;
+ if (be->window == frame.title || be->window == frame.label) {
+ my = frame.y + frame.title_h;
+ } else if (be->window = frame.handle) {
+ my = frame.y + frame.y_handle - windowmenu->getHeight();
+ } else { // (be->window == frame.window)
+ if (be->y <= (signed) frame.bevel_w) {
+ my = frame.y + frame.y_border;
+ } else {
+ my = be->y_root - (windowmenu->getHeight() / 2);
+ }
+ }
+
+ if (mx > (signed) (frame.x + frame.width -
+ windowmenu->getWidth())) {
+ mx = frame.x + frame.width - windowmenu->getWidth();
+ } else if (mx < frame.x) {
+ mx = frame.x;
+ }
+
+ if (my > (signed) (frame.y + frame.y_handle -
+ windowmenu->getHeight())) {
+ my = frame.y + frame.y_handle - windowmenu->getHeight();
+ } else if (my < (signed) (frame.y +
+ ((decorations.titlebar) ? frame.title_h : frame.y_border))) {
+ my = frame.y +
+ ((decorations.titlebar) ? frame.title_h : frame.y_border);
+ }
+
+ windowmenu->move(mx, my);
+ windowmenu->show();
+ XRaiseWindow(display, windowmenu->getWindowID());
+ XRaiseWindow(display, windowmenu->getSendToMenu()->getWindowID());
+ stack_change = 0; // dont raise the window overtop of the menu
+ }
+ }
+ }
+ // mouse wheel up
+ } else if (be->state == 0 && be->button == 4) {
+ if ((be->window == frame.label ||
+ be->window == frame.title) &&
+ !flags.shaded)
+ shade();
+ // mouse wheel down
+ } else if (be->state == 0 && be->button == 5) {
+ if ((be->window == frame.label ||
+ be->window == frame.title) &&
+ flags.shaded)
+ shade();
+ }
+
+ if (! (flags.focused || screen->isSloppyFocus()) ) {
+ setInputFocus(); // any click focus' the window in 'click to focus'
+ }
+ if (stack_change < 0) {
+ screen->getWorkspace(workspace_number)->lowerWindow(this);
+ } else if (stack_change > 0) {
+ screen->getWorkspace(workspace_number)->raiseWindow(this);
+ }
+
+ openbox->ungrab();
+}
+
+
+void OpenboxWindow::buttonReleaseEvent(XButtonEvent *re) {
+ openbox->grab();
+ if (! validateClient())
+ return;
+
+ // alt + middle button released
+ if (re->state == (Mod1Mask & Button2Mask) && re->button == 2) {
+ if (re->window == frame.window) {
+ XUngrabPointer(display, CurrentTime); // why? i dont know
+ }
+ // left button released
+ } else if (re->button == 1) {
+ if (re->window == frame.maximize_button) {
+ if (re->state == Button1Mask && // only the left button was depressed
+ (re->x >= 0) && ((unsigned) re->x <= frame.button_w) &&
+ (re->y >= 0) && ((unsigned) re->y <= frame.button_h)) {
+ maximize(re->button);
+ } else {
+ redrawMaximizeButton(False);
+ }
+ } else if (re->window == frame.iconify_button) {
+ if (re->state == Button1Mask && // only the left button was depressed
+ (re->x >= 0) && ((unsigned) re->x <= frame.button_w) &&
+ (re->y >= 0) && ((unsigned) re->y <= frame.button_h)) {
+ iconify();
+ } else {
+ redrawIconifyButton(False);
+ }
+ } else if (re->window == frame.close_button) {
+ if (re->state == Button1Mask && // only the left button was depressed
+ (re->x >= 0) && ((unsigned) re->x <= frame.button_w) &&
+ (re->y >= 0) && ((unsigned) re->y <= frame.button_h)) {
+ close();
+ } else {
+ redrawCloseButton(False);
+ }
+ }
+ // middle button released
+ } else if (re->button == 2) {
+ if (re->window == frame.maximize_button) {
+ if (re->state == Button2Mask && // only the middle button was depressed
+ (re->x >= 0) && ((unsigned) re->x <= frame.button_w) &&
+ (re->y >= 0) && ((unsigned) re->y <= frame.button_h)) {
+ maximize(re->button);
+ } else {
+ redrawMaximizeButton(False);
+ }
+ }
+ // right button released
+ } else if (re->button == 3) {
+ if (re->window == frame.maximize_button) {
+ if (re->state == Button3Mask && // only the right button was depressed
+ (re->x >= 0) && ((unsigned) re->x <= frame.button_w) &&
+ (re->y >= 0) && ((unsigned) re->y <= frame.button_h)) {
+ maximize(re->button);
+ } else {
+ redrawMaximizeButton(False);
+ }
+ }
+ }
+
+ // when the window is being interactively moved, a button release stops the
+ // move where it is
+ if (flags.moving) {
+ flags.moving = False;
+
+ openbox->maskWindowEvents(0, (OpenboxWindow *) 0);
+ if (!screen->doOpaqueMove()) {
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.move_x, frame.move_y, frame.resize_w - 1,
+ frame.resize_h - 1);
+
+ configure(frame.move_x, frame.move_y, frame.width, frame.height);
+ openbox->ungrab();
+ } else {
+ configure(frame.x, frame.y, frame.width, frame.height);
+ }
+ screen->hideGeometry();
+ XUngrabPointer(display, CurrentTime);
+ // when the window is being interactively resized, a button release stops the
+ // resizing
+ } else if (flags.resizing) {
+ flags.resizing = False;
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.resize_x, frame.resize_y,
+ frame.resize_w - 1, frame.resize_h - 1);
+ screen->hideGeometry();
+ if (resize_zone & ZoneLeft) {
+ left_fixsize();
+ } else { // when resizing with "Alt+Button3", the resize is the same as if
+ // done with the right grip (the right side of the window is what
+ // moves)
+ right_fixsize();
+ }
+ // unset maximized state when resized after fully maximized
+ if (flags.maximized == 1) {
+ maximize(0);
+ }
+ configure(frame.resize_x, frame.resize_y,
+ frame.resize_w - (frame.border_w * 2),
+ frame.resize_h - (frame.border_w * 2));
+ openbox->ungrab();
+ XUngrabPointer(display, CurrentTime);
+ resize_zone = 0;
+ }
+
+ openbox->ungrab();
+}
+
+
+void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
+ if (!flags.resizing && (me->state & Button1Mask) && functions.move &&
+ (frame.title == me->window || frame.label == me->window ||
+ frame.handle == me->window || frame.window == me->window)) {
+ if (! flags.moving) {
+ XGrabPointer(display, me->window, False, Button1MotionMask |
+ ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
+ None, openbox->getMoveCursor(), CurrentTime);
+
+ if (windowmenu && windowmenu->isVisible())
+ windowmenu->hide();
+
+ flags.moving = True;
+
+ openbox->maskWindowEvents(client.window, this);
+
+ if (! screen->doOpaqueMove()) {
+ openbox->grab();
+
+ frame.move_x = frame.x;
+ frame.move_y = frame.y;
+ frame.resize_w = frame.width + (frame.border_w * 2);
+ frame.resize_h = ((flags.shaded) ? frame.title_h : frame.height) +
+ (frame.border_w * 2);
+
+ screen->showPosition(frame.x, frame.y);
+
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.move_x, frame.move_y,
+ frame.resize_w - 1, frame.resize_h - 1);
+ }
+ } else {
+ int dx = me->x_root - frame.grab_x, dy = me->y_root - frame.grab_y;
+
+ dx -= frame.border_w;
+ dy -= frame.border_w;
+
+ int snap_distance = screen->getEdgeSnapThreshold();
+ if (snap_distance) {
+ int drx = screen->getWidth() - (dx + frame.snap_w);
+
+ if (dx < drx && (dx > 0 && dx < snap_distance) ||
+ (dx < 0 && dx > -snap_distance) )
+ dx = 0;
+ else if ( (drx > 0 && drx < snap_distance) ||
+ (drx < 0 && drx > -snap_distance) )
+ dx = screen->getWidth() - frame.snap_w;
+
+ int dtty, dbby, dty, dby;
+ switch (screen->getToolbarPlacement()) {
+ case Toolbar::TopLeft:
+ case Toolbar::TopCenter:
+ case Toolbar::TopRight:
+ dtty = screen->getToolbar()->getExposedHeight() +
+ frame.border_w;
+ dbby = screen->getHeight();
+ break;
+
+ default:
+ dtty = 0;
+ dbby = screen->getToolbar()->getY();
+ break;
+ }
+
+ dty = dy - dtty;
+ dby = dbby - (dy + frame.snap_h);
+
+ if ( (dy > 0 && dty < snap_distance) ||
+ (dy < 0 && dty > -snap_distance) )
+ dy = dtty;
+ else if ( (dby > 0 && dby < snap_distance) ||
+ (dby < 0 && dby > -snap_distance) )
+ dy = dbby - frame.snap_h;
+ }
+
+ if (screen->doOpaqueMove()) {
+ configure(dx, dy, frame.width, frame.height);
+ } else {
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.move_x, frame.move_y, frame.resize_w - 1,
+ frame.resize_h - 1);
+
+ frame.move_x = dx;
+ frame.move_y = dy;
+
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.move_x, frame.move_y, frame.resize_w - 1,
+ frame.resize_h - 1);
+ }
+
+ screen->showPosition(dx, dy);
+ }
+ } else if (functions.resize &&
+ (((me->state & Button1Mask) && (me->window == frame.right_grip ||
+ me->window == frame.left_grip)) ||
+ (me->state & (Mod1Mask | Button3Mask) &&
+ me->window == frame.window))) {
+ Bool left = resize_zone & ZoneLeft;
+
+ if (! flags.resizing) {
+ Cursor cursor;
+ if (resize_zone & ZoneTop)
+ cursor = (resize_zone & ZoneLeft) ?
+ openbox->getUpperLeftAngleCursor() :
+ openbox->getUpperRightAngleCursor();
+ else
+ cursor = (resize_zone & ZoneLeft) ?
+ openbox->getLowerLeftAngleCursor() :
+ openbox->getLowerRightAngleCursor();
+ XGrabPointer(display, me->window, False, ButtonMotionMask |
+ ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None,
+ cursor, CurrentTime);
+
+ flags.resizing = True;
+
+ openbox->grab();
+
+ int gx, gy;
+ if (resize_zone & ZoneRight)
+ frame.grab_x = me->x - screen->getBorderWidth();
+ else
+ frame.grab_x = me->x + screen->getBorderWidth();
+ if (resize_zone & ZoneTop)
+ frame.grab_y = me->y + screen->getBorderWidth() * 2;
+ else
+ frame.grab_y = me->y - screen->getBorderWidth() * 2;
+ frame.resize_x = frame.x;
+ frame.resize_y = frame.y;
+ frame.resize_w = frame.width + (frame.border_w * 2);
+ frame.resize_h = frame.height + (frame.border_w * 2);
+
+ if (left)
+ left_fixsize(&gx, &gy);
+ else
+ right_fixsize(&gx, &gy);
+
+ screen->showGeometry(gx, gy);
+
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.resize_x, frame.resize_y,
+ frame.resize_w - 1, frame.resize_h - 1);
+ } else {
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.resize_x, frame.resize_y,
+ frame.resize_w - 1, frame.resize_h - 1);
+
+ int gx, gy;
+
+ if (resize_zone & ZoneTop)
+ frame.resize_h = frame.height - (me->y - frame.grab_y);
+ else
+ frame.resize_h = frame.height + (me->y - frame.grab_y);
+ if (frame.resize_h < 1) frame.resize_h = 1;
+
+ if (left) {
+ frame.resize_x = me->x_root - frame.grab_x;
+ if (frame.resize_x > (signed) (frame.x + frame.width))
+ frame.resize_x = frame.resize_x + frame.width - 1;
+
+ left_fixsize(&gx, &gy);
+ } else {
+ frame.resize_w = frame.width + (me->x - frame.grab_x);
+ if (frame.resize_w < 1) frame.resize_w = 1;
+
+ right_fixsize(&gx, &gy);
+ }
+
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.resize_x, frame.resize_y,
+ frame.resize_w - 1, frame.resize_h - 1);
+
+ screen->showGeometry(gx, gy);
+ }
+ }
+}
+
+
+#ifdef SHAPE
+void OpenboxWindow::shapeEvent(XShapeEvent *) {
+ if (openbox->hasShapeExtensions()) {
+ if (flags.shaped) {
+ openbox->grab();
+ if (! validateClient()) return;
+ XShapeCombineShape(display, frame.window, ShapeBounding,
+ frame.mwm_border_w, frame.y_border +
+ frame.mwm_border_w, client.window,
+ ShapeBounding, ShapeSet);
+
+ int num = 1;
+ XRectangle xrect[2];
+ xrect[0].x = xrect[0].y = 0;
+ xrect[0].width = frame.width;
+ xrect[0].height = frame.y_border;
+
+ if (decorations.handle) {
+ xrect[1].x = 0;
+ xrect[1].y = frame.y_handle;
+ xrect[1].width = frame.width;
+ xrect[1].height = frame.handle_h + frame.border_w;
+ num++;
+ }
+
+ XShapeCombineRectangles(display, frame.window, ShapeBounding, 0, 0,
+ xrect, num, ShapeUnion, Unsorted);
+ openbox->ungrab();
+ }
+ }
+}
+#endif // SHAPE
+
+
+Bool OpenboxWindow::validateClient(void) {
+ XSync(display, False);
+
+ XEvent e;
+ if (XCheckTypedWindowEvent(display, client.window, DestroyNotify, &e) ||
+ XCheckTypedWindowEvent(display, client.window, UnmapNotify, &e)) {
+ XPutBackEvent(display, &e);
+ openbox->ungrab();
+
+ return False;
+ }
+
+ return True;
+}
+
+
+void OpenboxWindow::restore(void) {
+ XChangeSaveSet(display, client.window, SetModeDelete);
+ XSelectInput(display, client.window, NoEventMask);
+
+ restoreGravity();
+
+ XUnmapWindow(display, frame.window);
+ XUnmapWindow(display, client.window);
+
+ XSetWindowBorderWidth(display, client.window, client.old_bw);
+ XReparentWindow(display, client.window, screen->getRootWindow(),
+ client.x, client.y);
+ XMapWindow(display, client.window);
+
+ XFlush(display);
+}
+
+
+void OpenboxWindow::timeout(void) {
+ screen->getWorkspace(workspace_number)->raiseWindow(this);
+}
+
+
+void OpenboxWindow::changeOpenboxHints(OpenboxHints *net) {
+ if ((net->flags & AttribShaded) &&
+ ((openbox_attrib.attrib & AttribShaded) !=
+ (net->attrib & AttribShaded)))
+ shade();
+
+ if (flags.visible && // watch out for requests when we can not be seen
+ (net->flags & (AttribMaxVert | AttribMaxHoriz)) &&
+ ((openbox_attrib.attrib & (AttribMaxVert | AttribMaxHoriz)) !=
+ (net->attrib & (AttribMaxVert | AttribMaxHoriz)))) {
+ if (flags.maximized) {
+ maximize(0);
+ } else {
+ int button = 0;
+
+ if ((net->flags & AttribMaxHoriz) && (net->flags & AttribMaxVert))
+ button = ((net->attrib & (AttribMaxHoriz | AttribMaxVert)) ? 1 : 0);
+ else if (net->flags & AttribMaxVert)
+ button = ((net->attrib & AttribMaxVert) ? 2 : 0);
+ else if (net->flags & AttribMaxHoriz)
+ button = ((net->attrib & AttribMaxHoriz) ? 3 : 0);
+
+ maximize(button);
+ }
+ }
+
+ if ((net->flags & AttribOmnipresent) &&
+ ((openbox_attrib.attrib & AttribOmnipresent) !=
+ (net->attrib & AttribOmnipresent)))
+ stick();
+
+ if ((net->flags & AttribWorkspace) &&
+ (workspace_number != (signed) net->workspace)) {
+ screen->reassociateWindow(this, net->workspace, True);
+
+ if (screen->getCurrentWorkspaceID() != (signed) net->workspace) withdraw();
+ else deiconify();
+ }
+
+ if (net->flags & AttribDecoration) {
+ switch (net->decoration) {
+ case DecorNone:
+ decorations.titlebar = decorations.border = decorations.handle =
+ decorations.iconify = decorations.maximize = decorations.menu = False;
+
+ break;
+
+ default:
+ case DecorNormal:
+ decorations.titlebar = decorations.border = decorations.handle =
+ decorations.iconify = decorations.maximize = decorations.menu = True;
+
+ break;
+
+ case DecorTiny:
+ decorations.titlebar = decorations.iconify = decorations.menu = True;
+ decorations.border = decorations.handle = decorations.maximize = False;
+
+ break;
+
+ case DecorTool:
+ decorations.titlebar = decorations.menu = functions.move = True;
+ decorations.iconify = decorations.border = decorations.handle =
+ decorations.maximize = False;
+
+ break;
+ }
+ if (frame.window) {
+ XMapSubwindows(display, frame.window);
+ XMapWindow(display, frame.window);
+ }
+
+ reconfigure();
+ setState(current_state);
+ }
+}
+
+
+/*
+ * Set the sizes of all components of the window frame
+ * (the window decorations).
+ * These values are based upon the current style settings and the client
+ * window's dimentions.
+ */
+void OpenboxWindow::upsize(void) {
+ frame.bevel_w = screen->getBevelWidth();
+
+ if (decorations.border) {
+ frame.border_w = screen->getBorderWidth();
+ if (!flags.transient)
+ frame.mwm_border_w = screen->getFrameWidth();
+ else
+ frame.mwm_border_w = 0;
+ } else {
+ frame.mwm_border_w = frame.border_w = 0;
+ }
+
+ if (decorations.titlebar) {
+ // the height of the titlebar is based upon the height of the font being
+ // used to display the window's title
+ WindowStyle *style = screen->getWindowStyle();
+ if (i18n->multibyte())
+ frame.title_h = (style->fontset_extents->max_ink_extent.height +
+ (frame.bevel_w * 2) + 2);
+ else
+ frame.title_h = (style->font->ascent + style->font->descent +
+ (frame.bevel_w * 2) + 2);
+
+ frame.label_h = frame.title_h - (frame.bevel_w * 2);
+ frame.button_w = frame.button_h = (frame.label_h - 2);
+ frame.y_border = frame.title_h + frame.border_w;
+ } else {
+ frame.title_h = 0;
+ frame.label_h = 0;
+ frame.button_w = frame.button_h = 0;
+ frame.y_border = 0;
+ }
+
+ frame.border_h = client.height + frame.mwm_border_w * 2;
+
+ if (decorations.handle) {
+ frame.y_handle = frame.y_border + frame.border_h + frame.border_w;
+ frame.grip_w = frame.button_w * 2;
+ frame.grip_h = frame.handle_h = screen->getHandleWidth();
+ } else {
+ frame.y_handle = frame.y_border + frame.border_h;
+ frame.handle_h = 0;
+ frame.grip_w = frame.grip_h = 0;
+ }
+
+ frame.width = client.width + (frame.mwm_border_w * 2);
+ frame.height = frame.y_handle + frame.handle_h;
+
+ frame.snap_w = frame.width + (frame.border_w * 2);
+ frame.snap_h = frame.height + (frame.border_w * 2);
+}
+
+
+/*
+ * Set the size and position of the client window.
+ * These values are based upon the current style settings and the frame
+ * window's dimensions.
+ */
+void OpenboxWindow::downsize(void) {
+ frame.y_handle = frame.height - frame.handle_h;
+ frame.border_h = frame.y_handle - frame.y_border -
+ (decorations.handle ? frame.border_w : 0);
+
+ client.x = frame.x + frame.mwm_border_w + frame.border_w;
+ client.y = frame.y + frame.y_border + frame.mwm_border_w + frame.border_w;
+
+ client.width = frame.width - (frame.mwm_border_w * 2);
+ client.height = frame.height - frame.y_border - (frame.mwm_border_w * 2)
+ - frame.handle_h - (decorations.handle ? frame.border_w : 0);
+
+ frame.y_handle = frame.border_h + frame.y_border + frame.border_w;
+
+ frame.snap_w = frame.width + (frame.border_w * 2);
+ frame.snap_h = frame.height + (frame.border_w * 2);
+}
+
+
+void OpenboxWindow::right_fixsize(int *gx, int *gy) {
+ // calculate the size of the client window and conform it to the
+ // size specified by the size hints of the client window...
+ int dx = frame.resize_w - client.base_width - (frame.mwm_border_w * 2) -
+ (frame.border_w * 2) + (client.width_inc / 2);
+ int dy = frame.resize_h - frame.y_border - client.base_height -
+ frame.handle_h - (frame.border_w * 3) - (frame.mwm_border_w * 2)
+ + (client.height_inc / 2);
+
+ if (dx < (signed) client.min_width) dx = client.min_width;
+ if (dy < (signed) client.min_height) dy = client.min_height;
+ if ((unsigned) dx > client.max_width) dx = client.max_width;
+ if ((unsigned) dy > client.max_height) dy = client.max_height;
+
+ dx /= client.width_inc;
+ dy /= client.height_inc;
+
+ if (gx) *gx = dx;
+ if (gy) *gy = dy;
+
+ dx = (dx * client.width_inc) + client.base_width;
+ dy = (dy * client.height_inc) + client.base_height;
+
+ frame.resize_w = dx + (frame.mwm_border_w * 2) + (frame.border_w * 2);
+ frame.resize_h = dy + frame.y_border + frame.handle_h +
+ (frame.mwm_border_w * 2) + (frame.border_w * 3);
+ if (resize_zone & ZoneTop)
+ frame.resize_y = frame.y + frame.height - frame.resize_h +
+ screen->getBorderWidth() * 2;
+}
+
+
+void OpenboxWindow::left_fixsize(int *gx, int *gy) {
+ // calculate the size of the client window and conform it to the
+ // size specified by the size hints of the client window...
+ int dx = frame.x + frame.width - frame.resize_x - client.base_width -
+ (frame.mwm_border_w * 2) + (client.width_inc / 2);
+ int dy = frame.resize_h - frame.y_border - client.base_height -
+ frame.handle_h - (frame.border_w * 3) - (frame.mwm_border_w * 2)
+ + (client.height_inc / 2);
+
+ if (dx < (signed) client.min_width) dx = client.min_width;
+ if (dy < (signed) client.min_height) dy = client.min_height;
+ if ((unsigned) dx > client.max_width) dx = client.max_width;
+ if ((unsigned) dy > client.max_height) dy = client.max_height;
+
+ dx /= client.width_inc;
+ dy /= client.height_inc;
+
+ if (gx) *gx = dx;
+ if (gy) *gy = dy;
+
+ dx = (dx * client.width_inc) + client.base_width;
+ dy = (dy * client.height_inc) + client.base_height;
+
+ frame.resize_w = dx + (frame.mwm_border_w * 2) + (frame.border_w * 2);
+ frame.resize_x = frame.x + frame.width - frame.resize_w +
+ (frame.border_w * 2);
+ frame.resize_h = dy + frame.y_border + frame.handle_h +
+ (frame.mwm_border_w * 2) + (frame.border_w * 3);
+ if (resize_zone & ZoneTop)
+ frame.resize_y = frame.y + frame.height - frame.resize_h +
+ screen->getBorderWidth() * 2;
+
+}
--- /dev/null
+// Window.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Window_hh
+#define __Window_hh
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#ifdef SHAPE
+# include <X11/extensions/shape.h>
+#endif // SHAPE
+
+#include "BaseDisplay.h"
+#include "Timer.h"
+#include "Windowmenu.h"
+
+// forward declaration
+class OpenboxWindow;
+
+#define MwmHintsFunctions (1l << 0)
+#define MwmHintsDecorations (1l << 1)
+
+#define MwmFuncAll (1l << 0)
+#define MwmFuncResize (1l << 1)
+#define MwmFuncMove (1l << 2)
+#define MwmFuncIconify (1l << 3)
+#define MwmFuncMaximize (1l << 4)
+#define MwmFuncClose (1l << 5)
+
+#define MwmDecorAll (1l << 0)
+#define MwmDecorBorder (1l << 1)
+#define MwmDecorHandle (1l << 2)
+#define MwmDecorTitle (1l << 3)
+#define MwmDecorMenu (1l << 4)
+#define MwmDecorIconify (1l << 5)
+#define MwmDecorMaximize (1l << 6)
+
+// this structure only contains 3 elements... the Motif 2.0 structure contains
+// 5... we only need the first 3... so that is all we will define
+typedef struct MwmHints {
+ unsigned long flags, functions, decorations;
+} MwmHints;
+
+#define PropMwmHintsElements 3
+
+
+class OpenboxWindow : public TimeoutHandler {
+private:
+ BImageControl *image_ctrl;
+ Openbox *openbox;
+ BScreen *screen;
+ Display *display;
+ BTimer *timer;
+ OpenboxAttributes openbox_attrib;
+
+ Time lastButtonPressTime; // used for double clicks, when were we clicked
+ Windowmenu *windowmenu;
+
+ int window_number, workspace_number;
+ unsigned long current_state;
+
+ enum FocusMode { F_NoInput = 0, F_Passive,
+ F_LocallyActive, F_GloballyActive };
+ FocusMode focus_mode;
+
+ enum ResizeZones {
+ ZoneTop = 1 << 0,
+ ZoneBottom = 1 << 1,
+ ZoneLeft = 1 << 2,
+ ZoneRight = 1 << 3
+ };
+ unsigned int resize_zone; // bitmask of ResizeZones values
+
+ struct _flags {
+ Bool moving, // is moving?
+ resizing, // is resizing?
+ shaded, // is shaded?
+ visible, // is visible?
+ iconic, // is iconified?
+ transient, // is a transient window?
+ focused, // has focus?
+ stuck, // is omnipresent
+ modal, // is modal? (must be dismissed to continue)
+ send_focus_message, // should we send focus messages to our client?
+ shaped, // does the frame use the shape extension?
+ managed; // under openbox's control?
+ // maximize is special, the number corresponds
+ // with a mouse button
+ // if 0, not maximized
+ unsigned int maximized; // 1 = HorizVert, 2 = Vertical, 3 = Horizontal
+ } flags;
+
+ struct _client {
+ OpenboxWindow *transient_for, // which window are we a transient for?
+ *transient; // which window is our transient?
+
+ Window window, // the client's window
+ window_group; // the client's window group
+
+ char *title, *icon_title;
+ size_t title_len; // strlen(title)
+
+ int x, y,
+ old_bw; // client's borderwidth
+
+ unsigned int width, height,
+ title_text_w, // width as rendered in the current font
+ min_width, min_height, // can not be resized smaller
+ max_width, max_height, // can not be resized larger
+ width_inc, height_inc, // increment step
+ min_aspect_x, min_aspect_y, // minimum aspect ratio
+ max_aspect_x, max_aspect_y, // maximum aspect ratio
+ base_width, base_height,
+ win_gravity;
+
+ unsigned long initial_state, normal_hint_flags, wm_hint_flags;
+
+ MwmHints *mwm_hint;
+ OpenboxHints *openbox_hint;
+ } client;
+
+ struct _functions {
+ Bool resize, move, iconify, maximize, close;
+ } functions;
+
+ /*
+ * client window = the application's window
+ * frame window = the window drawn around the outside of the client window
+ * by the window manager which contains items like the
+ * titlebar and close button
+ * title = the titlebar drawn above the client window, it displays the
+ * window's name and any buttons for interacting with the window,
+ * such as iconify, maximize, and close
+ * label = the window in the titlebar where the title is drawn
+ * buttons = maximize, iconify, close
+ * handle = the bar drawn at the bottom of the window, which contains the
+ * left and right grips used for resizing the window
+ * grips = the smaller reactangles in the handle, one of each side of it.
+ * When clicked and dragged, these resize the window interactively
+ * border = the line drawn around the outside edge of the frame window,
+ * between the title, the bordered client window, and the handle.
+ * Also drawn between the grips and the handle
+ */
+
+ /*
+ * what decorations do we have?
+ * this is based on the type of the client window as well as user input
+ * the menu is not really decor, but it goes hand in hand with the decor
+ */
+ struct _decorations {
+ Bool titlebar, handle, border, iconify, maximize, close, menu;
+ } decorations;
+
+ struct _frame {
+ // u -> unfocused, f -> has focus
+ unsigned long ulabel_pixel, flabel_pixel, utitle_pixel,
+ ftitle_pixel, uhandle_pixel, fhandle_pixel, ubutton_pixel,
+ fbutton_pixel, pbutton_pixel, uborder_pixel, fborder_pixel,
+ ugrip_pixel, fgrip_pixel;
+ Pixmap ulabel, flabel, utitle, ftitle, uhandle, fhandle,
+ ubutton, fbutton, pbutton, ugrip, fgrip;
+
+ Window window, // the frame
+ plate, // holds the client
+ title,
+ label,
+ handle,
+ close_button, iconify_button, maximize_button,
+ right_grip, left_grip;
+
+
+ unsigned int resize_w, resize_h;
+ int resize_x, resize_y, // size and location of box drawn while resizing
+ move_x, move_y; // location of box drawn while moving
+
+ int x, y,
+ grab_x, grab_y, // where was the window when it was grabbed?
+ y_border, y_handle; // where within frame is the border and handle
+
+ unsigned int width, height, title_h, label_w, label_h, handle_h,
+ button_w, button_h, grip_w, grip_h, mwm_border_w, border_h, border_w,
+ bevel_w, snap_w, snap_h;
+ } frame;
+
+protected:
+ Bool getState(void);
+ Window createToplevelWindow(int x, int y, unsigned int width,
+ unsigned int height, unsigned int borderwidth);
+ Window createChildWindow(Window parent, Cursor = None);
+
+ void getWMName(void);
+ void getWMIconName(void);
+ void getWMNormalHints(void);
+ void getWMProtocols(void);
+ void getWMHints(void);
+ void getMWMHints(void);
+ void getOpenboxHints(void);
+ void setNetWMAttributes(void);
+ void associateClientWindow(void);
+ void decorate(void);
+ void decorateLabel(void);
+ void positionButtons(Bool redecorate_label = False);
+ void positionWindows(void);
+ void createCloseButton(void);
+ void createIconifyButton(void);
+ void createMaximizeButton(void);
+ void redrawLabel(void);
+ void redrawAllButtons(void);
+ void redrawCloseButton(Bool);
+ void redrawIconifyButton(Bool);
+ void redrawMaximizeButton(Bool);
+ void restoreGravity(void);
+ void setGravityOffsets(void);
+ void setState(unsigned long);
+ void upsize(void);
+ void downsize(void);
+ void right_fixsize(int *gx = 0, int *gy = 0);
+ void left_fixsize(int *gx = 0, int *gy = 0);
+
+
+public:
+ OpenboxWindow(Openbox *b, Window w, BScreen *s = (BScreen *) 0);
+ virtual ~OpenboxWindow(void);
+
+ inline Bool isTransient(void) const { return flags.transient; }
+ inline Bool isFocused(void) const { return flags.focused; }
+ inline Bool isVisible(void) const { return flags.visible; }
+ inline Bool isIconic(void) const { return flags.iconic; }
+ inline Bool isShaded(void) const { return flags.shaded; }
+ inline Bool isMaximized(void) const { return flags.maximized; }
+ inline Bool isMaximizedFull(void) const { return flags.maximized == 1; }
+ inline Bool isStuck(void) const { return flags.stuck; }
+ inline Bool isIconifiable(void) const { return functions.iconify; }
+ inline Bool isMaximizable(void) const { return functions.maximize; }
+ inline Bool isResizable(void) const { return functions.resize; }
+ inline Bool isClosable(void) const { return functions.close; }
+
+ inline Bool hasTitlebar(void) const { return decorations.titlebar; }
+ inline Bool hasTransient(void) const
+ { return ((client.transient) ? True : False); }
+
+ inline OpenboxWindow *getTransient(void) { return client.transient; }
+ inline OpenboxWindow *getTransientFor(void) { return client.transient_for; }
+
+ inline BScreen *getScreen(void) { return screen; }
+
+ inline const Window &getFrameWindow(void) const { return frame.window; }
+ inline const Window &getClientWindow(void) const { return client.window; }
+
+ inline Windowmenu * getWindowmenu(void) { return windowmenu; }
+
+ inline char **getTitle(void) { return &client.title; }
+ inline char **getIconTitle(void) { return &client.icon_title; }
+ inline const int &getXFrame(void) const { return frame.x; }
+ inline const int &getYFrame(void) const { return frame.y; }
+ inline const int &getXClient(void) const { return client.x; }
+ inline const int &getYClient(void) const { return client.y; }
+ inline const int &getWorkspaceNumber(void) const { return workspace_number; }
+ inline const int &getWindowNumber(void) const { return window_number; }
+
+ inline const unsigned int &getWidth(void) const { return frame.width; }
+ inline const unsigned int &getHeight(void) const { return frame.height; }
+ inline const unsigned int &getClientHeight(void) const
+ { return client.height; }
+ inline const unsigned int &getClientWidth(void) const
+ { return client.width; }
+ inline const unsigned int &getTitleHeight(void) const
+ { return frame.title_h; }
+
+ inline void setWindowNumber(int n) { window_number = n; }
+
+ Bool validateClient(void);
+ Bool setInputFocus(void);
+
+ void setFocusFlag(Bool);
+ void iconify(void);
+ void deiconify(Bool reassoc = True, Bool raise = True);
+ void close(void);
+ void withdraw(void);
+ void maximize(unsigned int button);
+ void shade(void);
+ void stick(void);
+ void unstick(void);
+ void reconfigure(void);
+ void installColormap(Bool);
+ void restore(void);
+ void configure(int dx, int dy, unsigned int dw, unsigned int dh);
+ void setWorkspace(int n);
+ void changeOpenboxHints(OpenboxHints *);
+ void restoreAttributes(void);
+
+ void buttonPressEvent(XButtonEvent *);
+ void buttonReleaseEvent(XButtonEvent *);
+ void motionNotifyEvent(XMotionEvent *);
+ void destroyNotifyEvent(XDestroyWindowEvent *);
+ void mapRequestEvent(XMapRequestEvent *);
+ void mapNotifyEvent(XMapEvent *);
+ void unmapNotifyEvent(XUnmapEvent *);
+ void propertyNotifyEvent(Atom);
+ void exposeEvent(XExposeEvent *);
+ void configureRequestEvent(XConfigureRequestEvent *);
+
+#ifdef SHAPE
+ void shapeEvent(XShapeEvent *);
+#endif // SHAPE
+
+ virtual void timeout(void);
+};
+
+
+#endif // __Window_hh
--- /dev/null
+// Windowmenu.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Screen.h"
+#include "Window.h"
+#include "Windowmenu.h"
+#include "Workspace.h"
+
+#ifdef STDC_HEADERS
+# include <string.h>
+#endif // STDC_HEADERS
+
+
+Windowmenu::Windowmenu(OpenboxWindow *win) : Basemenu(win->getScreen()) {
+ window = win;
+ screen = window->getScreen();
+
+ setTitleVisibility(False);
+ setMovable(False);
+ setInternalMenu();
+
+ sendToMenu = new SendtoWorkspacemenu(this);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuSendTo, "Send To ..."),
+ sendToMenu);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuShade, "Shade"),
+ BScreen::WindowShade);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuIconify, "Iconify"),
+ BScreen::WindowIconify);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuMaximize, "Maximize"),
+ BScreen::WindowMaximize);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuRaise,"Raise"),
+ BScreen::WindowRaise);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuLower, "Lower"),
+ BScreen::WindowLower);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuStick, "Stick"),
+ BScreen::WindowStick);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuKillClient, "Kill Client"),
+ BScreen::WindowKill);
+ insert(i18n->getMessage(WindowmenuSet, WindowmenuClose, "Close"),
+ BScreen::WindowClose);
+
+ update();
+
+ setItemEnabled(1, window->hasTitlebar());
+ setItemEnabled(2, window->isIconifiable());
+ setItemEnabled(3, window->isMaximizable());
+ setItemEnabled(8, window->isClosable());
+}
+
+
+Windowmenu::~Windowmenu(void) {
+ delete sendToMenu;
+}
+
+
+void Windowmenu::show(void) {
+ if (isItemEnabled(1)) setItemSelected(1, window->isShaded());
+ if (isItemEnabled(3)) setItemSelected(3, window->isMaximized());
+ if (isItemEnabled(6)) setItemSelected(6, window->isStuck());
+
+ Basemenu::show();
+}
+
+
+void Windowmenu::itemSelected(int button, int index) {
+ BasemenuItem *item = find(index);
+
+ /* Added by Scott Moynes, April 8, 2002
+ Ignore the middle button for every item except the maximize
+ button in the window menu. Maximize needs it for
+ horizontal/vertical maximize, however, for the others it is
+ inconsistent with the rest of the window behaviour.
+ */
+ if(button != 2) {
+ hide();
+ switch (item->function()) {
+ case BScreen::WindowShade:
+ window->shade();
+ break;
+
+ case BScreen::WindowIconify:
+ window->iconify();
+ break;
+
+ case BScreen::WindowMaximize:
+ window->maximize((unsigned int) button);
+ break;
+
+ case BScreen::WindowClose:
+ window->close();
+ break;
+
+ case BScreen::WindowRaise:
+ screen->getWorkspace(window->getWorkspaceNumber())->raiseWindow(window);
+ break;
+
+ case BScreen::WindowLower:
+ screen->getWorkspace(window->getWorkspaceNumber())->lowerWindow(window);
+ break;
+
+ case BScreen::WindowStick:
+ window->stick();
+ break;
+
+ case BScreen::WindowKill:
+ XKillClient(screen->getBaseDisplay()->getXDisplay(),
+ window->getClientWindow());
+ break;
+ }
+ } else if (item->function() == BScreen::WindowMaximize) {
+ hide();
+ window->maximize((unsigned int) button);
+ }
+}
+
+
+void Windowmenu::reconfigure(void) {
+ setItemEnabled(1, window->hasTitlebar());
+ setItemEnabled(2, window->isIconifiable());
+ setItemEnabled(3, window->isMaximizable());
+ setItemEnabled(8, window->isClosable());
+
+ sendToMenu->reconfigure();
+
+ Basemenu::reconfigure();
+}
+
+
+Windowmenu::SendtoWorkspacemenu::SendtoWorkspacemenu(Windowmenu *w)
+ : Basemenu(w->screen) {
+ windowmenu = w;
+
+ setTitleVisibility(False);
+ setMovable(False);
+ setInternalMenu();
+ update();
+}
+
+
+void Windowmenu::SendtoWorkspacemenu::itemSelected(int button, int index) {
+ if (button > 2) return;
+
+ if (index <= windowmenu->screen->getCount()) {
+ if (index == windowmenu->screen->getCurrentWorkspaceID()) return;
+ if (windowmenu->window->isStuck()) windowmenu->window->stick();
+
+ if (button == 1) windowmenu->window->withdraw();
+ windowmenu->screen->reassociateWindow(windowmenu->window, index, True);
+ if (button == 2) windowmenu->screen->changeWorkspaceID(index);
+ }
+ hide();
+}
+
+
+void Windowmenu::SendtoWorkspacemenu::update(void) {
+ int i, r = getCount();
+
+ if (r != 0)
+ for (i = 0; i < r; ++i)
+ remove(0);
+
+ for (i = 0; i < windowmenu->screen->getCount(); ++i)
+ insert(windowmenu->screen->getWorkspace(i)->getName());
+
+ Basemenu::update();
+}
+
+
+void Windowmenu::SendtoWorkspacemenu::show(void) {
+ update();
+
+ Basemenu::show();
+}
--- /dev/null
+// Windowmenu.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Windowmenu_hh
+#define __Windowmenu_hh
+
+#include "Basemenu.h"
+
+// forward declaration
+class Windowmenu;
+class SendtoWorkspaceMenu;
+
+class Openbox;
+class OpenboxWindow;
+class Toolbar;
+
+class Windowmenu : public Basemenu {
+private:
+ OpenboxWindow *window;
+ BScreen *screen;
+
+ class SendtoWorkspacemenu : public Basemenu {
+ private:
+ Windowmenu *windowmenu;
+
+ protected:
+ virtual void itemSelected(int, int);
+
+ public:
+ SendtoWorkspacemenu(Windowmenu *);
+
+ void update(void);
+
+ virtual void show(void);
+ };
+
+ SendtoWorkspacemenu *sendToMenu;
+
+ friend class SendtoWorkspacemenu;
+
+
+protected:
+ virtual void itemSelected(int, int);
+
+
+public:
+ Windowmenu(OpenboxWindow *);
+ virtual ~Windowmenu(void);
+
+ inline Basemenu *getSendToMenu(void) { return (Basemenu *) sendToMenu; }
+
+ void reconfigure(void);
+ void setClosable(void);
+
+ virtual void show(void);
+};
+
+
+#endif // __Windowmenu_hh
--- /dev/null
+// Workspace.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Clientmenu.h"
+#include "Screen.h"
+#include "Toolbar.h"
+#include "Window.h"
+#include "Workspace.h"
+#include "Windowmenu.h"
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef STDC_HEADERS
+# include <string.h>
+#endif // STDC_HEADERS
+
+
+Workspace::Workspace(BScreen *scrn, int i) {
+ screen = scrn;
+
+ cascade_x = cascade_y = 32;
+
+ id = i;
+
+ stackingList = new LinkedList<OpenboxWindow>;
+ windowList = new LinkedList<OpenboxWindow>;
+ clientmenu = new Clientmenu(this);
+
+ lastfocus = (OpenboxWindow *) 0;
+
+ name = (char *) 0;
+ char *tmp = screen->getNameOfWorkspace(id);
+ setName(tmp);
+}
+
+
+Workspace::~Workspace(void) {
+ delete stackingList;
+ delete windowList;
+ delete clientmenu;
+
+ if (name)
+ delete [] name;
+}
+
+
+const int Workspace::addWindow(OpenboxWindow *w, Bool place) {
+ if (! w) return -1;
+
+ if (place) placeWindow(w);
+
+ w->setWorkspace(id);
+ w->setWindowNumber(windowList->count());
+
+ stackingList->insert(w, 0);
+ windowList->insert(w);
+
+ clientmenu->insert((const char **) w->getTitle());
+ clientmenu->update();
+
+ screen->updateNetizenWindowAdd(w->getClientWindow(), id);
+
+ raiseWindow(w);
+
+ return w->getWindowNumber();
+}
+
+
+const int Workspace::removeWindow(OpenboxWindow *w) {
+ if (! w) return -1;
+
+ stackingList->remove(w);
+
+ if (w->isFocused()) {
+ if (w->isTransient() && w->getTransientFor() &&
+ w->getTransientFor()->isVisible()) {
+ w->getTransientFor()->setInputFocus();
+ } else if (screen->isSloppyFocus()) {
+ screen->getOpenbox()->setFocusedWindow((OpenboxWindow *) 0);
+ } else {
+ OpenboxWindow *top = stackingList->first();
+ if (! top || ! top->setInputFocus()) {
+ screen->getOpenbox()->setFocusedWindow((OpenboxWindow *) 0);
+ XSetInputFocus(screen->getOpenbox()->getXDisplay(),
+ screen->getToolbar()->getWindowID(),
+ RevertToParent, CurrentTime);
+ }
+ }
+ }
+
+ if (lastfocus == w)
+ lastfocus = (OpenboxWindow *) 0;
+
+ windowList->remove(w->getWindowNumber());
+ clientmenu->remove(w->getWindowNumber());
+ clientmenu->update();
+
+ screen->updateNetizenWindowDel(w->getClientWindow());
+
+ LinkedListIterator<OpenboxWindow> it(windowList);
+ OpenboxWindow *bw = it.current();
+ for (int i = 0; bw; it++, i++, bw = it.current())
+ bw->setWindowNumber(i);
+
+ return windowList->count();
+}
+
+
+void Workspace::showAll(void) {
+ LinkedListIterator<OpenboxWindow> it(stackingList);
+ for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current())
+ bw->deiconify(False, False);
+}
+
+
+void Workspace::hideAll(void) {
+ LinkedList<OpenboxWindow> lst;
+
+ LinkedListIterator<OpenboxWindow> it(stackingList);
+ for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current())
+ lst.insert(bw, 0);
+
+ LinkedListIterator<OpenboxWindow> it2(&lst);
+ for (OpenboxWindow *bw = it2.current(); bw; it2++, bw = it2.current())
+ if (! bw->isStuck())
+ bw->withdraw();
+}
+
+
+void Workspace::removeAll(void) {
+ LinkedListIterator<OpenboxWindow> it(windowList);
+ for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current())
+ bw->iconify();
+}
+
+
+void Workspace::raiseWindow(OpenboxWindow *w) {
+ OpenboxWindow *win = (OpenboxWindow *) 0, *bottom = w;
+
+ while (bottom->isTransient() && bottom->getTransientFor())
+ bottom = bottom->getTransientFor();
+
+ int i = 1;
+ win = bottom;
+ while (win->hasTransient() && win->getTransient()) {
+ win = win->getTransient();
+
+ i++;
+ }
+
+ Window *nstack = new Window[i], *curr = nstack;
+ Workspace *wkspc;
+
+ win = bottom;
+ while (True) {
+ *(curr++) = win->getFrameWindow();
+ screen->updateNetizenWindowRaise(win->getClientWindow());
+
+ if (! win->isIconic()) {
+ wkspc = screen->getWorkspace(win->getWorkspaceNumber());
+ wkspc->stackingList->remove(win);
+ wkspc->stackingList->insert(win, 0);
+ }
+
+ if (! win->hasTransient() || ! win->getTransient())
+ break;
+
+ win = win->getTransient();
+ }
+
+ screen->raiseWindows(nstack, i);
+
+ delete [] nstack;
+}
+
+
+void Workspace::lowerWindow(OpenboxWindow *w) {
+ OpenboxWindow *win = (OpenboxWindow *) 0, *bottom = w;
+
+ while (bottom->isTransient() && bottom->getTransientFor())
+ bottom = bottom->getTransientFor();
+
+ int i = 1;
+ win = bottom;
+ while (win->hasTransient() && win->getTransient()) {
+ win = win->getTransient();
+
+ i++;
+ }
+
+ Window *nstack = new Window[i], *curr = nstack;
+ Workspace *wkspc;
+
+ while (True) {
+ *(curr++) = win->getFrameWindow();
+ screen->updateNetizenWindowLower(win->getClientWindow());
+
+ if (! win->isIconic()) {
+ wkspc = screen->getWorkspace(win->getWorkspaceNumber());
+ wkspc->stackingList->remove(win);
+ wkspc->stackingList->insert(win);
+ }
+
+ if (! win->getTransientFor())
+ break;
+
+ win = win->getTransientFor();
+ }
+
+ screen->getOpenbox()->grab();
+
+ XLowerWindow(screen->getBaseDisplay()->getXDisplay(), *nstack);
+ XRestackWindows(screen->getBaseDisplay()->getXDisplay(), nstack, i);
+
+ screen->getOpenbox()->ungrab();
+
+ delete [] nstack;
+}
+
+
+void Workspace::reconfigure(void) {
+ clientmenu->reconfigure();
+
+ LinkedListIterator<OpenboxWindow> it(windowList);
+ for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) {
+ if (bw->validateClient())
+ bw->reconfigure();
+ }
+}
+
+
+OpenboxWindow *Workspace::getWindow(int index) {
+ if ((index >= 0) && (index < windowList->count()))
+ return windowList->find(index);
+ else
+ return 0;
+}
+
+
+const int Workspace::getCount(void) {
+ return windowList->count();
+}
+
+
+void Workspace::update(void) {
+ clientmenu->update();
+ screen->getToolbar()->redrawWindowLabel(True);
+}
+
+
+Bool Workspace::isCurrent(void) {
+ return (id == screen->getCurrentWorkspaceID());
+}
+
+
+Bool Workspace::isLastWindow(OpenboxWindow *w) {
+ return (w == windowList->last());
+}
+
+void Workspace::setCurrent(void) {
+ screen->changeWorkspaceID(id);
+}
+
+
+void Workspace::setName(char *new_name) {
+ if (name)
+ delete [] name;
+
+ if (new_name) {
+ name = bstrdup(new_name);
+ } else {
+ name = new char[128];
+ sprintf(name, i18n->getMessage(WorkspaceSet, WorkspaceDefaultNameFormat,
+ "Workspace %d"), id + 1);
+ }
+
+ clientmenu->setLabel(name);
+ clientmenu->update();
+}
+
+
+void Workspace::shutdown(void) {
+ while (windowList->count()) {
+ windowList->first()->restore();
+ delete windowList->first();
+ }
+}
+
+void Workspace::placeWindow(OpenboxWindow *win) {
+ Bool placed = False;
+
+ const int win_w = win->getWidth() + (screen->getBorderWidth() * 4),
+ win_h = win->getHeight() + (screen->getBorderWidth() * 4),
+#ifdef SLIT
+ slit_x = screen->getSlit()->getX() - screen->getBorderWidth(),
+ slit_y = screen->getSlit()->getY() - screen->getBorderWidth(),
+ slit_w = screen->getSlit()->getWidth() +
+ (screen->getBorderWidth() * 4),
+ slit_h = screen->getSlit()->getHeight() +
+ (screen->getBorderWidth() * 4),
+#endif // SLIT
+ toolbar_x = screen->getToolbar()->getX() - screen->getBorderWidth(),
+ toolbar_y = screen->getToolbar()->getY() - screen->getBorderWidth(),
+ toolbar_w = screen->getToolbar()->getWidth() +
+ (screen->getBorderWidth() * 4),
+ toolbar_h = screen->getToolbar()->getHeight() +
+ (screen->getBorderWidth() * 4),
+ start_pos = 0,
+ change_y =
+ ((screen->getColPlacementDirection() == BScreen::TopBottom) ? 1 : -1),
+ change_x =
+ ((screen->getRowPlacementDirection() == BScreen::LeftRight) ? 1 : -1),
+ delta_x = 8, delta_y = 8;
+
+ int test_x, test_y, place_x = 0, place_y = 0;
+ LinkedListIterator<OpenboxWindow> it(windowList);
+
+ switch (screen->getPlacementPolicy()) {
+ case BScreen::RowSmartPlacement: {
+ test_y = (screen->getColPlacementDirection() == BScreen::TopBottom) ?
+ start_pos : screen->getHeight() - win_h - start_pos;
+
+ while (!placed &&
+ ((screen->getColPlacementDirection() == BScreen::BottomTop) ?
+ test_y > 0 : test_y + win_h < (signed) screen->getHeight())) {
+ test_x = (screen->getRowPlacementDirection() == BScreen::LeftRight) ?
+ start_pos : screen->getWidth() - win_w - start_pos;
+
+ while (!placed &&
+ ((screen->getRowPlacementDirection() == BScreen::RightLeft) ?
+ test_x > 0 : test_x + win_w < (signed) screen->getWidth())) {
+ placed = True;
+
+ it.reset();
+ for (OpenboxWindow *curr = it.current(); placed && curr;
+ it++, curr = it.current()) {
+ if (curr->isMaximizedFull()) // fully maximized, ignore it
+ continue;
+ int curr_w = curr->getWidth() + (screen->getBorderWidth() * 4);
+ int curr_h =
+ ((curr->isShaded()) ? curr->getTitleHeight() : curr->getHeight()) +
+ (screen->getBorderWidth() * 4);
+
+ if (curr->getXFrame() < test_x + win_w &&
+ curr->getXFrame() + curr_w > test_x &&
+ curr->getYFrame() < test_y + win_h &&
+ curr->getYFrame() + curr_h > test_y) {
+ placed = False;
+ }
+ }
+
+ if (placed &&
+ (toolbar_x < test_x + win_w &&
+ toolbar_x + toolbar_w > test_x &&
+ toolbar_y < test_y + win_h &&
+ toolbar_y + toolbar_h > test_y)
+#ifdef SLIT
+ ||
+ (slit_x < test_x + win_w &&
+ slit_x + slit_w > test_x &&
+ slit_y < test_y + win_h &&
+ slit_y + slit_h > test_y)
+#endif // SLIT
+ )
+ placed = False;
+
+ if (placed) {
+ place_x = test_x;
+ place_y = test_y;
+
+ break;
+ }
+
+ test_x += (change_x * delta_x);
+ }
+
+ test_y += (change_y * delta_y);
+ }
+
+ break;
+ }
+
+ case BScreen::ColSmartPlacement: {
+ test_x = (screen->getRowPlacementDirection() == BScreen::LeftRight) ?
+ start_pos : screen->getWidth() - win_w - start_pos;
+
+ while (!placed &&
+ ((screen->getRowPlacementDirection() == BScreen::RightLeft) ?
+ test_x > 0 : test_x + win_w < (signed) screen->getWidth())) {
+ test_y = (screen->getColPlacementDirection() == BScreen::TopBottom) ?
+ start_pos : screen->getHeight() - win_h - start_pos;
+
+ while (!placed &&
+ ((screen->getColPlacementDirection() == BScreen::BottomTop) ?
+ test_y > 0 : test_y + win_h < (signed) screen->getHeight())) {
+ placed = True;
+
+ it.reset();
+ for (OpenboxWindow *curr = it.current(); placed && curr;
+ it++, curr = it.current()) {
+ if (curr->isMaximizedFull()) // fully maximized, ignore it
+ continue;
+ int curr_w = curr->getWidth() + (screen->getBorderWidth() * 4);
+ int curr_h =
+ ((curr->isShaded()) ? curr->getTitleHeight() : curr->getHeight()) +
+ (screen->getBorderWidth() * 4);
+
+ if (curr->getXFrame() < test_x + win_w &&
+ curr->getXFrame() + curr_w > test_x &&
+ curr->getYFrame() < test_y + win_h &&
+ curr->getYFrame() + curr_h > test_y) {
+ placed = False;
+ }
+ }
+
+ if (placed &&
+ (toolbar_x < test_x + win_w &&
+ toolbar_x + toolbar_w > test_x &&
+ toolbar_y < test_y + win_h &&
+ toolbar_y + toolbar_h > test_y)
+#ifdef SLIT
+ ||
+ (slit_x < test_x + win_w &&
+ slit_x + slit_w > test_x &&
+ slit_y < test_y + win_h &&
+ slit_y + slit_h > test_y)
+#endif // SLIT
+ )
+ placed = False;
+
+ if (placed) {
+ place_x = test_x;
+ place_y = test_y;
+
+ break;
+ }
+
+ test_y += (change_y * delta_y);
+ }
+
+ test_x += (change_x * delta_x);
+ }
+
+ break;
+ }
+ } // switch
+
+ if (! placed) {
+ if (((unsigned) cascade_x > (screen->getWidth() / 2)) ||
+ ((unsigned) cascade_y > (screen->getHeight() / 2)))
+ cascade_x = cascade_y = 32;
+
+ place_x = cascade_x;
+ place_y = cascade_y;
+
+ cascade_x += win->getTitleHeight();
+ cascade_y += win->getTitleHeight();
+ }
+
+ if (place_x + win_w > (signed) screen->getWidth())
+ place_x = (((signed) screen->getWidth()) - win_w) / 2;
+ if (place_y + win_h > (signed) screen->getHeight())
+ place_y = (((signed) screen->getHeight()) - win_h) / 2;
+
+ win->configure(place_x, place_y, win->getWidth(), win->getHeight());
+}
--- /dev/null
+// Workspace.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Workspace_hh
+#define __Workspace_hh
+
+#include <X11/Xlib.h>
+
+#include "LinkedList.h"
+
+class BScreen;
+class Clientmenu;
+class Workspace;
+class OpenboxWindow;
+
+class Workspace {
+private:
+ BScreen *screen;
+ OpenboxWindow *lastfocus;
+ Clientmenu *clientmenu;
+
+ LinkedList<OpenboxWindow> *stackingList, *windowList;
+
+ char *name;
+ int id, cascade_x, cascade_y;
+
+
+protected:
+ void placeWindow(OpenboxWindow *);
+
+
+public:
+ Workspace(BScreen *, int = 0);
+ ~Workspace(void);
+
+ inline BScreen *getScreen(void) { return screen; }
+
+ inline OpenboxWindow *getLastFocusedWindow(void) { return lastfocus; }
+
+ inline Clientmenu *getMenu(void) { return clientmenu; }
+
+ inline const char *getName(void) const { return name; }
+
+ inline const int &getWorkspaceID(void) const { return id; }
+
+ inline void setLastFocusedWindow(OpenboxWindow *w) { lastfocus = w; }
+
+ OpenboxWindow *getWindow(int);
+
+ Bool isCurrent(void);
+ Bool isLastWindow(OpenboxWindow *);
+
+ const int addWindow(OpenboxWindow *, Bool = False);
+ const int removeWindow(OpenboxWindow *);
+ const int getCount(void);
+
+ void showAll(void);
+ void hideAll(void);
+ void removeAll(void);
+ void raiseWindow(OpenboxWindow *);
+ void lowerWindow(OpenboxWindow *);
+ void reconfigure();
+ void update();
+ void setCurrent(void);
+ void setName(char *);
+ void shutdown(void);
+};
+
+
+#endif // __Workspace_hh
+
--- /dev/null
+// Workspacemenu.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Screen.h"
+#include "Toolbar.h"
+#include "Workspacemenu.h"
+#include "Workspace.h"
+
+
+Workspacemenu::Workspacemenu(BScreen *scrn) : Basemenu(scrn) {
+ screen = scrn;
+
+ setInternalMenu();
+
+ setLabel(i18n->getMessage(WorkspacemenuSet, WorkspacemenuWorkspacesTitle,
+ "Workspaces"));
+ insert(i18n->getMessage(WorkspacemenuSet, WorkspacemenuNewWorkspace,
+ "New Workspace"));
+ insert(i18n->getMessage(WorkspacemenuSet, WorkspacemenuRemoveLast,
+ "Remove Last"));
+}
+
+
+void Workspacemenu::itemSelected(int button, int index) {
+ if (button != 1)
+ return;
+
+ if (index == 0)
+ screen->addWorkspace();
+ else if (index == 1)
+ screen->removeLastWorkspace();
+ else if ((screen->getCurrentWorkspace()->getWorkspaceID() !=
+ (index - 2)) && ((index - 2) < screen->getCount()))
+ screen->changeWorkspaceID(index - 2);
+
+ if (! (screen->getWorkspacemenu()->isTorn() || isTorn()))
+ hide();
+}
--- /dev/null
+// WorkspaceMenu.h for Openbox - an X11 Window manager
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Workspacemenu_hh
+#define __Workspacemenu_hh
+
+#include "Basemenu.h"
+
+// forward declaration
+class Workspacemenu;
+class Toolbar;
+
+class Workspacemenu : public Basemenu {
+private:
+ BScreen *screen;
+
+protected:
+ virtual void itemSelected(int, int);
+
+public:
+ Workspacemenu(BScreen *);
+};
+
+
+#endif // __Workspacemenu_hh
+
--- /dev/null
+/**************************************************************
+ * Original:
+ * Patrick Powell Tue Apr 11 09:48:21 PDT 1995
+ * A bombproof version of doprnt (dopr) included.
+ * Sigh. This sort of thing is always nasty do deal with. Note that
+ * the version here does not include floating point...
+ *
+ * snprintf() is used instead of sprintf() as it does limit checks
+ * for string length. This covers a nasty loophole.
+ *
+ * The other functions are there to prevent NULL pointers from
+ * causing nast effects.
+ *
+ * More Recently:
+ * Brandon Long <blong@fiction.net> 9/15/96 for mutt 0.43
+ * This was ugly. It is still ugly. I opted out of floating point
+ * numbers, but the formatter understands just about everything
+ * from the normal C string format, at least as far as I can tell from
+ * the Solaris 2.5 printf(3S) man page.
+ *
+ * Brandon Long <blong@fiction.net> 10/22/97 for mutt 0.87.1
+ * Ok, added some minimal floating point support, which means this
+ * probably requires libm on most operating systems. Don't yet
+ * support the exponent (e,E) and sigfig (g,G). Also, fmtint()
+ * was pretty badly broken, it just wasn't being exercised in ways
+ * which showed it, so that's been fixed. Also, formated the code
+ * to mutt conventions, and removed dead code left over from the
+ * original. Also, there is now a builtin-test, just compile with:
+ * gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm
+ * and run snprintf for results.
+ *
+ * Thomas Roessler <roessler@guug.de> 01/27/98 for mutt 0.89i
+ * The PGP code was using unsigned hexadecimal formats.
+ * Unfortunately, unsigned formats simply didn't work.
+ *
+ * Michael Elkins <me@cs.hmc.edu> 03/05/98 for mutt 0.90.8
+ * The original code assumed that both snprintf() and vsnprintf() were
+ * missing. Some systems only have snprintf() but not vsnprintf(), so
+ * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF.
+ *
+ **************************************************************/
+
+#include "config.h"
+
+#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
+
+#include <string.h>
+# include <ctype.h>
+#include <sys/types.h>
+
+/* Define this as a fall through, HAVE_STDARG_H is probably already set */
+
+#define HAVE_VARARGS_H
+
+/* varargs declarations: */
+
+#if defined(HAVE_STDARG_H)
+# include <stdarg.h>
+# define HAVE_STDARGS /* let's hope that works everywhere (mj) */
+# define VA_LOCAL_DECL va_list ap
+# define VA_START(f) va_start(ap, f)
+# define VA_SHIFT(v,t) ; /* no-op for ANSI */
+# define VA_END va_end(ap)
+#else
+# if defined(HAVE_VARARGS_H)
+# include <varargs.h>
+# undef HAVE_STDARGS
+# define VA_LOCAL_DECL va_list ap
+# define VA_START(f) va_start(ap) /* f is ignored! */
+# define VA_SHIFT(v,t) v = va_arg(ap,t)
+# define VA_END va_end(ap)
+# else
+/*XX ** NO VARARGS ** XX*/
+# endif
+#endif
+
+/*int snprintf (char *str, size_t count, const char *fmt, ...);*/
+/*int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);*/
+
+static void dopr (char *buffer, size_t maxlen, const char *format,
+ va_list args);
+static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
+ char *value, int flags, int min, int max);
+static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
+ long value, int base, int min, int max, int flags);
+static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
+ long double fvalue, int min, int max, int flags);
+static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c );
+
+/*
+ * dopr(): poor man's version of doprintf
+ */
+
+/* format read states */
+#define DP_S_DEFAULT 0
+#define DP_S_FLAGS 1
+#define DP_S_MIN 2
+#define DP_S_DOT 3
+#define DP_S_MAX 4
+#define DP_S_MOD 5
+#define DP_S_CONV 6
+#define DP_S_DONE 7
+
+/* format flags - Bits */
+#define DP_F_MINUS (1 << 0)
+#define DP_F_PLUS (1 << 1)
+#define DP_F_SPACE (1 << 2)
+#define DP_F_NUM (1 << 3)
+#define DP_F_ZERO (1 << 4)
+#define DP_F_UP (1 << 5)
+#define DP_F_UNSIGNED (1 << 6)
+
+/* Conversion Flags */
+#define DP_C_SHORT 1
+#define DP_C_LONG 2
+#define DP_C_LDOUBLE 3
+
+#define char_to_int(p) (p - '0')
+#define MAX(p,q) ((p >= q) ? p : q)
+
+static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
+{
+ char ch;
+ long value;
+ long double fvalue;
+ char *strvalue;
+ int min;
+ int max;
+ int state;
+ int flags;
+ int cflags;
+ size_t currlen;
+
+ state = DP_S_DEFAULT;
+ currlen = flags = cflags = min = 0;
+ max = -1;
+ ch = *format++;
+
+ while (state != DP_S_DONE)
+ {
+ if ((ch == '\0') || (currlen >= maxlen))
+ state = DP_S_DONE;
+
+ switch(state)
+ {
+ case DP_S_DEFAULT:
+ if (ch == '%')
+ state = DP_S_FLAGS;
+ else
+ dopr_outch (buffer, &currlen, maxlen, ch);
+ ch = *format++;
+ break;
+ case DP_S_FLAGS:
+ switch (ch)
+ {
+ case '-':
+ flags |= DP_F_MINUS;
+ ch = *format++;
+ break;
+ case '+':
+ flags |= DP_F_PLUS;
+ ch = *format++;
+ break;
+ case ' ':
+ flags |= DP_F_SPACE;
+ ch = *format++;
+ break;
+ case '#':
+ flags |= DP_F_NUM;
+ ch = *format++;
+ break;
+ case '0':
+ flags |= DP_F_ZERO;
+ ch = *format++;
+ break;
+ default:
+ state = DP_S_MIN;
+ break;
+ }
+ break;
+ case DP_S_MIN:
+ if (isdigit((unsigned char)ch))
+ {
+ min = 10*min + char_to_int (ch);
+ ch = *format++;
+ }
+ else if (ch == '*')
+ {
+ min = va_arg (args, int);
+ ch = *format++;
+ state = DP_S_DOT;
+ }
+ else
+ state = DP_S_DOT;
+ break;
+ case DP_S_DOT:
+ if (ch == '.')
+ {
+ state = DP_S_MAX;
+ ch = *format++;
+ }
+ else
+ state = DP_S_MOD;
+ break;
+ case DP_S_MAX:
+ if (isdigit((unsigned char)ch))
+ {
+ if (max < 0)
+ max = 0;
+ max = 10*max + char_to_int (ch);
+ ch = *format++;
+ }
+ else if (ch == '*')
+ {
+ max = va_arg (args, int);
+ ch = *format++;
+ state = DP_S_MOD;
+ }
+ else
+ state = DP_S_MOD;
+ break;
+ case DP_S_MOD:
+ /* Currently, we don't support Long Long, bummer */
+ switch (ch)
+ {
+ case 'h':
+ cflags = DP_C_SHORT;
+ ch = *format++;
+ break;
+ case 'l':
+ cflags = DP_C_LONG;
+ ch = *format++;
+ break;
+ case 'L':
+ cflags = DP_C_LDOUBLE;
+ ch = *format++;
+ break;
+ default:
+ break;
+ }
+ state = DP_S_CONV;
+ break;
+ case DP_S_CONV:
+ switch (ch)
+ {
+ case 'd':
+ case 'i':
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, short int);
+ else if (cflags == DP_C_LONG)
+ value = va_arg (args, long int);
+ else
+ value = va_arg (args, int);
+ fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
+ break;
+ case 'o':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = va_arg (args, unsigned long int);
+ else
+ value = va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
+ break;
+ case 'u':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = va_arg (args, unsigned long int);
+ else
+ value = va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
+ break;
+ case 'X':
+ flags |= DP_F_UP;
+ case 'x':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = va_arg (args, unsigned long int);
+ else
+ value = va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
+ break;
+ case 'f':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, long double);
+ else
+ fvalue = va_arg (args, double);
+ /* um, floating point? */
+ fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
+ break;
+ case 'E':
+ flags |= DP_F_UP;
+ case 'e':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, long double);
+ else
+ fvalue = va_arg (args, double);
+ break;
+ case 'G':
+ flags |= DP_F_UP;
+ case 'g':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, long double);
+ else
+ fvalue = va_arg (args, double);
+ break;
+ case 'c':
+ dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
+ break;
+ case 's':
+ strvalue = va_arg (args, char *);
+ if (max < 0)
+ max = maxlen; /* ie, no max */
+ fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
+ break;
+ case 'p':
+ strvalue = va_arg (args, void *);
+ fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
+ break;
+ case 'n':
+ if (cflags == DP_C_SHORT)
+ {
+ short int *num;
+ num = va_arg (args, short int *);
+ *num = currlen;
+ }
+ else if (cflags == DP_C_LONG)
+ {
+ long int *num;
+ num = va_arg (args, long int *);
+ *num = currlen;
+ }
+ else
+ {
+ int *num;
+ num = va_arg (args, int *);
+ *num = currlen;
+ }
+ break;
+ case '%':
+ dopr_outch (buffer, &currlen, maxlen, ch);
+ break;
+ case 'w':
+ /* not supported yet, treat as next char */
+ ch = *format++;
+ break;
+ default:
+ /* Unknown, skip */
+ break;
+ }
+ ch = *format++;
+ state = DP_S_DEFAULT;
+ flags = cflags = min = 0;
+ max = -1;
+ break;
+ case DP_S_DONE:
+ break;
+ default:
+ /* hmm? */
+ break; /* some picky compilers need this */
+ }
+ }
+ if (currlen < maxlen - 1)
+ buffer[currlen] = '\0';
+ else
+ buffer[maxlen - 1] = '\0';
+}
+
+static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
+ char *value, int flags, int min, int max)
+{
+ int padlen, strln; /* amount to pad */
+ int cnt = 0;
+
+ if (value == 0)
+ {
+ value = "<NULL>";
+ }
+
+ for (strln = 0; value[strln]; ++strln); /* strlen */
+ padlen = min - strln;
+ if (padlen < 0)
+ padlen = 0;
+ if (flags & DP_F_MINUS)
+ padlen = -padlen; /* Left Justify */
+
+ while ((padlen > 0) && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --padlen;
+ ++cnt;
+ }
+ while (*value && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, *value++);
+ ++cnt;
+ }
+ while ((padlen < 0) && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++padlen;
+ ++cnt;
+ }
+}
+
+/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
+
+static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
+ long value, int base, int min, int max, int flags)
+{
+ int signvalue = 0;
+ unsigned long uvalue;
+ char convert[20];
+ int place = 0;
+ int spadlen = 0; /* amount to space pad */
+ int zpadlen = 0; /* amount to zero pad */
+ int caps = 0;
+
+ if (max < 0)
+ max = 0;
+
+ uvalue = value;
+
+ if(!(flags & DP_F_UNSIGNED))
+ {
+ if( value < 0 ) {
+ signvalue = '-';
+ uvalue = -value;
+ }
+ else
+ if (flags & DP_F_PLUS) /* Do a sign (+/i) */
+ signvalue = '+';
+ else
+ if (flags & DP_F_SPACE)
+ signvalue = ' ';
+ }
+
+ if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
+
+ do {
+ convert[place++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")
+ [uvalue % (unsigned)base ];
+ uvalue = (uvalue / (unsigned)base );
+ } while(uvalue && (place < 20));
+ if (place == 20) place--;
+ convert[place] = 0;
+
+ zpadlen = max - place;
+ spadlen = min - MAX (max, place) - (signvalue ? 1 : 0);
+ if (zpadlen < 0) zpadlen = 0;
+ if (spadlen < 0) spadlen = 0;
+ if (flags & DP_F_ZERO)
+ {
+ zpadlen = MAX(zpadlen, spadlen);
+ spadlen = 0;
+ }
+ if (flags & DP_F_MINUS)
+ spadlen = -spadlen; /* Left Justifty */
+
+#ifdef DEBUG_SNPRINTF
+ dprint (1, (debugfile, "zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",
+ zpadlen, spadlen, min, max, place));
+#endif
+
+ /* Spaces */
+ while (spadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --spadlen;
+ }
+
+ /* Sign */
+ if (signvalue)
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+
+ /* Zeros */
+ if (zpadlen > 0)
+ {
+ while (zpadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --zpadlen;
+ }
+ }
+
+ /* Digits */
+ while (place > 0)
+ dopr_outch (buffer, currlen, maxlen, convert[--place]);
+
+ /* Left Justified spaces */
+ while (spadlen < 0) {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++spadlen;
+ }
+}
+
+static long double abs_val (long double value)
+{
+ long double result = value;
+
+ if (value < 0)
+ result = -value;
+
+ return result;
+}
+
+static long double pow10 (int exp)
+{
+ long double result = 1;
+
+ while (exp)
+ {
+ result *= 10;
+ exp--;
+ }
+
+ return result;
+}
+
+static long round (long double value)
+{
+ long intpart;
+
+ intpart = value;
+ value = value - intpart;
+ if (value >= 0.5)
+ intpart++;
+
+ return intpart;
+}
+
+static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
+ long double fvalue, int min, int max, int flags)
+{
+ int signvalue = 0;
+ long double ufvalue;
+ char iconvert[20];
+ char fconvert[20];
+ int iplace = 0;
+ int fplace = 0;
+ int padlen = 0; /* amount to pad */
+ int zpadlen = 0;
+ int caps = 0;
+ long intpart;
+ long fracpart;
+
+ /*
+ * AIX manpage says the default is 0, but Solaris says the default
+ * is 6, and sprintf on AIX defaults to 6
+ */
+ if (max < 0)
+ max = 6;
+
+ ufvalue = abs_val (fvalue);
+
+ if (fvalue < 0)
+ signvalue = '-';
+ else
+ if (flags & DP_F_PLUS) /* Do a sign (+/i) */
+ signvalue = '+';
+ else
+ if (flags & DP_F_SPACE)
+ signvalue = ' ';
+
+#if 0
+ if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
+#endif
+
+ intpart = ufvalue;
+
+ /*
+ * Sorry, we only support 9 digits past the decimal because of our
+ * conversion method
+ */
+ if (max > 9)
+ max = 9;
+
+ /* We "cheat" by converting the fractional part to integer by
+ * multiplying by a factor of 10
+ */
+ fracpart = round ((pow10 (max)) * (ufvalue - intpart));
+
+ if (fracpart >= pow10 (max))
+ {
+ intpart++;
+ fracpart -= pow10 (max);
+ }
+
+#ifdef DEBUG_SNPRINTF
+ dprint (1, (debugfile, "fmtfp: %f =? %d.%d\n", fvalue, intpart, fracpart));
+#endif
+
+ /* Convert integer part */
+ do {
+ iconvert[iplace++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10];
+ intpart = (intpart / 10);
+ } while(intpart && (iplace < 20));
+ if (iplace == 20) iplace--;
+ iconvert[iplace] = 0;
+
+ /* Convert fractional part */
+ do {
+ fconvert[fplace++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10];
+ fracpart = (fracpart / 10);
+ } while(fracpart && (fplace < 20));
+ if (fplace == 20) fplace--;
+ fconvert[fplace] = 0;
+
+ /* -1 for decimal point, another -1 if we are printing a sign */
+ padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
+ zpadlen = max - fplace;
+ if (zpadlen < 0)
+ zpadlen = 0;
+ if (padlen < 0)
+ padlen = 0;
+ if (flags & DP_F_MINUS)
+ padlen = -padlen; /* Left Justifty */
+
+ if ((flags & DP_F_ZERO) && (padlen > 0))
+ {
+ if (signvalue)
+ {
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+ --padlen;
+ signvalue = 0;
+ }
+ while (padlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --padlen;
+ }
+ }
+ while (padlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --padlen;
+ }
+ if (signvalue)
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+
+ while (iplace > 0)
+ dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
+
+ /*
+ * Decimal point. This should probably use locale to find the correct
+ * char to print out.
+ */
+ dopr_outch (buffer, currlen, maxlen, '.');
+
+ while (fplace > 0)
+ dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
+
+ while (zpadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --zpadlen;
+ }
+
+ while (padlen < 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++padlen;
+ }
+}
+
+static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c)
+{
+ if (*currlen < maxlen)
+ buffer[(*currlen)++] = c;
+}
+#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
+
+#ifndef HAVE_VSNPRINTF
+int vsnprintf (char *str, size_t count, const char *fmt, va_list args)
+{
+ str[0] = 0;
+ dopr(str, count, fmt, args);
+ return(strlen(str));
+}
+#endif /* !HAVE_VSNPRINTF */
+
+#ifndef HAVE_SNPRINTF
+/* VARARGS3 */
+#ifdef HAVE_STDARGS
+int snprintf (char *str,size_t count,const char *fmt,...)
+#else
+int snprintf (va_alist) va_dcl
+#endif
+{
+#ifndef HAVE_STDARGS
+ char *str;
+ size_t count;
+ char *fmt;
+#endif
+ VA_LOCAL_DECL;
+
+ VA_START (fmt);
+ VA_SHIFT (str, char *);
+ VA_SHIFT (count, size_t );
+ VA_SHIFT (fmt, char *);
+ (void) vsnprintf(str, count, fmt, ap);
+ VA_END;
+ return(strlen(str));
+}
+
+#ifdef TEST_SNPRINTF
+#ifndef LONG_STRING
+#define LONG_STRING 1024
+#endif
+int main (void)
+{
+ char buf1[LONG_STRING];
+ char buf2[LONG_STRING];
+ char *fp_fmt[] = {
+ "%-1.5f",
+ "%1.5f",
+ "%123.9f",
+ "%10.5f",
+ "% 10.5f",
+ "%+22.9f",
+ "%+4.9f",
+ "%01.3f",
+ "%4f",
+ "%3.1f",
+ "%3.2f",
+ NULL
+ };
+ double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996,
+ 0.9996, 1.996, 4.136, 0};
+ char *int_fmt[] = {
+ "%-1.5d",
+ "%1.5d",
+ "%123.9d",
+ "%5.5d",
+ "%10.5d",
+ "% 10.5d",
+ "%+22.33d",
+ "%01.3d",
+ "%4d",
+ NULL
+ };
+ long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
+ int x, y;
+ int fail = 0;
+ int num = 0;
+
+ printf ("Testing snprintf format codes against system sprintf...\n");
+
+ for (x = 0; fp_fmt[x] != NULL ; x++)
+ for (y = 0; fp_nums[y] != 0 ; y++)
+ {
+ snprintf (buf1, sizeof (buf1), fp_fmt[x], fp_nums[y]);
+ sprintf (buf2, fp_fmt[x], fp_nums[y]);
+ if (strcmp (buf1, buf2))
+ {
+ printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n",
+ fp_fmt[x], buf1, buf2);
+ fail++;
+ }
+ num++;
+ }
+
+ for (x = 0; int_fmt[x] != NULL ; x++)
+ for (y = 0; int_nums[y] != 0 ; y++)
+ {
+ snprintf (buf1, sizeof (buf1), int_fmt[x], int_nums[y]);
+ sprintf (buf2, int_fmt[x], int_nums[y]);
+ if (strcmp (buf1, buf2))
+ {
+ printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n",
+ int_fmt[x], buf1, buf2);
+ fail++;
+ }
+ num++;
+ }
+ printf ("%d tests failed out of %d.\n", fail, num);
+}
+#endif /* SNPRINTF_TEST */
+
+#endif /* !HAVE_SNPRINTF */
--- /dev/null
+#ifndef _BSD_SNPRINTF_H
+#define _BSD_SNPRINTF_H
+
+#include "config.h"
+
+#include <sys/types.h> /* For size_t */
+
+#ifndef HAVE_SNPRINTF
+int snprintf(char *str, size_t count, const char *fmt, ...);
+#endif /* !HAVE_SNPRINTF */
+
+#ifndef HAVE_VSNPRINTF
+int vsnprintf(char *str, size_t count, const char *fmt, va_list args);
+#endif /* !HAVE_SNPRINTF */
+
+
+#endif /* _BSD_SNPRINTF_H */
--- /dev/null
+// i18n.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "i18n.h"
+
+#include <X11/Xlocale.h>
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+# include <stdio.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#endif // HAVE_LOCALE_H
+
+// the rest of bb source uses True and False from X, so we continue that
+#define True true
+#define False false
+
+static I18n static_i18n;
+I18n *i18n;
+
+void NLSInit(const char *catalog) {
+ i18n = &static_i18n;
+
+ i18n->openCatalog(catalog);
+}
+
+
+I18n::I18n(void) {
+ mb = False;
+#ifdef HAVE_SETLOCALE
+ locale = setlocale(LC_ALL, "");
+ if (! locale) {
+ fprintf(stderr, "failed to set locale, reverting to \"C\"\n");
+#endif // HAVE_SETLOCALE
+ locale = "C";
+#ifdef HAVE_SETLOCALE
+ } else {
+ // MB_CUR_MAX returns the size of a char in the current locale
+ if (MB_CUR_MAX > 1)
+ mb = True;
+ // truncate any encoding off the end of the locale
+ char *l = strchr(locale, '@');
+ if (l) *l = '\0';
+ l = strchr(locale, '.');
+ if (l) *l = '\0';
+ }
+
+#ifdef HAVE_CATOPEN
+ catalog_fd = (nl_catd) -1;
+#endif
+#endif // HAVE_SETLOCALE
+
+ catalog_filename = (char *) 0;
+}
+
+
+I18n::~I18n(void) {
+ delete [] catalog_filename;
+
+#if defined(NLS) && defined(HAVE_CATCLOSE)
+ if (catalog_fd != (nl_catd) -1)
+ catclose(catalog_fd);
+#endif // HAVE_CATCLOSE
+}
+
+
+void I18n::openCatalog(const char *catalog) {
+#if defined(NLS) && defined(HAVE_CATOPEN)
+ int lp = strlen(LOCALEPATH), lc = strlen(locale),
+ ct = strlen(catalog), len = lp + lc + ct + 3;
+ catalog_filename = new char[len];
+
+ strncpy(catalog_filename, LOCALEPATH, lp);
+ *(catalog_filename + lp) = '/';
+ strncpy(catalog_filename + lp + 1, locale, lc);
+ *(catalog_filename + lp + lc + 1) = '/';
+ strncpy(catalog_filename + lp + lc + 2, catalog, ct + 1);
+
+# ifdef MCLoadBySet
+ catalog_fd = catopen(catalog_filename, MCLoadBySet);
+# else // !MCLoadBySet
+ catalog_fd = catopen(catalog_filename, NL_CAT_LOCALE);
+# endif // MCLoadBySet
+
+ if (catalog_fd == (nl_catd) -1)
+ fprintf(stderr, "failed to open catalog, using default messages\n");
+#else // !HAVE_CATOPEN
+
+ catalog_filename = (char *) 0;
+#endif // HAVE_CATOPEN
+}
+
+
+const char *I18n::getMessage(int set, int msg, const char *msgString) const {
+#if defined(NLS) && defined(HAVE_CATGETS)
+ if (catalog_fd != (nl_catd) -1)
+ return (const char *) catgets(catalog_fd, set, msg, msgString);
+ else
+#endif
+ return msgString;
+}
--- /dev/null
+// i18n.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __i18n_h
+#define __i18n_h
+
+// always include this just for the #defines
+// this keeps the calls to i18n->getMessage clean, otherwise we have to
+// add ifdefs to every call to getMessage
+#include "../nls/openbox-nls.h"
+
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#endif // HAVE_LOCALE_H
+
+#ifdef HAVE_NL_TYPES_H
+extern "C" {
+# include <nl_types.h>
+}
+#endif // HAVE_NL_TYPES_H
+
+
+class I18n {
+private:
+ char *locale, *catalog_filename;
+ bool mb;
+#ifdef HAVE_NL_TYPES_H
+ nl_catd catalog_fd;
+#endif
+
+public:
+ I18n(void);
+ ~I18n(void);
+
+ inline bool multibyte(void) const { return mb; }
+
+ const char *getMessage(int set, int msg, const char *msgString) const;
+ void openCatalog(const char *catalog);
+};
+
+
+extern I18n *i18n;
+extern void NLSInit(const char *);
+
+
+
+#endif // __i18n_h
--- /dev/null
+// main.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#include "../version.h"
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include "i18n.h"
+#include "openbox.h"
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_UNISTD_H
+#include <sys/types.h>
+#endif // HAVE_UNISTD_H
+
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif // HAVE_SYS_PARAM_H
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 255
+#endif // MAXPATHLEN
+
+
+static void showHelp(int exitval) {
+ // print program usage and command line options
+ printf(i18n->getMessage(mainSet, mainUsage,
+ "Openbox %s : (c) 2002 - 2002 Ben Jansens\n"
+ "\t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n\n"
+ "\t\t\t 1997 - 2000 Brad Hughes\n\n"
+ " -display <string>\t\tuse display connection.\n"
+ " -rc <string>\t\t\tuse alternate resource file.\n"
+ " -version\t\t\tdisplay version and exit.\n"
+ " -help\t\t\t\tdisplay this help text and exit.\n\n"),
+ __openbox_version);
+
+ // some people have requested that we print out compile options
+ // as well
+ fprintf(stdout,i18n->getMessage(mainSet, mainCompileOptions,
+ "Compile time options:\n"
+ " Debugging:\t\t\t%s\n"
+ " Interlacing:\t\t\t%s\n"
+ " Shape:\t\t\t%s\n"
+ " Slit:\t\t\t\t%s\n"
+ " 8bpp Ordered Dithering:\t%s\n"
+ " Event Clobbering:\t\t%s\n\n"),
+#ifdef DEBUG
+ i18n->getMessage(CommonSet, CommonYes, "yes"),
+#else // !DEBUG
+ i18n->getMessage(CommonSet, CommonNo, "no"),
+#endif // DEBUG
+
+#ifdef INTERLACE
+ i18n->getMessage(CommonSet, CommonYes, "yes"),
+#else // !INTERLACE
+ i18n->getMessage(CommonSet, CommonNo, "no"),
+#endif // INTERLACE
+
+#ifdef SHAPE
+ i18n->getMessage(CommonSet, CommonYes, "yes"),
+#else // !SHAPE
+ i18n->getMessage(CommonSet, CommonNo, "no"),
+#endif // SHAPE
+
+#ifdef SLIT
+ i18n->getMessage(CommonSet, CommonYes, "yes"),
+#else // !SLIT
+ i18n->getMessage(CommonSet, CommonNo, "no"),
+#endif // SLIT
+
+#ifdef ORDEREDPSEUDO
+ i18n->getMessage(CommonSet, CommonYes, "yes"),
+#else // !ORDEREDPSEUDO
+ i18n->getMessage(CommonSet, CommonNo, "no"),
+#endif // ORDEREDPSEUDO
+
+#ifndef NOCLOBBER
+ i18n->getMessage(CommonSet, CommonYes, "yes")
+#else // !NOCLOBBER
+ i18n->getMessage(CommonSet, CommonNo, "no")
+#endif // NOCLOBBER
+ );
+
+ ::exit(exitval);
+}
+
+int main(int argc, char **argv) {
+ char *session_display = (char *) 0;
+ char *rc_file = (char *) 0;
+
+ NLSInit("openbox.cat");
+
+ for (int i = 1; i < argc; ++i) {
+ if (! strcmp(argv[i], "-rc")) {
+ // look for alternative rc file to use
+
+ if ((++i) >= argc) {
+ fprintf(stderr,
+ i18n->getMessage(mainSet, mainRCRequiresArg,
+ "error: '-rc' requires and argument\n"));
+
+ ::exit(1);
+ }
+
+ rc_file = argv[i];
+ } else if (! strcmp(argv[i], "-display")) {
+ // check for -display option... to run on a display other than the one
+ // set by the environment variable DISPLAY
+
+ if ((++i) >= argc) {
+ fprintf(stderr,
+ i18n->getMessage(mainSet, mainDISPLAYRequiresArg,
+ "error: '-display' requires an argument\n"));
+
+ ::exit(1);
+ }
+
+ session_display = argv[i];
+ char dtmp[MAXPATHLEN];
+ sprintf(dtmp, "DISPLAY=%s", session_display);
+
+ if (putenv(dtmp)) {
+ fprintf(stderr,
+ i18n->
+ getMessage(mainSet, mainWarnDisplaySet,
+ "warning: couldn't set environment variable 'DISPLAY'\n"));
+ perror("putenv()");
+ }
+ } else if (! strcmp(argv[i], "-version")) {
+ // print current version string
+ printf("Openbox %s : (c) 1997 - 2000 Brad Hughes\n"
+ "\t\t\t 2001 - 2002 Sean 'Shaleh' Perry\n",
+ __openbox_version);
+
+ ::exit(0);
+ } else if (! strcmp(argv[i], "-help")) {
+ showHelp(0);
+ } else { // invalid command line option
+ showHelp(-1);
+ }
+ }
+
+#ifdef __EMX__
+ _chdir2(getenv("X11ROOT"));
+#endif // __EMX__
+
+ Openbox openbox(argc, argv, session_display, rc_file);
+ openbox.eventLoop();
+
+ return(0);
+}
--- /dev/null
+// openbox.cc for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// stupid macros needed to access some functions in version 2 of the GNU C
+// library
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif // _GNU_SOURCE
+
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xresource.h>
+#include <X11/Xatom.h>
+#include <X11/keysym.h>
+
+#ifdef SHAPE
+#include <X11/extensions/shape.h>
+#endif // SHAPE
+
+#include "i18n.h"
+#include "openbox.h"
+#include "Basemenu.h"
+#include "Clientmenu.h"
+#include "Rootmenu.h"
+#include "Screen.h"
+
+#ifdef SLIT
+#include "Slit.h"
+#endif // SLIT
+
+#include "Toolbar.h"
+#include "Window.h"
+#include "Workspace.h"
+#include "Workspacemenu.h"
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_UNISTD_H
+# include <sys/types.h>
+# include <unistd.h>
+#endif // HAVE_UNISTD_H
+
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif // HAVE_SYS_PARAM_H
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 255
+#endif // MAXPATHLEN
+
+#ifdef HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif // HAVE_SYS_SELECT_H
+
+#ifdef HAVE_SIGNAL_H
+# include <signal.h>
+#endif // HAVE_SIGNAL_H
+
+#ifdef HAVE_SYS_SIGNAL_H
+# include <sys/signal.h>
+#endif // HAVE_SYS_SIGNAL_H
+
+#ifdef HAVE_SYS_STAT_H
+# include <sys/types.h>
+# include <sys/stat.h>
+#endif // HAVE_SYS_STAT_H
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else // !TIME_WITH_SYS_TIME
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else // !HAVE_SYS_TIME_H
+# include <time.h>
+# endif // HAVE_SYS_TIME_H
+#endif // TIME_WITH_SYS_TIME
+
+#ifdef HAVE_LIBGEN_H
+# include <libgen.h>
+#endif // HAVE_LIBGEN_H
+
+#ifndef HAVE_BASENAME
+static inline char *basename (char *s) {
+ char *save = s;
+
+ while (*s) if (*s++ == '/') save = s;
+
+ return save;
+}
+#endif // HAVE_BASENAME
+
+
+// X event scanner for enter/leave notifies - adapted from twm
+typedef struct scanargs {
+ Window w;
+ Bool leave, inferior, enter;
+} scanargs;
+
+static Bool queueScanner(Display *, XEvent *e, char *args) {
+ if ((e->type == LeaveNotify) &&
+ (e->xcrossing.window == ((scanargs *) args)->w) &&
+ (e->xcrossing.mode == NotifyNormal)) {
+ ((scanargs *) args)->leave = True;
+ ((scanargs *) args)->inferior = (e->xcrossing.detail == NotifyInferior);
+ } else if ((e->type == EnterNotify) &&
+ (e->xcrossing.mode == NotifyUngrab)) {
+ ((scanargs *) args)->enter = True;
+ }
+
+ return False;
+}
+
+Openbox *openbox;
+
+
+Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
+ : BaseDisplay(m_argv[0], dpy_name) {
+ grab();
+
+ if (! XSupportsLocale())
+ fprintf(stderr, "X server does not support locale\n");
+
+ if (XSetLocaleModifiers("") == NULL)
+ fprintf(stderr, "cannot set locale modifiers\n");
+
+ ::openbox = this;
+ argc = m_argc;
+ argv = m_argv;
+ if (rc == NULL) {
+ char *homedir = getenv("HOME");
+
+ rc_file = new char[strlen(homedir) + strlen("/.openbox/rc") + 1];
+ sprintf(rc_file, "%s/.openbox", homedir);
+
+ // try to make sure the ~/.openbox directory exists
+ mkdir(rc_file, S_IREAD | S_IWRITE | S_IEXEC | S_IRGRP | S_IWGRP | S_IXGRP |
+ S_IROTH | S_IWOTH | S_IXOTH);
+
+ sprintf(rc_file, "%s/.openbox/rc", homedir);
+ } else {
+ rc_file = bstrdup(rc);
+ }
+
+ no_focus = False;
+
+ resource.menu_file = resource.style_file = (char *) 0;
+ resource.titlebar_layout = (char *) NULL;
+ resource.auto_raise_delay.tv_sec = resource.auto_raise_delay.tv_usec = 0;
+
+ focused_window = masked_window = (OpenboxWindow *) 0;
+ masked = None;
+
+ windowSearchList = new LinkedList<WindowSearch>;
+ menuSearchList = new LinkedList<MenuSearch>;
+
+#ifdef SLIT
+ slitSearchList = new LinkedList<SlitSearch>;
+#endif // SLIT
+
+ toolbarSearchList = new LinkedList<ToolbarSearch>;
+ groupSearchList = new LinkedList<WindowSearch>;
+
+ menuTimestamps = new LinkedList<MenuTimestamp>;
+
+ XrmInitialize();
+ load_rc();
+
+#ifdef HAVE_GETPID
+ openbox_pid = XInternAtom(getXDisplay(), "_BLACKBOX_PID", False);
+#endif // HAVE_GETPID
+
+ screenList = new LinkedList<BScreen>;
+ for (int i = 0; i < getNumberOfScreens(); i++) {
+ BScreen *screen = new BScreen(this, i);
+
+ if (! screen->isScreenManaged()) {
+ delete screen;
+ continue;
+ }
+
+ screenList->insert(screen);
+ }
+
+ if (! screenList->count()) {
+ fprintf(stderr,
+ i18n->getMessage(openboxSet, openboxNoManagableScreens,
+ "Openbox::Openbox: no managable screens found, aborting.\n"));
+ ::exit(3);
+ }
+
+ XSynchronize(getXDisplay(), False);
+ XSync(getXDisplay(), False);
+
+ reconfigure_wait = reread_menu_wait = False;
+
+ timer = new BTimer(this, this);
+ timer->setTimeout(0);
+ timer->fireOnce(True);
+
+ ungrab();
+}
+
+
+Openbox::~Openbox(void) {
+ while (screenList->count())
+ delete screenList->remove(0);
+
+ while (menuTimestamps->count()) {
+ MenuTimestamp *ts = menuTimestamps->remove(0);
+
+ if (ts->filename)
+ delete [] ts->filename;
+
+ delete ts;
+ }
+
+ if (resource.menu_file)
+ delete [] resource.menu_file;
+
+ if (resource.style_file)
+ delete [] resource.style_file;
+
+ delete timer;
+
+ delete screenList;
+ delete menuTimestamps;
+
+ delete windowSearchList;
+ delete menuSearchList;
+ delete toolbarSearchList;
+ delete groupSearchList;
+
+ delete [] rc_file;
+
+#ifdef SLIT
+ delete slitSearchList;
+#endif // SLIT
+}
+
+
+void Openbox::process_event(XEvent *e) {
+ if ((masked == e->xany.window) && masked_window &&
+ (e->type == MotionNotify)) {
+ last_time = e->xmotion.time;
+ masked_window->motionNotifyEvent(&e->xmotion);
+
+ return;
+ }
+
+ switch (e->type) {
+ case ButtonPress: {
+ // strip the lock key modifiers
+ e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+
+ last_time = e->xbutton.time;
+
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+ Basemenu *menu = (Basemenu *) 0;
+
+#ifdef SLIT
+ Slit *slit = (Slit *) 0;
+#endif // SLIT
+
+ Toolbar *tbar = (Toolbar *) 0;
+
+ if ((win = searchWindow(e->xbutton.window))) {
+ win->buttonPressEvent(&e->xbutton);
+
+ if (e->xbutton.button == 1)
+ win->installColormap(True);
+ } else if ((menu = searchMenu(e->xbutton.window))) {
+ menu->buttonPressEvent(&e->xbutton);
+
+#ifdef SLIT
+ } else if ((slit = searchSlit(e->xbutton.window))) {
+ slit->buttonPressEvent(&e->xbutton);
+#endif // SLIT
+
+ } else if ((tbar = searchToolbar(e->xbutton.window))) {
+ tbar->buttonPressEvent(&e->xbutton);
+ } else {
+ LinkedListIterator<BScreen> it(screenList);
+ BScreen *screen = it.current();
+ for (; screen; it++, screen = it.current()) {
+ if (e->xbutton.window == screen->getRootWindow()) {
+ if (e->xbutton.button == 1) {
+ if (! screen->isRootColormapInstalled())
+ screen->getImageControl()->installRootColormap();
+
+ if (screen->getWorkspacemenu()->isVisible())
+ screen->getWorkspacemenu()->hide();
+
+ if (screen->getRootmenu()->isVisible())
+ screen->getRootmenu()->hide();
+ } else if (e->xbutton.button == 2) {
+ int mx = e->xbutton.x_root -
+ (screen->getWorkspacemenu()->getWidth() / 2);
+ int my = e->xbutton.y_root -
+ (screen->getWorkspacemenu()->getTitleHeight() / 2);
+
+ if (mx < 0) mx = 0;
+ if (my < 0) my = 0;
+
+ if (mx + screen->getWorkspacemenu()->getWidth() >
+ screen->getWidth())
+ mx = screen->getWidth() -
+ screen->getWorkspacemenu()->getWidth() -
+ screen->getBorderWidth();
+
+ if (my + screen->getWorkspacemenu()->getHeight() >
+ screen->getHeight())
+ my = screen->getHeight() -
+ screen->getWorkspacemenu()->getHeight() -
+ screen->getBorderWidth();
+
+ screen->getWorkspacemenu()->move(mx, my);
+
+ if (! screen->getWorkspacemenu()->isVisible()) {
+ screen->getWorkspacemenu()->removeParent();
+ screen->getWorkspacemenu()->show();
+ }
+ } else if (e->xbutton.button == 3) {
+ int mx = e->xbutton.x_root -
+ (screen->getRootmenu()->getWidth() / 2);
+ int my = e->xbutton.y_root -
+ (screen->getRootmenu()->getTitleHeight() / 2);
+
+ if (mx < 0) mx = 0;
+ if (my < 0) my = 0;
+
+ if (mx + screen->getRootmenu()->getWidth() > screen->getWidth())
+ mx = screen->getWidth() -
+ screen->getRootmenu()->getWidth() -
+ screen->getBorderWidth();
+
+ if (my + screen->getRootmenu()->getHeight() > screen->getHeight())
+ my = screen->getHeight() -
+ screen->getRootmenu()->getHeight() -
+ screen->getBorderWidth();
+
+ screen->getRootmenu()->move(mx, my);
+
+ if (! screen->getRootmenu()->isVisible()) {
+ checkMenu();
+ screen->getRootmenu()->show();
+ }
+ } else if (e->xbutton.button == 4) {
+ if ((screen->getCurrentWorkspaceID()-1)<0)
+ screen->changeWorkspaceID(screen->getCount()-1);
+ else
+ screen->changeWorkspaceID(screen->getCurrentWorkspaceID()-1);
+ } else if (e->xbutton.button == 5) {
+ if ((screen->getCurrentWorkspaceID()+1)>screen->getCount()-1)
+ screen->changeWorkspaceID(0);
+ else
+ screen->changeWorkspaceID(screen->getCurrentWorkspaceID()+1);
+ }
+ }
+ }
+ }
+
+ break;
+ }
+
+ case ButtonRelease: {
+ // strip the lock key modifiers
+ e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+
+ last_time = e->xbutton.time;
+
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+ Basemenu *menu = (Basemenu *) 0;
+ Toolbar *tbar = (Toolbar *) 0;
+
+ if ((win = searchWindow(e->xbutton.window)))
+ win->buttonReleaseEvent(&e->xbutton);
+ else if ((menu = searchMenu(e->xbutton.window)))
+ menu->buttonReleaseEvent(&e->xbutton);
+ else if ((tbar = searchToolbar(e->xbutton.window)))
+ tbar->buttonReleaseEvent(&e->xbutton);
+
+ break;
+ }
+
+ case ConfigureRequest: {
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+
+#ifdef SLIT
+ Slit *slit = (Slit *) 0;
+#endif // SLIT
+
+ if ((win = searchWindow(e->xconfigurerequest.window))) {
+ win->configureRequestEvent(&e->xconfigurerequest);
+
+#ifdef SLIT
+ } else if ((slit = searchSlit(e->xconfigurerequest.window))) {
+ slit->configureRequestEvent(&e->xconfigurerequest);
+#endif // SLIT
+
+ } else {
+ grab();
+
+ if (validateWindow(e->xconfigurerequest.window)) {
+ XWindowChanges xwc;
+
+ xwc.x = e->xconfigurerequest.x;
+ xwc.y = e->xconfigurerequest.y;
+ xwc.width = e->xconfigurerequest.width;
+ xwc.height = e->xconfigurerequest.height;
+ xwc.border_width = e->xconfigurerequest.border_width;
+ xwc.sibling = e->xconfigurerequest.above;
+ xwc.stack_mode = e->xconfigurerequest.detail;
+
+ XConfigureWindow(getXDisplay(), e->xconfigurerequest.window,
+ e->xconfigurerequest.value_mask, &xwc);
+ }
+
+ ungrab();
+ }
+
+ break;
+ }
+
+ case MapRequest: {
+#ifdef DEBUG
+ fprintf(stderr,
+ i18n->getMessage(openboxSet, openboxMapRequest,
+ "Openbox::process_event(): MapRequest for 0x%lx\n"),
+ e->xmaprequest.window);
+#endif // DEBUG
+
+ OpenboxWindow *win = searchWindow(e->xmaprequest.window);
+
+ if (! win)
+ win = new OpenboxWindow(this, e->xmaprequest.window);
+
+ if ((win = searchWindow(e->xmaprequest.window)))
+ win->mapRequestEvent(&e->xmaprequest);
+
+ break;
+ }
+
+ case MapNotify: {
+ OpenboxWindow *win = searchWindow(e->xmap.window);
+
+ if (win)
+ win->mapNotifyEvent(&e->xmap);
+
+ break;
+ }
+
+ case UnmapNotify: {
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+
+#ifdef SLIT
+ Slit *slit = (Slit *) 0;
+#endif // SLIT
+
+ if ((win = searchWindow(e->xunmap.window))) {
+ win->unmapNotifyEvent(&e->xunmap);
+ if (focused_window == win)
+ focused_window = (OpenboxWindow *) 0;
+#ifdef SLIT
+ } else if ((slit = searchSlit(e->xunmap.window))) {
+ slit->removeClient(e->xunmap.window);
+#endif // SLIT
+
+ }
+
+ break;
+ }
+
+ case DestroyNotify: {
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+
+#ifdef SLIT
+ Slit *slit = (Slit *) 0;
+#endif // SLIT
+
+ if ((win = searchWindow(e->xdestroywindow.window))) {
+ win->destroyNotifyEvent(&e->xdestroywindow);
+ if (focused_window == win)
+ focused_window = (OpenboxWindow *) 0;
+#ifdef SLIT
+ } else if ((slit = searchSlit(e->xdestroywindow.window))) {
+ slit->removeClient(e->xdestroywindow.window, False);
+#endif // SLIT
+ }
+
+ break;
+ }
+
+ case MotionNotify: {
+ // strip the lock key modifiers
+ e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+
+ last_time = e->xmotion.time;
+
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+ Basemenu *menu = (Basemenu *) 0;
+
+ if ((win = searchWindow(e->xmotion.window)))
+ win->motionNotifyEvent(&e->xmotion);
+ else if ((menu = searchMenu(e->xmotion.window)))
+ menu->motionNotifyEvent(&e->xmotion);
+
+ break;
+ }
+
+ case PropertyNotify: {
+ last_time = e->xproperty.time;
+
+ if (e->xproperty.state != PropertyDelete) {
+ OpenboxWindow *win = searchWindow(e->xproperty.window);
+
+ if (win)
+ win->propertyNotifyEvent(e->xproperty.atom);
+ }
+
+ break;
+ }
+
+ case EnterNotify: {
+ last_time = e->xcrossing.time;
+
+ BScreen *screen = (BScreen *) 0;
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+ Basemenu *menu = (Basemenu *) 0;
+ Toolbar *tbar = (Toolbar *) 0;
+
+#ifdef SLIT
+ Slit *slit = (Slit *) 0;
+#endif // SLIT
+
+ if (e->xcrossing.mode == NotifyGrab) break;
+
+ XEvent dummy;
+ scanargs sa;
+ sa.w = e->xcrossing.window;
+ sa.enter = sa.leave = False;
+ XCheckIfEvent(getXDisplay(), &dummy, queueScanner, (char *) &sa);
+
+ if ((e->xcrossing.window == e->xcrossing.root) &&
+ (screen = searchScreen(e->xcrossing.window))) {
+ screen->getImageControl()->installRootColormap();
+ } else if ((win = searchWindow(e->xcrossing.window))) {
+ if (win->getScreen()->isSloppyFocus() &&
+ (! win->isFocused()) && (! no_focus)) {
+ grab();
+
+ if (((! sa.leave) || sa.inferior) && win->isVisible() &&
+ win->setInputFocus())
+ win->installColormap(True);
+
+ ungrab();
+ }
+ } else if ((menu = searchMenu(e->xcrossing.window))) {
+ menu->enterNotifyEvent(&e->xcrossing);
+ } else if ((tbar = searchToolbar(e->xcrossing.window))) {
+ tbar->enterNotifyEvent(&e->xcrossing);
+#ifdef SLIT
+ } else if ((slit = searchSlit(e->xcrossing.window))) {
+ slit->enterNotifyEvent(&e->xcrossing);
+#endif // SLIT
+ }
+ break;
+ }
+
+ case LeaveNotify: {
+ last_time = e->xcrossing.time;
+
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+ Basemenu *menu = (Basemenu *) 0;
+ Toolbar *tbar = (Toolbar *) 0;
+
+#ifdef SLIT
+ Slit *slit = (Slit *) 0;
+#endif // SLIT
+
+ if ((menu = searchMenu(e->xcrossing.window)))
+ menu->leaveNotifyEvent(&e->xcrossing);
+ else if ((win = searchWindow(e->xcrossing.window)))
+ win->installColormap(False);
+ else if ((tbar = searchToolbar(e->xcrossing.window)))
+ tbar->leaveNotifyEvent(&e->xcrossing);
+#ifdef SLIT
+ else if ((slit = searchSlit(e->xcrossing.window)))
+ slit->leaveNotifyEvent(&e->xcrossing);
+#endif // SLIT
+
+ break;
+ }
+
+ case Expose: {
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+ Basemenu *menu = (Basemenu *) 0;
+ Toolbar *tbar = (Toolbar *) 0;
+
+ if ((win = searchWindow(e->xexpose.window)))
+ win->exposeEvent(&e->xexpose);
+ else if ((menu = searchMenu(e->xexpose.window)))
+ menu->exposeEvent(&e->xexpose);
+ else if ((tbar = searchToolbar(e->xexpose.window)))
+ tbar->exposeEvent(&e->xexpose);
+
+ break;
+ }
+
+ case KeyPress: {
+ Toolbar *tbar = searchToolbar(e->xkey.window);
+
+ if (tbar && tbar->isEditing())
+ tbar->keyPressEvent(&e->xkey);
+
+ break;
+ }
+
+ case ColormapNotify: {
+ BScreen *screen = searchScreen(e->xcolormap.window);
+
+ if (screen)
+ screen->setRootColormapInstalled((e->xcolormap.state ==
+ ColormapInstalled) ? True : False);
+
+ break;
+ }
+
+ case FocusIn: {
+ if (e->xfocus.mode == NotifyUngrab || e->xfocus.detail == NotifyPointer)
+ break;
+
+ OpenboxWindow *win = searchWindow(e->xfocus.window);
+ if (win && ! win->isFocused())
+ setFocusedWindow(win);
+
+ break;
+ }
+
+ case FocusOut:
+ break;
+
+ case ClientMessage: {
+ if (e->xclient.format == 32) {
+ if (e->xclient.message_type == getWMChangeStateAtom()) {
+ OpenboxWindow *win = searchWindow(e->xclient.window);
+ if (! win || ! win->validateClient()) return;
+
+ if (e->xclient.data.l[0] == IconicState)
+ win->iconify();
+ if (e->xclient.data.l[0] == NormalState)
+ win->deiconify();
+ } else if (e->xclient.message_type == getOpenboxChangeWorkspaceAtom()) {
+ BScreen *screen = searchScreen(e->xclient.window);
+
+ if (screen && e->xclient.data.l[0] >= 0 &&
+ e->xclient.data.l[0] < screen->getCount())
+ screen->changeWorkspaceID(e->xclient.data.l[0]);
+ } else if (e->xclient.message_type == getOpenboxChangeWindowFocusAtom()) {
+ OpenboxWindow *win = searchWindow(e->xclient.window);
+
+ if (win && win->isVisible() && win->setInputFocus())
+ win->installColormap(True);
+ } else if (e->xclient.message_type == getOpenboxCycleWindowFocusAtom()) {
+ BScreen *screen = searchScreen(e->xclient.window);
+
+ if (screen) {
+ if (! e->xclient.data.l[0])
+ screen->prevFocus();
+ else
+ screen->nextFocus();
+ }
+ } else if (e->xclient.message_type == getOpenboxChangeAttributesAtom()) {
+ OpenboxWindow *win = searchWindow(e->xclient.window);
+
+ if (win && win->validateClient()) {
+ OpenboxHints net;
+ net.flags = e->xclient.data.l[0];
+ net.attrib = e->xclient.data.l[1];
+ net.workspace = e->xclient.data.l[2];
+ net.stack = e->xclient.data.l[3];
+ net.decoration = e->xclient.data.l[4];
+
+ win->changeOpenboxHints(&net);
+ }
+ }
+ }
+
+ break;
+ }
+
+
+ default: {
+#ifdef SHAPE
+ if (e->type == getShapeEventBase()) {
+ XShapeEvent *shape_event = (XShapeEvent *) e;
+ OpenboxWindow *win = (OpenboxWindow *) 0;
+
+ if ((win = searchWindow(e->xany.window)) ||
+ (shape_event->kind != ShapeBounding))
+ win->shapeEvent(shape_event);
+ }
+#endif // SHAPE
+
+ }
+ } // switch
+}
+
+
+Bool Openbox::handleSignal(int sig) {
+ switch (sig) {
+ case SIGHUP:
+ reconfigure();
+ break;
+
+ case SIGUSR1:
+ reload_rc();
+ break;
+
+ case SIGUSR2:
+ rereadMenu();
+ break;
+
+ case SIGPIPE:
+ case SIGSEGV:
+ case SIGFPE:
+ case SIGINT:
+ case SIGTERM:
+ shutdown();
+
+ default:
+ return False;
+ }
+
+ return True;
+}
+
+
+BScreen *Openbox::searchScreen(Window window) {
+ LinkedListIterator<BScreen> it(screenList);
+
+ for (BScreen *curr = it.current(); curr; it++, curr = it.current()) {
+ if (curr->getRootWindow() == window) {
+ return curr;
+ }
+ }
+
+ return (BScreen *) 0;
+}
+
+
+OpenboxWindow *Openbox::searchWindow(Window window) {
+ LinkedListIterator<WindowSearch> it(windowSearchList);
+
+ for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window) {
+ return tmp->getData();
+ }
+ }
+
+ return (OpenboxWindow *) 0;
+}
+
+
+OpenboxWindow *Openbox::searchGroup(Window window, OpenboxWindow *win) {
+ OpenboxWindow *w = (OpenboxWindow *) 0;
+ LinkedListIterator<WindowSearch> it(groupSearchList);
+
+ for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window) {
+ w = tmp->getData();
+ if (w->getClientWindow() != win->getClientWindow())
+ return win;
+ }
+ }
+
+ return (OpenboxWindow *) 0;
+}
+
+
+Basemenu *Openbox::searchMenu(Window window) {
+ LinkedListIterator<MenuSearch> it(menuSearchList);
+
+ for (MenuSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window)
+ return tmp->getData();
+ }
+
+ return (Basemenu *) 0;
+}
+
+
+Toolbar *Openbox::searchToolbar(Window window) {
+ LinkedListIterator<ToolbarSearch> it(toolbarSearchList);
+
+ for (ToolbarSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window)
+ return tmp->getData();
+ }
+
+ return (Toolbar *) 0;
+}
+
+
+#ifdef SLIT
+Slit *Openbox::searchSlit(Window window) {
+ LinkedListIterator<SlitSearch> it(slitSearchList);
+
+ for (SlitSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window)
+ return tmp->getData();
+ }
+
+ return (Slit *) 0;
+}
+#endif // SLIT
+
+
+void Openbox::saveWindowSearch(Window window, OpenboxWindow *data) {
+ windowSearchList->insert(new WindowSearch(window, data));
+}
+
+
+void Openbox::saveGroupSearch(Window window, OpenboxWindow *data) {
+ groupSearchList->insert(new WindowSearch(window, data));
+}
+
+
+void Openbox::saveMenuSearch(Window window, Basemenu *data) {
+ menuSearchList->insert(new MenuSearch(window, data));
+}
+
+
+void Openbox::saveToolbarSearch(Window window, Toolbar *data) {
+ toolbarSearchList->insert(new ToolbarSearch(window, data));
+}
+
+
+#ifdef SLIT
+void Openbox::saveSlitSearch(Window window, Slit *data) {
+ slitSearchList->insert(new SlitSearch(window, data));
+}
+#endif // SLIT
+
+
+void Openbox::removeWindowSearch(Window window) {
+ LinkedListIterator<WindowSearch> it(windowSearchList);
+ for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window) {
+ windowSearchList->remove(tmp);
+ delete tmp;
+ break;
+ }
+ }
+}
+
+
+void Openbox::removeGroupSearch(Window window) {
+ LinkedListIterator<WindowSearch> it(groupSearchList);
+ for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window) {
+ groupSearchList->remove(tmp);
+ delete tmp;
+ break;
+ }
+ }
+}
+
+
+void Openbox::removeMenuSearch(Window window) {
+ LinkedListIterator<MenuSearch> it(menuSearchList);
+ for (MenuSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window) {
+ menuSearchList->remove(tmp);
+ delete tmp;
+ break;
+ }
+ }
+}
+
+
+void Openbox::removeToolbarSearch(Window window) {
+ LinkedListIterator<ToolbarSearch> it(toolbarSearchList);
+ for (ToolbarSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window) {
+ toolbarSearchList->remove(tmp);
+ delete tmp;
+ break;
+ }
+ }
+}
+
+
+#ifdef SLIT
+void Openbox::removeSlitSearch(Window window) {
+ LinkedListIterator<SlitSearch> it(slitSearchList);
+ for (SlitSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
+ if (tmp->getWindow() == window) {
+ slitSearchList->remove(tmp);
+ delete tmp;
+ break;
+ }
+ }
+}
+#endif // SLIT
+
+
+void Openbox::restart(const char *prog) {
+ shutdown();
+
+ if (prog) {
+ execlp(prog, prog, NULL);
+ perror(prog);
+ }
+
+ // fall back in case the above execlp doesn't work
+ execvp(argv[0], argv);
+ execvp(basename(argv[0]), argv);
+}
+
+
+void Openbox::shutdown(void) {
+ BaseDisplay::shutdown();
+
+ XSetInputFocus(getXDisplay(), PointerRoot, None, CurrentTime);
+
+ LinkedListIterator<BScreen> it(screenList);
+ for (BScreen *s = it.current(); s; it++, s = it.current())
+ s->shutdown();
+
+ XSync(getXDisplay(), False);
+
+ save_rc();
+}
+
+
+void Openbox::save_rc(void) {
+ XrmDatabase new_openboxrc = (XrmDatabase) 0;
+ char rc_string[1024];
+
+ load_rc();
+
+ sprintf(rc_string, "session.menuFile: %s", resource.menu_file);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.colorsPerChannel: %d",
+ resource.colors_per_channel);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.titlebarLayout: %s",
+ resource.titlebar_layout);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.doubleClickInterval: %lu",
+ resource.double_click_interval);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.autoRaiseDelay: %lu",
+ ((resource.auto_raise_delay.tv_sec * 1000) +
+ (resource.auto_raise_delay.tv_usec / 1000)));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.cacheLife: %lu", resource.cache_life / 60000);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.cacheMax: %lu", resource.cache_max);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ LinkedListIterator<BScreen> it(screenList);
+ for (BScreen *screen = it.current(); screen; it++, screen = it.current()) {
+ int screen_number = screen->getScreenNumber();
+
+#ifdef SLIT
+ char *slit_placement = (char *) 0;
+
+ switch (screen->getSlitPlacement()) {
+ case Slit::TopLeft: slit_placement = "TopLeft"; break;
+ case Slit::CenterLeft: slit_placement = "CenterLeft"; break;
+ case Slit::BottomLeft: slit_placement = "BottomLeft"; break;
+ case Slit::TopCenter: slit_placement = "TopCenter"; break;
+ case Slit::BottomCenter: slit_placement = "BottomCenter"; break;
+ case Slit::TopRight: slit_placement = "TopRight"; break;
+ case Slit::BottomRight: slit_placement = "BottomRight"; break;
+ case Slit::CenterRight: default: slit_placement = "CenterRight"; break;
+ }
+
+ sprintf(rc_string, "session.screen%d.slit.placement: %s", screen_number,
+ slit_placement);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.slit.direction: %s", screen_number,
+ ((screen->getSlitDirection() == Slit::Horizontal) ? "Horizontal" :
+ "Vertical"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ const char *rootcmd;
+ if ((rootcmd = screen->getRootCommand()) != NULL) {
+ sprintf(rc_string, "session.screen%d.rootCommand: %s", screen_number,
+ rootcmd);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+ }
+
+ sprintf(rc_string, "session.screen%d.slit.onTop: %s", screen_number,
+ ((screen->getSlit()->isOnTop()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.slit.autoHide: %s", screen_number,
+ ((screen->getSlit()->doAutoHide()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+#endif // SLIT
+
+ sprintf(rc_string, "session.opaqueMove: %s",
+ ((screen->doOpaqueMove()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.imageDither: %s",
+ ((screen->getImageControl()->doDither()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.fullMaximization: %s", screen_number,
+ ((screen->doFullMax()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.focusNewWindows: %s", screen_number,
+ ((screen->doFocusNew()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.focusLastWindow: %s", screen_number,
+ ((screen->doFocusLast()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.rowPlacementDirection: %s",
+ screen_number,
+ ((screen->getRowPlacementDirection() == BScreen::LeftRight) ?
+ "LeftToRight" : "RightToLeft"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.colPlacementDirection: %s",
+ screen_number,
+ ((screen->getColPlacementDirection() == BScreen::TopBottom) ?
+ "TopToBottom" : "BottomToTop"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ char *placement = (char *) 0;
+ switch (screen->getPlacementPolicy()) {
+ case BScreen::CascadePlacement:
+ placement = "CascadePlacement";
+ break;
+
+ case BScreen::ColSmartPlacement:
+ placement = "ColSmartPlacement";
+ break;
+
+ case BScreen::RowSmartPlacement:
+ default:
+ placement = "RowSmartPlacement";
+ break;
+ }
+ sprintf(rc_string, "session.screen%d.windowPlacement: %s", screen_number,
+ placement);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.windowZones: %i", screen_number,
+ screen->getWindowZones());
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.focusModel: %s", screen_number,
+ ((screen->isSloppyFocus()) ?
+ ((screen->doAutoRaise()) ? "AutoRaiseSloppyFocus" :
+ "SloppyFocus") :
+ "ClickToFocus"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.workspaces: %d", screen_number,
+ screen->getCount());
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.toolbar.onTop: %s", screen_number,
+ ((screen->getToolbar()->isOnTop()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.toolbar.autoHide: %s", screen_number,
+ ((screen->getToolbar()->doAutoHide()) ? "True" : "False"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ char *toolbar_placement = (char *) 0;
+
+ switch (screen->getToolbarPlacement()) {
+ case Toolbar::TopLeft: toolbar_placement = "TopLeft"; break;
+ case Toolbar::BottomLeft: toolbar_placement = "BottomLeft"; break;
+ case Toolbar::TopCenter: toolbar_placement = "TopCenter"; break;
+ case Toolbar::TopRight: toolbar_placement = "TopRight"; break;
+ case Toolbar::BottomRight: toolbar_placement = "BottomRight"; break;
+ case Toolbar::BottomCenter: default:
+ toolbar_placement = "BottomCenter"; break;
+ }
+
+ sprintf(rc_string, "session.screen%d.toolbar.placement: %s", screen_number,
+ toolbar_placement);
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ load_rc(screen);
+
+ // these are static, but may not be saved in the users .openbox/rc,
+ // writing these resources will allow the user to edit them at a later
+ // time... but loading the defaults before saving allows us to rewrite the
+ // users changes...
+
+#ifdef HAVE_STRFTIME
+ sprintf(rc_string, "session.screen%d.strftimeFormat: %s", screen_number,
+ screen->getStrftimeFormat());
+ XrmPutLineResource(&new_openboxrc, rc_string);
+#else // !HAVE_STRFTIME
+ sprintf(rc_string, "session.screen%d.dateFormat: %s", screen_number,
+ ((screen->getDateFormat() == B_EuropeanDate) ?
+ "European" : "American"));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.clockFormat: %d", screen_number,
+ ((screen->isClock24Hour()) ? 24 : 12));
+ XrmPutLineResource(&new_openboxrc, rc_string);
+#endif // HAVE_STRFTIME
+
+ sprintf(rc_string, "session.screen%d.edgeSnapThreshold: %d", screen_number,
+ screen->getEdgeSnapThreshold());
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ sprintf(rc_string, "session.screen%d.toolbar.widthPercent: %d",
+ screen_number, screen->getToolbarWidthPercent());
+ XrmPutLineResource(&new_openboxrc, rc_string);
+
+ // write out the users workspace names
+ int i, len = 0;
+ for (i = 0; i < screen->getCount(); i++)
+ len += strlen((screen->getWorkspace(i)->getName()) ?
+ screen->getWorkspace(i)->getName() : "Null") + 1;
+
+ char *resource_string = new char[len + 1024],
+ *save_string = new char[len], *save_string_pos = save_string,
+ *name_string_pos;
+ if (save_string) {
+ for (i = 0; i < screen->getCount(); i++) {
+ len = strlen((screen->getWorkspace(i)->getName()) ?
+ screen->getWorkspace(i)->getName() : "Null") + 1;
+ name_string_pos =
+ (char *) ((screen->getWorkspace(i)->getName()) ?
+ screen->getWorkspace(i)->getName() : "Null");
+
+ while (--len) *(save_string_pos++) = *(name_string_pos++);
+ *(save_string_pos++) = ',';
+ }
+ }
+
+ *(--save_string_pos) = '\0';
+
+ sprintf(resource_string, "session.screen%d.workspaceNames: %s",
+ screen_number, save_string);
+ XrmPutLineResource(&new_openboxrc, resource_string);
+
+ delete [] resource_string;
+ delete [] save_string;
+ }
+
+ XrmDatabase old_openboxrc = XrmGetFileDatabase(rc_file);
+
+ XrmMergeDatabases(new_openboxrc, &old_openboxrc);
+ XrmPutFileDatabase(old_openboxrc, rc_file);
+ XrmDestroyDatabase(old_openboxrc);
+}
+
+
+void Openbox::load_rc(void) {
+ XrmDatabase database = (XrmDatabase) 0;
+
+ database = XrmGetFileDatabase(rc_file);
+
+ XrmValue value;
+ char *value_type;
+
+ if (resource.menu_file)
+ delete [] resource.menu_file;
+
+ if (XrmGetResource(database, "session.menuFile", "Session.MenuFile",
+ &value_type, &value))
+ resource.menu_file = bstrdup(value.addr);
+ else
+ resource.menu_file = bstrdup(DEFAULTMENU);
+
+ if (XrmGetResource(database, "session.colorsPerChannel",
+ "Session.ColorsPerChannel", &value_type, &value)) {
+ if (sscanf(value.addr, "%d", &resource.colors_per_channel) != 1) {
+ resource.colors_per_channel = 4;
+ } else {
+ if (resource.colors_per_channel < 2) resource.colors_per_channel = 2;
+ if (resource.colors_per_channel > 6) resource.colors_per_channel = 6;
+ }
+ } else {
+ resource.colors_per_channel = 4;
+ }
+
+ if (resource.style_file)
+ delete [] resource.style_file;
+
+ if (XrmGetResource(database, "session.styleFile", "Session.StyleFile",
+ &value_type, &value))
+ resource.style_file = bstrdup(value.addr);
+ else
+ resource.style_file = bstrdup(DEFAULTSTYLE);
+
+ if (XrmGetResource(database, "session.titlebarLayout",
+ "Session.TitlebarLayout", &value_type, &value)) {
+ resource.titlebar_layout = bstrdup(value.addr == NULL ? "ILMC" :
+ value.addr);
+ } else {
+ resource.titlebar_layout = bstrdup("ILMC");
+ }
+
+ if (XrmGetResource(database, "session.doubleClickInterval",
+ "Session.DoubleClickInterval", &value_type, &value)) {
+ if (sscanf(value.addr, "%lu", &resource.double_click_interval) != 1)
+ resource.double_click_interval = 250;
+ } else {
+ resource.double_click_interval = 250;
+ }
+
+ if (XrmGetResource(database, "session.autoRaiseDelay",
+ "Session.AutoRaiseDelay", &value_type, &value)) {
+ if (sscanf(value.addr, "%ld", &resource.auto_raise_delay.tv_usec) != 1)
+ resource.auto_raise_delay.tv_usec = 400;
+ } else {
+ resource.auto_raise_delay.tv_usec = 400;
+ }
+
+ resource.auto_raise_delay.tv_sec = resource.auto_raise_delay.tv_usec / 1000;
+ resource.auto_raise_delay.tv_usec -=
+ (resource.auto_raise_delay.tv_sec * 1000);
+ resource.auto_raise_delay.tv_usec *= 1000;
+
+ if (XrmGetResource(database, "session.cacheLife", "Session.CacheLife",
+ &value_type, &value)) {
+ if (sscanf(value.addr, "%lu", &resource.cache_life) != 1)
+ resource.cache_life = 5l;
+ } else {
+ resource.cache_life = 5l;
+ }
+
+ resource.cache_life *= 60000;
+
+ if (XrmGetResource(database, "session.cacheMax", "Session.CacheMax",
+ &value_type, &value)) {
+ if (sscanf(value.addr, "%lu", &resource.cache_max) != 1)
+ resource.cache_max = 200;
+ } else {
+ resource.cache_max = 200;
+ }
+}
+
+
+void Openbox::load_rc(BScreen *screen) {
+ XrmDatabase database = (XrmDatabase) 0;
+
+ database = XrmGetFileDatabase(rc_file);
+
+ XrmValue value;
+ char *value_type, name_lookup[1024], class_lookup[1024];
+ int screen_number = screen->getScreenNumber();
+
+ sprintf(name_lookup, "session.screen%d.fullMaximization", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.FullMaximization", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "true", value.size))
+ screen->saveFullMax(True);
+ else
+ screen->saveFullMax(False);
+ } else {
+ screen->saveFullMax(False);
+ }
+ sprintf(name_lookup, "session.screen%d.focusNewWindows", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.FocusNewWindows", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "true", value.size))
+ screen->saveFocusNew(True);
+ else
+ screen->saveFocusNew(False);
+ } else {
+ screen->saveFocusNew(False);
+ }
+ sprintf(name_lookup, "session.screen%d.focusLastWindow", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.focusLastWindow", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "true", value.size))
+ screen->saveFocusLast(True);
+ else
+ screen->saveFocusLast(False);
+ } else {
+ screen->saveFocusLast(False);
+ }
+ sprintf(name_lookup, "session.screen%d.rowPlacementDirection",
+ screen_number);
+ sprintf(class_lookup, "Session.Screen%d.RowPlacementDirection",
+ screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "righttoleft", value.size))
+ screen->saveRowPlacementDirection(BScreen::RightLeft);
+ else
+ screen->saveRowPlacementDirection(BScreen::LeftRight);
+ } else {
+ screen->saveRowPlacementDirection(BScreen::LeftRight);
+ }
+ sprintf(name_lookup, "session.screen%d.colPlacementDirection",
+ screen_number);
+ sprintf(class_lookup, "Session.Screen%d.ColPlacementDirection",
+ screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "bottomtotop", value.size))
+ screen->saveColPlacementDirection(BScreen::BottomTop);
+ else
+ screen->saveColPlacementDirection(BScreen::TopBottom);
+ } else {
+ screen->saveColPlacementDirection(BScreen::TopBottom);
+ }
+ sprintf(name_lookup, "session.screen%d.workspaces", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Workspaces", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ int i;
+ if (sscanf(value.addr, "%d", &i) != 1) i = 1;
+ screen->saveWorkspaces(i);
+ } else {
+ screen->saveWorkspaces(1);
+ }
+ sprintf(name_lookup, "session.screen%d.toolbar.widthPercent",
+ screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Toolbar.WidthPercent",
+ screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ int i;
+ if (sscanf(value.addr, "%d", &i) != 1) i = 66;
+
+ if (i <= 0 || i > 100)
+ i = 66;
+
+ screen->saveToolbarWidthPercent(i);
+ } else {
+ screen->saveToolbarWidthPercent(66);
+ }
+ sprintf(name_lookup, "session.screen%d.toolbar.placement", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Toolbar.Placement", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "TopLeft", value.size))
+ screen->saveToolbarPlacement(Toolbar::TopLeft);
+ else if (! strncasecmp(value.addr, "BottomLeft", value.size))
+ screen->saveToolbarPlacement(Toolbar::BottomLeft);
+ else if (! strncasecmp(value.addr, "TopCenter", value.size))
+ screen->saveToolbarPlacement(Toolbar::TopCenter);
+ else if (! strncasecmp(value.addr, "TopRight", value.size))
+ screen->saveToolbarPlacement(Toolbar::TopRight);
+ else if (! strncasecmp(value.addr, "BottomRight", value.size))
+ screen->saveToolbarPlacement(Toolbar::BottomRight);
+ else
+ screen->saveToolbarPlacement(Toolbar::BottomCenter);
+ } else {
+ screen->saveToolbarPlacement(Toolbar::BottomCenter);
+ }
+ screen->removeWorkspaceNames();
+
+ sprintf(name_lookup, "session.screen%d.workspaceNames", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.WorkspaceNames", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ char *search = bstrdup(value.addr);
+
+ for (int i = 0; i < screen->getNumberOfWorkspaces(); i++) {
+ char *nn;
+
+ if (! i) nn = strtok(search, ",");
+ else nn = strtok(NULL, ",");
+
+ if (nn) screen->addWorkspaceName(nn);
+ else break;
+ }
+
+ delete [] search;
+ }
+
+ sprintf(name_lookup, "session.screen%d.toolbar.onTop", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Toolbar.OnTop", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "true", value.size))
+ screen->saveToolbarOnTop(True);
+ else
+ screen->saveToolbarOnTop(False);
+ } else {
+ screen->saveToolbarOnTop(False);
+ }
+ sprintf(name_lookup, "session.screen%d.toolbar.autoHide", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Toolbar.autoHide", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "true", value.size))
+ screen->saveToolbarAutoHide(True);
+ else
+ screen->saveToolbarAutoHide(False);
+ } else {
+ screen->saveToolbarAutoHide(False);
+ }
+ sprintf(name_lookup, "session.screen%d.focusModel", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.FocusModel", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "clicktofocus", value.size)) {
+ screen->saveAutoRaise(False);
+ screen->saveSloppyFocus(False);
+ } else if (! strncasecmp(value.addr, "autoraisesloppyfocus", value.size)) {
+ screen->saveSloppyFocus(True);
+ screen->saveAutoRaise(True);
+ } else {
+ screen->saveSloppyFocus(True);
+ screen->saveAutoRaise(False);
+ }
+ } else {
+ screen->saveSloppyFocus(True);
+ screen->saveAutoRaise(False);
+ }
+
+ sprintf(name_lookup, "session.screen%d.windowZones", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.WindowZones", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ int i = atoi(value.addr);
+ screen->saveWindowZones((i == 1 || i == 2 || i == 4) ? i : 1);
+ } else {
+ screen->saveWindowZones(1);
+ }
+
+ sprintf(name_lookup, "session.screen%d.windowPlacement", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.WindowPlacement", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "RowSmartPlacement", value.size))
+ screen->savePlacementPolicy(BScreen::RowSmartPlacement);
+ else if (! strncasecmp(value.addr, "ColSmartPlacement", value.size))
+ screen->savePlacementPolicy(BScreen::ColSmartPlacement);
+ else
+ screen->savePlacementPolicy(BScreen::CascadePlacement);
+ } else {
+ screen->savePlacementPolicy(BScreen::RowSmartPlacement);
+ }
+#ifdef SLIT
+ sprintf(name_lookup, "session.screen%d.slit.placement", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Slit.Placement", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "TopLeft", value.size))
+ screen->saveSlitPlacement(Slit::TopLeft);
+ else if (! strncasecmp(value.addr, "CenterLeft", value.size))
+ screen->saveSlitPlacement(Slit::CenterLeft);
+ else if (! strncasecmp(value.addr, "BottomLeft", value.size))
+ screen->saveSlitPlacement(Slit::BottomLeft);
+ else if (! strncasecmp(value.addr, "TopCenter", value.size))
+ screen->saveSlitPlacement(Slit::TopCenter);
+ else if (! strncasecmp(value.addr, "BottomCenter", value.size))
+ screen->saveSlitPlacement(Slit::BottomCenter);
+ else if (! strncasecmp(value.addr, "TopRight", value.size))
+ screen->saveSlitPlacement(Slit::TopRight);
+ else if (! strncasecmp(value.addr, "BottomRight", value.size))
+ screen->saveSlitPlacement(Slit::BottomRight);
+ else
+ screen->saveSlitPlacement(Slit::CenterRight);
+ } else {
+ screen->saveSlitPlacement(Slit::CenterRight);
+ }
+ sprintf(name_lookup, "session.screen%d.slit.direction", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Slit.Direction", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "Horizontal", value.size))
+ screen->saveSlitDirection(Slit::Horizontal);
+ else
+ screen->saveSlitDirection(Slit::Vertical);
+ } else {
+ screen->saveSlitDirection(Slit::Vertical);
+ }
+ sprintf(name_lookup, "session.screen%d.slit.onTop", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Slit.OnTop", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "True", value.size))
+ screen->saveSlitOnTop(True);
+ else
+ screen->saveSlitOnTop(False);
+ } else {
+ screen->saveSlitOnTop(False);
+ }
+ sprintf(name_lookup, "session.screen%d.slit.autoHide", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.Slit.AutoHide", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (! strncasecmp(value.addr, "True", value.size))
+ screen->saveSlitAutoHide(True);
+ else
+ screen->saveSlitAutoHide(False);
+ } else {
+ screen->saveSlitAutoHide(False);
+ }
+#endif // SLIT
+
+#ifdef HAVE_STRFTIME
+ sprintf(name_lookup, "session.screen%d.strftimeFormat", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.StrftimeFormat", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ screen->saveStrftimeFormat(value.addr);
+ } else {
+ screen->saveStrftimeFormat("%I:%M %p");
+ }
+#else // HAVE_STRFTIME
+ sprintf(name_lookup, "session.screen%d.dateFormat", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.DateFormat", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ if (strncasecmp(value.addr, "european", value.size))
+ screen->saveDateFormat(B_AmericanDate);
+ else
+ screen->saveDateFormat(B_EuropeanDate);
+ } else {
+ screen->saveDateFormat(B_AmericanDate);
+ }
+ sprintf(name_lookup, "session.screen%d.clockFormat", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.ClockFormat", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ int clock;
+ if (sscanf(value.addr, "%d", &clock) != 1) screen->saveClock24Hour(False);
+ else if (clock == 24) screen->saveClock24Hour(True);
+ else screen->saveClock24Hour(False);
+ } else {
+ screen->saveClock24Hour(False);
+ }
+#endif // HAVE_STRFTIME
+
+ sprintf(name_lookup, "session.screen%d.edgeSnapThreshold", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.EdgeSnapThreshold", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ int threshold;
+ if (sscanf(value.addr, "%d", &threshold) != 1)
+ screen->saveEdgeSnapThreshold(0);
+ else
+ screen->saveEdgeSnapThreshold(threshold);
+ } else {
+ screen->saveEdgeSnapThreshold(0);
+ }
+ sprintf(name_lookup, "session.screen%d.imageDither", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.ImageDither", screen_number);
+ if (XrmGetResource(database, "session.imageDither", "Session.ImageDither",
+ &value_type, &value)) {
+ if (! strncasecmp("true", value.addr, value.size))
+ screen->saveImageDither(True);
+ else
+ screen->saveImageDither(False);
+ } else {
+ screen->saveImageDither(True);
+ }
+
+ sprintf(name_lookup, "session.screen%d.rootCommand", screen_number);
+ sprintf(class_lookup, "Session.Screen%d.RootCommand", screen_number);
+ if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
+ &value)) {
+ screen->saveRootCommand(value.addr);
+ } else
+ screen->saveRootCommand(NULL);
+
+ if (XrmGetResource(database, "session.opaqueMove", "Session.OpaqueMove",
+ &value_type, &value)) {
+ if (! strncasecmp("true", value.addr, value.size))
+ screen->saveOpaqueMove(True);
+ else
+ screen->saveOpaqueMove(False);
+ } else {
+ screen->saveOpaqueMove(False);
+ }
+ XrmDestroyDatabase(database);
+}
+
+
+void Openbox::reload_rc(void) {
+ load_rc();
+ reconfigure();
+}
+
+
+void Openbox::reconfigure(void) {
+ reconfigure_wait = True;
+
+ if (! timer->isTiming()) timer->start();
+}
+
+
+void Openbox::real_reconfigure(void) {
+ grab();
+
+ XrmDatabase new_openboxrc = (XrmDatabase) 0;
+ char style[MAXPATHLEN + 64];
+
+ sprintf(style, "session.styleFile: %s", resource.style_file);
+ XrmPutLineResource(&new_openboxrc, style);
+
+ XrmDatabase old_openboxrc = XrmGetFileDatabase(rc_file);
+
+ XrmMergeDatabases(new_openboxrc, &old_openboxrc);
+ XrmPutFileDatabase(old_openboxrc, rc_file);
+ if (old_openboxrc) XrmDestroyDatabase(old_openboxrc);
+
+ for (int i = 0, n = menuTimestamps->count(); i < n; i++) {
+ MenuTimestamp *ts = menuTimestamps->remove(0);
+
+ if (ts) {
+ if (ts->filename)
+ delete [] ts->filename;
+
+ delete ts;
+ }
+ }
+
+ LinkedListIterator<BScreen> it(screenList);
+ for (BScreen *screen = it.current(); screen; it++, screen = it.current()) {
+ screen->reconfigure();
+ }
+
+ ungrab();
+}
+
+
+void Openbox::checkMenu(void) {
+ Bool reread = False;
+ LinkedListIterator<MenuTimestamp> it(menuTimestamps);
+ for (MenuTimestamp *tmp = it.current(); tmp && (! reread);
+ it++, tmp = it.current()) {
+ struct stat buf;
+
+ if (! stat(tmp->filename, &buf)) {
+ if (tmp->timestamp != buf.st_ctime)
+ reread = True;
+ } else {
+ reread = True;
+ }
+ }
+
+ if (reread) rereadMenu();
+}
+
+
+void Openbox::rereadMenu(void) {
+ reread_menu_wait = True;
+
+ if (! timer->isTiming()) timer->start();
+}
+
+
+void Openbox::real_rereadMenu(void) {
+ for (int i = 0, n = menuTimestamps->count(); i < n; i++) {
+ MenuTimestamp *ts = menuTimestamps->remove(0);
+
+ if (ts) {
+ if (ts->filename)
+ delete [] ts->filename;
+
+ delete ts;
+ }
+ }
+
+ LinkedListIterator<BScreen> it(screenList);
+ for (BScreen *screen = it.current(); screen; it++, screen = it.current())
+ screen->rereadMenu();
+}
+
+
+void Openbox::saveStyleFilename(const char *filename) {
+ if (resource.style_file)
+ delete [] resource.style_file;
+
+ resource.style_file = bstrdup(filename);
+}
+
+
+void Openbox::saveMenuFilename(const char *filename) {
+ Bool found = False;
+
+ LinkedListIterator<MenuTimestamp> it(menuTimestamps);
+ for (MenuTimestamp *tmp = it.current(); tmp && (! found);
+ it++, tmp = it.current()) {
+ if (! strcmp(tmp->filename, filename)) found = True;
+ }
+ if (! found) {
+ struct stat buf;
+
+ if (! stat(filename, &buf)) {
+ MenuTimestamp *ts = new MenuTimestamp;
+
+ ts->filename = bstrdup(filename);
+ ts->timestamp = buf.st_ctime;
+
+ menuTimestamps->insert(ts);
+ }
+ }
+}
+
+
+void Openbox::timeout(void) {
+ if (reconfigure_wait)
+ real_reconfigure();
+
+ if (reread_menu_wait)
+ real_rereadMenu();
+
+ reconfigure_wait = reread_menu_wait = False;
+}
+
+
+void Openbox::setFocusedWindow(OpenboxWindow *win) {
+ BScreen *old_screen = (BScreen *) 0, *screen = (BScreen *) 0;
+ OpenboxWindow *old_win = (OpenboxWindow *) 0;
+ Toolbar *old_tbar = (Toolbar *) 0, *tbar = (Toolbar *) 0;
+ Workspace *old_wkspc = (Workspace *) 0, *wkspc = (Workspace *) 0;
+
+ if (focused_window) {
+ old_win = focused_window;
+ old_screen = old_win->getScreen();
+ old_tbar = old_screen->getToolbar();
+ old_wkspc = old_screen->getWorkspace(old_win->getWorkspaceNumber());
+
+ old_win->setFocusFlag(False);
+ old_wkspc->getMenu()->setItemSelected(old_win->getWindowNumber(), False);
+ }
+
+ if (win && ! win->isIconic()) {
+ screen = win->getScreen();
+ tbar = screen->getToolbar();
+ wkspc = screen->getWorkspace(win->getWorkspaceNumber());
+
+ focused_window = win;
+
+ win->setFocusFlag(True);
+ wkspc->getMenu()->setItemSelected(win->getWindowNumber(), True);
+ } else {
+ focused_window = (OpenboxWindow *) 0;
+ }
+
+ if (tbar)
+ tbar->redrawWindowLabel(True);
+ if (screen)
+ screen->updateNetizenWindowFocus();
+
+ if (old_tbar && old_tbar != tbar)
+ old_tbar->redrawWindowLabel(True);
+ if (old_screen && old_screen != screen)
+ old_screen->updateNetizenWindowFocus();
+}
--- /dev/null
+// openbox.h for Openbox
+// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __openbox_hh
+#define __openbox_hh
+
+#include <X11/Xlib.h>
+#include <X11/Xresource.h>
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else // !TIME_WITH_SYS_TIME
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else // !HAVE_SYS_TIME_H
+# include <time.h>
+# endif // HAVE_SYS_TIME_H
+#endif // TIME_WITH_SYS_TIME
+
+
+#include "LinkedList.h"
+#include "BaseDisplay.h"
+#include "Timer.h"
+
+//forward declaration
+class BScreen;
+class Openbox;
+class BImageControl;
+class OpenboxWindow;
+class Basemenu;
+class Toolbar;
+#ifdef SLIT
+class Slit;
+#endif // SLIT
+
+template <class Z>
+class DataSearch {
+private:
+ Window window;
+ Z *data;
+
+public:
+ DataSearch(Window w, Z *d): window(w), data(d) {}
+
+ inline const Window &getWindow(void) const { return window; }
+ inline Z *getData(void) { return data; }
+};
+
+
+class Openbox : public BaseDisplay, public TimeoutHandler {
+private:
+ typedef struct MenuTimestamp {
+ char *filename;
+ time_t timestamp;
+ } MenuTimestamp;
+
+ struct resource {
+ Time double_click_interval;
+
+ char *menu_file, *style_file;
+ char *titlebar_layout;
+ int colors_per_channel;
+ timeval auto_raise_delay;
+ unsigned long cache_life, cache_max;
+ } resource;
+
+ typedef DataSearch<OpenboxWindow> WindowSearch;
+ LinkedList<WindowSearch> *windowSearchList, *groupSearchList;
+ typedef DataSearch<Basemenu> MenuSearch;
+ LinkedList<MenuSearch> *menuSearchList;
+ typedef DataSearch<Toolbar> ToolbarSearch;
+ LinkedList<ToolbarSearch> *toolbarSearchList;
+
+#ifdef SLIT
+ typedef DataSearch<Slit> SlitSearch;
+ LinkedList<SlitSearch> *slitSearchList;
+#endif // SLIT
+
+ LinkedList<MenuTimestamp> *menuTimestamps;
+ LinkedList<BScreen> *screenList;
+
+ OpenboxWindow *focused_window, *masked_window;
+ BTimer *timer;
+
+#ifdef HAVE_GETPID
+ Atom openbox_pid;
+#endif // HAVE_GETPID
+
+ Bool no_focus, reconfigure_wait, reread_menu_wait;
+ Time last_time;
+ Window masked;
+ char *rc_file, **argv;
+ int argc;
+
+
+protected:
+ void load_rc(void);
+ void save_rc(void);
+ void reload_rc(void);
+ void real_rereadMenu(void);
+ void real_reconfigure(void);
+
+ virtual void process_event(XEvent *);
+
+
+public:
+ Openbox(int, char **, char * = 0, char * = 0);
+ virtual ~Openbox(void);
+
+#ifdef HAVE_GETPID
+ inline const Atom &getOpenboxPidAtom(void) const { return openbox_pid; }
+#endif // HAVE_GETPID
+
+ Basemenu *searchMenu(Window);
+
+ OpenboxWindow *searchGroup(Window, OpenboxWindow *);
+ OpenboxWindow *searchWindow(Window);
+ inline OpenboxWindow *getFocusedWindow(void) { return focused_window; }
+
+ BScreen *getScreen(int);
+ BScreen *searchScreen(Window);
+
+ inline const Time &getDoubleClickInterval(void) const
+ { return resource.double_click_interval; }
+ inline const Time &getLastTime(void) const { return last_time; }
+
+ Toolbar *searchToolbar(Window);
+
+ inline const char *getStyleFilename(void) const
+ { return resource.style_file; }
+ inline const char *getMenuFilename(void) const
+ { return resource.menu_file; }
+
+ inline const int &getColorsPerChannel(void) const
+ { return resource.colors_per_channel; }
+
+ inline const timeval &getAutoRaiseDelay(void) const
+ { return resource.auto_raise_delay; }
+
+ inline const char *getTitleBarLayout(void) const
+ { return resource.titlebar_layout; }
+
+ inline const unsigned long &getCacheLife(void) const
+ { return resource.cache_life; }
+ inline const unsigned long &getCacheMax(void) const
+ { return resource.cache_max; }
+
+ inline void maskWindowEvents(Window w, OpenboxWindow *bw)
+ { masked = w; masked_window = bw; }
+ inline void setNoFocus(Bool f) { no_focus = f; }
+
+ void setFocusedWindow(OpenboxWindow *w);
+ void shutdown(void);
+ void load_rc(BScreen *);
+ void saveStyleFilename(const char *);
+ void saveMenuFilename(const char *);
+ void saveMenuSearch(Window, Basemenu *);
+ void saveWindowSearch(Window, OpenboxWindow *);
+ void saveToolbarSearch(Window, Toolbar *);
+ void saveGroupSearch(Window, OpenboxWindow *);
+ void removeMenuSearch(Window);
+ void removeWindowSearch(Window);
+ void removeToolbarSearch(Window);
+ void removeGroupSearch(Window);
+ void restart(const char * = 0);
+ void reconfigure(void);
+ void rereadMenu(void);
+ void checkMenu(void);
+
+ virtual Bool handleSignal(int);
+
+ virtual void timeout(void);
+
+#ifdef SLIT
+ Slit *searchSlit(Window);
+
+ void saveSlitSearch(Window, Slit *);
+ void removeSlitSearch(Window);
+#endif // SLIT
+
+#ifndef HAVE_STRFTIME
+
+ enum { B_AmericanDate = 1, B_EuropeanDate };
+#endif // HAVE_STRFTIME
+};
+
+
+#endif // __openbox_hh
--- /dev/null
+# util/Makefile.am for Openbox
+
+CPPFLAGS= @CPPFLAGS@ @DEBUG@ @NLS@ @TIMEDCACHE@ @NEWWMSPEC@ @INTERLACE@ \
+@ORDEREDPSEUDO@
+
+bin_SCRIPTS = bsetbg
+bin_PROGRAMS = bsetroot
+
+bsetroot_SOURCES = bsetroot.cc
+bsetroot_LDADD = ../src/BaseDisplay.o ../src/LinkedList.o ../src/Timer.o ../src/Image.o ../src/i18n.o
+
+MAINTAINERCLEANFILES = Makefile.in
+
+distclean-local:
+ rm -f *\~
+
+bsetroot.o: bsetroot.cc ../config.h bsetroot.h ../src/BaseDisplay.h \
+ ../src/LinkedList.h ../src/Timer.h ../src/Image.h
--- /dev/null
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# util/Makefile.am for Openbox
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CLOBBER = @CLOBBER@
+CXX = @CXX@
+DEBUG = @DEBUG@
+INTERLACE = @INTERLACE@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWWMSPEC = @NEWWMSPEC@
+NLS = @NLS@
+ORDEREDPSEUDO = @ORDEREDPSEUDO@
+PACKAGE = @PACKAGE@
+SHAPE = @SHAPE@
+SLIT = @SLIT@
+TIMEDCACHE = @TIMEDCACHE@
+VERSION = @VERSION@
+gencat_cmd = @gencat_cmd@
+regex_cmd = @regex_cmd@
+
+CPPFLAGS = @CPPFLAGS@ @DEBUG@ @NLS@ @TIMEDCACHE@ @NEWWMSPEC@ @INTERLACE@ @ORDEREDPSEUDO@
+
+
+bin_SCRIPTS = bsetbg
+bin_PROGRAMS = bsetroot
+
+bsetroot_SOURCES = bsetroot.cc
+bsetroot_LDADD = ../src/BaseDisplay.o ../src/LinkedList.o ../src/Timer.o ../src/Image.o ../src/i18n.o
+
+MAINTAINERCLEANFILES = Makefile.in
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(bin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I..
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_LIBS = @X_LIBS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+bsetroot_OBJECTS = bsetroot.o
+bsetroot_DEPENDENCIES = ../src/BaseDisplay.o ../src/LinkedList.o \
+../src/Timer.o ../src/Image.o ../src/i18n.o
+bsetroot_LDFLAGS =
+SCRIPTS = $(bin_SCRIPTS)
+
+CXXFLAGS = @CXXFLAGS@
+CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+DEP_FILES = .deps/bsetroot.P
+SOURCES = $(bsetroot_SOURCES)
+OBJECTS = $(bsetroot_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .cc .o .s
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ list='$(bin_PROGRAMS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ done
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+bsetroot: $(bsetroot_OBJECTS) $(bsetroot_DEPENDENCIES)
+ @rm -f bsetroot
+ $(CXXLINK) $(bsetroot_LDFLAGS) $(bsetroot_OBJECTS) $(bsetroot_LDADD) $(LIBS)
+
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
+ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ else if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
+ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ else :; fi; fi; \
+ done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ list='$(bin_SCRIPTS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ done
+.cc.o:
+ $(CXXCOMPILE) -c $<
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = util
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu util/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+
+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+
+-include $(DEP_FILES)
+
+mostlyclean-depend:
+
+clean-depend:
+
+distclean-depend:
+ -rm -rf .deps
+
+maintainer-clean-depend:
+
+%.o: %.c
+ @echo '$(COMPILE) -c $<'; \
+ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-cp .deps/$(*F).pp .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm .deps/$(*F).pp
+
+%.lo: %.c
+ @echo '$(LTCOMPILE) -c $<'; \
+ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
+ < .deps/$(*F).pp > .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm -f .deps/$(*F).pp
+
+%.o: %.cc
+ @echo '$(CXXCOMPILE) -c $<'; \
+ $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-cp .deps/$(*F).pp .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm .deps/$(*F).pp
+
+%.lo: %.cc
+ @echo '$(LTCXXCOMPILE) -c $<'; \
+ $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
+ < .deps/$(*F).pp > .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm -f .deps/$(*F).pp
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-binPROGRAMS install-binSCRIPTS
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS) $(SCRIPTS)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \
+ mostlyclean-tags mostlyclean-depend mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-binPROGRAMS clean-compile clean-tags clean-depend \
+ clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-binPROGRAMS distclean-compile distclean-tags \
+ distclean-depend distclean-generic clean-am \
+ distclean-local
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-binPROGRAMS \
+ maintainer-clean-compile maintainer-clean-tags \
+ maintainer-clean-depend maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile uninstall-binSCRIPTS install-binSCRIPTS tags \
+mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \
+distdir mostlyclean-depend distclean-depend clean-depend \
+maintainer-clean-depend info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+distclean-local:
+ rm -f *\~
+
+bsetroot.o: bsetroot.cc ../config.h bsetroot.h ../src/BaseDisplay.h \
+ ../src/LinkedList.h ../src/Timer.h ../src/Image.h
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+#!/bin/sh
+
+# Copyright (c) 2000 LordZork Industries (lordzork@lordzork.com)
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+
+error_msg()
+{
+ case $INFO in yes|y|1) info_msg; esac
+
+ case $1 in
+ 1)
+ echo; echo "$NAME: configuration error: $OPTION=\"$VALUE\""
+ echo "$NAME: please edit $CONFIG and provide the correct variable."
+ ;;
+ 2)
+ echo; echo "$NAME: error: couldn't execute '$APP'! tried to run fallback option $ARGUMENT"
+ echo "$NAME: but quit because of the following error in $CONFIG:"
+ echo "$NAME: $OPTION= $VALUE"
+ echo "$NAME: please edit $CONFIG and provide the correct variable!"
+ ;;
+ 3)
+ echo; echo "$NAME: error: couldn't find any suitable image applications in the system path!"
+ echo
+ error_msg url
+ ;;
+ 4)
+ echo; echo "$NAME: error: invalid option, or non-existent image ($ARGUMENT)."
+ ;;
+ 5)
+ echo; echo "$NAME: error: the image you specified ($IMAGE) could not be found."
+ ;;
+ 6)
+ echo; echo "$NAME: error: please specify a valid image."
+ ;;
+ 7)
+ echo; echo "$NAME: error: bsetroot couldn't be found! check your openbox installation."
+ ;;
+ 8)
+ echo; echo "$NAME: error: wrong number of arguments!"
+ echo "$NAME: make sure you enclosed the options for '$APP' in double quotes."
+ ;;
+ nobgapp)
+ echo; echo "$NAME: error: tried to run '$VALUE' for $ARGUMENT argument,"
+ echo "$NAME: but couldnt find '$APP' in the path! please fix the following"
+ echo "$NAME: line in $CONFIG to point to an existing application:"
+ echo "$NAME: $OPTION=\"$VALUE\""
+ ;;
+ nogrep)
+ echo "$NAME: error: couldn't find grep!"
+ echo "this script needs grep to be in your path in order to function."
+ echo "you can get GNU grep from ftp://ftp.gnu.org/bin/gnu/grep/" && exit 1
+ ;;
+ url)
+ echo "it is suggested that you use qiv, xli (xsetbg), or xv."
+ echo "you can obtain them at the following locations:"
+ echo
+ echo " qiv: http://www.klografx.de/software/qiv.shtml"
+ echo " xli: http://pantransit.reptiles.org/prog/#xli"
+ echo " xv: http://www.trilon.com/xv/downloads.html"
+ echo
+ echo "the above URLs are current as of 05/23/2000."
+ esac
+ exit 1
+}
+
+
+help_msg()
+{
+ echo "$NAME $VERSION: $MORE"
+ echo "options:"
+ echo
+ echo " (none) image is set using default values"
+ echo
+ echo " -full, -f image is set fullscreen"
+ echo " -tile, -t image is set tiled"
+ echo " -center, -c image is set centered"
+ echo
+ echo " -app, -a <application> image is set using <application> with"
+ echo " <"'"application options"'"> quote-enclosed \"options\" and"
+ echo " -center, -c|-tile, -t|-full, -f default fallback option"
+ echo
+ echo " -display <string> display to connect to (bsetroot only)"
+ echo " -mod <x> <y> sets bsetroot modula pattern"
+ echo " -foreground, -fg <color> modula foreground color"
+ echo " -background, -bg <color> modula background color"
+ echo
+ echo " -gradient <texture> sets bsetroot gradient texture"
+ echo " -from <color> gradient start color"
+ echo " -to <color> gradient end color"
+ echo
+ echo " -solid <color> sets bsetroot solid color"
+ echo
+ echo " -version, -v outputs $NAME's version number"
+ echo " -info, -i outputs configuration info"
+ echo " -help, -h this message"
+ echo
+ echo "usage: <options...> <image>"
+ exit 0
+}
+
+
+info_msg()
+{
+ case $ERROR in
+ [1-3])
+ SUMMARY="error: some variables are blank"
+ ;;
+ 4)
+ SUMMARY="no values have been specified"
+ ;;
+ 0)
+ SUMMARY="looks good"
+ esac
+
+ case $APP_ERROR in [1-4])
+ SUMMARY="error: some applications couldn't be found!"
+ esac
+
+ case `which bsetroot 2>&1` in
+ */*bsetroot)
+ BSETROOT=`which bsetroot`
+ ;;
+ *)
+ BSETROOT="(error: not found)"
+ case $ERROR in
+ 1-4)
+ SUMMARY="$SUMMARY, and bsetroot does not seem to be present."
+ ;;
+ *)
+ SUMMARY="$SUMMARY, but bsetroot does not seem to be present."
+ esac
+ esac
+
+ echo "$NAME $VERSION configuration:"
+ echo
+ echo " bsetroot: $BSETROOT"
+ echo
+ echo " reading configuration from: $CONFIG"
+ echo
+ echo " configuration values:"
+ echo
+ case $FULL_BGAPP_MSG in
+ *"not found")
+ echo " fullscreen (ERROR): $FULL_BGAPP_MSG"
+ ;;
+ *)
+ echo " fullscreen (FULL): $FULL_MSG"
+ esac
+
+ echo
+
+ case $TILE_BGAPP_MSG in
+ *"not found")
+ echo " tiled (ERROR): $TILE_BGAPP_MSG"
+ ;;
+ *)
+ echo " tiled (TILE): $TILE_MSG"
+ esac
+
+ echo
+
+ case $CENTER_BGAPP_MSG in
+ *"not found")
+ echo " centered (ERROR): $CENTER_BGAPP_MSG"
+ ;;
+ *)
+ echo " centered (CENTER): $CENTER_MSG"
+ esac
+
+ echo
+
+ case $DEFAULT_BGAPP_MSG in
+ *"not found")
+ echo " default (ERROR): $DEFAULT_BGAPP_MSG"
+ ;;
+ *)
+ echo " default (DEFAULT): $DEFAULT_MSG"
+ esac
+ echo
+ echo " summary: $SUMMARY"
+ exit 0
+}
+
+
+find_app()
+{
+ case `which $1 2>&1` in
+ */*$1)
+ echo "$NAME: checking for $1... `which $1`"
+ echo "### $app" >> $TMPFILE
+ echo "# FULL=\"$full\"" >> $TMPFILE
+ echo "# TILE=\"$tile\"" >> $TMPFILE
+ echo "# CENTER=\"$center\"" >> $TMPFILE
+ echo "# DEFAULT=\"$default\"" >> $TMPFILE
+ echo >> $TMPFILE
+
+ FULL=$full
+ TILE=$tile
+ CENTER=$center
+ DEFAULT=$default
+ APP=$app
+ ;;
+ *)
+ echo "$NAME: checking for $1... not found."
+ esac
+}
+
+search_display()
+{
+ ### display
+ full="display -geometry 800x600 -window root"
+ tile="display -window root"
+ center="display -backdrop -window root"
+ default=$center
+ find_app display
+}
+
+search_Esetroot()
+{
+ ### Esetroot
+ full="Esetroot -scale"
+ tile="Esetroot"
+ center="Esetroot -c"
+ default=$center
+ find_app Esetroot
+}
+
+search_wmsetbg()
+{
+ ### wmsetbg
+ full="wmsetbg -s -S"
+ tile="wmsetbg -t"
+ center="wmsetbg -e"
+ default=$center
+ find_app wmsetbg
+}
+
+search_xli()
+{
+ ### xli
+ case `which xsetbg 2>&1` in
+ */*xsetbg)
+ full="xsetbg -fillscreen"
+ tile="xsetbg"
+ center="xsetbg -center"
+ default=$center
+ app="xsetbg (xli)"
+ find_app xsetbg
+ ;;
+ *)
+ case `which xli 2>&1` in */*xli)
+ full="xli -fillscreen -onroot -quiet"
+ tile="xli -onroot -quiet"
+ center="xli -center -onroot quiet"
+ default=$center
+ app=xli
+ find_app xli
+ esac
+ esac
+}
+
+search_qiv()
+{
+ ### qiv
+ full="qiv --root_s"
+ tile="qiv --root_t"
+ center="qiv --root"
+ default=$center
+ find_app qiv
+}
+
+search_xv()
+{
+ ### xv
+ full="xv -max -smooth -root -quit"
+ tile="xv -root -quit"
+ center="xv -rmode 5 -root -quit"
+ default=$center
+ find_app xv
+}
+
+
+rm_tmpfiles()
+{
+ [ -f $TMPFILE ] && rm -f $TMPFILE
+}
+
+
+create_config()
+{
+ trap rm_tmpfiles INT QUIT STOP TERM
+ case $UID in 0)
+ if [ "$ARGUMENT" != "-r" ]; then
+ echo "$NAME: running X as root is a security hazard, and is NOT a good idea!"
+ echo "$NAME: if you insist upon having a ~/.bsetbgrc for root, run bsetbg with"
+ echo "$NAME: the '-r' flag to force its creation. you have been warned!"
+ exit 1
+ fi
+ esac
+
+ case $ARGUMENT in
+ -r)
+ echo "$NAME: creating configuration for root (BAD IDEA)..."
+ ;;
+ *)
+ echo "$NAME: $CONFIG not found, creating..."
+ esac
+
+ for app in $IMAGE_APPS; do
+ search_$app
+ done
+
+ if [ -z "$FULL" ] || [ -z "TILE" ] || [ -z "$CENTER" ]; then
+ rm -f $TMPFILE
+ INFO= && error_msg 3
+ fi
+
+ echo "# $CONFIG" >> $CONFIG
+ echo "#" >> $CONFIG
+ echo "# automagically generated with loving care by $NAME $VERSION on `date`" >> $CONFIG
+ echo "#" >> $CONFIG
+ echo "# uncomment the set below that corresponds to your favorite root-image" >> $CONFIG
+ echo "# application, or mix and match to suit your pleasure." >> $CONFIG
+ echo "#" >> $CONFIG
+ echo "# xli misbehaves under larger screen resolutions when using the -fillscreen" >> $CONFIG
+ echo "# option. use -fullscreen if your resolution is higher than 1024x768." >> $CONFIG
+ echo "#" >> $CONFIG
+ echo; echo >> $CONFIG
+ echo "### $APP" >> $CONFIG
+ echo "FULL=\"$FULL\"" >> $CONFIG
+ echo "TILE=\"$TILE\"" >> $CONFIG
+ echo "CENTER=\"$CENTER\"" >> $CONFIG
+ echo "DEFAULT=\"$DEFAULT\"" >> $CONFIG
+ echo >> $CONFIG
+
+ cat $TMPFILE | grep -v $APP >> $CONFIG
+
+ rm -f $TMPFILE
+
+ if [ -f $CONFIG ]; then
+ echo "$NAME: default configuration was created in $CONFIG."
+ else
+ echo "ERROR: $CONFIG not found!" && exit 1
+ fi
+}
+
+check_config_apps()
+{
+ BGAPP=$1
+ case `which $1 2>&1` in
+ */*$1)
+ BGAPP_MSG="`which $1`"
+ ;;
+ *)
+ BGAPP_MSG="$BGAPP: not found"
+ APP_ERROR=`expr $APP_ERROR + 1`
+ esac
+}
+
+
+check_config_vars()
+{
+ ERROR=0
+ APP_ERROR=0
+
+ if [ -z "$FULL" ]; then
+ FULL_MSG="(no value)" && ERROR=`expr $ERROR + 1`
+ else
+ check_config_apps $FULL
+ FULL_BGAPP_MSG=$BGAPP_MSG
+ FULL_BGAPP=$BGAPP
+ FULL_MSG="$FULL"
+ fi
+
+ if [ -z "$TILE" ]; then
+ TILE_MSG="(no value)" && ERROR=`expr $ERROR + 1`
+ else
+ check_config_apps $TILE
+ TILE_BGAPP_MSG=$BGAPP_MSG
+ TILE_BGAPP=$BGAPP
+ TILE_MSG="$TILE"
+ fi
+
+ if [ -z "$CENTER" ]; then
+ CENTER_MSG="(no value)" && ERROR=`expr $ERROR + 1`
+ else
+ check_config_apps $CENTER
+ CENTER_BGAPP_MSG=$BGAPP_MSG
+ CENTER_BGAPP=$BGAPP
+ CENTER_MSG="$CENTER"
+ fi
+
+ if [ -z "$DEFAULT" ]; then
+ DEFAULT_MSG="(no value)" && ERROR=`expr $ERROR + 1`
+ else
+ check_config_apps $DEFAULT
+ DEFAULT_BGAPP_MSG=$BGAPP_MSG
+ DEFAULT_BGAPP=$BGAPP
+ DEFAULT_MSG="$DEFAULT"
+ fi
+}
+
+
+final_error_check()
+{
+ case $ARGUMENT in
+ *full|-f|c)
+ OPTION=FULL
+ VALUE=$FULL_MSG
+ FB_ARG=$FULL
+ case $FULL_BGAPP_MSG in *"not found")
+ APP=$FULL_BGAPP
+ error_msg nobgapp
+ esac
+ ;;
+ *tile|-t|t)
+ OPTION=TILE
+ VALUE=$TILE_MSG
+ FB_ARG=$TILE
+ case $TILE_BGAPP_MSG in *"not found")
+ APP=$TILE_BGAPP
+ error_msg nobgapp
+ esac
+ ;;
+ *center|-c|c)
+ OPTION=CENTER
+ VALUE=$CENTER_MSG
+ FB_ARG=$CENTER
+ case $CENTER_BGAPP_MSG in *"not found")
+ APP=$CENTER_BGAPP
+ error_msg nobgapp
+ esac
+ ;;
+ *)
+ OPTION=DEFAULT
+ VALUE=$DEFAULT_MSG
+ FB_ARG=$DEFAULT
+ ARGUMENT=default
+ case $DEFAULT_BGAPP_MSG in *"not found")
+ APP=$DEFAULT_BGAPP
+ error_msg nobgapp
+ esac
+
+ if [ "$IMAGE_EXISTS" != yes ]; then
+ error_msg 4; fi
+ esac
+
+ case $VALUE in "(no value)")
+ if [ -n "$APP" ]; then
+ error_msg 2
+ else
+ error_msg 1
+ fi
+ esac
+}
+
+
+check_config()
+{
+ if [ ! -f $CONFIG ]; then
+ create_config
+ fi
+
+ check_old_config
+ . $CONFIG
+ check_config_vars
+ final_error_check
+}
+
+
+check_image()
+{
+ case "$IMAGE" in
+ *~/*)
+ IMAGE="$HOME/`basename $IMAGE`"
+ esac
+
+ case $NOARG in
+ yes|y|1)
+ NUM=4
+ ;;
+ *)
+ if [ -n "$IMAGE" ]; then
+ NUM=5
+ else
+ NUM=6
+ fi
+ case $IMAGE in $ARGUMENT|"."|"./")
+ error_msg 6
+ esac
+ esac
+
+ if [ ! -e "$IMAGE" ]; then
+ error_msg $NUM
+ else
+ IMAGE_EXISTS=yes
+ fi
+}
+
+
+exec_app()
+{
+ case `which $APP 2>&1` in
+ */*$APP)
+ check_image
+ final_error_check
+ exec $APP $ARGS "$IMAGE"
+ ;;
+ *)
+ check_image
+ check_config
+ exec $FB_ARG "$IMAGE"
+ esac
+}
+
+
+check_bsetroot_args()
+{
+ case $1 in
+ -mod)
+ ARGS="$1 $2 $3 $4 $5 $6 $7"
+ ;;
+ -gradient)
+ ARGS="$1 $2 $3 $4 $5 $6"
+ ;;
+ -solid)
+ ARGS="$1 $2"
+ esac
+}
+
+
+exec_bsetroot()
+{
+ case `which bsetroot 2>&1` in
+ */*bsetroot)
+ exec bsetroot $ARGS
+ ;;
+ *)
+ error_msg 7
+ esac
+}
+
+
+check_old_config()
+{
+ if [ -f $CONFIG ]; then
+ . $CONFIG
+ if [ -n "$BGAPP" ] || [ -n "$CENTER_ARGS" ] || \
+ [ -n "$TILED_ARGS" ] || [ -n "$OTHER_ARGS" ] || \
+ [ -n "$DEFAULT_ARGS" ]; then
+ echo " this version of $NAME ($VERSION) no longer uses the old configuration format."
+ echo " please update $CONFIG with the new syntax:"
+ echo
+ echo " CENTER=\"value\""
+ echo " FULL=\"value\""
+ echo " TILE=\"value\""
+ echo " DEFAULT=\"value\""
+ echo
+ echo " see the sample.config file for details."
+ exit 0
+ fi
+ fi
+}
+
+
+debug()
+{
+ echo "DEBUG:--------------------------"
+ echo "config: $CONFIG"
+ echo "full: $FULL"
+ echo "tile: $TILE"
+ echo "center: $CENTER"
+ echo "default: $DEFAULT"
+ echo "error: $ERROR"
+ echo "app error: $APP_ERROR"
+ echo "argument: $ARGUMENT"
+ echo "________________________________"
+ echo
+}
+
+IMAGE_APPS="display Esetroot wmsetbg xv xli qiv"
+CONFIG="$HOME/.bsetbgrc"
+NAME=bsetbg
+VERSION=1.12
+MORE="(C) 2000 by lordzork industries (http://lordzork.com/)"
+PATH=$PATH:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/usr/X11/bin
+TMPFILE=`tempfile --prefix=bsetbg`
+ARGUMENT=$1
+
+
+case `which grep 2>&1` in */*grep) : ;;
+ *)
+ error_msg nogrep
+esac
+
+case $1 in
+ *-full|-f|f)
+ check_config
+ IMAGE=$2 && check_image
+ exec $FULL "$IMAGE"
+ ;;
+ *-tile|*tiled|-t|t)
+ check_config
+ IMAGE=$2 && check_image
+ exec $TILE "$IMAGE"
+ ;;
+ *-center|-c|c)
+ check_config
+ IMAGE=$2 && check_image
+ exec $CENTER "$IMAGE"
+ ;;
+ *-app|-a|a)
+ APP=$2
+ ARGS="$3"
+ case $# in
+ 4)
+ ARGMENT=$3
+ IMAGE=$4
+ exec_app
+ ;;
+ 5)
+ COMMAND=`shift 1 && echo $*`
+ ARGUMENT=$4
+ IMAGE=$5
+ exec_app
+ ;;
+ *)
+ error_msg 8
+ esac
+ ;;
+ -mod|-gradient|-solid)
+ check_bsetroot_args $*
+ exec_bsetroot
+ ;;
+ -display)
+ shift 1 && check_bsetroot_args $*
+ ARGS="-display $ARGS"
+ exec_bsetroot
+ ;;
+ *-info|-i|i)
+ INFO=yes
+ check_config
+ info_msg
+ ;;
+ *-version|-v|v)
+ echo; echo " $NAME version $VERSION"; echo " $MORE"; exit 0
+ ;;
+ *-help|-h|h)
+ help_msg
+ ;;
+ -r)
+ case $UID in
+ 0)
+ if [ -f $CONFIG ]; then
+ exit 1
+ else
+ create_config
+ fi
+ ;;
+ *)
+ exit 1
+ esac
+ ;;
+ *)
+ if [ -n "$1" ]; then
+ NOARG=yes
+ IMAGE=$1 && check_image
+ check_config && final_error_check
+ exec $DEFAULT "$1"
+ else
+ if [ ! -f $CONFIG ]; then
+ create_config && exit 0
+ fi
+ help_msg
+ fi
+esac
--- /dev/null
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#ifdef STDC_HEADERS
+# include <string.h>
+# include <stdlib.h>
+#endif // STDC_HEADERS
+
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif // HAVE_STDIO_H
+
+#include "../src/i18n.h"
+#include "bsetroot.h"
+
+
+bsetroot::bsetroot(int argc, char **argv, char *dpy_name)
+ : BaseDisplay(argv[0], dpy_name)
+{
+ pixmaps = (Pixmap *) 0;
+ grad = fore = back = (char *) 0;
+
+ Bool mod = False, sol = False, grd = False;
+ int mod_x = 0, mod_y = 0, i = 0;
+
+ img_ctrl = new BImageControl*[getNumberOfScreens()];
+ for (; i < getNumberOfScreens(); i++)
+ img_ctrl[i] = new BImageControl(this, getScreenInfo(i), True);
+
+ for (i = 1; i < argc; i++) {
+ if (! strcmp("-help", argv[i])) {
+ usage();
+ } else if ((! strcmp("-fg", argv[i])) ||
+ (! strcmp("-foreground", argv[i])) ||
+ (! strcmp("-from", argv[i]))) {
+ if ((++i) >= argc) usage(1);
+
+ fore = argv[i];
+ } else if ((! strcmp("-bg", argv[i])) ||
+ (! strcmp("-background", argv[i])) ||
+ (! strcmp("-to", argv[i]))) {
+ if ((++i) >= argc) usage(1);
+
+ back = argv[i];
+ } else if (! strcmp("-solid", argv[i])) {
+ if ((++i) >= argc) usage(1);
+
+ fore = argv[i];
+ sol = True;
+ } else if (! strcmp("-mod", argv[i])) {
+ if ((++i) >= argc) usage();
+
+ mod_x = atoi(argv[i]);
+
+ if ((++i) >= argc) usage();
+
+ mod_y = atoi(argv[i]);
+
+ if (mod_x < 1) mod_x = 1;
+ if (mod_y < 1) mod_y = 1;
+
+ mod = True;
+ } else if (! strcmp("-gradient", argv[i])) {
+ if ((++i) >= argc) usage();
+
+ grad = argv[i];
+ grd = True;
+ } else if (! strcmp("-display", argv[i])) {
+ // -display passed through tests ealier... we just skip it now
+ i++;
+ } else
+ usage();
+ }
+
+ if ((mod + sol + grd) != True) {
+ fprintf(stderr,
+ i18n->
+ getMessage(
+#ifdef NLS
+ bsetrootSet, bsetrootMustSpecify,
+#else // !NLS
+ 0, 0,
+#endif // NLS
+ "%s: error: must specify one of: -solid, -mod, -gradient\n"),
+ getApplicationName());
+
+ usage(2);
+ }
+
+ if (sol && fore) solid();
+ else if (mod && mod_x && mod_y && fore && back) modula(mod_x, mod_y);
+ else if (grd && grad && fore && back) gradient();
+ else usage();
+}
+
+
+bsetroot::~bsetroot(void) {
+ XKillClient(getXDisplay(), AllTemporary);
+
+ if (pixmaps) {
+ int i;
+ for (i = 0; i < getNumberOfScreens(); i++)
+ if (pixmaps[i] != None) {
+ XSetCloseDownMode(getXDisplay(), RetainTemporary);
+ break;
+ }
+
+ delete [] pixmaps;
+ }
+
+ if (img_ctrl) {
+ int i = 0;
+ for (; i < getNumberOfScreens(); i++)
+ delete img_ctrl[i];
+
+ delete [] img_ctrl;
+ }
+}
+
+
+void bsetroot::solid(void) {
+ register int screen = 0;
+
+ for (; screen < getNumberOfScreens(); screen++) {
+ BColor c;
+
+ img_ctrl[screen]->parseColor(&c, fore);
+ if (! c.isAllocated()) c.setPixel(BlackPixel(getXDisplay(), screen));
+
+ XSetWindowBackground(getXDisplay(), getScreenInfo(screen)->getRootWindow(),
+ c.getPixel());
+ XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow());
+ }
+}
+
+
+void bsetroot::modula(int x, int y) {
+ char data[32];
+ long pattern;
+
+ register int screen, i;
+
+ pixmaps = new Pixmap[getNumberOfScreens()];
+
+ for (pattern = 0, screen = 0; screen < getNumberOfScreens(); screen++) {
+ for (i = 0; i < 16; i++) {
+ pattern <<= 1;
+ if ((i % x) == 0)
+ pattern |= 0x0001;
+ }
+
+ for (i = 0; i < 16; i++)
+ if ((i % y) == 0) {
+ data[(i * 2)] = (char) 0xff;
+ data[(i * 2) + 1] = (char) 0xff;
+ } else {
+ data[(i * 2)] = pattern & 0xff;
+ data[(i * 2) + 1] = (pattern >> 8) & 0xff;
+ }
+
+ BColor f, b;
+ GC gc;
+ Pixmap bitmap;
+ XGCValues gcv;
+
+ bitmap =
+ XCreateBitmapFromData(getXDisplay(),
+ getScreenInfo(screen)->getRootWindow(), data,
+ 16, 16);
+
+ img_ctrl[screen]->parseColor(&f, fore);
+ img_ctrl[screen]->parseColor(&b, back);
+
+ if (! f.isAllocated()) f.setPixel(WhitePixel(getXDisplay(), screen));
+ if (! b.isAllocated()) b.setPixel(BlackPixel(getXDisplay(), screen));
+
+ gcv.foreground = f.getPixel();
+ gcv.background = b.getPixel();
+
+ gc = XCreateGC(getXDisplay(), getScreenInfo(screen)->getRootWindow(),
+ GCForeground | GCBackground, &gcv);
+
+ pixmaps[screen] =
+ XCreatePixmap(getXDisplay(), getScreenInfo(screen)->getRootWindow(),
+ 16, 16, getScreenInfo(screen)->getDepth());
+
+ XCopyPlane(getXDisplay(), bitmap, pixmaps[screen], gc,
+ 0, 0, 16, 16, 0, 0, 1l);
+ XSetWindowBackgroundPixmap(getXDisplay(),
+ getScreenInfo(screen)->getRootWindow(),
+ pixmaps[screen]);
+ XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow());
+
+ XFreeGC(getXDisplay(), gc);
+ XFreePixmap(getXDisplay(), bitmap);
+
+ if (! (getScreenInfo(screen)->getVisual()->c_class & 1)) {
+ XFreePixmap(getXDisplay(), pixmaps[screen]);
+ pixmaps[screen] = None;
+ }
+ }
+}
+
+
+void bsetroot::gradient(void) {
+ register int screen;
+
+ pixmaps = new Pixmap[getNumberOfScreens()];
+
+ for (screen = 0; screen < getNumberOfScreens(); screen++) {
+ BTexture texture;
+ img_ctrl[screen]->parseTexture(&texture, grad);
+ img_ctrl[screen]->parseColor(texture.getColor(), fore);
+ img_ctrl[screen]->parseColor(texture.getColorTo(), back);
+
+ if (! texture.getColor()->isAllocated())
+ texture.getColor()->setPixel(WhitePixel(getXDisplay(), screen));
+ if (! texture.getColorTo()->isAllocated())
+ texture.getColorTo()->setPixel(BlackPixel(getXDisplay(), screen));
+
+ pixmaps[screen] =
+ img_ctrl[screen]->renderImage(getScreenInfo(screen)->getWidth(),
+ getScreenInfo(screen)->getHeight(),
+ &texture);
+
+ XSetWindowBackgroundPixmap(getXDisplay(),
+ getScreenInfo(screen)->getRootWindow(),
+ pixmaps[screen]);
+ XClearWindow(getXDisplay(), getScreenInfo(screen)->getRootWindow());
+
+ if (! (getScreenInfo(screen)->getVisual()->c_class & 1)) {
+ img_ctrl[screen]->removeImage(pixmaps[screen]);
+ img_ctrl[screen]->timeout();
+ pixmaps[screen] = None;
+ }
+ }
+}
+
+
+void bsetroot::usage(int exit_code) {
+ fprintf(stderr,
+ i18n->
+ getMessage(
+#ifdef NLS
+ bsetrootSet, bsetrootUsage,
+#else // !NLS
+ 0, 0,
+#endif // NLS
+ "%s 2.0 : (c) 1997-1999 Brad Hughes\n\n"
+ " -display <string> display connection\n"
+ " -mod <x> <y> modula pattern\n"
+ " -foreground, -fg <color> modula foreground color\n"
+ " -background, -bg <color> modula background color\n\n"
+ " -gradient <texture> gradient texture\n"
+ " -from <color> gradient start color\n"
+ " -to <color> gradient end color\n\n"
+ " -solid <color> solid color\n\n"
+ " -help print this help text and exit\n"),
+ getApplicationName());
+
+ exit(exit_code);
+}
+
+
+int main(int argc, char **argv) {
+ char *display_name = (char *) 0;
+ int i = 1;
+
+ NLSInit("openbox.cat");
+
+ for (; i < argc; i++) {
+ if (! strcmp(argv[i], "-display")) {
+ // check for -display option
+
+ if ((++i) >= argc) {
+ fprintf(stderr,
+ i18n->getMessage(
+#ifdef NLS
+ mainSet, mainDISPLAYRequiresArg,
+#else // !NLS
+ 0, 0,
+#endif // NLS
+ "error: '-display' requires an argument\n"));
+
+ ::exit(1);
+ }
+
+ display_name = argv[i];
+ }
+ }
+
+ bsetroot app(argc, argv, display_name);
+
+ return 0;
+}
--- /dev/null
+#ifndef __bsetroot2_hh
+#define __bsetroot2_hh
+
+#include "../src/BaseDisplay.h"
+#include "../src/Image.h"
+
+
+class bsetroot : public BaseDisplay {
+private:
+ BImageControl **img_ctrl;
+ Pixmap *pixmaps;
+
+ char *fore, *back, *grad;
+
+
+protected:
+ inline virtual void process_event(XEvent *) { }
+
+
+public:
+ bsetroot(int, char **, char * = 0);
+ ~bsetroot(void);
+
+ inline virtual Bool handleSignal(int) { return False; }
+
+ void gradient(void);
+ void modula(int, int);
+ void solid(void);
+ void usage(int = 0);
+};
+
+
+#endif // __bsetroot2_hh
--- /dev/null
+#define __openbox_version "@VERSION@"