all repos — openbox @ dfc5f034581f5a26cba5c4811500438f89f0634a

openbox fork - make it a bit more like ryudo

Initial revision
Dana Jansens danakj@orodu.net
commit

dfc5f034581f5a26cba5c4811500438f89f0634a

parent

17532e906b1dd6340bb1eccd2d9724643637958b

374 files changed, 51422 insertions(+), 0 deletions(-)

jump to
A AUTHORS

@@ -0,0 +1,81 @@

+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).
A BUGS

@@ -0,0 +1,2 @@

+* 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.
A ChangeLog

@@ -0,0 +1,60 @@

+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) +
A ChangeLog-Blackbox

@@ -0,0 +1,1269 @@

+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. +
A ChangeLog.bsetbg

@@ -0,0 +1,59 @@

+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
A INSTALL

@@ -0,0 +1,94 @@

+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. +
A LICENSE

@@ -0,0 +1,21 @@

+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.
A Makefile.am

@@ -0,0 +1,12 @@

+# 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
A Makefile.in

@@ -0,0 +1,381 @@

+# 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:
A README

@@ -0,0 +1,99 @@

+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. +
A README.bbtools

@@ -0,0 +1,14 @@

+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. +
A README.bsetbg

@@ -0,0 +1,183 @@

+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.
A TODO

@@ -0,0 +1,54 @@

+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.
A aclocal.m4

@@ -0,0 +1,160 @@

+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([,]))]) +
A autom4te.cache/output.0

@@ -0,0 +1,6539 @@

+@%:@! /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 +
A autom4te.cache/requests

@@ -0,0 +1,94 @@

+# 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' ) + ); +
A autom4te.cache/traces.0

@@ -0,0 +1,370 @@

+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])
A config.h.in

@@ -0,0 +1,142 @@

+/* 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
A configure

@@ -0,0 +1,6539 @@

+#! /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 +
A configure.in

@@ -0,0 +1,268 @@

+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)
A data/Makefile.am

@@ -0,0 +1,17 @@

+# 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)
A data/Makefile.in

@@ -0,0 +1,308 @@

+# 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:
A data/README

@@ -0,0 +1,20 @@

+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.
A data/README.menu

@@ -0,0 +1,369 @@

+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.
A data/README.style

@@ -0,0 +1,326 @@

+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.
A data/menu.in

@@ -0,0 +1,107 @@

+# 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. +
A data/styles/Makefile.am

@@ -0,0 +1,8 @@

+# 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 *\~
A data/styles/Makefile.in

@@ -0,0 +1,215 @@

+# 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:
A data/styles/artwiz

@@ -0,0 +1,109 @@

+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-*-*-*-*-*-*
A data/styles/bluebox

@@ -0,0 +1,155 @@

+! 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 +
A data/styles/cthulhain

@@ -0,0 +1,140 @@

+! 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
A data/styles/flux

@@ -0,0 +1,91 @@

+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
A data/styles/frobozz

@@ -0,0 +1,137 @@

+! 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 +
A data/styles/frobust

@@ -0,0 +1,152 @@

+ +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 +
A data/styles/nyz

@@ -0,0 +1,103 @@

+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
A data/styles/nyzclone

@@ -0,0 +1,136 @@

+! 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 +
A data/styles/operation

@@ -0,0 +1,91 @@

+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 +
A data/styles/outcomes

@@ -0,0 +1,114 @@

+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
A data/styles/shade

@@ -0,0 +1,91 @@

+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
A data/styles/steelblue

@@ -0,0 +1,134 @@

+! 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 +
A data/styles/steelblue2

@@ -0,0 +1,133 @@

+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 +
A data/styles/the_orange

@@ -0,0 +1,98 @@

+! 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-*-*-*-*-*-*
A data/styles/trisb

@@ -0,0 +1,153 @@

+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 +
A data/styles/twice

@@ -0,0 +1,103 @@

+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
A doc/Makefile.am

@@ -0,0 +1,17 @@

+# 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
A doc/Makefile.in

@@ -0,0 +1,351 @@

+# 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:
A doc/bsetroot.1

@@ -0,0 +1,89 @@

+.\" +.\" 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)
A doc/openbox.1.in

@@ -0,0 +1,813 @@

+.\" +.\" 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 ;-(
A install-sh

@@ -0,0 +1,250 @@

+#!/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
A missing

@@ -0,0 +1,188 @@

+#! /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
A mkinstalldirs

@@ -0,0 +1,40 @@

+#! /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
A nls/C/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/C/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox Menu
A nls/C/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/C/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Icons
A nls/C/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/C/Makefile.am

@@ -0,0 +1,48 @@

+# 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 *\~
A nls/C/Makefile.in

@@ -0,0 +1,235 @@

+# 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:
A nls/C/Screen.m

@@ -0,0 +1,54 @@

+$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 +
A nls/C/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Slit Direction +$ #SlitPlacement +# Slit Placement
A nls/C/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/C/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/C/Windowmenu.m

@@ -0,0 +1,20 @@

+$set 10 #Windowmenu + +$ #SendTo +# Send To ... +$ #Shade +# Shade +$ #Iconify +# Iconify +$ #Maximize +# Maximize +$ #Raise +# Raise +$ #Lower +# Lower +$ #Stick +# Stick +$ #KillClient +# Kill Client +$ #Close +# Close
A nls/C/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Workspace %d
A nls/C/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Workspaces +$ #NewWorkspace +# New Workspace +$ #RemoveLast +# Remove Last
A nls/C/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/C/common.m

@@ -0,0 +1,38 @@

+$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
A nls/C/main.m

@@ -0,0 +1,24 @@

+$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
A nls/C/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: no managable screens found, aborting\n +$ #MapRequest +# Openbox::process_event: MapRequest for 0x%lx\n
A nls/Makefile.am

@@ -0,0 +1,14 @@

+# 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 *\~
A nls/Makefile.in

@@ -0,0 +1,305 @@

+# 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:
A nls/convert.awk

@@ -0,0 +1,32 @@

+/^\$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 } +
A nls/da_DK/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/da_DK/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openboxmenu
A nls/da_DK/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/da_DK/Icon.m

@@ -0,0 +1,6 @@

+$set 4 #Icon + +$ #Icons +# Ikoner +$ #Unnamed +# Intet navn
A nls/da_DK/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/da_DK/Makefile.am

@@ -0,0 +1,33 @@

+# 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 *\~
A nls/da_DK/Makefile.in

@@ -0,0 +1,220 @@

+# 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:
A nls/da_DK/Screen.m

@@ -0,0 +1,53 @@

+$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 +
A nls/da_DK/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Slit retning +$ #SlitPlacement +# Slit placering
A nls/da_DK/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/da_DK/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/da_DK/Windowmenu.m

@@ -0,0 +1,20 @@

+$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
A nls/da_DK/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Skrivebord %d
A nls/da_DK/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Skriveborde +$ #NewWorkspace +# Nyt skrivebord +$ #RemoveLast +# Fjern sidste
A nls/da_DK/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/da_DK/common.m

@@ -0,0 +1,38 @@

+$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
A nls/da_DK/main.m

@@ -0,0 +1,24 @@

+$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
A nls/da_DK/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: ingen håndterbare skærme fundet, afslutter\n +$ #MapRequest +# Openbox::process_event: MapRequest for 0x%lx\n
A nls/de_DE/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/de_DE/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox Menu
A nls/de_DE/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/de_DE/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Icons
A nls/de_DE/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/de_DE/Makefile.am

@@ -0,0 +1,36 @@

+# 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 *\~
A nls/de_DE/Makefile.in

@@ -0,0 +1,223 @@

+# 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:
A nls/de_DE/Screen.m

@@ -0,0 +1,52 @@

+$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 +
A nls/de_DE/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Slit Ausrichtung +$ #SlitPlacement +# Slit Platzierung
A nls/de_DE/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/de_DE/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/de_DE/Windowmenu.m

@@ -0,0 +1,20 @@

+$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
A nls/de_DE/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Arbeitsplatz %d
A nls/de_DE/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Arbeitsplätze +$ #NewWorkspace +# Neuer Arbeitsplatz +$ #RemoveLast +# Letzten Arbeitsplatz löschen
A nls/de_DE/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/de_DE/common.m

@@ -0,0 +1,38 @@

+$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
A nls/de_DE/main.m

@@ -0,0 +1,24 @@

+$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
A nls/de_DE/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: keine verwaltbaren Bildschirme gefunden, Abbruch\n +$ #MapRequest +# Openbox::process_event: MapRequest von 0x%lx\n
A nls/es_ES/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/es_ES/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Menú de Openbox
A nls/es_ES/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/es_ES/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Iconos
A nls/es_ES/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/es_ES/Makefile.am

@@ -0,0 +1,36 @@

+# 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 *\~
A nls/es_ES/Makefile.in

@@ -0,0 +1,223 @@

+# 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:
A nls/es_ES/Screen.m

@@ -0,0 +1,51 @@

+$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
A nls/es_ES/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Dirección de slit +$ #SlitPlacement +# Ubicación de slit
A nls/es_ES/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/es_ES/Window.m

@@ -0,0 +1,18 @@

+$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
A nls/es_ES/Windowmenu.m

@@ -0,0 +1,20 @@

+$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
A nls/es_ES/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Escritorio %d
A nls/es_ES/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Escritorios +$ #NewWorkspace +# Escritorio nuevo +$ #RemoveLast +# Quitar el último escritorio
A nls/es_ES/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/es_ES/common.m

@@ -0,0 +1,35 @@

+$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
A nls/es_ES/main.m

@@ -0,0 +1,23 @@

+$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
A nls/es_ES/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: no encontré pantallas manejables, cerrando\n +$ #MapRequest +# Openbox::process_event: MapRequest para 0x%lx\n
A nls/et_EE/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/et_EE/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox'i Menüü
A nls/et_EE/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/et_EE/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Ikoonid
A nls/et_EE/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/et_EE/Makefile.am

@@ -0,0 +1,33 @@

+# 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 *\~
A nls/et_EE/Makefile.in

@@ -0,0 +1,220 @@

+# 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:
A nls/et_EE/Screen.m

@@ -0,0 +1,53 @@

+$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 +
A nls/et_EE/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Pragu +$ #SlitDirection +# Prao suund +$ #SlitPlacement +# Prao asukoht
A nls/et_EE/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/et_EE/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/et_EE/Windowmenu.m

@@ -0,0 +1,20 @@

+$set 10 #Windowmenu + +$ #SendTo +# Saada... +$ #Shade +# Varjuta +$ #Iconify +# Ikoniseeri +$ #Maximize +# Suurenda +$ #Raise +# Esiplaanile +$ #Lower +# Tahaplaanile +$ #Stick +# Kleebi +$ #KillClient +# Killi klient +$ #Close +# Sulge
A nls/et_EE/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Töölaud %d
A nls/et_EE/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Töölauad +$ #NewWorkspace +# Uus töölaud +$ #RemoveLast +# Eemalda viimane
A nls/et_EE/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/et_EE/common.m

@@ -0,0 +1,35 @@

+$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
A nls/et_EE/main.m

@@ -0,0 +1,24 @@

+$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
A nls/et_EE/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: ei leidnud hallatavaid displeisid, katkestame\n +$ #MapRequest +# Openbox::process_event: MapRequest 0x%lx'le\n
A nls/fr_FR/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/fr_FR/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Menu de Openbox
A nls/fr_FR/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/fr_FR/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Icones
A nls/fr_FR/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/fr_FR/Makefile.am

@@ -0,0 +1,36 @@

+# 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 *\~
A nls/fr_FR/Makefile.in

@@ -0,0 +1,223 @@

+# 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:
A nls/fr_FR/Screen.m

@@ -0,0 +1,54 @@

+$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 +
A nls/fr_FR/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Orientation du Slit +$ #SlitPlacement +# Disposition du Slit
A nls/fr_FR/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/fr_FR/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/fr_FR/Windowmenu.m

@@ -0,0 +1,20 @@

+$set 10 #Windowmenu + +$ #SendTo +# Redirige vers... +$ #Shade +# Ombrage +$ #Iconify +# Iconifie +$ #Maximize +# Maximize +$ #Raise +# Résurrection +$ #Lower +# Réduit +$ #Stick +# Epingle +$ #KillClient +# Massacre +$ #Close +# Ferme
A nls/fr_FR/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Bureau %d
A nls/fr_FR/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Bureaux +$ #NewWorkspace +# Nouveau bureau +$ #RemoveLast +# Supprimer le dernier
A nls/fr_FR/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/fr_FR/common.m

@@ -0,0 +1,35 @@

+$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
A nls/fr_FR/main.m

@@ -0,0 +1,24 @@

+$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
A nls/fr_FR/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: Aucun écran exploitable n'a été trouvé, annulation\n +$ #MapRequest +# Openbox::process_event: MapRequest pour 0x%lx\n
A nls/it_IT/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/it_IT/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox Menu
A nls/it_IT/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/it_IT/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Icone
A nls/it_IT/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/it_IT/Makefile.am

@@ -0,0 +1,36 @@

+# 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 *\~
A nls/it_IT/Makefile.in

@@ -0,0 +1,223 @@

+# 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:
A nls/it_IT/Screen.m

@@ -0,0 +1,54 @@

+$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 +
A nls/it_IT/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Direzione Slit +$ #SlitPlacement +# Posizionamento Slit
A nls/it_IT/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/it_IT/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/it_IT/Windowmenu.m

@@ -0,0 +1,20 @@

+$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
A nls/it_IT/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Area di Lavoro %d
A nls/it_IT/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Aree di Lavoro +$ #NewWorkspace +# Nuova Area di Lavoro +$ #RemoveLast +# Rimuovi Ultima
A nls/it_IT/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/it_IT/common.m

@@ -0,0 +1,38 @@

+$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
A nls/it_IT/main.m

@@ -0,0 +1,24 @@

+$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
A nls/it_IT/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: nessuno schermo gestibile trovatono, annullamento\n +$ #MapRequest +# Openbox::process_event: MapRequest per 0x%lx\n
A nls/ja_JP/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/ja_JP/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox ¥á¥Ë¥å¡¼
A nls/ja_JP/Configmenu.m

@@ -0,0 +1,38 @@

+$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 +# ²¼¤«¤é¾å¤Ø
A nls/ja_JP/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# ¥¢¥¤¥³¥ó
A nls/ja_JP/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/ja_JP/Makefile.am

@@ -0,0 +1,33 @@

+# 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 *\~
A nls/ja_JP/Makefile.in

@@ -0,0 +1,220 @@

+# 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:
A nls/ja_JP/Screen.m

@@ -0,0 +1,53 @@

+$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 +
A nls/ja_JP/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Slit ¤ÎÊý¸þ +$ #SlitPlacement +# Slit ¤ÎÇÛÃÖ
A nls/ja_JP/Toolbar.m

@@ -0,0 +1,22 @@

+$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 +# ¥Ä¡¼¥ë¥Ð¡¼¤Î°ÌÃÖ
A nls/ja_JP/Window.m

@@ -0,0 +1,18 @@

+$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
A nls/ja_JP/Windowmenu.m

@@ -0,0 +1,20 @@

+$set 10 #Windowmenu + +$ #SendTo +# Á÷¤êÀè ... +$ #Shade +# ¥·¥§¡¼¥É +$ #Iconify +# ¥¢¥¤¥³¥ó²½ +$ #Maximize +# ºÇÂç²½ +$ #Raise +# Á°Ì̤˽Ф¹ +$ #Lower +# ÇØÌ̤˲¼¤²¤ë +$ #Stick +# µïºÂ¤ê +$ #KillClient +# ¶¯À©½ªÎ» +$ #Close +# ½ªÎ»
A nls/ja_JP/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# ¥ï¡¼¥¯¥¹¥Ú¡¼¥¹ %d
A nls/ja_JP/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# ¥ï¡¼¥¯¥¹¥Ú¡¼¥¹ +$ #NewWorkspace +# ¿·µ¬¥ï¡¼¥¯¥¹¥Ú¡¼¥¹ +$ #RemoveLast +# ËöÈø¤Î¥ï¡¼¥¯¥¹¥Ú¡¼¥¹¤ò¾Ã¤¹
A nls/ja_JP/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/ja_JP/common.m

@@ -0,0 +1,38 @@

+$set 15 #Common + +$ #Yes +# ¤Ï¤¤ +$ #No +# ¤¤¤¤¤¨ + +$ #DirectionTitle +# Êý¸þ +$ #DirectionHoriz +# ¿åÊ¿ +$ #DirectionVert +# ¿âľ + +$ #AlwaysOnTop +# ¾ï¤ËºÇÁ°ÌÌ¤Ë + +$ #PlacementTitle +# ÇÛÃÖ +$ #PlacementTopLeft +# º¸¾å +$ #PlacementCenterLeft +# º¸Ãæ±û +$ #PlacementBottomLeft +# º¸²¼ +$ #PlacementTopCenter +# Ãæ±û¾å +$ #PlacementBottomCenter +# Ãæ±û²¼ +$ #PlacementTopRight +# ±¦¾å +$ #PlacementCenterRight +# ±¦Ãæ±û +$ #PlacementBottomRight +# ±¦²¼ + +$ #AutoHide +# ¼«Æ°Åª¤Ë±£¤¹
A nls/ja_JP/main.m

@@ -0,0 +1,24 @@

+$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
A nls/ja_JP/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: Áàºî²Äǽ¤Ê¥¹¥¯¥ê¡¼¥ó¤¬¤¢¤ê¤Þ¤»¤ó¡¢Ãæ»ß¤·¤Þ¤¹\n +$ #MapRequest +# Openbox::process_event: MapRequest (0x%lx ¤ËÂФ·¤Æ)\n
A nls/nl_NL/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/nl_NL/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox menu
A nls/nl_NL/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/nl_NL/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Iconen
A nls/nl_NL/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/nl_NL/Makefile.am

@@ -0,0 +1,36 @@

+# 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 *\~
A nls/nl_NL/Makefile.in

@@ -0,0 +1,223 @@

+# 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:
A nls/nl_NL/Screen.m

@@ -0,0 +1,52 @@

+$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 +
A nls/nl_NL/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Richting +$ #SlitPlacement +# Plaats
A nls/nl_NL/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/nl_NL/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/nl_NL/Windowmenu.m

@@ -0,0 +1,20 @@

+$set 10 #Windowmenu + +$ #SendTo +# Verplaatsen naar ... +$ #Shade +# Alleen titel +$ #Iconify +# Minimaliseren +$ #Maximize +# Maximaliseren +$ #Raise +# Voorgrond +$ #Lower +# Achtergrond +$ #Stick +# Altijd zichtbaar +$ #KillClient +# Afbreken +$ #Close +# Sluiten
A nls/nl_NL/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Werkblad %d
A nls/nl_NL/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Werkbladen +$ #NewWorkspace +# Nieuw werkblad +$ #RemoveLast +# Verwijder laatste werkblad
A nls/nl_NL/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/nl_NL/common.m

@@ -0,0 +1,38 @@

+$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
A nls/nl_NL/main.m

@@ -0,0 +1,24 @@

+$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
A nls/nl_NL/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: geen schermen gevonden om te managen, afgesloten\n +$ #MapRequest +# Openbox::process_event: MapRequest voor 0x%lx\n
A nls/pt_BR/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/pt_BR/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Menu Openbox
A nls/pt_BR/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/pt_BR/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Icones
A nls/pt_BR/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/pt_BR/Makefile.am

@@ -0,0 +1,33 @@

+# 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 *\~
A nls/pt_BR/Makefile.in

@@ -0,0 +1,220 @@

+# 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:
A nls/pt_BR/Screen.m

@@ -0,0 +1,52 @@

+$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 +
A nls/pt_BR/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Direção +$ #SlitPlacement +# Posicionamento
A nls/pt_BR/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/pt_BR/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/pt_BR/Windowmenu.m

@@ -0,0 +1,20 @@

+$set 10 #Windowmenu + +$ #SendTo +# Enviar Para ... +$ #Shade +# Encolher +$ #Iconify +# Minimizar +$ #Maximize +# Maximizar +$ #Raise +# Focalizar +$ #Lower +# Desfocalizar +$ #Stick +# Sempre Visivel +$ #KillClient +# Kill Cliente +$ #Close +# Fechar
A nls/pt_BR/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Area de Trabalho %d
A nls/pt_BR/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Areas de Trabalho +$ #NewWorkspace +# Nova Area de Trabalho +$ #RemoveLast +# Remover Ultima
A nls/pt_BR/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/pt_BR/common.m

@@ -0,0 +1,35 @@

+$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
A nls/pt_BR/main.m

@@ -0,0 +1,24 @@

+$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
A nls/pt_BR/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: não foram encontradas telas administraveis, abortando..\n +$ #MapRequest +# Openbox::process_event: MapRequest para 0x%lx\n
A nls/ru_RU/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/ru_RU/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# íÅÎÀ Openbox
A nls/ru_RU/Configmenu.m

@@ -0,0 +1,38 @@

+$set 3 #Configmenu + +$ #ConfigOptions +# ëÏÎÆÉÇÕÒÁÃÉÑ +$ #FocusModel +# íÏÄÅÌØ ÆÏËÕÓÉÒÏ×ËÉ +$ #WindowPlacement +# ðÏÌÏÖÅÎÉÅ ÏËÎÁ +$ #ImageDithering +# Image Dithering +$ #OpaqueMove +# ðÅÒÅÍÅÝÅÎÉÅ ÚÁÐÏÌÎÅÎÎÙÈ ÏËÏÎ +$ #FullMax +# ðÏÌÎÁÑ ÍÁËÓÉÍÉÚÁÃÉÑ +$ #FocusNew +# ðÅÒÅÍÅÝÁÔØ ÆÏËÕÓ ÎÁ ÎÏ×ÙÅ ÏËÎÁ +$ #FocusLast +# æÏËÕÓ ÎÁ ÐÏÓÌÅÄÎÅÅ ÏËÎÏ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ +$ #ClickToFocus +# æÏËÕÓ ÐÏ ÝÅÌÞËÕ +$ #SloppyFocus +# æÏËÕÓ ÐÏ ÐÅÒÅÍÅÝÅÎÉÀ +$ #AutoRaise +# á×ÔÏ×ÓÐÌÙÔÉÅ +$ #SmartRows +# "õÍÎÏÅ" ÒÁÓÐÏÌÏÖÅÎÉÅ (ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ) +$ #SmartCols +# "õÍÎÏÅ" ÒÁÓÐÏÌÏÖÅÎÉÅ (ÐÏ ×ÅÒÔÉËÁÌÉ) +$ #Cascade +# ëÁÓËÁÄÏÍ +$ #LeftRight +# óÌÅ×Á ÎÁÐÒÁ×Ï +$ #RightLeft +# óÐÒÁ×Á ÎÁÌÅ×Ï +$ #TopBottom +# ó×ÅÒÈÕ ×ÎÉÚ +$ #BottomTop +# óÎÉÚÕ ××ÅÒÈ
A nls/ru_RU/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# ó×ÅÒÎÕÔÙÅ\nÏËÎÁ
A nls/ru_RU/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/ru_RU/Makefile.am

@@ -0,0 +1,33 @@

+# 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 *\~
A nls/ru_RU/Makefile.in

@@ -0,0 +1,220 @@

+# 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:
A nls/ru_RU/Screen.m

@@ -0,0 +1,52 @@

+$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 +
A nls/ru_RU/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# äÏËÅÒ +$ #SlitDirection +# ïÒÉÅÎÔÁÃÉÑ ÄÏËÅÒÁ +$ #SlitPlacement +# íÅÓÔÏÐÏÌÏÖÅÎÉÑ ÄÏËÅÒÁ
A nls/ru_RU/Toolbar.m

@@ -0,0 +1,22 @@

+$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 +# íÅÓÔÏÐÏÌÏÖÅÎÉÅ ÔÕÌÂÁÒÁ
A nls/ru_RU/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/ru_RU/Windowmenu.m

@@ -0,0 +1,20 @@

+$set 10 #Windowmenu + +$ #SendTo +# ïÔÐÒÁ×ÉÔØ ÎÁ ... +$ #Shade +# ó×ÅÒÎÕÔØ × ÚÁÇÏÌÏ×ÏË +$ #Iconify +# ó×ÅÒÎÕÔØ × ÉËÏÎËÕ +$ #Maximize +# íÁËÓÉÍÉÚÉÒÏ×ÁÔØ +$ #Raise +# ðÏÄÎÑÔØ ÎÁ×ÅÒÈ +$ #Lower +# ïÐÕÓÔÉÔØ ×ÎÉÚ +$ #Stick +# ðÒÉËÌÅÉÔØ +$ #KillClient +# õÂÉÔØ ËÌÉÅÎÔÓËÏÅ ÐÒÉÌÏÖÅÎÉÅ +$ #Close +# úÁËÒÙÔØ
A nls/ru_RU/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# òÁÂÏÞÉÊ ÓÔÏÌ %d
A nls/ru_RU/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# òÁÂÏÞÉÅ ÓÔÏÌÙ +$ #NewWorkspace +# îÏ×ÙÊ ÒÁÂÏÞÉÊ ÓÔÏÌ +$ #RemoveLast +# õÄÁÌÉÔØ ÐÏÓÌÅÄÎÉÊ
A nls/ru_RU/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/ru_RU/common.m

@@ -0,0 +1,35 @@

+$set 15 #Common + +$ #Yes +# äÁ +$ #No +# îÅÔ + +$ #DirectionTitle +# îÁÐÒÁ×ÌÅÎÉÅ +$ #DirectionHoriz +# ðÏ ÇÏÒÉÚÏÎÔÁÌÉ +$ #DirectionVert +# ðÏ ×ÅÒÔÉËÁÌÉ + +$ #AlwaysOnTop +# ÷ÓÅÇÄÁ ÎÁ×ÅÒÈÕ + +$ #PlacementTitle +# íÅÓÔÏÐÏÌÏÖÅÎÉÅ +$ #PlacementTopLeft +# óÌÅ×Á ××ÅÒÈÕ +$ #PlacementCenterLeft +# óÌÅ×Á ÐÏ ÃÅÎÔÒÕ +$ #PlacementBottomLeft +# óÌÅ×Á ×ÎÉÚÕ +$ #PlacementTopCenter +# ó×ÅÒÈÕ ÐÏ ÃÅÎÔÒÕ +$ #PlacementBottomCenter +# óÎÉÚÕ ÐÏ ÃÅÎÔÒÕ +$ #PlacementTopRight +# óÐÒÁ×Á Ó×ÅÒÈÕ +$ #PlacementCenterRight +# óÐÒÁ×Á ÐÏ ÃÅÎÔÒÕ +$ #PlacementBottomRight +# óÐÒÁ×Á ×ÎÉÚÕ
A nls/ru_RU/main.m

@@ -0,0 +1,24 @@

+$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
A nls/ru_RU/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: ÎÅ ÎÁÊÄÅÎÏ ÜËÒÁÎÏ× ÄÌÑ ÏÂÓÌÕÖÉ×ÁÎÉÑ, ÏÔÍÅÎÁ...\n +$ #MapRequest +# Openbox::process_event: MapRequest for 0x%lx\n
A nls/sl_SI/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/sl_SI/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox Menu
A nls/sl_SI/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/sl_SI/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Ikone
A nls/sl_SI/Image.m

@@ -0,0 +1,25 @@

+$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 +
A nls/sl_SI/Makefile.am

@@ -0,0 +1,33 @@

+# 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 *\~
A nls/sl_SI/Makefile.in

@@ -0,0 +1,220 @@

+# 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:
A nls/sl_SI/Screen.m

@@ -0,0 +1,52 @@

+$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 +
A nls/sl_SI/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Re¾a +$ #SlitDirection +# Smer re¾e +$ #SlitPlacement +# Lega re¾e
A nls/sl_SI/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/sl_SI/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/sl_SI/Windowmenu.m

@@ -0,0 +1,20 @@

+$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
A nls/sl_SI/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Delovna povr¹ina %d
A nls/sl_SI/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Delovne povr¹ine +$ #NewWorkspace +# Nova delovna povr¹ina +$ #RemoveLast +# Odstrani zadnjo
A nls/sl_SI/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/sl_SI/common.m

@@ -0,0 +1,38 @@

+$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
A nls/sl_SI/main.m

@@ -0,0 +1,24 @@

+$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
A nls/sl_SI/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: ni moè najti upravljivih zaslonov, prekinitev\n +$ #MapRequest +# Openbox::process_event: MapRequest za 0x%lx\n
A nls/sv_SE/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/sv_SE/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openboxmeny
A nls/sv_SE/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/sv_SE/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Ikoner
A nls/sv_SE/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/sv_SE/Makefile.am

@@ -0,0 +1,33 @@

+# 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 *\~
A nls/sv_SE/Makefile.in

@@ -0,0 +1,220 @@

+# 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:
A nls/sv_SE/Screen.m

@@ -0,0 +1,52 @@

+$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 +
A nls/sv_SE/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Slitriktning +$ #SlitPlacement +# Slitplacering
A nls/sv_SE/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/sv_SE/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/sv_SE/Windowmenu.m

@@ -0,0 +1,20 @@

+$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
A nls/sv_SE/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Skrivbord %d
A nls/sv_SE/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Skrivbord +$ #NewWorkspace +# Nytt skrivbord +$ #RemoveLast +# Ta bort sista
A nls/sv_SE/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/sv_SE/common.m

@@ -0,0 +1,38 @@

+$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
A nls/sv_SE/main.m

@@ -0,0 +1,24 @@

+$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
A nls/sv_SE/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: inga hanterbara skärmar hittades, avslutar\n +$ #MapRequest +# Openbox::process_event: MapRequest för 0x%lx\n
A nls/tr_TR/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/tr_TR/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox mönüsü
A nls/tr_TR/Configmenu.m

@@ -0,0 +1,38 @@

+$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
A nls/tr_TR/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# Ikonalar
A nls/tr_TR/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/tr_TR/Makefile.am

@@ -0,0 +1,37 @@

+# 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 *\~
A nls/tr_TR/Makefile.in

@@ -0,0 +1,224 @@

+# 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:
A nls/tr_TR/Screen.m

@@ -0,0 +1,52 @@

+$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
A nls/tr_TR/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Slit yönü +$ #SlitPlacement +# Slit yerleþimi
A nls/tr_TR/Toolbar.m

@@ -0,0 +1,22 @@

+$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
A nls/tr_TR/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/tr_TR/Windowmenu.m

@@ -0,0 +1,20 @@

+$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
A nls/tr_TR/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# Masaüstü %d
A nls/tr_TR/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# Masaüstleri +$ #NewWorkspace +# Yeni bir masaüstü +$ #RemoveLast +# Son masaüstünü sil
A nls/tr_TR/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/tr_TR/common.m

@@ -0,0 +1,35 @@

+$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
A nls/tr_TR/main.m

@@ -0,0 +1,24 @@

+$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
A nls/tr_TR/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: yönetebilinen ekran bulunamadý, bitiriliyorum\n +$ #MapRequest +# Openbox::process_event: 0x%lx için MapRequest\n
A nls/zh_CN/BaseDisplay.m

@@ -0,0 +1,16 @@

+$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
A nls/zh_CN/Basemenu.m

@@ -0,0 +1,4 @@

+$set 2 #Basemenu + +$ #OpenboxMenu +# Openbox ²Ëµ¥
A nls/zh_CN/Configmenu.m

@@ -0,0 +1,38 @@

+$set 3 #Configmenu + +$ #ConfigOptions +# ÅäÖÃÑ¡Ïî +$ #FocusModel +# ¾Û½¹Ä£Ê½ +$ #WindowPlacement +# ´°¿Ú·ÅÖà +$ #ImageDithering +# ͼÏñµ÷г +$ #OpaqueMove +# ÏÔʾÒƶ¯´°¿ÚÄÚÈÝ +$ #FullMax +# ÍêÈ«×î´ó»¯ +$ #FocusNew +# ¾Û½¹Ð´°¿Ú +$ #FocusLast +# ×ÀÃæ¸Ä±äʱ¾Û½¹´°¿Ú +$ #ClickToFocus +# µã»÷¾Û½¹ +$ #SloppyFocus +# ×Ô¶¯¾Û½¹ +$ #AutoRaise +# ×Ô¶¯·ÅÇ° +$ #SmartRows +# ×Ô¶¯·ÅÖÃ(ÐÐ) +$ #SmartCols +# ×Ô¶¯·ÅÖÃ(ÁÐ) +$ #Cascade +# ²ãµþ·ÅÖà +$ #LeftRight +# ´Ó×óµ½ÓÒ +$ #RightLeft +# ´ÓÓÒµ½×ó +$ #TopBottom +# ´ÓÉϵ½Ï +$ #BottomTop +# ´Óϵ½ÉÏ
A nls/zh_CN/Icon.m

@@ -0,0 +1,4 @@

+$set 4 #Icon + +$ #Icons +# ͼ±ê
A nls/zh_CN/Image.m

@@ -0,0 +1,24 @@

+$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
A nls/zh_CN/Makefile.am

@@ -0,0 +1,33 @@

+# 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 *\~
A nls/zh_CN/Makefile.in

@@ -0,0 +1,220 @@

+# 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:
A nls/zh_CN/Screen.m

@@ -0,0 +1,52 @@

+$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 +
A nls/zh_CN/Slit.m

@@ -0,0 +1,8 @@

+$set 7 #Slit + +$ #SlitTitle +# Slit +$ #SlitDirection +# Slit ·½Ïò +$ #SlitPlacement +# Slit ·ÅÖÃ
A nls/zh_CN/Toolbar.m

@@ -0,0 +1,22 @@

+$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 +# ¹¤¾ßÌõ·ÅÖÃ
A nls/zh_CN/Window.m

@@ -0,0 +1,17 @@

+$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
A nls/zh_CN/Windowmenu.m

@@ -0,0 +1,20 @@

+$set 10 #Windowmenu + +$ #SendTo +# ·¢Ë͵½... +$ #Shade +# ¾íÁ± +$ #Iconify +# ͼ±ê»¯ +$ #Maximize +# ×î´ó»¯ +$ #Raise +# ·ÅÇ° +$ #Lower +# ·Åºó +$ #Stick +# ¶¤×¡ +$ #KillClient +# ɱËÀ +$ #Close +# ¹Ø±Õ
A nls/zh_CN/Workspace.m

@@ -0,0 +1,4 @@

+$set 11 #Workspace + +$ #DefaultNameFormat +# ×ÀÃæ %d
A nls/zh_CN/Workspacemenu.m

@@ -0,0 +1,8 @@

+$set 12 #Workspacemenu + +$ #WorkspacesTitle +# ×ÀÃæ +$ #NewWorkspace +# н¨×ÀÃæ +$ #RemoveLast +# ɾ³ý×ÀÃæ
A nls/zh_CN/bsetroot.m

@@ -0,0 +1,16 @@

+$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 +
A nls/zh_CN/common.m

@@ -0,0 +1,38 @@

+$set 15 #Common + +$ #Yes +# ÊÇ +$ #No +# ·ñ + +$ #DirectionTitle +# ·½Ïò +$ #DirectionHoriz +# ˮƽ +$ #DirectionVert +# ´¹Ö± + +$ #AlwaysOnTop +# ×ÜÔÚ×îÉÏÃæ + +$ #PlacementTitle +# ·ÅÖà +$ #PlacementTopLeft +# ÉÏ×ó +$ #PlacementCenterLeft +# ÖÐ×ó +$ #PlacementBottomLeft +# ÏÂ×ó +$ #PlacementTopCenter +# ÉÏÖÐ +$ #PlacementBottomCenter +# ÏÂÖÐ +$ #PlacementTopRight +# ÉÏÓÒ +$ #PlacementCenterRight +# ÖÐÓÒ +$ #PlacementBottomRight +# ÏÂÓÒ + +$ #AutoHide +# ×Ô¶¯Òþ²Ø
A nls/zh_CN/main.m

@@ -0,0 +1,24 @@

+$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
A nls/zh_CN/openbox.m

@@ -0,0 +1,6 @@

+$set 13 #openbox + +$ #NoManagableScreens +# Openbox::Openbox: ûÓÐÕÒµ½¿É¿ØÖƵÄÆÁÄ»£¬Í˳ö...\n +$ #MapRequest +# Openbox::process_event: MapRequest for 0x%lx\n
A src/BaseDisplay.cc

@@ -0,0 +1,617 @@

+// 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); + } +}
A src/BaseDisplay.h

@@ -0,0 +1,357 @@

+// 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
A src/Basemenu.cc

@@ -0,0 +1,1036 @@

+// 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(); +}
A src/Basemenu.h

@@ -0,0 +1,170 @@

+// 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
A src/Clientmenu.cc

@@ -0,0 +1,64 @@

+// 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(); +}
A src/Clientmenu.h

@@ -0,0 +1,44 @@

+// 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 +
A src/Configmenu.cc

@@ -0,0 +1,323 @@

+// 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; + } +}
A src/Configmenu.h

@@ -0,0 +1,78 @@

+// 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
A src/Iconmenu.cc

@@ -0,0 +1,64 @@

+// 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(); +}
A src/Iconmenu.h

@@ -0,0 +1,44 @@

+// 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
A src/Image.cc

@@ -0,0 +1,2444 @@

+// 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; + } + } +}
A src/Image.h

@@ -0,0 +1,241 @@

+// 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 +
A src/LinkedList.cc

@@ -0,0 +1,356 @@

+// 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; +}
A src/LinkedList.h

@@ -0,0 +1,130 @@

+// 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
A src/Makefile.am

@@ -0,0 +1,108 @@

+# 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
A src/Makefile.in

@@ -0,0 +1,462 @@

+# 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:
A src/Netizen.cc

@@ -0,0 +1,116 @@

+// 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); +}
A src/Netizen.h

@@ -0,0 +1,60 @@

+// 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
A src/Rootmenu.cc

@@ -0,0 +1,113 @@

+// 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(); +}
A src/Rootmenu.h

@@ -0,0 +1,51 @@

+// 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 +
A src/Screen.cc

@@ -0,0 +1,2281 @@

+// 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; + } +}
A src/Screen.h

@@ -0,0 +1,349 @@

+// 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
A src/Slit.cc

@@ -0,0 +1,773 @@

+// 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
A src/Slit.h

@@ -0,0 +1,159 @@

+// 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
A src/Timer.cc

@@ -0,0 +1,76 @@

+// 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(); +}
A src/Timer.h

@@ -0,0 +1,78 @@

+// 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 +
A src/Toolbar.cc

@@ -0,0 +1,1260 @@

+// 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 +}
A src/Toolbar.h

@@ -0,0 +1,156 @@

+// 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
A src/Window.cc

@@ -0,0 +1,3244 @@

+// 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; + +}
A src/Window.h

@@ -0,0 +1,330 @@

+// 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
A src/Windowmenu.cc

@@ -0,0 +1,204 @@

+// 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(); +}
A src/Windowmenu.h

@@ -0,0 +1,78 @@

+// 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
A src/Workspace.cc

@@ -0,0 +1,502 @@

+// 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()); +}
A src/Workspace.h

@@ -0,0 +1,90 @@

+// 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 +
A src/Workspacemenu.cc

@@ -0,0 +1,69 @@

+// 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(); +}
A src/Workspacemenu.h

@@ -0,0 +1,45 @@

+// 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 +
A src/bsd-snprintf.c

@@ -0,0 +1,788 @@

+/************************************************************** + * 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 */
A src/bsd-snprintf.h

@@ -0,0 +1,17 @@

+#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 */
A src/i18n.cc

@@ -0,0 +1,134 @@

+// 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; +}
A src/i18n.h

@@ -0,0 +1,66 @@

+// 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
A src/main.cc

@@ -0,0 +1,186 @@

+// 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); +}
A src/openbox.cc

@@ -0,0 +1,1797 @@

+// 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(); +}
A src/openbox.h

@@ -0,0 +1,212 @@

+// 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
A stamp-h.in

@@ -0,0 +1,1 @@

+timestamp
A util/Makefile.am

@@ -0,0 +1,18 @@

+# 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
A util/Makefile.in

@@ -0,0 +1,385 @@

+# 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:
A util/bsetbg

@@ -0,0 +1,694 @@

+#!/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
A util/bsetroot.cc

@@ -0,0 +1,296 @@

+#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; +}
A util/bsetroot.h

@@ -0,0 +1,33 @@

+#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
A version.h.in

@@ -0,0 +1,1 @@

+#define __openbox_version "@VERSION@"