From ed3a73f96061193a04030887de67a16f9924152f Mon Sep 17 00:00:00 2001 From: jaeger401 Date: Wed, 8 Jul 2015 10:33:48 -0400 Subject: [PATCH] Initial commit of Mark Crimmins' code as of Oct. 1, 1997. --- CHANGES | 470 ++++++++++ Dialer | 1135 ++++++++++++++++++++++++ Dialer.README | 26 + FAQ | 91 ++ INTERNATIONALIZATION | 39 + Makefile | 95 ++ Makefile.in | 92 ++ README | 65 ++ TIPS | 9 + TODO | 65 ++ config.cache | 17 + config.log | 3 + config.status | 142 +++ configure | 970 ++++++++++++++++++++ configure.in | 97 ++ doc/CHANGES | 470 ++++++++++ doc/Example | 55 ++ doc/FAQ | 91 ++ doc/NOTICE | 19 + doc/biff.html | 93 ++ doc/chooser.html | 41 + doc/clock.html | 38 + doc/dialer.html | 55 ++ doc/fvwm.html | 116 +++ doc/ical.html | 30 + doc/icons.html | 31 + doc/index-orig.html | 18 + doc/index.html | 18 + doc/install.html | 93 ++ doc/jots.html | 31 + doc/load.html | 35 + doc/mailinglists.html | 12 + doc/menu.html | 48 + doc/net.html | 52 ++ doc/pager.html | 39 + doc/popimap.html | 88 ++ doc/preferences.html | 233 +++++ doc/running.html | 89 ++ doc/screenshots.html | 16 + doc/shots.html | 20 + doc/tkgoodstuff.html | 151 ++++ doc/tkman.html | 32 + doc/toc.html | 69 ++ doc/watch.html | 44 + doc/webster.html | 32 + doc/windowlist.html | 43 + doc/writingclients.html | 405 +++++++++ doc/www.html | 57 ++ fvwm-patch-2.0.45 | 14 + icons/biffgreen-sm.xpm | 32 + icons/biffgreen.xpm | 51 ++ icons/biffnew-sm.xpm | 32 + icons/biffnew.xpm | 51 ++ icons/biffno-sm.xpm | 30 + icons/biffno.xpm | 49 ++ icons/biffred-sm.xpm | 32 + icons/biffred.xpm | 51 ++ icons/biffwhite-sm.xpm | 32 + icons/biffwhite.xpm | 51 ++ icons/biffyellow-sm.xpm | 32 + icons/biffyellow.xpm | 51 ++ icons/blue_marble.xpm | 393 +++++++++ icons/browser.xpm | 29 + icons/bullet.xpm | 13 + icons/button.xpm | 17 + icons/calc-sm.xpm | 32 + icons/calc.xpm | 54 ++ icons/client.xpm | 17 + icons/copyright.info | 5 + icons/dimple.xpm | 16 + icons/editor.xpm | 29 + icons/error | 8 + icons/exec.xpm | 17 + icons/file | 27 + icons/fileempty.xpm | 21 + icons/filefull.xpm | 21 + icons/filegone.xpm | 21 + icons/filer.xpm | 25 + icons/graphic.xpm | 27 + icons/ical-sm.xpm | 29 + icons/ical.xpm | 45 + icons/iconic.xpm | 26 + icons/jots-sm.xpm | 39 + icons/jots.xpm | 44 + icons/labelbox.xpm | 17 + icons/letters | 27 + icons/lightblue_marble.xpm | 389 ++++++++ icons/mailer.xpm | 25 + icons/manreader.xpm | 27 + icons/menu.xpm | 17 + icons/netdn-sm.xpm | 26 + icons/netdn.xpm | 44 + icons/netscape-sm.xpm | 36 + icons/netscape.xpm | 45 + icons/netup-sm.xpm | 28 + icons/netup.xpm | 46 + icons/netwt-sm.xpm | 28 + icons/netwt.xpm | 45 + icons/news-sm.xpm | 31 + icons/news.xpm | 39 + icons/newsreader.xpm | 27 + icons/panel.xpm | 16 + icons/question | 9 + icons/run.xpm | 17 + icons/separator.xpm | 17 + icons/shell.xpm | 26 + icons/stack.xpm | 16 + icons/swallow.xpm | 16 + icons/tcl.xpm | 17 + icons/telnet-sm.xpm | 30 + icons/telnet.xpm | 47 + icons/tk.xpm | 25 + icons/tkgmenu-sm.xpm | Bin 0 -> 6687 bytes icons/tkgmenu.xpm | 37 + icons/tkman-sm.xpm | 31 + icons/tkman.xpm | 51 ++ icons/warning | 7 + icons/watchgreen-sm.xpm | 21 + icons/watchgreen.xpm | 30 + icons/watchred-sm.xpm | 21 + icons/watchred.xpm | 30 + icons/watchunchanged-sm.xpm | 21 + icons/watchunchanged.xpm | 30 + icons/watchwhite-sm.xpm | 21 + icons/watchwhite.xpm | 30 + icons/watchyellow-sm.xpm | 21 + icons/watchyellow.xpm | 30 + icons/weather-sm.xpm | 37 + icons/weather.xpm | 54 ++ icons/webster-sm.xpm | 25 + icons/webster.xpm | 37 + icons/win.xpm | 26 + icons/www-sm.xpm | 37 + icons/www.xpm | 46 + icons/xlogo-sm.xpm | 33 + icons/xlogo.xpm | 42 + install-sh | 238 +++++ install.out | 212 +++++ libs/COPYRIGHT.TkSteal | 110 +++ libs/Makefile | 59 ++ libs/Makefile.in | 58 ++ libs/README | 15 + libs/README-tkFvwm | 102 +++ libs/README-xpm | 22 + libs/clientWin.c | 90 ++ libs/compat/license.terms | 32 + libs/compat/stdlib.h | 45 + libs/compat/unistd.h | 83 ++ libs/default.h | 134 +++ libs/fvwmlib.h | 40 + libs/module.h | 56 ++ libs/notes | 7 + libs/tixImgXpm.c | 1487 +++++++++++++++++++++++++++++++ libs/tkAppInit.c | 132 +++ libs/tkFvwm.c | 483 ++++++++++ libs/tkInt.h | 967 ++++++++++++++++++++ libs/tkPort.h | 1 + libs/tkUnixPort.h | 184 ++++ libs/tkXAccess.c | 1661 +++++++++++++++++++++++++++++++++++ libs/tkXAccess.h | 17 + libs/tkg.c | 63 ++ libs/tkg.h | 9 + libs/tkgButton.c | 1452 ++++++++++++++++++++++++++++++ libs/tkgButton.h | 265 ++++++ libs/tkgFrame.c | 964 ++++++++++++++++++++ libs/tkgUnixButton.c | 568 ++++++++++++ misc/MH-E | 22 + misc/frame-mh-e.el | 100 +++ misc/mh-e.README | 21 + mktclindex | 7 + sample-rc/home | 17 + sample-rc/minimal | 14 + sample-rc/stacks | 79 ++ sample-rc/win95 | 22 + tcl/Alarm.tcl | 120 +++ tcl/Analog.tcl | 118 +++ tcl/Biff.tcl | 593 +++++++++++++ tcl/BiffIMAP.tcl | 295 +++++++ tcl/BiffMH.tcl | 244 +++++ tcl/Biffatime.tcl | 46 + tcl/Bifffilesize.tcl | 37 + tcl/Biffinternal.tcl | 33 + tcl/Biffscan.tcl | 70 ++ tcl/Calc.tcl | 350 ++++++++ tcl/Chooser.tcl | 130 +++ tcl/Clock.tcl | 458 ++++++++++ tcl/Dialer.tcl | 1135 ++++++++++++++++++++++++ tcl/Example.tcl | 55 ++ tcl/Fvwm.tcl | 386 ++++++++ tcl/FvwmDebug.tcl | 117 +++ tcl/Help.tcl | 1552 ++++++++++++++++++++++++++++++++ tcl/Ical-fetch.tcl | 23 + tcl/Ical.tcl | 301 +++++++ tcl/Jots.tcl | 1427 ++++++++++++++++++++++++++++++ tcl/Load.tcl | 162 ++++ tcl/Markets.tcl | 80 ++ tcl/Menu.tcl | 209 +++++ tcl/Net.tcl | 428 +++++++++ tcl/Outside.tcl | 54 ++ tcl/Pager.tcl | 254 ++++++ tcl/PopImap.tcl | 80 ++ tcl/TkMan.tcl | 90 ++ tcl/WWW.tcl | 203 +++++ tcl/Watch.tcl | 591 +++++++++++++ tcl/WatchDog.tcl | 343 ++++++++ tcl/Webster.tcl | 82 ++ tcl/WindowList.tcl | 628 +++++++++++++ tcl/args.tcl | 78 ++ tcl/async.tcl | 20 + tcl/balloon.tcl | 70 ++ tcl/configcommands.tcl | 228 +++++ tcl/defaults.tcl | 431 +++++++++ tcl/dialogs.tcl | 214 +++++ tcl/elements.tcl | 305 +++++++ tcl/english.tcl | 70 ++ tcl/expect.tcl | 68 ++ tcl/francais.tcl | 67 ++ tcl/hlist.tcl | 545 ++++++++++++ tcl/inits.tcl | 239 +++++ tcl/international.tcl | 27 + tcl/logging.tcl | 38 + tcl/mainwin.tcl | 66 ++ tcl/misc.tcl | 68 ++ tcl/panelgeo.tcl | 288 ++++++ tcl/popup.tcl | 97 ++ tcl/prefs-biff.tcl | 93 ++ tcl/prefs-browsers.tcl | 142 +++ tcl/prefs-config.tcl | 187 ++++ tcl/prefs-menu.tcl | 204 +++++ tcl/prefs-watch.tcl | 93 ++ tcl/prefs-windowlist.tcl | 99 +++ tcl/prefs.tcl | 369 ++++++++ tcl/screenedge.tcl | 115 +++ tcl/sexpr.tcl | 32 + tcl/startup.tcl | 10 + tcl/swallow.tcl | 89 ++ tcl/tabnotebook.tcl | 157 ++++ tcl/tclIndex | 659 ++++++++++++++ tcl/tkSteal.tcl | 450 ++++++++++ tcl/tkgbutton.tcl | 169 ++++ tcl/tkgoodstuff.tcl | 45 + tcl/utils.tcl | 293 ++++++ tcl/wlpatch | 29 + tkgoodstuff | 45 + 244 files changed, 36025 insertions(+) create mode 100755 CHANGES create mode 100755 Dialer create mode 100755 Dialer.README create mode 100755 FAQ create mode 100755 INTERNATIONALIZATION create mode 100755 Makefile create mode 100755 Makefile.in create mode 100755 README create mode 100755 TIPS create mode 100755 TODO create mode 100755 config.cache create mode 100755 config.log create mode 100755 config.status create mode 100755 configure create mode 100755 configure.in create mode 100755 doc/CHANGES create mode 100755 doc/Example create mode 100755 doc/FAQ create mode 100755 doc/NOTICE create mode 100755 doc/biff.html create mode 100755 doc/chooser.html create mode 100755 doc/clock.html create mode 100755 doc/dialer.html create mode 100755 doc/fvwm.html create mode 100755 doc/ical.html create mode 100755 doc/icons.html create mode 100755 doc/index-orig.html create mode 100755 doc/index.html create mode 100755 doc/install.html create mode 100755 doc/jots.html create mode 100755 doc/load.html create mode 100755 doc/mailinglists.html create mode 100755 doc/menu.html create mode 100755 doc/net.html create mode 100755 doc/pager.html create mode 100755 doc/popimap.html create mode 100755 doc/preferences.html create mode 100755 doc/running.html create mode 100755 doc/screenshots.html create mode 100755 doc/shots.html create mode 100755 doc/tkgoodstuff.html create mode 100755 doc/tkman.html create mode 100755 doc/toc.html create mode 100755 doc/watch.html create mode 100755 doc/webster.html create mode 100755 doc/windowlist.html create mode 100755 doc/writingclients.html create mode 100755 doc/www.html create mode 100755 fvwm-patch-2.0.45 create mode 100755 icons/biffgreen-sm.xpm create mode 100755 icons/biffgreen.xpm create mode 100755 icons/biffnew-sm.xpm create mode 100755 icons/biffnew.xpm create mode 100755 icons/biffno-sm.xpm create mode 100755 icons/biffno.xpm create mode 100755 icons/biffred-sm.xpm create mode 100755 icons/biffred.xpm create mode 100755 icons/biffwhite-sm.xpm create mode 100755 icons/biffwhite.xpm create mode 100755 icons/biffyellow-sm.xpm create mode 100755 icons/biffyellow.xpm create mode 100755 icons/blue_marble.xpm create mode 100755 icons/browser.xpm create mode 100755 icons/bullet.xpm create mode 100755 icons/button.xpm create mode 100755 icons/calc-sm.xpm create mode 100755 icons/calc.xpm create mode 100755 icons/client.xpm create mode 100755 icons/copyright.info create mode 100755 icons/dimple.xpm create mode 100755 icons/editor.xpm create mode 100755 icons/error create mode 100755 icons/exec.xpm create mode 100755 icons/file create mode 100755 icons/fileempty.xpm create mode 100755 icons/filefull.xpm create mode 100755 icons/filegone.xpm create mode 100755 icons/filer.xpm create mode 100755 icons/graphic.xpm create mode 100755 icons/ical-sm.xpm create mode 100755 icons/ical.xpm create mode 100755 icons/iconic.xpm create mode 100755 icons/jots-sm.xpm create mode 100755 icons/jots.xpm create mode 100755 icons/labelbox.xpm create mode 100755 icons/letters create mode 100755 icons/lightblue_marble.xpm create mode 100755 icons/mailer.xpm create mode 100755 icons/manreader.xpm create mode 100755 icons/menu.xpm create mode 100755 icons/netdn-sm.xpm create mode 100755 icons/netdn.xpm create mode 100755 icons/netscape-sm.xpm create mode 100755 icons/netscape.xpm create mode 100755 icons/netup-sm.xpm create mode 100755 icons/netup.xpm create mode 100755 icons/netwt-sm.xpm create mode 100755 icons/netwt.xpm create mode 100755 icons/news-sm.xpm create mode 100755 icons/news.xpm create mode 100755 icons/newsreader.xpm create mode 100755 icons/panel.xpm create mode 100755 icons/question create mode 100755 icons/run.xpm create mode 100755 icons/separator.xpm create mode 100755 icons/shell.xpm create mode 100755 icons/stack.xpm create mode 100755 icons/swallow.xpm create mode 100755 icons/tcl.xpm create mode 100755 icons/telnet-sm.xpm create mode 100755 icons/telnet.xpm create mode 100755 icons/tk.xpm create mode 100755 icons/tkgmenu-sm.xpm create mode 100755 icons/tkgmenu.xpm create mode 100755 icons/tkman-sm.xpm create mode 100755 icons/tkman.xpm create mode 100755 icons/warning create mode 100755 icons/watchgreen-sm.xpm create mode 100755 icons/watchgreen.xpm create mode 100755 icons/watchred-sm.xpm create mode 100755 icons/watchred.xpm create mode 100755 icons/watchunchanged-sm.xpm create mode 100755 icons/watchunchanged.xpm create mode 100755 icons/watchwhite-sm.xpm create mode 100755 icons/watchwhite.xpm create mode 100755 icons/watchyellow-sm.xpm create mode 100755 icons/watchyellow.xpm create mode 100755 icons/weather-sm.xpm create mode 100755 icons/weather.xpm create mode 100755 icons/webster-sm.xpm create mode 100755 icons/webster.xpm create mode 100755 icons/win.xpm create mode 100755 icons/www-sm.xpm create mode 100755 icons/www.xpm create mode 100755 icons/xlogo-sm.xpm create mode 100755 icons/xlogo.xpm create mode 100755 install-sh create mode 100755 install.out create mode 100755 libs/COPYRIGHT.TkSteal create mode 100755 libs/Makefile create mode 100755 libs/Makefile.in create mode 100755 libs/README create mode 100755 libs/README-tkFvwm create mode 100755 libs/README-xpm create mode 100755 libs/clientWin.c create mode 100755 libs/compat/license.terms create mode 100755 libs/compat/stdlib.h create mode 100755 libs/compat/unistd.h create mode 100755 libs/default.h create mode 100755 libs/fvwmlib.h create mode 100755 libs/module.h create mode 100755 libs/notes create mode 100755 libs/tixImgXpm.c create mode 100755 libs/tkAppInit.c create mode 100755 libs/tkFvwm.c create mode 100755 libs/tkInt.h create mode 100755 libs/tkPort.h create mode 100755 libs/tkUnixPort.h create mode 100755 libs/tkXAccess.c create mode 100755 libs/tkXAccess.h create mode 100755 libs/tkg.c create mode 100755 libs/tkg.h create mode 100755 libs/tkgButton.c create mode 100755 libs/tkgButton.h create mode 100755 libs/tkgFrame.c create mode 100755 libs/tkgUnixButton.c create mode 100755 misc/MH-E create mode 100755 misc/frame-mh-e.el create mode 100755 misc/mh-e.README create mode 100755 mktclindex create mode 100755 sample-rc/home create mode 100755 sample-rc/minimal create mode 100755 sample-rc/stacks create mode 100755 sample-rc/win95 create mode 100755 tcl/Alarm.tcl create mode 100755 tcl/Analog.tcl create mode 100755 tcl/Biff.tcl create mode 100755 tcl/BiffIMAP.tcl create mode 100755 tcl/BiffMH.tcl create mode 100755 tcl/Biffatime.tcl create mode 100755 tcl/Bifffilesize.tcl create mode 100755 tcl/Biffinternal.tcl create mode 100755 tcl/Biffscan.tcl create mode 100755 tcl/Calc.tcl create mode 100755 tcl/Chooser.tcl create mode 100755 tcl/Clock.tcl create mode 100755 tcl/Dialer.tcl create mode 100755 tcl/Example.tcl create mode 100755 tcl/Fvwm.tcl create mode 100755 tcl/FvwmDebug.tcl create mode 100755 tcl/Help.tcl create mode 100755 tcl/Ical-fetch.tcl create mode 100755 tcl/Ical.tcl create mode 100755 tcl/Jots.tcl create mode 100755 tcl/Load.tcl create mode 100755 tcl/Markets.tcl create mode 100755 tcl/Menu.tcl create mode 100755 tcl/Net.tcl create mode 100755 tcl/Outside.tcl create mode 100755 tcl/Pager.tcl create mode 100755 tcl/PopImap.tcl create mode 100755 tcl/TkMan.tcl create mode 100755 tcl/WWW.tcl create mode 100755 tcl/Watch.tcl create mode 100755 tcl/WatchDog.tcl create mode 100755 tcl/Webster.tcl create mode 100755 tcl/WindowList.tcl create mode 100755 tcl/args.tcl create mode 100755 tcl/async.tcl create mode 100755 tcl/balloon.tcl create mode 100755 tcl/configcommands.tcl create mode 100755 tcl/defaults.tcl create mode 100755 tcl/dialogs.tcl create mode 100755 tcl/elements.tcl create mode 100755 tcl/english.tcl create mode 100755 tcl/expect.tcl create mode 100755 tcl/francais.tcl create mode 100755 tcl/hlist.tcl create mode 100755 tcl/inits.tcl create mode 100755 tcl/international.tcl create mode 100755 tcl/logging.tcl create mode 100755 tcl/mainwin.tcl create mode 100755 tcl/misc.tcl create mode 100755 tcl/panelgeo.tcl create mode 100755 tcl/popup.tcl create mode 100755 tcl/prefs-biff.tcl create mode 100755 tcl/prefs-browsers.tcl create mode 100755 tcl/prefs-config.tcl create mode 100755 tcl/prefs-menu.tcl create mode 100755 tcl/prefs-watch.tcl create mode 100755 tcl/prefs-windowlist.tcl create mode 100755 tcl/prefs.tcl create mode 100755 tcl/screenedge.tcl create mode 100755 tcl/sexpr.tcl create mode 100755 tcl/startup.tcl create mode 100755 tcl/swallow.tcl create mode 100755 tcl/tabnotebook.tcl create mode 100755 tcl/tclIndex create mode 100755 tcl/tkSteal.tcl create mode 100755 tcl/tkgbutton.tcl create mode 100755 tcl/tkgoodstuff.tcl create mode 100755 tcl/utils.tcl create mode 100755 tcl/wlpatch create mode 100755 tkgoodstuff diff --git a/CHANGES b/CHANGES new file mode 100755 index 0000000..f6351ce --- /dev/null +++ b/CHANGES @@ -0,0 +1,470 @@ +8.0: Here I (MC) leave off development of tkgoodstuff. Anyone who + would like to adopt it is most welcome. + +8.0b2: + +8.0b1: + + - Hacked at some of the C stuff for compatibility with + tcl/tk8.0b1. (5/28/97) + + - Ken Hornstein's netscape-remote doesn't work with + Netscape 4.0 until b5, and it won't compile with tcl8.0b1, + so I'm just doing "netscape -remote" for now (this doesn't work + with Netscape 4.0 before b5 either, but it works with + tcl8.0b1). (5/30/97) + + - Simplified some of the configure/install stuff. (6/11/97) + +8.0a2: + + - Fvwm2's geometry management had been a little broken, which + explained the odd stuff tkgoodstuff panels had to do to span a + screenedge. I've sent a patch to the fvwm2 maintainer (Chuck + Hines) for fvwm2.0.45; the patch is included in this distribution. + In keeping with No-Backward-Compatibility, now you need to upgrade + to fvwm2.0.45 (and use the patch) to get screenedge mode to work. + I'm sure you can figure out how to patch fvwm95 similarly. (Sorry + about that, but it relieves one of my biggest headaches.) (1/27/97) + + - Font preferences use a font selector. Relatedly, font handling + is a bit saner. (2/3/97; more font stuff fiddling 2/6/97) + + - The default relief for buttons (globally or individually) is flat + (for a sleek look). A preferences item still allows raised + buttons. (2/6/97) + + - Bells are more distinctive: the alarm (and Ical) bells are a + little louder and longer than your regular ^G beep, and in Biff + and Watch, the pitch of the bell corresponds to the alert level. + If you have several Watch'ed files and Biff'ed mailboxes, you can + get a nice (?) little tune on tkgoodstuff startup. (2/10/97) + + - Bug fix: in revising the tkgbutton.tcl code we lost a level + of substitution on the unix command. Thanks C. Roth (2/12/97) + + - Help "balloons" code simplified. Balloons no longer time out. + (2/13/97) + + - Hierarchical listbox widget improved. For example, you can drop + items "within" items that permit children. (2/14/97) + + - Bug fix: geometry handled improperly in restart caused + panelbuttons not to work. (2/15/97) + + - Bug fix: tkgbuttons could freeze on doubleclick. (2/15/97) + + - Bug fix: switches like "-font" in a button's unix command would + be modified. (2/16/97) + + - New client "Watch". Like Erik Kahler's "WatchDog" except it + allows multiple files to be watched, as in Biff. Includes a lister + that functions like "tail -f", and which allows you to view in one + window all (or a selected group of) the files being + watched. (2/12/97) + + Added indications in multiple-file viewer of which files have + changed and which one changed most recently. (2/15/97) + + - WindowList: + + We use a "tkgframe" instead of a text widget. Somewhat + zippier, and lets us put the panel tile image (if any) in the + background (or another tile image of the user's preference). + Looks a little bit different. (1/30/97) + + (bugfix) A panel containing only WindowList wouldn't size + properly, and windows wouldn't show up. (4/3/97) + + - Biff: + + For MH folders, if folder or .mh_sequence doesn't exist, make + the message counter (in menu or on button) zero. (bugfix; + 2/6/97) + + Brushed up IMAP mailbox checker. We keep the IMAP socket up + between checks; otherwise it's very hard to reliably check for + new mail. (2/17/97) + + Added preference setting for IMAP port. (4/15/97) + + If you choose "exmh" as the "unix command to execute instead + of using tkgoodstuff's lister" for an MH folder, then if exmh is + already running we direct exmh to the folder. + + (bugfix) Standard atime method reset new-mail indicator at + second check. + + - TkMan: + + (bugfix) some button preferences were ignored (2/22/97). + + Raise tkman window when using button <3> to view a manpage (if + fvwm is used). + + - Webster: + + Webster servers have disappeared (copyright issues, I guess). + So now the Webster button directs your browser to look up + the definition of a word at the Merriam-Webster site (a better + dictionary anyway, but sometimes slow response). You can change + the URL if you know a better one. + + A. Burt contributes bugfixes and an entry dialog (which Webster + should have had from the start). + + - Pager: (bug fix) really ignore the tkgoodstuff main panel (in + tk8.0 this has the id [wm wrapper .main-panel]. (4/9/97) + + +8.0a1: + + - Ok, forget 4.2, we may as well work with 8.0. Get tcl/tk8.0a2 or + later (a1 has relevant bugs). As always, we don't do backward + compatibility (too much work). There probably are quite a few + bugs. I'd appreciate your testing this, but beware. + + - Buttons and panels now can have tiled background images. + + - Rewrote the tkgbutton extension code around the tkButton.c and + tkUnixButton.c in tk8.0. This code allows buttons, labels, etc., + to have images as well as text. Added "-textweight" and + "-imageweight" options (like the option to "grid + row/columnconfigure). Also wrote code for "tkgframe" widgets (like + frames/toplevels, but allow background tiles). + + - Color preference items use the new tk color selector. + + - Killed (or at least maimed) some bugs: + + an old one that caused us to lose some preferences changes. + + one that made "Fill" items cause errors. + + one that abandoned your specified icon-side when the panel is + dragged to another screen-edge. + + one that made gcc choke when compiling on Solaris 2.4. + + Text now gravitates to the bottom of button when below + image. + + A preferences label implied that leaving the button text field + blank would give you text anyway (which would be silly). + + - Main Menu button can have icon on it and/or text. By default, it + now has a pale blue "TKG" icon in the background (I'd welcome a + nifty logo-ish thing if anyone out there is less art-challenged + than me). + + - Now when you insert an item in the hierarchical list widget, the + new item is always visible and highlighted. + + - Biff: + + Menu indicating which mailboxes have new mail now can be a + tear-off menu. + + That same menu can now replace the Biff button on the + tkgoodstuff panel. (For some reason this breaks the ability to + drag windows from WindowList into Pager. Tk bug?) + + When you click with button 3 in single-mailbox mode, or select + a mailbox from the menu in multiple-mailbox mode, we allow + an arbitrary unix command instead of calling up tkgoodstuff's + new-mail lister (so you can start a mailer directed at a + particular mailbox instead of using our lister). + +4.2b1: + + - New versions are for use with tcl7.6/tk4.2. + + - Got rid of BLT fuctionality. This saves many configuration + headaches. However, this means that drag&drop no longer is + supported (you can't drag files onto tkgoodstuff buttons). Also, + certain programs can fool tkgoodstuff buttons into rising before + the programs actually exit (namely, programs that freopen() + stdout). You can get around this by calling instead a shell + script that simply runs the offending program: + + #!/bin/sh + knews + + +4.1: + + - Auto-configuration now is more standard GNU: we assume you want + to install in /usr/local/... unless you specify otherwise (with + "./configure --prefix=/some/directory"), rather than assuming that + you want to install wherever tcl and tk are installed. Also, we + look for tcl/tk headers in more places. + + - Default is now to make tkgwish (to cut down on compilation + gripes), but if you configure with "--enable-libs", then you get + loadable libraries instead: libtkg (with image+text button code), + libpixmap, libtkfvwm, libtkSteal, libblt, libtkNetscape. + + - Used "unprotoize" on tkNetscape.c so that SunOS's non-ANSI + compiler doesn't choke on the function prototypes. + + - The preferences manager now uses tabbed notebooks to give you + that warm'n'cozy GUI feeling, at no cost in added functionality! + (The tabbed notebook widget, like the hierarchical list widget, is + core tcl/tk only.) + + - New button option: "Fvwm button behavior". If set (and using the + fvwm2 or fvwm95 window manager!), then the relief of the button + (raised/sunken) is sensitive only to the existence of a window of + the given name. This way, your unix command button will be sunken + even if you start your application without pressing the button + (e.g., with a window manager menu or on a command line), and even + if you restart tkgoodstuff. + + - Incoporated the "netscape-remote" tk extension by Ken Hornstein, + which makes for quicker visits to selected URL's with the WWW + client. + + - Now you can use fvwm modules as swallow and menu items (just make + the unix command, e.g., "FvwmPager 0 1"). + + - NOTE: Various code uniformization that (a) is certain to + introduce a bug or two, and (b) unfortunately meant renaming some + preferences variables, which means that some of your preferences + will have to be redone. Sorry about that. + + - Biff: + + New mailbox method "IMAP": check and read new mail at a remote + IMAP server. Consider this feature ALPHA, since I'm the only one + who has tested it (reports welcome). It should work on any + IMAP-2bis or IMAP4 server. + + Biff mailboxes are now individually configurable with an hlist + widget gizmo. They can have different checking intervals, etc. + + Mailboxes now are assigned "alert levels" of white, green, + yellow, or red, which determines what icon is shown for new mail. + + + Fvwm: When going to a window we give it focus or not depending on + whether the window has style flags set for ClickToFocus or + SloppyFocus. This way we give a window focus whenever we can do so + without warping the pointer. + + - Pager: + + Clicking on the current page cycles through the open + windows on the page. + + Clicking on another page always goes to the window last + selected on that page, if any. + + Find some way of reminding people (everybody forgets this) that + you can move windows between pages and desktops by dragging with + mouse button 2 from the WindowList to the Pager. + + - Dialer: Oops: we had been sending the dial command twice, which + could produce inexplicable "NO CARRIER" messages. + +4.1b8: 6/9/96 + + - Incoporated bgexec and drag&drop from BLT, which means that the + handling of executed programs is less kludgy, and that you can drag + files from tkdesk to tkgoodstuff buttons. + + - Incorporated TkSteal, and added the element type "Swallow", which + lets you put an external X application window in the tkgoodstuff + bar. + + - Main panel is now just another panel. This helped kill a bug + (which is tk's, I think) that was tweaked in the screen-edge + dragging and resulted in segmentation faults. + + - Added a balloon help feature (annoyance? it's defeasible). + + - Added a commented example client "Example.tcl", which may take + a lot of the mystery out of writing a simple client. + + - Added a preferences item for a list of tcl code directories to + prepend to auto_path (so that you can use your own tcl code without + writing a client). + + - Buttons now can have images as backgrounds (the text is written + over the image): set the "side" of the icon to "background". + + - WWW and Fvwm handling much improved thanks to A. Burt (who + contributed lots of bug fixes elsewhere too). + + - WindowList: + + keep usual icon when iconified (foreground color still grayed + out). Easier to tell what program is iconified this way. + + Added default icons for file managers (xfm and tkdesk) and man + page readers (xman and tkman). + + - PopImap: Keep track of fetch process and don't overlap (thanks + T. Fries). + +4.1b7: 5/22/96 + + There have been quite a few changes that are sure to introduce new + bugs. Please inform me of any troubles, providing as much + information as you can about your platform, your .tkgrc, etc. + + - The latest tkgoodstuff and the latest CHANGES file is now + available at the web site. + + - The GUI installation tool has been replaced by a GNU autoconf + thing ("./configure" then "make", then "make install"). Probably + there are still importabilities, so please let me know how it goes. + + - The xpm and fvwm extensions are now wrapped into "libtkg", which + is compiled and installed automatically at tkgoodstuff installation + (this way you don't have to install, and I don't have to maintain, + as many packages). If someone wants to pull them apart and + maintain them individually, be my guest. + + - If the Tcl installation doesn't support loadable libraries, we + make and use tkgwish. You can force this with + "configure --enable-tkgwish". (Worth a try if the C compilation + fails.) + + - The panel (including main panel) and menu configurations are now + done with a point-and-click, drag-and-drop hierarchical list widget + with little icons to make you feel safe-and-secure. It's harder to + screw up your configuration or menu now (or it should be when the + bugs get ironed out). + + - The image+text tkgbutton code is now done in C (and is part of + libtkg). This simplifies and speeds up various things. + + - Dragging a (screenedge mode) main panel (by its border) to other + edges of the screen now works without restarting tkgoodstuff. If + you have used the defaults, the arrangement of icons, labels, etc, + changes to suit the new orientation. + + - No more "Dismiss" buttons in panels produced by PanelButtons, + since they can be dismissed by clicking on the PanelButton. + + - Clock now shows time only by default, and toggles to show the + date temporarily when the mouse pointer enters the clock window. + + - The tkgoodstuff menu now can be used anywhere in the Menu client + menu as a cascade (before it would pop up oddly). Also, for now + there is only one Menu client menu (anyone sorely miss having 3?). + + - We take advantage of the /proc filesystem (e.g., on Linux): + + Load now reads /proc/loadavg if it exists (and otherwise exec's + uptime). + + Net now by default reads /proc/net/route if it exists (and + otherwise exec's ifconfig). + +4.1b6: 4/30/96 + + - There is a new on-line preferences manager (so you don't have to + edit the rc file by hand). Start up tkgoodstuff. You will get a + default configuration. Select Preferences from the tkgoodstuff + menu, and choose the "Configuration" section. Here, add, delete or + move Client, AddButton, AddLabelBox, stacking, and panel-creating + commands. Then, save the preferences and restart. Now you can set + using the preferences manager the things you used to have to adjust + with variables. + + - tkgoodstuff: + + + New options for icon scale and font scale (small or large). + Also, where an iconfile is called for, you can specify + "%biffnew" and tkgoodstuff will look, depending on whether the + scale is small or large, for biffnew.xpm or biffnew-sm.xpm. + + + New option for standard padding inside buttons, etc. Adjust + to 0 for very busy but compact look, to 2 or 3 for more roomy + look. + + + Now you can specify a pathlist of icon directories + in the preferences manager. You also can specify an icon that + is somewhere in that path with just its name (full filenames + work too). + + + In fullscreen mode, now you can "drag" the main border to + move the panel to another edge of the screen. It's a quick + hack (if we go from horizontal to vertical or vice versa we + save a changed fullscreen-side preference and restart + tkgoodstuff), but nothing wouldn't be better. We should really + be able to do this on the fly (which means regridding, and + resizing the auto-sized clients (Clock, Pager, Load). + + + Also there is a new option Auto-minimize which in fullscreen + mode reduces tkgoodstuff to a line along the edge of the screen + when the mouse leaves the tkgoodstuff panel. + + + Killed (I hope) bug without understanding why: sometimes in + auto-minimize mode clicking on a panelbutton would cause an + error whose entire stack trace is ("after" script). Since + removing an "update" command from TKGPanelButtonInvoke, I no + longer see this problem. Any speculations as to why would be + welcome! + + - New Client: TkMan, by G. Dezern, interfaces with the tkman man + page viewer the way our WWW client interfaces with web browsers. + + - WindowList: Shorten windownames before using scrollbar (patch + from E. Kahler). + + - Biff: + + Mail-checking methods now work as advertised (thanks R. Angiel + and G. Dezern). I hope. + + Optional on-button display of number of new messages (except + for users of the mh method). (Thanks R. Angiel.) + + Display of new messages was too fancy, or not fancy enough, to + work right; now we just display the entire header with the message. + + MH method much, much improved thanks to G. Dezern. + + Multiple mailbox support thanks to G. Dezern. + + - Net: + + Added elapsed-time-of-connection counter. + + Deleted net-type from label. + + - Jots and Calc: respond sensibly to window manager DELETEs. + + - Icons: ruthless color-pruning. Now the icons use colors from a + palette of 19 colors, and tkgoodstuff's default widget colors are + among them. + + - tkxpm and tkfvwm: much tidier configure scripts (not using + autoconf), relying on tclConfig.sh and tkConfig.sh. Also, fvwm + source is no longer needed to compile tkfvwm (libfvwm2.a is now + installed at fvwm installation). M. Beynon contributed bug fixes. + +4.1b5: 2/27/96 + + Now tkgoodstuff assumes tk4.1b1 or later (we're aiming at supporting + the ultimate 4.1 release, and backward compatibility is too much + work). + + - tkgoodstuff: + + + We use the grid geometry manager rather than pack for almost + everything. TKGPack is superseded by TKGGrid. Had hoped that + this would make fullscreen mode easier, but no. + + + Added subpanels which are formed with StartPanel and + EndPanel, can be linked to a button with PanelButton, or placed + on the screen at startup with PutPanel. See the tkgoodstuffrc + html docs for more. + + + Now xpm capability is mandatory. I hope Ioi Lam's xpm image + type will get in the core before our main 4.1 release. + + + "create-label-box" renamed to "TKGLabelBox". NOTE!!! + + + AddButton and AddLabelBox no longer take a name as first + argument. NOTE!!! + + + Clock_zerotrim moved to tkgoodstuff and called TKGZeroTrim. + + + Use "ps -p [pid]" if "ps [pid]" gives an error, and don't + assume there's a STAT column in the ps output (thanks + J. Robinson). + + + Implement TKGAddToHook and TKGDoHook (general hook + utilities). Several hooks are defined (for client use) in + tkgoodstuff, Fvwm.tcl, etc. + + + Change default fonts to non-italic, non-bold. + + - Biff: avoid tcl7.5b1's gets bugs by not doing "gets $f var". + + - New client "Pager" by Eric Kahler. Check out the current + version in this distribution. Needs tkgoodstuff to be run as an + fvwm module (from the fvwm window manager). + + - New client "Chooser" by Eric Kahler. Pops up a window at + startup to let you choose among different tkgoodstuff + configuration files. + + - New client in "alpha" stage: Calc (dec/hex/oct calculator). + Has paper-tape-like scrollable history. Some features not + implemented, but it's fairly usable. I'm not inclined to develop + this further right now, so I'd be very happy if someone were to + adopt it. + + - New client in "beta" stage: Webster (net dictionary client). + Pops up a definition of the word you highlight (the current X + selection). Can use unix "webster" command, but also has its own + internal webster client code (using the new Tcl socket stuff, + with a kludge required because Tcl strings can't yet contain + NULLs). + + - The tkfvwm source is now included in the tkgoodstuf \ No newline at end of file diff --git a/Dialer b/Dialer new file mode 100755 index 0000000..e4a714a --- /dev/null +++ b/Dialer @@ -0,0 +1,1135 @@ +#!/bin/sh +# \ +exec wish8.0 "$0" ${1+"$@"} + +# Dialer; for establishing connection and authorization for +# ppp or term link. + +# Version 8.0 +# (numbered so as to coincide with the required version of tk) + +# Assumes your modem takes AT... commands. +# Works for linux and several other platforms. Your mileage may +# suck. + +# M. Crimmins 1/27/97 + +if {([set tk_version] < 4.1)} { + bgerror "This program requires tk version 4.1 or higher." + exit +} + +set file "" +if {$argv != ""} { + set file [lindex $argv 0] + set argv [lreplace $argv 0 0] +} +set debug 0 +set send_slow {1 .1} +set quickwait 5 +set labelwidth 20 +set entrywidth 50 + +set stringvars { numbers repeatscript port speed init1 init2\ + loginscript outcommand } +set booleans {login exitsucc repeat} + +# Give the first-time user an example +set numbers "555-1000 555-2000" +set repeatscript { * {{ 555-1000 1} {555-2000 1} {555-1000 3}}} +set repeat 0 +set port /dev/modem +set speed 38400 +set init1 "ATZ" +set init2 "" +set login 1 +set loginscript { + {"" "host: " 10} + {ppp "login: " 20} + { myloginname@umich.edu "Password: " 5} + {mypassword "" "" } +} +set outcommand "/usr/lib/ppp/pppd $port $speed asyncmap 0 defaultroute crtscts modem noipdefault" +set exitsucc 0 + +option add *Listbox*font {Helvetica 14} startupFile +option add *Entry*font {Helvetica 14} startupFile +option add *Label*font {Helvetica 14} startupFile +option add *Text*font {Helvetica 14} startupFile + +proc DialWindow {} { + global normalbg + wm title . "Dialer" + wm withdraw . + wm iconname . "Dialer" + + bind . exit + frame .status + pack .status -side left -pady 20 -padx 10 + label .status.statuslabel -text "Dialing Status:" + pack .status.statuslabel -side top -pady 5 + text .status.text -height 12 -width 40 -takefocus 0 + set normalbg [.status.text cget -background] + global statuswindow + set statuswindow .status.text + pack .status.text -side top -fill x -fill y -padx 15 + + frame .buttons + button .buttons.dial -text Dial -command Dial + button .buttons.settings -text Settings -command EditSettings + button .buttons.next -text "Try Next\nNumber" -command {Next} -state disabled + button .buttons.abort -text Abort -command {Abort} -state disabled + button .buttons.dismiss -text Dismiss -command {exit} + pack .buttons.dial .buttons.settings .buttons.next .buttons.abort .buttons.dismiss \ + -side top -expand y -fill x -padx 15 -pady 5 + pack .buttons -side left -fill x -expand y + + .status.statuslabel configure -font [.buttons.dial cget -font] + + focus .buttons.dial + update + set x [expr ([winfo screenwidth .] - [winfo reqwidth .] )/2] + set y [expr ([winfo screenheight .] - [winfo reqheight .] )/2] + wm geometry . +$x+$y + wm deiconify . +} + +proc Next {} { + global numaborted + set numaborted 1 +} + +proc Abort {} { + global aborted + set aborted 1 +} + +proc DoAbort {} { + global normalbg + Hangup + Outstatus "Aborted" + ResetButtons + .status.text config -background $normalbg +} + +proc Hangup {} { + global id port + Outmodem "" + after 1250 + Outmodem + 0 + after 100 + Outmodem + 0 + after 100 + Outmodem + 0 + if [Dialexpect {} OK {} 3 ] { + Dialexpect ATH OK {} 3 + after 500 + } + exec stty sane < $port > $port + exec stty 38400 raw -echo clocal < $port > $port + return 1 +} + +proc CloseLine {} { + global id + if [info exists id] { + close -i $id + catch "unset id" + } +} + +proc CheckBoth {} { + global aborted numaborted + expr $aborted || $numaborted +} + +proc Dial {{repeating 0}} { + global statuswindow id nums loops + global tkgsentok aborted numaborted + global stringvars booleans + foreach v [eval list $stringvars $booleans] { + global $v + } + if !$repeating { + .buttons.dial config -state disabled + .buttons.dismiss config -state disabled + .buttons.abort config -state normal + .buttons.next config -state normal + .status.text config -background yellow + focus .buttons.next + set aborted 0 + if !$repeat { + set nums $numbers + set loops 1 + } else { + set nums "" + foreach pair [lindex $repeatscript 1] { + for {set i 0} {$i < [lindex $pair 1]} {incr i} { + lappend nums [lindex $pair 0] + } + } + set loops [lindex $repeatscript 0] + } + if ![OpenModem] {return 0} + } + for {set i 0} {$i < [llength $nums]} {incr i} { + set number [lindex $nums $i] + if {($i == ([llength $nums] - 1)) && \ + ($loops != "*") && ($loops < 2 )} { + .buttons.next config -state disabled + } + set numaborted 0 + if ![ModemInit] { + Hangup + ResetButtons + set loops 1 + break + } + if { ![DialNumber $number] || ![LoginScript] } { + if $aborted {DoAbort; return} + continue + } + OutCommand + ExitSucc + ResetButtons + focus .buttons.dismiss + return 1 + } + catch "incr loops -1" + if {($loops == "*") || ($loops > 0)} { + Dial 1 + return + } + .status.text config -background red + Outstatus "Sorry, failed to connect." + ResetButtons + return 0 +} + +proc OpenModem {} { + global port id + if [catch {set id [open $port w+]}] { + Dialerror "Error opening modem port." + .status.text config -background red + Outstatus "Aborted" + ResetButtons + return 0 + } + fconfigure $id -blocking 0 -buffering none + exec stty 38400 raw -echo clocal < $port > $port + return 1 +} + +proc ModemInit {} { + global init1 init2 + #initialize modem + if { $init1 != "" } { + if ![Dialexpect "$init1" "OK\n" "Error initializing modem."] { + set loops 1 + return 0 + } + if { $init2 != "" } { + if ![Dialexpect "$init2" "OK\n" "Error initializing modem."] { + set loops 1 + return 0 + } + } + } + return 1 +} + +proc DialNumber {number} { + global Dialer_expect_out + Outstatus "Dialing $number . . ." + set fail 0 + if [Dialexpect ATDT$number \ + { "OK" "BUSY" "NO DIAL TONE" "NO CARRIER" "NO ANSWER" "CONNECT .*\[\r\n\]" } \ + {} 45 ] { + switch -regexp -- $Dialer_expect_out { + "OK" { Outstatus " Unknown failure (\"OK\"!)."; set fail 1} + "BUSY" { Outstatus " Line is busy."; set fail 1} + "NO CARRIER" { + Outstatus " No carrier (no answer or phone line not connected)." + set fail 1 + } "NO DIAL TONE" { + Outstatus " No dial tone (no busy signal or ringing detected)." + set fail 1 + } "NO ANSWER" { Outstatus " No answer." ; set fail 1} + "CONNECT .*\[\r\n\]" {Outstatus $Dialer_expect_out} + } + if $fail { + after 1000 + return 0 + } + } else { + Hangup + return 0 + } + return 1 +} + +proc LoginScript {} { + global loginscript login + .status.text config -background yellowgreen + if !$login {return 1} + Outstatus "Running login script. . ." + foreach entry $loginscript { + if ![Dialexpect [lindex $entry 0] \ + [lindex $entry 1] \ + "In login script, never got \"[lindex $entry 1]\"" \ + [lindex $entry 2] ] { + Hangup + return 0 + } + } + Outstatus "Login script succeeded." + .status.text config -background chartreuse1 + return 1 +} + +proc OutCommand {} { + global outcommand + if {$outcommand != ""} { + Outstatus "Setting up the network:" + Outstatus " ([string range $outcommand 0 30] . . .)" + eval exec $outcommand & + } +} + +proc ExitSucc {} { + global exitsucc + if !$exitsucc return + if {[lsearch [winfo interps] tkgoodstuff] != -1} { + if {[send tkgoodstuff {lsearch $TKG(clients) Net}] != -1} { + send tkgoodstuff Net_start_wait + send tkgoodstuff {DEBUG {Dialer suggests we look for net-up}} + } + } + bell; after 250 { bell; after 5000 exit } +} + +proc ResetButtons {} { + .buttons.dial config -state normal + .buttons.dismiss config -state normal + .buttons.next config -state normal + .buttons.abort config -state disabled + .buttons.next config -state disabled + focus .buttons.dial +} + +proc Dialexpect "outstring instrings {error none} \"wait $quickwait\"" { + global statuswindow global quickwait id aborted numaborted Dialer_expect_out + set Dialer_expect_out "" + if ![info exists id] { bgerror "no channel with id $id"} + if [CheckBoth] {return 0} + if { [regexp " *(&PAUSE|&pause) *(.*)$" $outstring l v pause] && ($pause != -1)} { + if { [scan $pause "%f" pause1] && [info exists pause1]} { + after [format %.0f [expr $pause1 * 1000]] + } + } elseif [regexp " *(&RETURN|&return) *$" $outstring l l] { + DEBUG "Sending return character. . ." + Outmodem "" + } elseif {$outstring != ""} { + DEBUG "Sending \"$outstring\". . ." + Outmodem "$outstring" + } + if {$instrings == ""} {return 1} + DEBUG "Waiting $wait seconds for \"$instrings\"" + set timeout 1000 + for {set i 0} {$i < $wait} {incr i} { + if [CheckBoth] {return 0} + if ![info exists id] { bgerror "no \$id"} + if [DialerExpect $id $instrings $timeout] { + return 1 + } + } + DEBUG "Never got $instrings." + if [CheckBoth] {return 0} + if {$error != "none"} {Dialerror $error} + return 0 +} + +proc DialerExpect {id strings timeout} { + after $timeout DialerCancelExpect + fileevent $id readable [list DialerRead $strings $id] + global Dialer_cancelexpect + vwait Dialer_cancelexpect + fileevent $id readable {} + global Dialer_expect_out Dialer_expect_in + set Dialer_expect_in "" + set result [expr ![string match "" $Dialer_expect_out]] + return $result +} + +proc DialerRead {strings id} { + global Dialer_expect_in Dialer_expect_out + append Dialer_expect_in [read $id] + foreach string $strings { + if [regexp $string $Dialer_expect_in Dialer_expect_out] { + DialerCancelExpect + } + } +} + +proc DialerCancelExpect {} { + global Dialer_cancelexpect + set Dialer_cancelexpect 0 +} + + +proc Outmodem {string {return 1}} { + global id + switch $return { + 1 {eval puts -nonewline $id \"$string\\r\"} + 0 {eval puts -nonewline $id \"$string\"} + } +} + +proc Outstatus {string} { + global statuswindow + $statuswindow insert end "$string\n" + $statuswindow see end + update +} + +proc DEBUG {string} { + global debug + switch $debug { + 0 return + 1 "Outstatus $string" + 2 "puts $string" + } +} + +proc Dialerror {error {die 0}} { + global statuswindow id + Outstatus "$error" + if $die { + if [info exists id] { close -i $id } + bgerror "$error" + exit + } +} + +proc EditSettings {} { + global labelwidth file + set w .editsettings + catch {destroy $w} + toplevel $w + bind $w "destroy $w" + wm title $w "Dialer Settings" + wm iconname $w "Dialer Settings" + + trace variable file w UpdateFileDisplay + + frame $w.menu -relief raised -bd 2 + pack $w.menu -side top -fill x + + set m $w.menu.file.m + menubutton $w.menu.file -text "File" -menu $m -underline 0 + menu $m + $m add command -label "Open settings file" -command Open + $m add command -label "New settings file" -command New + $m add command -label "Save settings" -command Save + $m add command -label "Save settings As ..." -command SaveAs + + pack $w.menu.file -side left + + set m $w.menu.help.m + menubutton $w.menu.help -text "Help" -menu $m -underline 0 + menu $m + $m add command -label "About Dialer" -command About + $m add separator + $m add command -label "Dialer Help" -command HelpSettings + + pack $w.menu.help -side right + + button .b + set bfont [.b cget -font] + destroy .b + frame $w.curfile + label $w.curfile.label -font $bfont + UpdateFileDisplay + pack $w.curfile.label -side left + label $w.curfile.file -textvariable file -font $bfont + pack $w.curfile.file -side left + pack $w.curfile -expand y -pady 10 + + global labelwidth entrywidth + frame $w.numbers + radiobutton $w.numbers.check -variable repeat -value 0 + pack $w.numbers.check -side left -padx 10 + label $w.numbers.numberslabel -text "Dial these numbers:" -width $labelwidth -anchor c + pack $w.numbers.numberslabel -side left + entry $w.numbers.numbersentry -textvariable numbers -width $entrywidth + pack $w.numbers.numbersentry -side left -fill x -expand y + + frame $w.repeat + radiobutton $w.repeat.check -variable repeat -value 1 + pack $w.repeat.check -side left -padx 10 + label $w.repeat.label1 -text "Dial from repeat script" + pack $w.repeat.label1 -side left + + AddEntry $w port Port: + AddEntry $w speed Speed: + AddEntry $w init1 "Modem\ninit string" + AddEntry $w init2 "Second modem\ninit string" + AddEntry $w outcommand "Command to execute\nwhen logged in:" + + frame $w.login + checkbutton $w.login.check -variable login + pack $w.login.check -side left -padx 10 + label $w.login.label1 -text "Run login script when connected" + pack $w.login.label1 -side left + + frame $w.exitsucc + checkbutton $w.exitsucc.check -variable exitsucc + pack $w.exitsucc.check -side left -padx 10 + label $w.exitsucc.label1 -text "Exit on successful connection" + pack $w.exitsucc.label1 -side left + + pack $w.numbers $w.repeat $w.port $w.speed $w.init1 $w.init2 $w.outcommand $w.login $w.exitsucc\ + -fill x -pady 5 + + frame $w.buttons + button $w.buttons.ers -command EditRepeatScript -text "Edit\nRepeat Script" + pack $w.buttons.ers -side left -expand y -fill y -padx 15 -pady 15 + button $w.buttons.els -command EditLoginScript -text "Edit\nLogin Script" + pack $w.buttons.els -side left -expand y -fill y -padx 15 -pady 15 + button $w.buttons.dismiss -text Dismiss -command "destroy $w" + pack $w.buttons.dismiss -side left -expand y -fill y -padx 15 -pady 15 + pack $w.buttons -fill x -expand y +} + +proc UpdateFileDisplay args { + global file + if {$file == ""} { + .editsettings.curfile.label config -text "(No current file)" + } else { + .editsettings.curfile.label config -text "File: " + } +} + +proc AddEntry { w v s } { + global labelwidth entrywidth + frame $w.$v + label $w.$v.[set v]label -text $s -width $labelwidth -anchor c + pack $w.$v.[set v]label -side left + entry $w.$v.[set v]entry -textvariable $v -width $entrywidth + pack $w.$v.[set v]entry -side left -fill x -expand y +} + +proc EditRepeatScript {} { + global labelwidth repeatscript rscript file repeat + set entrywidth 25 + + set w .editrepeatscript + catch {destroy $w} + toplevel $w + bind $w "UpdateRepeatScript; destroy $w" + wm title $w "Dialer Repeat Script" + wm iconname $w "Dialer Repeat Script" + + frame $w.title -relief raised + pack $w.title -fill x -expand y + label $w.title.0 -text "Numer:" + pack $w.title.0 -pady 10 -fill x -expand y -side left + label $w.title.1 -text "Repeat ___ times:" + pack $w.title.1 -pady 10 -fill x -expand y -side left + frame $w.entries + pack $w.entries + frame $w.entries.0 + frame $w.entries.1 + pack $w.entries.0 $w.entries.1 -side left -fill x + foreach s {0 1} { + for {set i 0} {$i<16} {incr i} { + set rscript($i,$s) [lindex [lindex [lindex $repeatscript 1] $i] $s] + entry $w.entries.$s.entry$i -width $entrywidth \ + -textvariable rscript($i,$s) + pack $w.entries.$s.entry$i -padx 5 -pady 3 -fill x + } + } + frame $w.grep + label $w.grep.greplabel -text "Repeat entire script ___ times:\n(\"*\" means forever)" -anchor c + pack $w.grep.greplabel -side left + entry $w.grep.grepentry -textvariable loops -width 4 + pack $w.grep.grepentry -side left + pack $w.grep -fill x -pady 10 + frame $w.buttons + button $w.buttons.dismiss -text Dismiss -command "UpdateRepeatScript; destroy $w" + pack $w.buttons.dismiss -side left -expand y -fill y -padx 15 -pady 15 + pack $w.buttons -side bottom -fill x -expand y +} + +proc UpdateRepeatScript {} { + global rscript repeatscript loops + set repeatscript "" + set i 0 + set s "" + while {($rscript($i,0) != "") || \ + ($rscript($i,1) != "")} { + lappend s [list $rscript($i,0) $rscript($i,1) ] + incr i + } + set repeatscript [list $loops $s] +} + +proc EditLoginScript {} { + global labelwidth loginscript script file + set entrywidth 25 + + set w .editloginscript + catch {destroy $w} + toplevel $w + bind $w "UpdateScript; destroy $w" + wm title $w "Dialer Login Script" + wm iconname $w "Dialer Login Script" + + frame $w.title -relief raised + pack $w.title -fill x -expand y + label $w.title.0 -text "Send:" + pack $w.title.0 -pady 10 -fill x -expand y -side left + label $w.title.1 -text "Then Expect:" + pack $w.title.1 -pady 10 -fill x -expand y -side left + label $w.title.2 -text "After ___ seconds:" + pack $w.title.2 -pady 10 -fill x -expand y -side left + frame $w.entries + pack $w.entries + frame $w.entries.0 + frame $w.entries.1 + frame $w.entries.2 + pack $w.entries.0 $w.entries.1 $w.entries.2 -side left -fill x + foreach s {0 1 2} { + for {set i 0} {$i<16} {incr i} { + set script($i,$s) [lindex [lindex $loginscript $i] $s] + entry $w.entries.$s.entry$i -width $entrywidth \ + -textvariable script($i,$s) + pack $w.entries.$s.entry$i -padx 5 -pady 3 -fill x + } + } + frame $w.buttons + button $w.buttons.dismiss -text Dismiss -command "UpdateScript; destroy $w" + pack $w.buttons.dismiss -side left -expand y -fill y -padx 15 -pady 15 + pack $w.buttons -side bottom -fill x -expand y +} + +proc UpdateScript {} { + global script loginscript + set loginscript "" + set i 0 + while {($script($i,0) != "") || \ + ($script($i,1) != "") || \ + ($script($i,2) != "")} { + lappend loginscript [list $script($i,0) $script($i,1) $script($i,2) ] + incr i + } +} + +proc HelpSettings {} { + + set text " +This Dialer assumes you have a basically Hayes-compatible modem (like\ +nearly all modems sold these days). + +All settings, including a login script, are saved in a settings file.\ +In the Settings window, you can open and save settings files. You can\ +also select a settings file from the command line as follows: +\ \ \ \"Dialer mysettingsfile\" +If no settings file is given on the command line, Dialer looks for th\ +file \".DialSettings\" in your home directory.\ +To make the Dialer start dialing on invocation, you add \"Dial\" to the\ +command line: +\ \ \ \"Dialer mysettingsfile Dial\" + +(The Dialer also can be started automatically by the \"tkgoodstuff\"\ +button bar's \"Net\" client.) + +There are two dialing strategies to choose between: + 1. Each phone number in the list of phone numbers will be tried in\ +succession. You can use the usual Hayes characters in the dial string\ +(consult your modem manual). NOTE to those who want to type\ +\"ATDP555-7777\" here: you should not include the \"ATD\" command, but\ +only the phone number. + 2. A repeat script will be followed (which you edit by pressing a\ +button in the Settings window). Each number will be tried a specified\ +number of times, and the whole list will be tried a specified number of\ +time (or forever). + +The \"port\" is a unix device file governing the serial port to which\ +your modem is connected, such as /dev/modem or /dev/cua1. (Linux\ +users: remember that /dev/cua0 is COM1, . . ., and /dev/cua3 is\ +COM4.) + +The speed is the baud rate OF THE PORT, which typically is best set\ +higher than the modem's baud rate. You don't need to set the modem\ +baud rate explicitly (though you can do so in one of the init\ +strings if necessary). + +The modem init strings are \"AT...\" commands to send to the modem (we\ +look for an \"OK\" from the modem afterwards). These are optional, and\ +can be anything from \"AT\" to \"ATZ\" to the monstrously long ones modem\ +freaks swear by (the author uses \"ATZ4\" with his Sportster v.34). + +The entry \"command to execute when logged in\" allows you to start up\ +your networking software once you have dialed in and authenticated to\ +the server (through the login script, as described below). Here you\ +can start, for instance, ppp or term. The author, for his dynamic ppp\ +connection from home, uses: +\ \ \ \"/usr/lib/ppp/pppd /dev/modem 38400 asyncmap 0 defaultroute crtscts\ +modem noipdefault\" + +There is a checkbox which enables using the login script (on which more\ +below). + +And there is a checkbox which tells the Dialer window to disappear\ +once all its tasks are completed sucessfully (including launching the\ +networking command, if you have set one). Note that the Dialer itself\ +does not check whether the networking command is successful in setting\ +up the networking (for this indication, and for an easy way to use\ +the dialer when needed, the author modestly suggests using his\ +\"tkgoodstuff\" button bar's \"Net\" button). + +To edit the login script associated with the current settings file,\ +press the \"Edit Login Script\" button (did you guess that?). The login\ +script is a sequence of \"steps\". Each step involves (optionally)\ +sending a string to the modem (which automatically will be followed by\ +a carriage return), and then (optionally) waiting a certain number of\ +seconds for a string from the modem. If you leave the entries for the\ +send (or expect) strings empty, then at that step no string will be\ +sent (or expected). A send string of \"&pause 2.5\" will not send a\ +string but instead will pause for 2.5 seconds. A send string of\ +\"&return\" will send just a return character\ +You can include special characters according to\ +tcl's backslash substitution rules (see \"man Tcl\"). +" + + set w .loginscripthelp + catch {destroy $w} + toplevel $w + wm title $w "Dialer Help" + wm iconname $w "Dialer Help" + + button .b + label $w.title -text "DIALER HELP" \ + -font [.b cget -font] + destroy .b + pack $w.title -pady 10 -fill x -expand y + + frame $w.view + text $w.view.text -width 80 -height 20 \ + -takefocus 0 -yscrollcommand "$w.view.scrollbar set" \ + -relief sunken -borderwidth 2 -state disabled \ + -wrap word + + pack $w.view.text -side left -fill both -expand 1 + scrollbar $w.view.scrollbar -command "$w.view.text yview" + pack $w.view.scrollbar -side left -fill y -padx 3 + pack $w.view -side top -fill both -expand 1 -padx 10 + $w.view.text configure -state normal + $w.view.text insert end "$text" + $w.view.text configure -state disabled + + frame $w.buttons + button $w.buttons.dismiss -text Dismiss -command "destroy $w" + pack $w.buttons.dismiss -side left -expand y -fill y -padx 15 -pady 15 + pack $w.buttons -side bottom -fill x -expand y + +} + +proc About {} { + + set text " +Dialer, by Mark Crimmins (markcrim@umich.edu), copyright 1995. +Look for the latest version in the tkgoodstuff distribution at: +\ \ \ ftp://merv.philosophy.lsa.umich.edu/pub +" + set w .about + catch {destroy $w} + toplevel $w + wm title $w "About Dialer" + wm iconname $w "About Dialer" + + button .b + label $w.title -text "About Dialer" \ + -font [.b cget -font] + destroy .b + pack $w.title -pady 10 -fill x -expand y + + frame $w.view -relief groove -borderwidth 5 + message $w.view.text -width 18c -text $text + + pack $w.view.text -side left -fill both -expand 1 + pack $w.view -side top -fill both -expand 1 -padx 10 + + frame $w.buttons + button $w.buttons.dismiss -text Dismiss -command "destroy $w" + pack $w.buttons.dismiss -side left -expand y -fill y -padx 15 -pady 15 + pack $w.buttons -side bottom -fill x -expand y + +} + +proc Save {{f ""}} { + global file stringvars booleans + if {$f != ""} {set file $f} + if {$file == ""} {SaveAs; return} + set id [ open $file w ] + puts $id "\#Dialer Settings File" + foreach v [eval list $stringvars $booleans] { + global $v + puts $id "set $v \{[set $v]\}" + } + close $id +} + +proc Open {} { + global file + if ![select f "Open file:"] { + return + } + if ![file exists $f] { + bgerror "Error: $f doesn't exist." + return + } + if ![file readable $f] { + bgerror "Error: $f isn't readable." + return + } + set file $f + GetSettings +} + +proc New {} { + global file + if ![select f "New file name:"] { + return + } + if [file exists $f] { + bgerror "Error: can't create $f: file exists" + return + } + if [catch "exec touch $f"] { + bgerror "Error: can't create $f." + return + } + ClearSettings + set file $f + wm title . "Dialer" +} + +proc SaveAs {} { + global file + if ![select f "File name:"] { + return + } + if [file exists $f] { + bgerror "Error: can't create $f: file exists" + return + } + if [catch "exec touch $f"] { + bgerror "Error: can't create $f." + return + } + set file $f + Save +} + +proc ClearSettings {} { + global stringvars booleans + foreach v $stringvars { + global $v + set $v "" + } + foreach v $booleans { + global $v + set $v 0 + } +} + +proc GetSettings {} { + global file + global stringvars booleans + foreach v [eval list $stringvars $booleans] { + global $v + } + set id [open $file] + gets $id s + close $id + if {$s != "\#Dialer Settings File"} { + bgerror "File $file is not a dialer settings file." + return + } + source $file + global loops + set loops [lindex $repeatscript 0] +} + +proc select {var {message "Open File"}} { + global selection + set selection "" + fileselect selectdone $message + tkwait window .fileSelectWindow + uplevel "set $var \"$selection\"" + if { $selection == "" } { + return 0 + } else { + return 1 + } +} + +proc selectdone {f} { + global selection + set selection $f +} + +# +# fileselect.tcl -- +# simple file selector. +# +# Mario Jorge Silva msilva@cs.Berkeley.EDU +# University of California Berkeley Ph: +1(510)642-8248 +# Computer Science Division, 571 Evans Hall Fax: +1(510)642-5775 +# Berkeley CA 94720 +# +# Layout: +# +# file: +----+ +# ____________________ | OK | +# +----+ +# +# +------------------+ Cancel +# | .. |S +# | file1 |c +# | file2 |r +# | |b +# | filen |a +# | |r +# +------------------+ +# currrent-directory +# +# Copyright 1993 Regents of the University of California +# Permission to use, copy, modify, and distribute this +# software and its documentation for any purpose and without +# fee is hereby granted, provided that this copyright +# notice appears in all copies. The University of California +# makes no representations about the suitability of this +# software for any purpose. It is provided "as is" without +# express or implied warranty. +# + + +# names starting with "fileselect" are reserved by this module +# no other names used. + +# use the "option" command for further configuration + + + +# this is the default proc called when "OK" is pressed +# to indicate yours, give it as the first arg to "fileselect" + +proc fileselect.default.cmd {f} { + puts stderr "selected file $f" +} + + +# this is the default proc called when error is detected +# indicate your own pro as an argument to fileselect + +proc fileselect.default.errorHandler {errorMessage} { + puts stdout "error: $errorMessage" + catch { cd ~ } +} + +# this is the proc that creates the file selector box + +proc fileselect { + {cmd fileselect.default.cmd} + {purpose "Open file:"} + {w .fileSelectWindow} + {errorHandler fileselect.default.errorHandler}} { + + catch {destroy $w} + + toplevel $w + grab $w + wm title $w "Select File" + + + # path independent names for the widgets + global fileselect + + set fileselect(entry) $w.file.eframe.entry + set fileselect(list) $w.file.sframe.list + set fileselect(scroll) $w.file.sframe.scroll + set fileselect(ok) $w.bframe.okframe.ok + set fileselect(cancel) $w.bframe.cancel + set fileselect(dirlabel) $w.file.dirlabel + + # widgets + frame $w.file -bd 10 + frame $w.bframe -bd 10 + pack append $w \ + $w.file {left filly} \ + $w.bframe {left expand frame n} + + frame $w.file.eframe + frame $w.file.sframe + label $w.file.dirlabel -anchor e -width 24 -text [pwd] + + pack append $w.file \ + $w.file.eframe {top frame w} \ + $w.file.sframe {top fillx} \ + $w.file.dirlabel {top frame w} + + + label $w.file.eframe.label -anchor w -width 24 -text $purpose + entry $w.file.eframe.entry -relief sunken + + pack append $w.file.eframe \ + $w.file.eframe.label {top expand frame w} \ + $w.file.eframe.entry {top fillx frame w} + + + scrollbar $w.file.sframe.yscroll -relief sunken \ + -command "$w.file.sframe.list yview" + listbox $w.file.sframe.list -relief sunken \ + -yscroll "$w.file.sframe.yscroll set" + + pack append $w.file.sframe \ + $w.file.sframe.yscroll {right filly} \ + $w.file.sframe.list {left expand fill} + + # buttons + frame $w.bframe.okframe -borderwidth 2 -relief sunken + + button $w.bframe.okframe.ok -text OK -relief raised -padx 10 \ + -command "fileselect.ok.cmd $w $cmd $errorHandler" + + button $w.bframe.cancel -text cancel -relief raised -padx 10 \ + -command "fileselect.cancel.cmd $w" + pack append $w.bframe.okframe $w.bframe.okframe.ok {padx 10 pady 10} + + pack append $w.bframe $w.bframe.okframe {expand padx 20 pady 20}\ + $w.bframe.cancel {top} + + # Fill the listbox with a list of the files in the directory (run + # the "/bin/ls" command to get that information). + # to not display the "." files, remove the -a option and fileselect + # will still work + + $fileselect(list) insert end ".." + foreach i [exec /bin/ls -a [pwd]] { + if {[string compare $i "."] != 0 && \ + [string compare $i ".."] != 0 } { + $fileselect(list) insert end $i + } + } + + # Set up bindings for the browser. + bind $fileselect(entry) {eval $fileselect(ok) invoke; break} + bind $fileselect(entry) {eval $fileselect(cancel) invoke; break} + + bind $w {eval $fileselect(cancel) invoke;break} + bind $w {eval $fileselect(ok) invoke;break} + + +# tk_listboxSingleSelect $fileselect(list) + + + bind $fileselect(list) { + # puts stderr "button 1 release" + %W selection set [%W nearest %y] + $fileselect(entry) delete 0 end + $fileselect(entry) insert 0 [%W get [%W nearest %y]] + break + } + + bind $fileselect(list) { + %W selection set [%W nearest %y] + $fileselect(entry) delete 0 end + $fileselect(entry) insert 0 [%W get [%W nearest %y]] + break + } + + bind $fileselect(list) { + # puts stderr "double button 1" + %W selection set [%W nearest %y] + $fileselect(entry) delete 0 end + $fileselect(entry) insert 0 [%W get [%W nearest %y]] + $fileselect(ok) invoke + break + } + + bind $fileselect(list) { + %W selection set [%W nearest %y] + $fileselect(entry) delete 0 end + $fileselect(entry) insert 0 [%W get [%W nearest %y]] + $fileselect(ok) invoke + break + } + + # set kbd focus to entry widget + + focus $fileselect(entry) + +} + + +# auxiliary button procedures + +proc fileselect.cancel.cmd {w} { + # puts stderr "Cancel" + destroy $w +} + +proc fileselect.ok.cmd {w cmd errorHandler} { + global fileselect + set selected [$fileselect(entry) get] + + # some nasty file names may cause "file isdirectory" to return an error + set sts [catch { + file isdirectory $selected + } errorMessage ] + + if { $sts != 0 } then { + $errorHandler $errorMessage + destroy $w + return + + } + + # clean the text entry and prepare the list + $fileselect(entry) delete 0 end + $fileselect(list) delete 0 end + $fileselect(list) insert end ".." + + # selection may be a directory. Expand it. + + if {[file isdirectory $selected] != 0} { + cd $selected + set dir [pwd] + $fileselect(dirlabel) configure -text $dir + + foreach i [exec /bin/ls -a $dir] { + if {[string compare $i "."] != 0 && \ + [string compare $i ".."] != 0} { + $fileselect(list) insert end $i + } + } + return + } + + destroy $w + $cmd $selected +} +##### end of fileselect code + +# Main Program +DialWindow +if {($file != "") || \ + ([file exists $env(HOME)/.DialSettings] && \ + ![catch {set file $env(HOME)/.DialSettings}]) } { + ClearSettings + GetSettings +} +eval $argv diff --git a/Dialer.README b/Dialer.README new file mode 100755 index 0000000..c7be913 --- /dev/null +++ b/Dialer.README @@ -0,0 +1,26 @@ +Dialer version 8.0 + +Dialer is a unix X-Windows GUI thingy that dials your modem while you +watch, executes a login script, and starts a program of your choice +(e.g., ppp or term) on successful connection. + +*** Requires tk *** (Expect no longer required.) + +Tk version 4.1 and above should work, but if you have trouble please +try the latest version of tcl/tk. + +Self-documenting. To use, run it, hit the "Settings" button, +configure your settings and login script, and finally use the "Save" +option. + +More information is available in a Help menu item in the Settings +window. + +To use from the tkgoodstuff Net client, include a command like the +following in the relevant preferences item (i.e., the "Unix Command to +Open Link"): + Dialer /home/markcrim/.DialSettings Dial + +------- +markcrim@umich.edu + diff --git a/FAQ b/FAQ new file mode 100755 index 0000000..03dc5af --- /dev/null +++ b/FAQ @@ -0,0 +1,91 @@ +TKGOODSTUFF FAQ +--------------- + +-- It won't configure because: + + a. It can't find tclConfig.sh (and neither can I)! + + ANSWER: Your installation of tcl/tk is improper. Get the latest + from ftp://ftp.smli.com/pub/tcl. The files tclConfig.sh and + tkConfig.sh should automatically end up in the same directory as + the tcl and tk libraries (such as libtcl8.0.so). + + b. It can't find tclConfig.sh, but it's right there in + /smurf/glep/lib! + + ANSWER: Start from scratch with a CLEAN, freshly unpacked + distribution, and do: + ./configure --prefix=/smurf/glep + + c. It can't find tclsh8.0 or (wish8.0), but it's right there in + /smurf/glep/bin! + + ANSWER: Be sure your $PATH contains the directory containing + wish8.0. + +-- I have difficulty compiling it. + ANSWER: The most common problem is that a too-old version of tcl/tk + is getting in the way. Be sure there are no tclConfig.sh, + tkConfig.sh, tcl.h, and tk.h hanging around from earlier versions + of tcl/tk (earlier than the versions that tkgoodstuff needs). You + should certainly suspect this if you get such things as: + + undefined reference to `Tk_FontId' + +-- It configures and compiles fine, but it won't run. + + ANSWER: + 1. Did you install it? Do "make install". + 2. Are you sure you are executing the installed tkgoodstuff? + +-- When I run it, it dies with "wish8.0: can't load library + 'libtk8.0.so'". + + ANSWER: Your tcl/tk setup isn't properly installed. Be sure: + a. libtk8.0.so exists in a place where your system usually can + find libraries (e.g., /usr/local/lib). Perhaps you need to + add that directory to /etc/ld.so.conf. + b. the permissions on the file are right: the file is readable. + c. (if applicable) you have run "ldconfig" (as root). + +-- I have fvwm2 running, but it still says WindowList (or Pager) can't + run without fvwm2. + + ANSWER: Read the html docs more carefully. You have to make fvwm + run tkgoodstuff AS A MODULE. + +-- I launch tkgoodstuff as an fvwm module, and sometimes after + restarting tkgoodstuff several times fvwm eats up all of my CPU. + + ANSWER: This is fvwm's fault. My fix for it is incorporated in + fvwm2 versions 2.0.43 and later. So upgrade fvwm2 to 2.1 + (ftp://ftp.hpc.uh.edu/pub/fvwm). + +-- In screen-edge mode, sometimes (or always) my panel seems to try to + grow to the full size of the screen-edge, and then suddenly + collapses to a smaller size. I use fvwm or a derivative. + + ANSWER: This too is fvwm's fault. My (single-line) patch for fvwm2 + is included in the main directory of the tkgoodstuff distribution. + I think it will be incorporated in the next fvwm2 version after + 2.0.45. + +-- Tkgoodstuff (and my window manager, come to think of it) can't find + programs that I know are in my $PATH. + + ANSWER: They may be in your PATH when you run your shell in an + xterm, but they are not in the path of the program that launched + your window manager. Try setting (and using "export" or "setenv", + depending on the shell) PATH in your .xsession or .xinitrc, or in + whatever script starts your window manager. + +-- I get this annoying error/behavior/whatever... + + ANSWER: We'd love to know more about it. Write to the tkgoodstuff + mailing list tkgoodstuff@merv.philosophy.lsa.umich.edu WITH LOTS OF + DETAILS, including the exact versions of tkgoodstuff and tcl/tk and + (fvwm2 if you're using tkgoodstuff as an fvwm2 module), your + platform and OS, the entire stack trace from the error message (you + can copy it by selecting it with the mouse), your .tkgrc, and/or + whatever details you think might be relevant. Members of the list + might be able to help. diff --git a/INTERNATIONALIZATION b/INTERNATIONALIZATION new file mode 100755 index 0000000..536fb25 --- /dev/null +++ b/INTERNATIONALIZATION @@ -0,0 +1,39 @@ +This is dated: we haven't consistently kept up with this, so most +stuff is in English. Sorry. + +Experimental Internatinalization +-------------------------------- + +Given the value of the language variable (and the fallback default +tkg_language one) , TkGoodStuff looks first for the file + + $HOME/.tkgoodstuff_$language + +and eventually source it, then source the file + + $TKG_source_dir/$language.tcl + +file (which should use setifunset for setting translations) if it exists +and then unconditionally source + + $TKG_source_dir/$tkg_language.tcl + +Note that the client label is stored in the Tkg_labels array, so when +one internationalizes one of the modules, say Biff, the code to remove +the button becomes something like + + set index [.tkgpopup index $Tkg_labels(Biff)] + .tkgpopup delete $index [expr $index +1] + +The translations are the responsibility of the module, so one can make +full internationalized procedures if needed. + The only exception is that TkGoodStuff will install a client menu with +a label got from $Tkg_labels($client) where client is the client name +(e.g. Clock, Biff, Net, etc...) + +Internationalization can also choose default values for other things, +see the Clock module for example. + +See english.tcl and francais.tcl for examples. + +Yves Arrouye diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..78effa9 --- /dev/null +++ b/Makefile @@ -0,0 +1,95 @@ +# Generated automatically from Makefile.in by configure. +# This file is a Makefile for tkgoodstuff. If it has the name +# "Makefile.in" then it is a template for a Makefile; to generate the +# actual Makefile, run "./configure", which is a configuration script +# generated by the "autoconf" program (constructs like "@foo@" will +# get replaced in the actual Makefile. + +SHELL = /bin/sh + +VERSION = 8.0 +prefix = /usr +exec_prefix = ${prefix} + +# Where to create the tkgoodstuff library directory +#TKG_LIBRARY = $(prefix)/lib/tkgoodstuff +TKG_LIBRARY = ./lib/tkgoodstuff + +# Where to put the executable scripts (tkgoodstuff, Dialer) +#BIN_INSTALL_DIR = $(exec_prefix)/bin +BIN_INSTALL_DIR = ./bin + +# english or french +TKG_LANGUAGE = english + +# e.g., tkgwish4.1 +EXECSHELL = $(BIN_INSTALL_DIR)/tkgwish$(VERSION) + +SRCDIR = . +TCLSH = /usr/bin/tclsh8.0 +INSTALL = /usr/bin/install -c +INSTALL_PROGRAM = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 + +all: bins scripts + +bins: + @cd libs; $(MAKE) + +scripts: + @for f in tkgoodstuff Dialer Help; do\ + echo "creating $$f.tmp";\ + cat $(SRCDIR)/tcl/$${f}.tcl | \ + sed -e "s%!/bin/sh%!$(EXECSHELL)%" | \ + sed -e "s%^set\ TKG(libdir).*$$%set\ TKG(libdir)\ $(TKG_LIBRARY)%" | \ + sed -e "s%^set\ TKG(language).*$$%set\ TKG\(language\)\ $(TKG_LANGUAGE)%" > $$f.tmp; \ + done + +install: install-libs install-library + +install-libs: + @cd libs; make install + +install-library: scripts + @(test -d $(TKG_LIBRARY) || \ + (echo "Creating directory $(TKG_LIBRARY)"; \ + $(INSTALL) -d $(TKG_LIBRARY))) + @for dir in tcl doc icons sample-rc; do \ + (test -d $(TKG_LIBRARY)/$$dir || \ + (echo "Creating directory $(TKG_LIBRARY)/$$dir"; \ + $(INSTALL) -d $(TKG_LIBRARY)/$$dir)); \ + for f in `/bin/ls $(SRCDIR)/$$dir`; do \ + echo "Installing $(TKG_LIBRARY)/$$dir/$$f";\ + $(INSTALL_DATA) $(SRCDIR)/$$dir/$$f $(TKG_LIBRARY)/$$dir;\ + done ;\ + done + @$(INSTALL_PROGRAM) $(SRCDIR)/Help.tmp $(TKG_LIBRARY)/tcl/Help.tcl + @echo "Installing (and creating) $(TKG_LIBRARY)/tcl/tclIndex" + @$(TCLSH) $(SRCDIR)/mktclindex $(TKG_LIBRARY)/tcl + @(test -d $(BIN_INSTALL_DIR) || \ + (echo "Creating directory $(BIN_INSTALL_DIR)"; \ + $(INSTALL) -d $(BIN_INSTALL_DIR))) + @for f in tkgoodstuff Dialer; do\ + echo "Installing $(TKG_LIBRARY)/$$f";\ + $(INSTALL_PROGRAM) $$f.tmp $(TKG_LIBRARY)/$$f;\ + echo "Installing $(BIN_INSTALL_DIR)/$$f";\ + /bin/rm -f $(BIN_INSTALL_DIR)/$$f;\ + $(INSTALL_PROGRAM) $$f.tmp $(BIN_INSTALL_DIR)/$$f;\ + done + @echo + @echo "tkgoodstuff installation completed." + @echo + +Makefile: $(SRCDIR)/Makefile.in $(SRCDIR)/libs/Makefile.in + $(SHELL) $(SRCDIR)/configure + +clean: + @rm -f *.tmp + @cd libs; $(MAKE) clean + @echo + @echo "Cleaning done." + @echo + +distclean: + @rm -f config.* Makefile *.tmp + @cd libs; $(MAKE) distclean diff --git a/Makefile.in b/Makefile.in new file mode 100755 index 0000000..4f92678 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,92 @@ +# This file is a Makefile for tkgoodstuff. If it has the name +# "Makefile.in" then it is a template for a Makefile; to generate the +# actual Makefile, run "./configure", which is a configuration script +# generated by the "autoconf" program (constructs like "@foo@" will +# get replaced in the actual Makefile. + +SHELL = /bin/sh + +VERSION = @VERSION@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +# Where to create the tkgoodstuff library directory +TKG_LIBRARY = $(prefix)/lib/tkgoodstuff + +# Where to put the executable scripts (tkgoodstuff, Dialer) +BIN_INSTALL_DIR = $(exec_prefix)/bin + +# english or french +TKG_LANGUAGE = @TKG_LANGUAGE@ + +# e.g., tkgwish4.1 +EXECSHELL = $(BIN_INSTALL_DIR)/tkgwish$(VERSION) + +SRCDIR = @srcdir@ +TCLSH = @TCLSH@ +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ + +all: bins scripts + +bins: + @cd libs; $(MAKE) + +scripts: + @for f in tkgoodstuff Dialer Help; do\ + echo "creating $$f.tmp";\ + cat $(SRCDIR)/tcl/$${f}.tcl | \ + sed -e "s%!/bin/sh%!$(EXECSHELL)%" | \ + sed -e "s%^set\ TKG(libdir).*$$%set\ TKG(libdir)\ $(TKG_LIBRARY)%" | \ + sed -e "s%^set\ TKG(language).*$$%set\ TKG\(language\)\ $(TKG_LANGUAGE)%" > $$f.tmp; \ + done + +install: install-libs install-library + +install-libs: + @cd libs; make install + +install-library: scripts + @(test -d $(TKG_LIBRARY) || \ + (echo "Creating directory $(TKG_LIBRARY)"; \ + $(INSTALL) -d $(TKG_LIBRARY))) + @for dir in tcl doc icons sample-rc; do \ + (test -d $(TKG_LIBRARY)/$$dir || \ + (echo "Creating directory $(TKG_LIBRARY)/$$dir"; \ + $(INSTALL) -d $(TKG_LIBRARY)/$$dir)); \ + for f in `/bin/ls $(SRCDIR)/$$dir`; do \ + echo "Installing $(TKG_LIBRARY)/$$dir/$$f";\ + $(INSTALL_DATA) $(SRCDIR)/$$dir/$$f $(TKG_LIBRARY)/$$dir;\ + done ;\ + done + @$(INSTALL_PROGRAM) $(SRCDIR)/Help.tmp $(TKG_LIBRARY)/tcl/Help.tcl + @echo "Installing (and creating) $(TKG_LIBRARY)/tcl/tclIndex" + @$(TCLSH) $(SRCDIR)/mktclindex $(TKG_LIBRARY)/tcl + @(test -d $(BIN_INSTALL_DIR) || \ + (echo "Creating directory $(BIN_INSTALL_DIR)"; \ + $(INSTALL) -d $(BIN_INSTALL_DIR))) + @for f in tkgoodstuff Dialer; do\ + echo "Installing $(TKG_LIBRARY)/$$f";\ + $(INSTALL_PROGRAM) $$f.tmp $(TKG_LIBRARY)/$$f;\ + echo "Installing $(BIN_INSTALL_DIR)/$$f";\ + /bin/rm -f $(BIN_INSTALL_DIR)/$$f;\ + $(INSTALL_PROGRAM) $$f.tmp $(BIN_INSTALL_DIR)/$$f;\ + done + @echo + @echo "tkgoodstuff installation completed." + @echo + +Makefile: $(SRCDIR)/Makefile.in $(SRCDIR)/libs/Makefile.in + $(SHELL) $(SRCDIR)/configure + +clean: + @rm -f *.tmp + @cd libs; $(MAKE) clean + @echo + @echo "Cleaning done." + @echo + +distclean: + @rm -f config.* Makefile *.tmp + @cd libs; $(MAKE) distclean diff --git a/README b/README new file mode 100755 index 0000000..5b93457 --- /dev/null +++ b/README @@ -0,0 +1,65 @@ +README for TkGoodStuff version 8.0-final, 1 Oct, 1997 + +TkGoodStuff for the X Window System is an alarm clock, biff, file +watcher, modem dialer/network status indicator, note-taker, +web-browser launch tool, system load monitor, application/utility +menu, Win95-like task bar, and whatever else you want. + +TkGoodStuff produces a button bar. It is easily configured and +modified with the on-line GUI preferences manager (*no* rc-file +hacking). There is a "screen-edge" mode, in which the bar occupies an +edge of the screen, can be dragged to other edges, and can +auto-minimize (shrink to a line at the screen-edge). For users of the +fvwm window manager (though tkgoodstuff works without fvwm), +tkgoodstuff serves all the functions of the Windows95 taskbar, and +then some. + +You can configure buttons to launch applications (with lots of +configurable options), you can "swallow" any application's window into +your tkgoodstuff panel, and several "clients" are included (you can +also write your own with a tcl/tk script---an example is provided): + + -- analog/digital alarm clock + -- biff (check/scan/read new mail; handles multiple folders + and alert levels, MH folders, IMAP mailboxes) + -- PPP (or SLIP or TERM) net link GUI dialer and status + indicator (with sophisticated redialing and login + scripting). + -- FVWM support, including Win95-like bar of buttons for open + and iconified windows, as well as a pager. + -- launcher for WWW browsers (lets you visit the URL in the + current X selection with one click) + -- note-taker (tool for quickly jotting down and organizing + scraps of information) + -- calendar/alarm support (for Ical-generated calendar files) + -- system load monitor (graphical and/or digital display) + -- Menu button, for launching applications and running + utilities (the menu is GUI-configured). + -- "webster" net dictionary client + -- calculator with scrollable history and hex/dec/oct modes + (perpetually alpha, until someone adopts it as a project!) + -- POP/IMAP mail fetch scheduler. + -- file watcher: look for changes in (multiple) log files + -- launcher for tkman (operates with X selection like WWW + client) + +Documentation including screen-shots is available on the WWW, +at: + + http://www-personal.umich.edu/~markcrim/tkgoodstuff + +The html documentation also is included in the distribution. + +Source is available at the web site. + +! ! ********* Requires tcl/tk8.0. ********** ! ! + +INSTALLATION: please read the html documentation. If you know what +you are doing and just hate reading, you can try the "./configure" and +"make" and "make install" thing. It might work. + +--- +With this release I've stopped working on tkgoodstuff. Anyone who +would like to take over is most welcome. + +markcrim@umich.edu diff --git a/TIPS b/TIPS new file mode 100755 index 0000000..71b0381 --- /dev/null +++ b/TIPS @@ -0,0 +1,9 @@ +VARIOUS TIPS AND IDEAS --- Contributed tips/ideas welcome. +---------------------- + +[1] Suppose you want to see the output from a unix command. Use the +following Tcl command (either with a Button or a Menu item): + + TKGDialog -title "LPQ:" -message \[ exec lpq -Plp2 \] + +Note: tkgoodtuff will not respond as long as shmoo is running. diff --git a/TODO b/TODO new file mode 100755 index 0000000..a57bd9c --- /dev/null +++ b/TODO @@ -0,0 +1,65 @@ +TO DO: +------ + +(Thanks to anyone who helps with any of these; let me know what you're +working on. I encourage you to new clients---it's not that hard!) + +1. Allow selection of button behavior NextOrExec in preferences +(button stays up, does FvwmNextOrExec rather than exec). Move all +this into a special preferences pane on button behavior (loaded with +Fvwm.tcl): + - Default: Button launches application and stays sunken until + application process exists. + - NextOrExec: Button moves to next window whose name matches the + specified pattern, executes the unix command if there is no such + window, and does not remain sunken. + - Window-tracking: + +2. Ical uses a Clock hook; what if Clock isn't loaded? Make +clock async stuff a general util. & make Clock & ical & others rely on +it (the general async scheduler should treat multiples of a minute +differently from other stuff; that way async stuff happens less often +and there is less overlap). + +3. In tkFvwm.c, create an image type "fvwmmini" that creates an image +of the fvwm2 mini-icon for each window id? Use Ioi Lam's xpm code for +a start? Anyone with X programming experience who'd like to take this +on? + +4. Dragging with a swallowed window makes the swallowing window blow +up (somehow gridded geometry management is getting used?). + +5. Have a menu item in the Button config dialog. Bind menu to <3>, +and to <1> if no other command. Include menu item "Properties" for +button preferences. + +6. Incorporate new tcl/tk file browser at appropriate points. + +7. A switch to exec commands (Button, Menu, Run) to execute as root. +Get root password once & keep it. + +8. XSettings client. Set screen background (color or imagefile using +xv), bell properties, mouse properties, screen saver (with xset). +Actually set these at tkgoodstuff startup, and launch settings window +(using tabbed notebook) on button 1. Make button optional, and +include an "X Settings" menu item. + +9. Allow fvwm2 bindings (using the new string send facility): + Alt-Tab: FvwmNext (better, keep a list in order of most recent + focus---do this for the main Fvwm database?). + Our Menu bound to mouse on root window. + +10. Provide a "TKGMaximize" button in fvwm borders (which maximizes up +to the tkgoodstuff main panel)? + +11. Redo sizing for preferences frames. + +12. In Menu client, allow a PATH item that has cascades for PATH +directories (and big directories are subdivided by first character?). + +13. Make "name type" property for distinguishing window name from +resource class, etc (for WindowList, FvwmButtonBehavior, etc.). + +14. Handle raising previous preferences window better on dismiss. + +15. In configure, allow --with-tclConfig.sh=filename. diff --git a/config.cache b/config.cache new file mode 100755 index 0000000..c3ba407 --- /dev/null +++ b/config.cache @@ -0,0 +1,17 @@ +# 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. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +ac_cv_path_TCLSH=${ac_cv_path_TCLSH='/usr/bin/tclsh8.0'} +ac_cv_path_WISH=${ac_cv_path_WISH='/usr/bin/wish8.0'} +ac_cv_path_install=${ac_cv_path_install='/usr/bin/install -c'} diff --git a/config.log b/config.log new file mode 100755 index 0000000..fb9038e --- /dev/null +++ b/config.log @@ -0,0 +1,3 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + diff --git a/config.status b/config.status new file mode 100755 index 0000000..23e04b4 --- /dev/null +++ b/config.status @@ -0,0 +1,142 @@ +#! /bin/sh +# Generated automatically by configure. +# Run this file to recreate the current configuration. +# This directory was configured as follows, +# on host gluttony: +# +# ./configure +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]" +for ac_option +do + case "$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion" + exec ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "./config.status generated by autoconf version 2.9" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "$ac_cs_usage"; exit 0 ;; + *) echo "$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=. +ac_given_INSTALL="/usr/bin/install -c" + +trap 'rm -fr Makefile libs/Makefile conftest*; exit 1' 1 2 15 + +# Protect against being on the right side of a sed subst in config.status. +sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g; + s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF +/^[ ]*VPATH[ ]*=[^:]*$/d + +s%@CFLAGS@%%g +s%@CPPFLAGS@%%g +s%@CXXFLAGS@%%g +s%@DEFS@% %g +s%@LDFLAGS@%%g +s%@LIBS@%%g +s%@exec_prefix@%${prefix}%g +s%@prefix@%/usr%g +s%@program_transform_name@%s,x,x,%g +s%@bindir@%${exec_prefix}/bin%g +s%@sbindir@%${exec_prefix}/sbin%g +s%@libexecdir@%${exec_prefix}/libexec%g +s%@datadir@%${prefix}/share%g +s%@sysconfdir@%${prefix}/etc%g +s%@sharedstatedir@%${prefix}/com%g +s%@localstatedir@%${prefix}/var%g +s%@libdir@%${exec_prefix}/lib%g +s%@includedir@%${prefix}/include%g +s%@oldincludedir@%/usr/include%g +s%@infodir@%${prefix}/info%g +s%@mandir@%${prefix}/man%g +s%@TCLSH@%/usr/bin/tclsh8.0%g +s%@WISH@%/usr/bin/wish8.0%g +s%@INSTALL_PROGRAM@%${INSTALL}%g +s%@INSTALL_DATA@%${INSTALL} -m 644%g +s%@INSTALL@%/usr/bin/install -c%g +s%@VERSION@%8.0%g +s%@TKG_LIBRARY@%%g +s%@TKG_LANGUAGE@%english%g +s%@TCL_CC@%gcc%g +s%@TCL_DEFS@% -DHAVE_GETCWD=1 -DHAVE_OPENDIR=1 -DHAVE_STRSTR=1 -DHAVE_STRTOL=1 -DHAVE_TMPNAM=1 -DHAVE_WAITPID=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TM_ZONE=1 -DHAVE_TM_GMTOFF=1 -DHAVE_TIMEZONE_VAR=1 -DHAVE_ST_BLKSIZE=1 -DSTDC_HEADERS=1 -DNEED_MATHERR=1 -DHAVE_SIGNED_CHAR=1 -DHAVE_SYS_IOCTL_H=1 %g +s%@TCL_PREFIX@%/usr%g +s%@TCL_LD_FLAGS@%-rdynamic%g +s%@TCL_LD_SEARCH_FLAGS@%%g +s%@TCL_LIBS@%-ldl -lm%g +s%@TCL_LIB_SPEC@%-L/usr/lib -ltcl8.0%g +s%@TK_PREFIX@%/usr%g +s%@TK_EXEC_PREFIX@%/usr%g +s%@TK_DEFS@% -DHAVE_UNISTD_H=1 -DHAVE_LIMITS_H=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 %g +s%@TK_LIB_SPEC@%-L/usr/lib -ltk8.0%g +s%@TK_BUILD_LIB_SPEC@%-L/usr/src/bs/BUILD/tcltk-8.0.2/tk8.0/unix -ltk8.0%g +s%@TK_LIBS@%-L/usr/X11R6/lib -lX11 -ldl -lm%g +s%@TK_XINCLUDES@%-I/usr/X11R6/include%g +s%@TK_XLIBSW@%-L/usr/X11R6/lib -lX11%g +s%@EXECSHELL@%%g + +CEOF + +CONFIG_FILES=${CONFIG_FILES-"Makefile libs/Makefile"} +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust relative srcdir, etc. for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file +fi; done +rm -f conftest.subs + + + +exit 0 diff --git a/configure b/configure new file mode 100755 index 0000000..8e453fd --- /dev/null +++ b/configure @@ -0,0 +1,970 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.9 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help +""" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +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' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= + +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 + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # 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 ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$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" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) 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) + # 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 << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --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 +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$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) + 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 ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.9" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + 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 "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +# 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 + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=tcl/Biff.tcl + +# 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_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + 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 "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# 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 "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + +TCLTK_MAJORNEEDED=8 +TCLTK_MINORNEEDED=0 + +# NOTE: If configure can't find your tclConfig.sh, add its directory here: +dirlist='/usr/local /usr' + +if test -d $prefix +then + dirlist=$prefix +else + dirlist="$dirlist `echo $PATH | sed -e 's/:/ /g' | sed -e 's/\/bin\/* / /g'`" +fi + +abort () { + echo + echo "Aborting. $*" + echo + exit +} + +VERSION=${TCLTK_MAJORNEEDED}.${TCLTK_MINORNEEDED} + +# Find appropriate tclConfig.sh and +# recover information that Tcl computed with its configure script. + +TCLCONFIGSH="" +for prefix in $dirlist; do + if test -f $prefix/lib/tclConfig.sh; then + TCLCONFIGSH=$prefix/lib/tclConfig.sh + . $TCLCONFIGSH + if test `expr \( $TCL_MAJOR_VERSION \< $TCLTK_MAJORNEEDED \) \| \( $TCL_MINOR_VERSION \< $TCLTK_MINORNEEDED \)` = 0 + then + break + fi + fi +done +test -f "$TCLCONFIGSH" || abort "Can't find any tclConfig.sh" +if test `expr \( $TCL_MAJOR_VERSION \< $TCLTK_MAJORNEEDED \) \| \( $TCL_MINOR_VERSION \< $TCLTK_MINORNEEDED \)` = 1 +then + abort "Need but can't find tclConfig.sh for Tcl ${TCLTK_MAJORNEEDED}.${TCLTK_MINORNEEDED} or later." +fi +echo "using $TCLCONFIGSH" + +TKCONFIGSH=${prefix}/lib/tkConfig.sh +test -f "$TKCONFIGSH" || abort "Can't find any tkConfig.sh" +. $TKCONFIGSH +if test `expr \( $TK_MAJOR_VERSION \< $TCLTK_MAJORNEEDED \) \| \( $TK_MINOR_VERSION \< $TCLTK_MINORNEEDED \)` = 1 + then abort "Need but can't find tkConfig.sh for Tk ${TCLTK_MAJORNEEDED}.${TCLTK_MINORNEEDED} or later." +fi +echo "using $TKCONFIGSH" + +# Extract the first word of "tclsh$TCL_VERSION", so it can be a program name with args. +set dummy tclsh$TCL_VERSION; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_path_TCLSH'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$TCLSH" in + /*) + ac_cv_path_TCLSH="$TCLSH" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_TCLSH="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_TCLSH" && ac_cv_path_TCLSH="""" + ;; +esac +fi +TCLSH="$ac_cv_path_TCLSH" +if test -n "$TCLSH"; then + echo "$ac_t""$TCLSH" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$TCLSH" + then abort "Is tcl${TCLTK_MAJORNEEDED}.$TCLTK_MINORNEEDED or later installed? (Cannot find appropriate tclsh.)" +fi +# Extract the first word of "wish$TK_VERSION", so it can be a program name with args. +set dummy wish$TK_VERSION; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_path_WISH'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$WISH" in + /*) + ac_cv_path_WISH="$WISH" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_WISH="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_WISH" && ac_cv_path_WISH="""" + ;; +esac +fi +WISH="$ac_cv_path_WISH" +if test -n "$WISH"; then + echo "$ac_t""$WISH" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$WISH" + then abort "Is tk${TCLTK_MAJORNEEDED}.$TCLTK_MINORNEEDED or later installed? (Cannot find appropriate wish.)" +fi + +TKG_LANGUAGE=english +# Check whether --enable-french or --disable-french was given. +if test "${enable_french+set}" = set; then + enableval="$enable_french" + TKG_LANGUAGE=french +fi + + +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 + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$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 +# 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 $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + for ac_prog in ginstall installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_ifs" + +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 "$ac_t""$INSTALL" 1>&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_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + + + + + + + + + + + + + + + + + + + + + + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# 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. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# 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 | + sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \ + >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.9" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile libs/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@TCLSH@%$TCLSH%g +s%@WISH@%$WISH%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@INSTALL@%$INSTALL%g +s%@VERSION@%$VERSION%g +s%@TKG_LIBRARY@%$TKG_LIBRARY%g +s%@TKG_LANGUAGE@%$TKG_LANGUAGE%g +s%@TCL_CC@%$TCL_CC%g +s%@TCL_DEFS@%$TCL_DEFS%g +s%@TCL_PREFIX@%$TCL_PREFIX%g +s%@TCL_LD_FLAGS@%$TCL_LD_FLAGS%g +s%@TCL_LD_SEARCH_FLAGS@%$TCL_LD_SEARCH_FLAGS%g +s%@TCL_LIBS@%$TCL_LIBS%g +s%@TCL_LIB_SPEC@%$TCL_LIB_SPEC%g +s%@TK_PREFIX@%$TK_PREFIX%g +s%@TK_EXEC_PREFIX@%$TK_EXEC_PREFIX%g +s%@TK_DEFS@%$TK_DEFS%g +s%@TK_LIB_SPEC@%$TK_LIB_SPEC%g +s%@TK_BUILD_LIB_SPEC@%$TK_BUILD_LIB_SPEC%g +s%@TK_LIBS@%$TK_LIBS%g +s%@TK_XINCLUDES@%$TK_XINCLUDES%g +s%@TK_XLIBSW@%$TK_XLIBSW%g +s%@EXECSHELL@%$EXECSHELL%g + +CEOF +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust relative srcdir, etc. for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file +fi; done +rm -f conftest.subs + + + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/configure.in b/configure.in new file mode 100755 index 0000000..0030ba7 --- /dev/null +++ b/configure.in @@ -0,0 +1,97 @@ +dnl This file is an input file used by the GNU "autoconf" program to +dnl generate the file "configure", which is run to configure the +dnl Makefile in this directory. + +# Ensure we're in the correct directory +AC_INIT(tcl/Biff.tcl) + +TCLTK_MAJORNEEDED=8 +TCLTK_MINORNEEDED=0 + +# NOTE: If configure can't find your tclConfig.sh, add its directory here: +dirlist='/usr/local /usr' + +if test -d $prefix +then + dirlist=$prefix +else + dirlist="$dirlist `echo $PATH | sed -e 's/:/ /g' | sed -e 's/\/bin[\/]* / /g'`" +fi + +abort () { + echo + echo "Aborting. $*" + echo + exit +} + +VERSION=${TCLTK_MAJORNEEDED}.${TCLTK_MINORNEEDED} + +# Find appropriate tclConfig.sh and +# recover information that Tcl computed with its configure script. + +TCLCONFIGSH="" +for prefix in $dirlist; do + if test -f $prefix/lib/tclConfig.sh; then + TCLCONFIGSH=$prefix/lib/tclConfig.sh + . $TCLCONFIGSH + if test `expr \( $TCL_MAJOR_VERSION \< $TCLTK_MAJORNEEDED \) \| \( $TCL_MINOR_VERSION \< $TCLTK_MINORNEEDED \)` = 0 + then + break + fi + fi +done +test -f "$TCLCONFIGSH" || abort "Can't find any tclConfig.sh" +if test `expr \( $TCL_MAJOR_VERSION \< $TCLTK_MAJORNEEDED \) \| \( $TCL_MINOR_VERSION \< $TCLTK_MINORNEEDED \)` = 1 +then + abort "Need but can't find tclConfig.sh for Tcl ${TCLTK_MAJORNEEDED}.${TCLTK_MINORNEEDED} or later." +fi +echo "using $TCLCONFIGSH" + +TKCONFIGSH=${prefix}/lib/tkConfig.sh +test -f "$TKCONFIGSH" || abort "Can't find any tkConfig.sh" +. $TKCONFIGSH +if test `expr \( $TK_MAJOR_VERSION \< $TCLTK_MAJORNEEDED \) \| \( $TK_MINOR_VERSION \< $TCLTK_MINORNEEDED \)` = 1 + then abort "Need but can't find tkConfig.sh for Tk ${TCLTK_MAJORNEEDED}.${TCLTK_MINORNEEDED} or later." +fi +echo "using $TKCONFIGSH" + +AC_PATH_PROG(TCLSH,tclsh$TCL_VERSION,"") +if test -z "$TCLSH" + then abort "Is tcl${TCLTK_MAJORNEEDED}.$TCLTK_MINORNEEDED or later installed? (Cannot find appropriate tclsh.)" +fi +AC_PATH_PROG(WISH,wish$TK_VERSION,"") +if test -z "$WISH" + then abort "Is tk${TCLTK_MAJORNEEDED}.$TCLTK_MINORNEEDED or later installed? (Cannot find appropriate wish.)" +fi + +TKG_LANGUAGE=english +AC_ARG_ENABLE(french,"",TKG_LANGUAGE=french) + +AC_PROG_INSTALL + +AC_SUBST(INSTALL) +AC_SUBST(INSTALL_PROGRAM) +AC_SUBST(INSTALL_DATA) +AC_SUBST(VERSION) +AC_SUBST(TKG_LIBRARY) +AC_SUBST(TKG_LANGUAGE) +AC_SUBST(TCL_CC) +AC_SUBST(TCL_DEFS) +AC_SUBST(TCL_PREFIX) +AC_SUBST(TCL_LD_FLAGS) +AC_SUBST(TCL_LD_SEARCH_FLAGS) +AC_SUBST(TCL_LIBS) +AC_SUBST(TCL_LIB_SPEC) +AC_SUBST(TK_PREFIX) +AC_SUBST(TK_EXEC_PREFIX) +AC_SUBST(TK_DEFS) +AC_SUBST(TK_LIB_SPEC) +AC_SUBST(TK_BUILD_LIB_SPEC) +AC_SUBST(TK_LIBS) +AC_SUBST(TK_XINCLUDES) +AC_SUBST(TK_XLIBSW) +AC_SUBST(TCLSH) +AC_SUBST(EXECSHELL) + +AC_OUTPUT(Makefile libs/Makefile) diff --git a/doc/CHANGES b/doc/CHANGES new file mode 100755 index 0000000..f6351ce --- /dev/null +++ b/doc/CHANGES @@ -0,0 +1,470 @@ +8.0: Here I (MC) leave off development of tkgoodstuff. Anyone who + would like to adopt it is most welcome. + +8.0b2: + +8.0b1: + + - Hacked at some of the C stuff for compatibility with + tcl/tk8.0b1. (5/28/97) + + - Ken Hornstein's netscape-remote doesn't work with + Netscape 4.0 until b5, and it won't compile with tcl8.0b1, + so I'm just doing "netscape -remote" for now (this doesn't work + with Netscape 4.0 before b5 either, but it works with + tcl8.0b1). (5/30/97) + + - Simplified some of the configure/install stuff. (6/11/97) + +8.0a2: + + - Fvwm2's geometry management had been a little broken, which + explained the odd stuff tkgoodstuff panels had to do to span a + screenedge. I've sent a patch to the fvwm2 maintainer (Chuck + Hines) for fvwm2.0.45; the patch is included in this distribution. + In keeping with No-Backward-Compatibility, now you need to upgrade + to fvwm2.0.45 (and use the patch) to get screenedge mode to work. + I'm sure you can figure out how to patch fvwm95 similarly. (Sorry + about that, but it relieves one of my biggest headaches.) (1/27/97) + + - Font preferences use a font selector. Relatedly, font handling + is a bit saner. (2/3/97; more font stuff fiddling 2/6/97) + + - The default relief for buttons (globally or individually) is flat + (for a sleek look). A preferences item still allows raised + buttons. (2/6/97) + + - Bells are more distinctive: the alarm (and Ical) bells are a + little louder and longer than your regular ^G beep, and in Biff + and Watch, the pitch of the bell corresponds to the alert level. + If you have several Watch'ed files and Biff'ed mailboxes, you can + get a nice (?) little tune on tkgoodstuff startup. (2/10/97) + + - Bug fix: in revising the tkgbutton.tcl code we lost a level + of substitution on the unix command. Thanks C. Roth (2/12/97) + + - Help "balloons" code simplified. Balloons no longer time out. + (2/13/97) + + - Hierarchical listbox widget improved. For example, you can drop + items "within" items that permit children. (2/14/97) + + - Bug fix: geometry handled improperly in restart caused + panelbuttons not to work. (2/15/97) + + - Bug fix: tkgbuttons could freeze on doubleclick. (2/15/97) + + - Bug fix: switches like "-font" in a button's unix command would + be modified. (2/16/97) + + - New client "Watch". Like Erik Kahler's "WatchDog" except it + allows multiple files to be watched, as in Biff. Includes a lister + that functions like "tail -f", and which allows you to view in one + window all (or a selected group of) the files being + watched. (2/12/97) + + Added indications in multiple-file viewer of which files have + changed and which one changed most recently. (2/15/97) + + - WindowList: + + We use a "tkgframe" instead of a text widget. Somewhat + zippier, and lets us put the panel tile image (if any) in the + background (or another tile image of the user's preference). + Looks a little bit different. (1/30/97) + + (bugfix) A panel containing only WindowList wouldn't size + properly, and windows wouldn't show up. (4/3/97) + + - Biff: + + For MH folders, if folder or .mh_sequence doesn't exist, make + the message counter (in menu or on button) zero. (bugfix; + 2/6/97) + + Brushed up IMAP mailbox checker. We keep the IMAP socket up + between checks; otherwise it's very hard to reliably check for + new mail. (2/17/97) + + Added preference setting for IMAP port. (4/15/97) + + If you choose "exmh" as the "unix command to execute instead + of using tkgoodstuff's lister" for an MH folder, then if exmh is + already running we direct exmh to the folder. + + (bugfix) Standard atime method reset new-mail indicator at + second check. + + - TkMan: + + (bugfix) some button preferences were ignored (2/22/97). + + Raise tkman window when using button <3> to view a manpage (if + fvwm is used). + + - Webster: + + Webster servers have disappeared (copyright issues, I guess). + So now the Webster button directs your browser to look up + the definition of a word at the Merriam-Webster site (a better + dictionary anyway, but sometimes slow response). You can change + the URL if you know a better one. + + A. Burt contributes bugfixes and an entry dialog (which Webster + should have had from the start). + + - Pager: (bug fix) really ignore the tkgoodstuff main panel (in + tk8.0 this has the id [wm wrapper .main-panel]. (4/9/97) + + +8.0a1: + + - Ok, forget 4.2, we may as well work with 8.0. Get tcl/tk8.0a2 or + later (a1 has relevant bugs). As always, we don't do backward + compatibility (too much work). There probably are quite a few + bugs. I'd appreciate your testing this, but beware. + + - Buttons and panels now can have tiled background images. + + - Rewrote the tkgbutton extension code around the tkButton.c and + tkUnixButton.c in tk8.0. This code allows buttons, labels, etc., + to have images as well as text. Added "-textweight" and + "-imageweight" options (like the option to "grid + row/columnconfigure). Also wrote code for "tkgframe" widgets (like + frames/toplevels, but allow background tiles). + + - Color preference items use the new tk color selector. + + - Killed (or at least maimed) some bugs: + + an old one that caused us to lose some preferences changes. + + one that made "Fill" items cause errors. + + one that abandoned your specified icon-side when the panel is + dragged to another screen-edge. + + one that made gcc choke when compiling on Solaris 2.4. + + Text now gravitates to the bottom of button when below + image. + + A preferences label implied that leaving the button text field + blank would give you text anyway (which would be silly). + + - Main Menu button can have icon on it and/or text. By default, it + now has a pale blue "TKG" icon in the background (I'd welcome a + nifty logo-ish thing if anyone out there is less art-challenged + than me). + + - Now when you insert an item in the hierarchical list widget, the + new item is always visible and highlighted. + + - Biff: + + Menu indicating which mailboxes have new mail now can be a + tear-off menu. + + That same menu can now replace the Biff button on the + tkgoodstuff panel. (For some reason this breaks the ability to + drag windows from WindowList into Pager. Tk bug?) + + When you click with button 3 in single-mailbox mode, or select + a mailbox from the menu in multiple-mailbox mode, we allow + an arbitrary unix command instead of calling up tkgoodstuff's + new-mail lister (so you can start a mailer directed at a + particular mailbox instead of using our lister). + +4.2b1: + + - New versions are for use with tcl7.6/tk4.2. + + - Got rid of BLT fuctionality. This saves many configuration + headaches. However, this means that drag&drop no longer is + supported (you can't drag files onto tkgoodstuff buttons). Also, + certain programs can fool tkgoodstuff buttons into rising before + the programs actually exit (namely, programs that freopen() + stdout). You can get around this by calling instead a shell + script that simply runs the offending program: + + #!/bin/sh + knews + + +4.1: + + - Auto-configuration now is more standard GNU: we assume you want + to install in /usr/local/... unless you specify otherwise (with + "./configure --prefix=/some/directory"), rather than assuming that + you want to install wherever tcl and tk are installed. Also, we + look for tcl/tk headers in more places. + + - Default is now to make tkgwish (to cut down on compilation + gripes), but if you configure with "--enable-libs", then you get + loadable libraries instead: libtkg (with image+text button code), + libpixmap, libtkfvwm, libtkSteal, libblt, libtkNetscape. + + - Used "unprotoize" on tkNetscape.c so that SunOS's non-ANSI + compiler doesn't choke on the function prototypes. + + - The preferences manager now uses tabbed notebooks to give you + that warm'n'cozy GUI feeling, at no cost in added functionality! + (The tabbed notebook widget, like the hierarchical list widget, is + core tcl/tk only.) + + - New button option: "Fvwm button behavior". If set (and using the + fvwm2 or fvwm95 window manager!), then the relief of the button + (raised/sunken) is sensitive only to the existence of a window of + the given name. This way, your unix command button will be sunken + even if you start your application without pressing the button + (e.g., with a window manager menu or on a command line), and even + if you restart tkgoodstuff. + + - Incoporated the "netscape-remote" tk extension by Ken Hornstein, + which makes for quicker visits to selected URL's with the WWW + client. + + - Now you can use fvwm modules as swallow and menu items (just make + the unix command, e.g., "FvwmPager 0 1"). + + - NOTE: Various code uniformization that (a) is certain to + introduce a bug or two, and (b) unfortunately meant renaming some + preferences variables, which means that some of your preferences + will have to be redone. Sorry about that. + + - Biff: + + New mailbox method "IMAP": check and read new mail at a remote + IMAP server. Consider this feature ALPHA, since I'm the only one + who has tested it (reports welcome). It should work on any + IMAP-2bis or IMAP4 server. + + Biff mailboxes are now individually configurable with an hlist + widget gizmo. They can have different checking intervals, etc. + + Mailboxes now are assigned "alert levels" of white, green, + yellow, or red, which determines what icon is shown for new mail. + + + Fvwm: When going to a window we give it focus or not depending on + whether the window has style flags set for ClickToFocus or + SloppyFocus. This way we give a window focus whenever we can do so + without warping the pointer. + + - Pager: + + Clicking on the current page cycles through the open + windows on the page. + + Clicking on another page always goes to the window last + selected on that page, if any. + + Find some way of reminding people (everybody forgets this) that + you can move windows between pages and desktops by dragging with + mouse button 2 from the WindowList to the Pager. + + - Dialer: Oops: we had been sending the dial command twice, which + could produce inexplicable "NO CARRIER" messages. + +4.1b8: 6/9/96 + + - Incoporated bgexec and drag&drop from BLT, which means that the + handling of executed programs is less kludgy, and that you can drag + files from tkdesk to tkgoodstuff buttons. + + - Incorporated TkSteal, and added the element type "Swallow", which + lets you put an external X application window in the tkgoodstuff + bar. + + - Main panel is now just another panel. This helped kill a bug + (which is tk's, I think) that was tweaked in the screen-edge + dragging and resulted in segmentation faults. + + - Added a balloon help feature (annoyance? it's defeasible). + + - Added a commented example client "Example.tcl", which may take + a lot of the mystery out of writing a simple client. + + - Added a preferences item for a list of tcl code directories to + prepend to auto_path (so that you can use your own tcl code without + writing a client). + + - Buttons now can have images as backgrounds (the text is written + over the image): set the "side" of the icon to "background". + + - WWW and Fvwm handling much improved thanks to A. Burt (who + contributed lots of bug fixes elsewhere too). + + - WindowList: + + keep usual icon when iconified (foreground color still grayed + out). Easier to tell what program is iconified this way. + + Added default icons for file managers (xfm and tkdesk) and man + page readers (xman and tkman). + + - PopImap: Keep track of fetch process and don't overlap (thanks + T. Fries). + +4.1b7: 5/22/96 + + There have been quite a few changes that are sure to introduce new + bugs. Please inform me of any troubles, providing as much + information as you can about your platform, your .tkgrc, etc. + + - The latest tkgoodstuff and the latest CHANGES file is now + available at the web site. + + - The GUI installation tool has been replaced by a GNU autoconf + thing ("./configure" then "make", then "make install"). Probably + there are still importabilities, so please let me know how it goes. + + - The xpm and fvwm extensions are now wrapped into "libtkg", which + is compiled and installed automatically at tkgoodstuff installation + (this way you don't have to install, and I don't have to maintain, + as many packages). If someone wants to pull them apart and + maintain them individually, be my guest. + + - If the Tcl installation doesn't support loadable libraries, we + make and use tkgwish. You can force this with + "configure --enable-tkgwish". (Worth a try if the C compilation + fails.) + + - The panel (including main panel) and menu configurations are now + done with a point-and-click, drag-and-drop hierarchical list widget + with little icons to make you feel safe-and-secure. It's harder to + screw up your configuration or menu now (or it should be when the + bugs get ironed out). + + - The image+text tkgbutton code is now done in C (and is part of + libtkg). This simplifies and speeds up various things. + + - Dragging a (screenedge mode) main panel (by its border) to other + edges of the screen now works without restarting tkgoodstuff. If + you have used the defaults, the arrangement of icons, labels, etc, + changes to suit the new orientation. + + - No more "Dismiss" buttons in panels produced by PanelButtons, + since they can be dismissed by clicking on the PanelButton. + + - Clock now shows time only by default, and toggles to show the + date temporarily when the mouse pointer enters the clock window. + + - The tkgoodstuff menu now can be used anywhere in the Menu client + menu as a cascade (before it would pop up oddly). Also, for now + there is only one Menu client menu (anyone sorely miss having 3?). + + - We take advantage of the /proc filesystem (e.g., on Linux): + + Load now reads /proc/loadavg if it exists (and otherwise exec's + uptime). + + Net now by default reads /proc/net/route if it exists (and + otherwise exec's ifconfig). + +4.1b6: 4/30/96 + + - There is a new on-line preferences manager (so you don't have to + edit the rc file by hand). Start up tkgoodstuff. You will get a + default configuration. Select Preferences from the tkgoodstuff + menu, and choose the "Configuration" section. Here, add, delete or + move Client, AddButton, AddLabelBox, stacking, and panel-creating + commands. Then, save the preferences and restart. Now you can set + using the preferences manager the things you used to have to adjust + with variables. + + - tkgoodstuff: + + + New options for icon scale and font scale (small or large). + Also, where an iconfile is called for, you can specify + "%biffnew" and tkgoodstuff will look, depending on whether the + scale is small or large, for biffnew.xpm or biffnew-sm.xpm. + + + New option for standard padding inside buttons, etc. Adjust + to 0 for very busy but compact look, to 2 or 3 for more roomy + look. + + + Now you can specify a pathlist of icon directories + in the preferences manager. You also can specify an icon that + is somewhere in that path with just its name (full filenames + work too). + + + In fullscreen mode, now you can "drag" the main border to + move the panel to another edge of the screen. It's a quick + hack (if we go from horizontal to vertical or vice versa we + save a changed fullscreen-side preference and restart + tkgoodstuff), but nothing wouldn't be better. We should really + be able to do this on the fly (which means regridding, and + resizing the auto-sized clients (Clock, Pager, Load). + + + Also there is a new option Auto-minimize which in fullscreen + mode reduces tkgoodstuff to a line along the edge of the screen + when the mouse leaves the tkgoodstuff panel. + + + Killed (I hope) bug without understanding why: sometimes in + auto-minimize mode clicking on a panelbutton would cause an + error whose entire stack trace is ("after" script). Since + removing an "update" command from TKGPanelButtonInvoke, I no + longer see this problem. Any speculations as to why would be + welcome! + + - New Client: TkMan, by G. Dezern, interfaces with the tkman man + page viewer the way our WWW client interfaces with web browsers. + + - WindowList: Shorten windownames before using scrollbar (patch + from E. Kahler). + + - Biff: + + Mail-checking methods now work as advertised (thanks R. Angiel + and G. Dezern). I hope. + + Optional on-button display of number of new messages (except + for users of the mh method). (Thanks R. Angiel.) + + Display of new messages was too fancy, or not fancy enough, to + work right; now we just display the entire header with the message. + + MH method much, much improved thanks to G. Dezern. + + Multiple mailbox support thanks to G. Dezern. + + - Net: + + Added elapsed-time-of-connection counter. + + Deleted net-type from label. + + - Jots and Calc: respond sensibly to window manager DELETEs. + + - Icons: ruthless color-pruning. Now the icons use colors from a + palette of 19 colors, and tkgoodstuff's default widget colors are + among them. + + - tkxpm and tkfvwm: much tidier configure scripts (not using + autoconf), relying on tclConfig.sh and tkConfig.sh. Also, fvwm + source is no longer needed to compile tkfvwm (libfvwm2.a is now + installed at fvwm installation). M. Beynon contributed bug fixes. + +4.1b5: 2/27/96 + + Now tkgoodstuff assumes tk4.1b1 or later (we're aiming at supporting + the ultimate 4.1 release, and backward compatibility is too much + work). + + - tkgoodstuff: + + + We use the grid geometry manager rather than pack for almost + everything. TKGPack is superseded by TKGGrid. Had hoped that + this would make fullscreen mode easier, but no. + + + Added subpanels which are formed with StartPanel and + EndPanel, can be linked to a button with PanelButton, or placed + on the screen at startup with PutPanel. See the tkgoodstuffrc + html docs for more. + + + Now xpm capability is mandatory. I hope Ioi Lam's xpm image + type will get in the core before our main 4.1 release. + + + "create-label-box" renamed to "TKGLabelBox". NOTE!!! + + + AddButton and AddLabelBox no longer take a name as first + argument. NOTE!!! + + + Clock_zerotrim moved to tkgoodstuff and called TKGZeroTrim. + + + Use "ps -p [pid]" if "ps [pid]" gives an error, and don't + assume there's a STAT column in the ps output (thanks + J. Robinson). + + + Implement TKGAddToHook and TKGDoHook (general hook + utilities). Several hooks are defined (for client use) in + tkgoodstuff, Fvwm.tcl, etc. + + + Change default fonts to non-italic, non-bold. + + - Biff: avoid tcl7.5b1's gets bugs by not doing "gets $f var". + + - New client "Pager" by Eric Kahler. Check out the current + version in this distribution. Needs tkgoodstuff to be run as an + fvwm module (from the fvwm window manager). + + - New client "Chooser" by Eric Kahler. Pops up a window at + startup to let you choose among different tkgoodstuff + configuration files. + + - New client in "alpha" stage: Calc (dec/hex/oct calculator). + Has paper-tape-like scrollable history. Some features not + implemented, but it's fairly usable. I'm not inclined to develop + this further right now, so I'd be very happy if someone were to + adopt it. + + - New client in "beta" stage: Webster (net dictionary client). + Pops up a definition of the word you highlight (the current X + selection). Can use unix "webster" command, but also has its own + internal webster client code (using the new Tcl socket stuff, + with a kludge required because Tcl strings can't yet contain + NULLs). + + - The tkfvwm source is now included in the tkgoodstuf \ No newline at end of file diff --git a/doc/Example b/doc/Example new file mode 100755 index 0000000..b8aa5c1 --- /dev/null +++ b/doc/Example @@ -0,0 +1,55 @@ +# "Example" client code for tkgoodstuff +# (replace "Example" throughtout with your own client name) + + +# This gets called when the panel is being formed + +proc ExampleCreateWindow {} { + + # The following is for redrawing the button when the panel is + # redrawn, e.g., following a screen-edge move. + if [TKGReGrid Example] return + + global Example-params ;# The array of button parameters + + # This creates a tkgbutton and places it in the appropriate place + # in the panel. + TKGMakeButton Example \ + -imagefile xlogo.xpm \ + -text "Example" \ + -balloon "This is the\nballoon help text." \ + -command "ExampleButton1Command" + + # Bind mouse button 3 to another command + bind [set Example-params(pathname)] <3> ExampleButton3Command +} + +proc ExampleButton1Command {} { + TKGNotice "This is the button 1 command" +} + +proc ExampleButton3Command {} { + TKGNotice "This is one part of the button 3 command" + + # This is how to do unix commands. Note the trailing "&", + # which puts the command in the background, so as not to + # freeze up tkgoodstuff! + exec xmessage "and this is the other part" & +} + +# Procedures with special functions: +# +# ExampleDoOnLoad: called when client is first loaded. +# +# ExampleDeclare: called just after all the DoOnLoads, and when the +# client is added in the preferences manager. Meant for calls to +# TKGDeclare. See any client for examples +# +# ExampleStart: called when all panels have been created (including +# after moving to another screen edge. +# +# ExampleSuspend: called when panel is about to be moved to +# another screen edge. + +DEBUG "Loaded Example.tcl" + diff --git a/doc/FAQ b/doc/FAQ new file mode 100755 index 0000000..03dc5af --- /dev/null +++ b/doc/FAQ @@ -0,0 +1,91 @@ +TKGOODSTUFF FAQ +--------------- + +-- It won't configure because: + + a. It can't find tclConfig.sh (and neither can I)! + + ANSWER: Your installation of tcl/tk is improper. Get the latest + from ftp://ftp.smli.com/pub/tcl. The files tclConfig.sh and + tkConfig.sh should automatically end up in the same directory as + the tcl and tk libraries (such as libtcl8.0.so). + + b. It can't find tclConfig.sh, but it's right there in + /smurf/glep/lib! + + ANSWER: Start from scratch with a CLEAN, freshly unpacked + distribution, and do: + ./configure --prefix=/smurf/glep + + c. It can't find tclsh8.0 or (wish8.0), but it's right there in + /smurf/glep/bin! + + ANSWER: Be sure your $PATH contains the directory containing + wish8.0. + +-- I have difficulty compiling it. + ANSWER: The most common problem is that a too-old version of tcl/tk + is getting in the way. Be sure there are no tclConfig.sh, + tkConfig.sh, tcl.h, and tk.h hanging around from earlier versions + of tcl/tk (earlier than the versions that tkgoodstuff needs). You + should certainly suspect this if you get such things as: + + undefined reference to `Tk_FontId' + +-- It configures and compiles fine, but it won't run. + + ANSWER: + 1. Did you install it? Do "make install". + 2. Are you sure you are executing the installed tkgoodstuff? + +-- When I run it, it dies with "wish8.0: can't load library + 'libtk8.0.so'". + + ANSWER: Your tcl/tk setup isn't properly installed. Be sure: + a. libtk8.0.so exists in a place where your system usually can + find libraries (e.g., /usr/local/lib). Perhaps you need to + add that directory to /etc/ld.so.conf. + b. the permissions on the file are right: the file is readable. + c. (if applicable) you have run "ldconfig" (as root). + +-- I have fvwm2 running, but it still says WindowList (or Pager) can't + run without fvwm2. + + ANSWER: Read the html docs more carefully. You have to make fvwm + run tkgoodstuff AS A MODULE. + +-- I launch tkgoodstuff as an fvwm module, and sometimes after + restarting tkgoodstuff several times fvwm eats up all of my CPU. + + ANSWER: This is fvwm's fault. My fix for it is incorporated in + fvwm2 versions 2.0.43 and later. So upgrade fvwm2 to 2.1 + (ftp://ftp.hpc.uh.edu/pub/fvwm). + +-- In screen-edge mode, sometimes (or always) my panel seems to try to + grow to the full size of the screen-edge, and then suddenly + collapses to a smaller size. I use fvwm or a derivative. + + ANSWER: This too is fvwm's fault. My (single-line) patch for fvwm2 + is included in the main directory of the tkgoodstuff distribution. + I think it will be incorporated in the next fvwm2 version after + 2.0.45. + +-- Tkgoodstuff (and my window manager, come to think of it) can't find + programs that I know are in my $PATH. + + ANSWER: They may be in your PATH when you run your shell in an + xterm, but they are not in the path of the program that launched + your window manager. Try setting (and using "export" or "setenv", + depending on the shell) PATH in your .xsession or .xinitrc, or in + whatever script starts your window manager. + +-- I get this annoying error/behavior/whatever... + + ANSWER: We'd love to know more about it. Write to the tkgoodstuff + mailing list tkgoodstuff@merv.philosophy.lsa.umich.edu WITH LOTS OF + DETAILS, including the exact versions of tkgoodstuff and tcl/tk and + (fvwm2 if you're using tkgoodstuff as an fvwm2 module), your + platform and OS, the entire stack trace from the error message (you + can copy it by selecting it with the mouse), your .tkgrc, and/or + whatever details you think might be relevant. Members of the list + might be able to help. diff --git a/doc/NOTICE b/doc/NOTICE new file mode 100755 index 0000000..f8dd71f --- /dev/null +++ b/doc/NOTICE @@ -0,0 +1,19 @@ +# tkgoodstuff by Mark Crimmins (markcrim@umich.edu) +# copyright (C) 1995-96, all rights reserved. +# Void where prohibited. Your mileage may vary. + +# Seriously, enjoy my handiwork, but don't sue me if it causes troubles. +# Also, the University of Michigan has NOTHING WHATEVER to do with this +# software. + +# This program (the tkgoodstuff package) 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 (version 2 of the License). 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. For a copy of the GNU General Public +# License, write to the Free Software Foundation, Inc., 675 Mass +# Ave, Cambridge, MA 02139, USA. + diff --git a/doc/biff.html b/doc/biff.html new file mode 100755 index 0000000..f21083c --- /dev/null +++ b/doc/biff.html @@ -0,0 +1,93 @@ + + + + TkGoodStuff Biff + + + + +

TkGoodStuff Biff

+ +

Description

+ +

The Biff client is a new-mail notifier. It provides a button on your +tkgoodstuff panel that can display an icon indicating the presence of new +mail, a text message indicating "No Mail"/"New Mail", +or both (optionally, "New Mail" is replaced by a counter of new +messages). A more detailed display is available in multiple-mailbox mode +(below).

+ +

Biff watches one or more "mailboxes": mail files, MH folders, +or mailboxes on remote IMAP servers. For each mailbox, at a set interval +Biff looks for unread messages in the mailbox and flags the presence of +new mail by beeping and changing the icon and/or label of the Biff button. +Each mailbox is assigned an "alert level", and the new-mail icon +indicates the maximum alert-level of all mailboxes with new mail.

+ +

If you configure Biff to watch just one mailbox, it will display on +the Biff button the number of new messages in it, if any, and mouse button +3 fetches a list of the messages. If you use multiple mailboxes, then mouse +button 3 produces a menu that indicates how many new messages are in each +mailbox, and which allows you to fetch a list of the messages in any of +them. You can click on a message in the message list to view the message +in full. If you like, Biff can also post a list of new messages in a mailbox +when they arrive. Also, if you use multiple mailboxes, you can replace +the normal Biff button in the tkgoodstuff panel with the menu of mailboxes, +allowing you to see at a glance how much new mail you have in all of your +mailboxes. You can also "tear off" the mailboxes menu to position +elsewhere on the screen.

+ +

Clicking mouse button 1 on the Biff button launches your mailer program +(the button stays depressed and inoperative until you exit the mailer program). +Button 2 instructs Biff to regard as old mail any current new mail (displaying +a no-mail icon and/or the label "No Mail"), and to wait until +you get yet more mail before notifying you.

+ +

For each mailbox, you can choose (in the preferences manager) between +several "methods" of testing for new mail: there are special +methods for mailboxes on IMAP servers and for MH mailboxes (you don't know +if your mailbox is MH-style? then it's almost certainly not), and three +methods for detecting new mail in standard mail files (including spool +files, such as the default mailbox /usr/spool/mail/username): "atime", +"filesize", and "internal". With the method "atime" +(the default), Biff decides that there's new mail when the file has been +modified when or after it has last been accessed (its mtime is no less +than its atime). With the method "filesize", Biff decides that +there's new mail when the file is nonempty. The "internal" method +scans the message headers for "Status:" lines, and treats messages +with a status of "N" or with no "Status:" line as new. +The "atime" or "internal" method is probably best for +those who keep old mail in their spool file. The "filesize" method +is better for those who normally regard all mail in the spool file as new +mail.

+ +

The MH method is only for those using MH mailboxes AND automatic incorporation +of new mail (e.g., by slocal or procmail), and is automatically used if +the folder to be checked starts with a "+". With the mh method, +we assume a message is new if it is in the "u" sequence in the +.mh_sequences file in the folder or if its atime isn't after its mtime. +NOTE: for automatic incorporation of new mail into MH folders, you must +pipe messages (using slocal or procmail or deliver) into the MH program +rcvstore, so that the MH unseen sequence is correctly updated. An example +from my .procmailrc:

+ +
MHLIB=/usr/lib/mh
+:0
+* ^(To|Cc|Subject):.*tkgoodstuff.*
+|$MHLIB/rcvstore +tkg
+ +

The IMAP method is for mailboxes on remote IMAP servers. You need to +supply the mailbox name and your user name (at the server). Note: if you +are unsure about the mailbox name, very likely your mailbox at the server +is called "INBOX". You can supply your password (at the server) +in the preferences manager, in which case it will be stored in your +.tkgrc file (which it's up to you to protect!!), or you can leave your +password blank in the preferences manager, in which case tkgoodstuff will +ask you for it when the mailbox is first accessed.

+ +

All parameters are adjustable in the preferences manager.

+ +
Thanks to G. Dezern.
+ + + diff --git a/doc/chooser.html b/doc/chooser.html new file mode 100755 index 0000000..adb148d --- /dev/null +++ b/doc/chooser.html @@ -0,0 +1,41 @@ + +tkgoodstuff Watchdog + + + + +

tkgoodstuff Chooser

+ +by Eric Kahler (ekahler@mars.superlink.net) + +

Description

+ +Chooser is a simple client which allows the user to restart +tkgoodstuff with a different configuration file, without having to +exit tkgoodstuff. Choosing a different configuration can be done by +pressing one of a series of buttons which correspond to configuration +files, and/or by selecting a configuration file choice from the +tkgoodstuff menu. + +

Invocation and Variables

+ +While the Chooser client can be added from the preferences manager, +quite possibly you will want to use it in a panel that contains only +the Chooser client, and so doesn't contain the Clock or the Menu +client, and so offers no way to reach the preferences manager. Thus, +you might want to configure a configuration file by hand. Here is an +example (of an entire tkgoodstuff configuration file) that should show +you how to explicitly specify configuration files: + +
-------Configuration-------
+TKGSet ChooserList {/usr/local/lib/tkgconfigs/config1 /usr/local/lib/tkgconfigs/config2} 
+Client Chooser
+ +Here is how to select every file in a given directory: + +
-------Configuration-------
+TKGSet ChooserList /usr/local/lib/tkgconfigs 
+Client Chooser
+ +It is crucial that the first line of the configuration file is as in these +examples (the word "Configuration" with seven dashes on either side). diff --git a/doc/clock.html b/doc/clock.html new file mode 100755 index 0000000..dd8427f --- /dev/null +++ b/doc/clock.html @@ -0,0 +1,38 @@ + +TkGoodStuff Clock + + + +

TkGoodStuff Clock

+ +

Description

+ +The Clock client is an analog and digital alarm clock and date +display. It can display any combination of an analog clock, the +(digital) time, and the date. In combinations, you can choose a +horizontal or a vertical orientation. + +

+ +The alarm utility is used by selecting ALARM from the +tkgoodstuff menu and following the simple instructions. When set, a +little "A" appears in the top left corner of the analog clock frame, +if you are using the analog clock; the color of the font changes if +you are using only the digital clock. The alarm itself is a beep and +a dialog box containing the message, if any, that you typed in when +setting the alarm. + +

+ +If only the time (or only the date) is displayed, you can see the date +(or the time) by entering the clock display briefuly with the mouse pointer. + +

+ +The Clock also serves as a clicking-point for the tkgoodstuff popup +menu (mouse button 1). + +

Invocation

+ +All parameters are adjustable in the preferences manager. + diff --git a/doc/dialer.html b/doc/dialer.html new file mode 100755 index 0000000..26be007 --- /dev/null +++ b/doc/dialer.html @@ -0,0 +1,55 @@ + +Dialer + + + +

TkGoodStuff Dialer

+ +

Description

+ +Dialer is a stand-alone program that is included in the tkgoodstuff +distibution. It dials your modem, executes a login script, and +(optionally) issues a command to set up the network (such as a pppd +command). + +

It USED TO BE that to run Dialer you needed the expectk program, +but no longer (now Dialer runs on basic tcl/tk). + +

+Dialer expects a Hayes-compatible modem (like nearly all modems sold +these days). +

+ +

+ +The status of the connection-attempt is presented in a dialog box on +the screen. You see what number is being dialed, what speed you +connect at, and the reason for any failure to connect. + +

+ +All settings are configurable in the Settings window (click the +"Settings" button). You need to set your modem port and port speed, +and the phone number (or list of numbers, or a repeat-dialing script) +you want to dial. Optionally, you can set one or two modem init +strings and a unix command to execute when successfully connected +(like pppd). You also can construct a login script. This is all done +on-line and is self-documenting (use the "Help" menu in the Settings +window). You save your settings information in a file in the usual +way (with "Save" in the pull-down "File" menu), and you can have +different settings stored in different files. + +

+ +At startup you can indicate your settings file and also a command to +run right away (the command "Dial" starts the dialing just like +hitting the "Dial" button. So, to start dialing right away, you issue +a unix command like this: +

+Dialer /home/markcrim/.DialSettings Dial
+
+ +

I use Dialer on my Linux home computer, and I do not have access +to any other unix platforms with dial-out modems, so I cannot be sure +this will work on other platforms. But I have heard good things from +people on various Unix platforms, so it's worth a try. diff --git a/doc/fvwm.html b/doc/fvwm.html new file mode 100755 index 0000000..bd39337 --- /dev/null +++ b/doc/fvwm.html @@ -0,0 +1,116 @@ + + + + TkGoodStuff Fvwm Client + + + + +

TkGoodStuff Fvwm2 Interface

+ +

Description

+ +

Tkgoodstuff can interact with the fvwm2 +window manager (or the fvwm95 +window manager; but see below).

+ +

The main reason for the Fvwm2 interface is to enable some of tkgoodstuff's +cool clients: WindowList and Pager. +The Fvwm2 interface also makes the default behavior of a depressed unix +command button to move to and raise the (next) window in which the command +is running. Also, for each button you can choose "fvwm button + behavior", which means that the button's relief will depend on + whether there is any open window whose name matches a specified + pattern (whether you started the app with the tkgoodstuff button + or not).

+ +

It also allows you to:

+ +
    +
  • Use the tcl commands of the tkfvwm extension in your buttons and clients. +To give a hint of the sort of thing you can do by sending commands to fvwm, +here is a Tcl command (contributed by Eric Kahler), that tells fvwm to +post its "Utilities" menu (you can make a button run this command): +
  • + +
    fvwm send 0 {Menu Utilities Nop ""}
    + 
    + +
  • Use the tcl command "FvwmNextOrExec" (say, with a button), +which raises the (next) window of the application you specify if it's already +running, or starts the application if not.
  • + +
  • Use the tcl command "FvwmNext", which moves to and raises +the next instance of the application you specify.
  • +
+ +

Invocation and Use

+ +

You do not do anything in your tkgoodstuff preferences to use the +fvwm2 interface. It loads automatically if tkgoodstuff is started as an +fvwm module.

+ +

The fvwm2 interface REQUIRES that you run fvwm2. It has usually +worked with fvwm95 just fine; however, I don't keep up with fvwm95, so +there's no guarantee that it will work with the latest version. Note that +fvwm2 allows "mini-icons" in the title bar, and otherwise lets +you set the appearance of windows to look much like fvwm95. Fvwm2 is also +very well supported. I recommend it highly.

+ +

You must start tkgoodstuff as an fvwm2 module. +To do this, in your .fvwm2rc set ModulePath to a directory path which includes +your tkgoodstuff library directory. For example:

+ +
ModulePath /usr/lib/X11/fvwm2:/usr/local/lib/tkgoodstuff
+ +

You now have an fvwm2 module called "tkgoodstuff", which you +invoke like any other fvwm2 module, e.g., in fvwm2's InitFunction. Here's +how:

+ +
AddToFunc InitFunction "I" Module tkgoodstuff
+ +

You also can make "Module tkgoodstuff" an item on your fvwm +menus. To specify a configuration file, use "Module tkgoodstuff -f +filename".

+ +

Also, if you use tkgoodstuff as a module, the fvwm2 window style pararmeters +for the tkgoodstuff panel will be set automatically (though you can defeat +this in the preferences manager).

+ +

FvvwmNextOrExec

+ +

You can use FvwmNextOrExec wherever a tcl command is called for---e.g., +in a Button or Menu item, as follows:

+ +
FvwmNextOrExec emacs
+ +

This will zap you to a running emacs window, or start emacs if there +is no such window. (What it actually does it to tell fvwm to move to and +raise the next window called "emacs" (either its window name +or its resource class) in tkgoodstuff's list of windows if there is one, +and to run the unix command "emacs" otherwise. An optional second +argument is for a different window name to look for (in case the window +is not called by the program name. This example, however, is probably not +something you would need to do, because a Button with the unix command +"emacs" (when tkgoodstuff is a module) does better automatically: +it makes the raised button run emacs and stay down until the emacs session +is over, AND clicking on the sunken button now focuses on an emacs window +(if there are several, we cycle through them). But FvwmNextOrExec +might be useful, for instance, if you prefer not to have a sunken button.

+ +

Also, there is a button option 'Fvwm button behavior', available in +the preferences manager, that makes the button's relief depend on whether +there are any windows of a given name (thus the button will be sunken even +if you started emacs before starting tkgoodstuff).

+ +

FvwmNext and FvwmPrev

+ +
FvwmNext cmd ?name?
+ +

(Primarily for "advanced" users and client writers.) These +commands enable you to go to the next (or previous) window with a given +name. Repeated calls will cycle through all windows with the given name. +

+ + + diff --git a/doc/ical.html b/doc/ical.html new file mode 100755 index 0000000..5ddd5ff --- /dev/null +++ b/doc/ical.html @@ -0,0 +1,30 @@ + +TkGoodStuff Ical + + + +

TkGoodStuff Ical

+ +

Description

+ +The Ical client is an alarm/calendar utility. It relies on the +calendar generated by the very nice program ical for its +information. The Ical client by default creates its own button +(though it also puts entries in the popup menu and lights up the clock +border to show that it's there, so you can configure it not to +produce its own button). The Ical client reads your calendar at +user-definable intervals (if it has changed), and posts alarms when +ical would have done so, had you left it running (the point of this +client is to free you from having to do that). The alarm dialogs have +buttons for launching ical (to read and modify the calendar) and for +selectively or globally stopping alarms. + +

One of the items the Ical client adds to the popup menu is a +command to list the items for the day (including appointments, +notices, and to-do items). This command can automatically be run at +startup. + +

Invocation

+ +All parameters are adjustable in the preferences manager. diff --git a/doc/icons.html b/doc/icons.html new file mode 100755 index 0000000..748b9fd --- /dev/null +++ b/doc/icons.html @@ -0,0 +1,31 @@ + + TkGoodStuff Images + + + +

Using Icons in TkGoodStuff

+ +The standard buttons (as used by Biff and Net, and the user-defined +Buttons) may contain icons and/or text. Icons are read in from +files. To specify an icon, you can give the full path name: +
+/usr/include/X11/bitmaps/stopsign.xbm
+
+or just the filename (stopsign.xbm), so long as the file is in a directory in the +icon path (set in the preference manager, by default to a path +containing just the "icons" subdirectory of the tkgoodstuff librarary +directory and the directory /usr/include/X11/pixmaps). + +

+ +What sorts of images can tkgoodstuff handle? You can use images that +are bitmaps, xpm's, ppm's, and gif's. More image formats likely will +become "standard" in the future. + +

+ +Formerly, you had to compile an additional package to get xpm image +support. Now, this functionality is compiled and installed +automatically at tkgoodstuff installation. + + diff --git a/doc/index-orig.html b/doc/index-orig.html new file mode 100755 index 0000000..ee2468c --- /dev/null +++ b/doc/index-orig.html @@ -0,0 +1,18 @@ + + + + tkgoodstuff + + + + + + + +
Oops! This document requires a browser with +FRAMES support, such as Netscape 2.0. +

+
-- Others browsers can see the same pages without the FRAMES interface. + + + diff --git a/doc/index.html b/doc/index.html new file mode 100755 index 0000000..f969de4 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,18 @@ + + + + tkgoodstuff + + +
+I have stopped all work on tkgoodstuff as of October 1, 1997. Anyone +who would like to take over, please email +me. I can supply sources and +some useful extra stuff. + +

+The tkgoodstuff home page as I left it is here. + + + + diff --git a/doc/install.html b/doc/install.html new file mode 100755 index 0000000..3c560ba --- /dev/null +++ b/doc/install.html @@ -0,0 +1,93 @@ + + + + tkgoodstuff + + + + +

tkgoodstuff: Availability and Installation

+ +

Get the source for the current version here: tkgoodstuff8.0-final.tar.gz +Older, and sometimes more stable, versions are available here.

+ +

To run this utility, you need tcl8.0 and tk8.0 (get the source at +ftp://ftp.smli.com/pub/tcl +).

+ +

(I used to maintain an ftp archive and a binary distribution for +Linux, but I don't have the time to deal with the requests for +assistance that that has generated.)

+ +

Once you have the tkgoodstuff distribution

+ +
    +
  1. Unpack it in a directory somewhere (say, /tmp). One way (suppose you +have the distribution in /tmp/):
  2. + +
        cd /tmp
    +    cat tkgoodstuff8.0-final.tgz | gunzip | tar xpf -
    +          
    + +
  3. cd to the source directory:
  4. + +
        cd /tmp/tkgoodstuff8.0-final
    +          
    + +

    Then type

    + +
        ./configure
    + +(If your relevant version of Tcl/Tk is in an odd place, such as +/smurf/gleb/lib/tclConfig.sh, you can specify --prefix=/smurf/glep.) + +

    If all goes well, you can type

    + +
        make
    +          
    + +

    and if all is still well, type

    + +
        make install
    +          
    + +

    This process will compile C code needed by tkgoodstuff, and install +tkgoodstuff's files in the appropriate places. Look in the FAQ for +hints if you encounter problems. + +

    + +

    Once you are finished, you can remove the source directory if you like +(all the needed files will have been copied to a library directory).

    + +
  5. If you have a standard unix spool setup, simply running tkgoodstuff +should give you a working setup. Enter the Preferences manager via the +tkgoodstuff menu to customize your setup.
  6. + +
  7. If you have problems, check the FAQ before + emailing the tkgoodstuff + mailing list
  8. . + +
  9. You probably will want to tell your window manager not to put a border, +handles, or a title on tkgoodstuff, and perhaps to leave it always on top +of other windows, and perhaps to make it "stick" in the same +spot on the screen when you move about a virtual desktop. You may also +want it not to be in the circulate list (the list of windows you go to +by hitting alt-TAB or some key sequence). To do all of this in fvwm2 add +the following lines to your .fvwm2rc:
  10. + +
    Style "tkgoodstuff" NoTitle, NoHandles, Sticky, WindowListSkip, StaysOnTop
    +Style "tkgoodstuff" BorderWidth 0,CirculateSkipIcon,CirculateSkip
    +          
    + +

    HOWEVER, if you use tkgoodstuff as an fvwm module +(which I recommend), you needn't do this, as tkgoodstuff will do it +automatically. If you use some other window manager, read its documentation---almost +certainly you can achieve most of the same effects.

    +
+ +

+

+ + + diff --git a/doc/jots.html b/doc/jots.html new file mode 100755 index 0000000..9f9e8f0 --- /dev/null +++ b/doc/jots.html @@ -0,0 +1,31 @@ + +TkGoodStuff Jots + + + +

TkGoodStuff Jots

+ +

Description

+ +The Jots client is a note keeper, intended as a handy tool for keeping +track of scraps of information (e.g., a diary, ftp/URL addresses, +ideas, etc.). There are much more sophisticated data-base tools, +but Jots is easy enough to invoke and use that you may actually use +it. The user has any number of "folders" of notes, each of which is +automatically tagged by the date and time it was created. There is a +"find" utility to find text within a folder, and a "hotlist" mechanism +to quickly maneuver among different folders. + +

+ +Jots by default has its own button on the tkgoodstuff panel, but +you can configure it instead to be invoked by pressing mouse button +3 over the Clock. + +

+ +More help for Jots is available in the "Help" menu of the Jots window. + +

Invocation

+ +All parameters are adjustable in the preferences manager. diff --git a/doc/load.html b/doc/load.html new file mode 100755 index 0000000..73127b2 --- /dev/null +++ b/doc/load.html @@ -0,0 +1,35 @@ + +TkGoodStuff Load + + + +

TkGoodStuff Load

+ +

Description

+ +

The Load client is a system load indicator, which displays a graph of +the current and recent system load and/or a digital display of the +current load. + +

The graphical display is a histogram drawn to an automatically +adjusting scale. A "Scale" preference parameter (by default 1) sets +the initial and smallest maximum of the graph. If the load +exceeds the current maximum, the scale automatically doubles, and a +red "tick" line is drawn to mark the old maximum. Thus, by default +the tick lines represent loads of 1, 2, 4, 8, and so on (this is less +cluttered than evenly spaced tick lines). When possible, the graph is +scaled back up. + +

Clicking mouse button 1 on the Load button (by default) launches +an xterm running "top" (so you can see what's causing the load). + +

The system load information is obtained from the /proc filesystem +if possible, and otherwise from the "uptime" command. Load will work +only if the output of the uptime command includes the current system +load as the third from last field on the line (as is standard). (If +you would prefer to obtain the load some other way, you need to change +the procedure "GetLoad" in the file Load.tcl.) + +

Invocation

+ +All parameters are adjustable in the preferences manager. diff --git a/doc/mailinglists.html b/doc/mailinglists.html new file mode 100755 index 0000000..833b80f --- /dev/null +++ b/doc/mailinglists.html @@ -0,0 +1,12 @@ + + + + Mailing Lists + + + +

Mailing Lists

+ + Tkgoodstuff mailing lists have been disabled as of October 1, 1997. + + diff --git a/doc/menu.html b/doc/menu.html new file mode 100755 index 0000000..66c54a9 --- /dev/null +++ b/doc/menu.html @@ -0,0 +1,48 @@ + +TkGoodStuff Menu + + + +

TkGoodStuff Menu

+ +

Description

+ +

The Menu client produces a button that produces a menu. The menu +is configured within the preferences manager. + +

Alternatively, the Menu client will not make a button, but will +replace the main tkgoodstuff popup menu as the menu produced by mouse +button 1 on the clock face. + +

Configuration

+ +

In the preferences manager, there is a GUI menu-editing tool, which +(hopefully) is self-explanatory. + +

The following items can be added to the menu: + +

Menu
+This creates a new sub-menu within whatever menu you are currently +defining. + +

Execute
This creates a menu item to which you give a +label and assign a unix command line to be executed when this item is +selected. + +

Tcl Command
This creates a menu item to which you give a +label and assign a Tcl command line to be executed when this item is +selected. + +

tkgoodstuff Menu
This creates a menu item within whatever menu +you are currently defining, which is labelled "TkGoodStuff Menu", and +which produces the tkgoodstuff popup menu when selected. This is so +that you can get the tkgoodstuff menu even if you replace it with the +Menu client menu on the clock face (by telling the Menu client not to +produce a button). + +

Separator
+This inserts a horizontal separator line in the menu. + +

Run . . . +This inserts an item in the menu which, when selected, calls up a +dialog window allowing you to enter a unix command to execute. diff --git a/doc/net.html b/doc/net.html new file mode 100755 index 0000000..b0cc8c7 --- /dev/null +++ b/doc/net.html @@ -0,0 +1,52 @@ + +TkGoodStuff Net + + + +

TkGoodStuff Net

+ +

Description

+ +The Net client is a dialup (PPP/SLIP/TERM) link status indicator and +up/down toggler. + +

+Clicking on the Net button instructs the Net client to toggle (open or +close) the network link. + +

One possible way to have Net open a dial-in link (e.g., ppp or term) +is to use the GUI program Dialer, which is +included in the tkgoodstuff distribution, to dial your modem and set +up the link.

+ +

The client periodically checks whether the link is up or down, and +displays a "lit" up-arrow and/or "Net up", or an "unlit" down-arrow +and/or "Net down" accordingly. The client checks the line status more +frequently for a while after it executes a command to open or close +the link. + +

By default, the label on the Net button, when connected, shows the +elapsed time of the connection (up to 24 hours). + +

+The Net client also can periodically issue a "ping" command, which may +be useful for keeping active a link that the remote host would +disconnect if idle for too long. +

+ +

Invocation

+ +All parameters are adjustable in the preferences manager. + +

If the default doesn't work (give it a try), you need to specify a +unix command to test whether the net is up (the command should return +successfully (exit status zero) if the net is up, and otherwise. The +default is + +

 ifconfig | grep ppp <\PRE>
+
+You also may need to specify a command to get your IP address if you
+want to use the auto-ping feature.  The command should return an
+address like "141.211.43.12".  The default is:
+
 ifconfig | grep inet.*P-t-P | sed s/inet.*r:// | sed s/P-t-P.*//
+<\PRE>
diff --git a/doc/pager.html b/doc/pager.html
new file mode 100755
index 0000000..cc1a43e
--- /dev/null
+++ b/doc/pager.html
@@ -0,0 +1,39 @@
+
+
+
+   TkGoodStuff Pager
+   
+
+
+
+

TkGoodStuff Pager

+ +

Description

+ +

Pager is a client for TkGoodstuff which provides an interface to the +multiple desktops of the Fvwm2 window +manager. Pager monitors for the switching of desktops and pages, and +allows one to switch desktops and pages by pressing mouse button 1 on the +panel corresponding to the desired page. The present page appears as a +sunken panel, and all pages with active applications on them appear colored. +

+ +

Pager works only when tkgoodstuff is invoked as an fvwm2 module. +

+ +

The WindowList client interacts with Pager, so that clicking on an icon +in TkGoodstuff's WindowList with mouse button 2 and draging the cursor +to the desired page (releasing the button on the desired page) will move +the application to that page.

+ +

Clicking repeatedly on page cycles through the open windows on the page. +

+ +

Invocation

+ +

All parameters are adjustable in the preferences manager.

+ +

Thanks to Eric Kahler

+ + + diff --git a/doc/popimap.html b/doc/popimap.html new file mode 100755 index 0000000..47a875f --- /dev/null +++ b/doc/popimap.html @@ -0,0 +1,88 @@ + + + TkGoodStuff PopImap + + + + + +

TkGoodStuff PopImap Utility

+ +

Function

+ +

The PopImap client automates the fetching of your mail from remote POP + or IMAP servers to your local machine. Once the mail is on your local + machine, you can use any mail reader you like (rather than having to + make do with one you don't really like that supports the needed client + protocol).

+ +

The client really is little more than a scheduler for a unix + mail-fetching command that you provide (it is not itself a POP or IMAP + client; you need to get a mail-fetching client, on which see below). + You configure the client by telling it what unix command will get your + new mail from your remote server, and (optionally) what remote command + will fetch an entire remote mailbox (including old messages), and + replace a local mailbox with it.

+ +

Interaction with other tkgoodstuff Clients

+ +

One convenient feature is that the Net client knows about PopImap + and vice versa, so that if both clients are used, PopImap doesn't try + to check for mail when the Net line is down, and when the Net line + goes up, Net schedules the periodic PopImap new mail checking to start + right away (so that your new mail gets to you quickly).

+ +

Use

+ +

In the preferences manager you will need to set preferences that + indicate how frequently to look for new mail on the remote server, as + well as the unix command that does the looking, and (optionally) the + unix command that copies the entire remote mailbox over the local one + (replacing it). The real work comes in setting up these unix + commands, which may require finding some programs you don't + yet have.

+ +

See also Biff's IMAP method, which doesn't + require any external IMAP program.

+ +

Where to Find POP and IMAP Fetching + Utilities

+ +

Here I have a decided lack of expertise. I would very much appreciate + pointers to stuff I don't know about.

+
    +
  • POP
+
    +
  • "fetchpop". The author claims it is very stable and + feature-rich. Get it at + ftp://sunsite.unc.edu in pub/Linux/system/Mail/pop (it's not just + for linux).
  • +
  • "popclient". Also at sunsite.
  • +
  • "pop-perl". Also at sunsite.
  • +
+
  • IMAP
  • +
      +
    • + imapcopy, which requires + + imap.tar.Z to compile. This utility nondestructively + copies all of the remote mailbox, appending all of its + messages to your local spool file or other local mailbox + (including mh folders!). +
    • +
    • imapmove (simply a unix link to imapcopy), which deletes + all of the remote mailbox after copying as in imapcopy. +
    • +
    • I encourage anyone with a little knowledge of C to look + at the imapcopy utility to get a sense of what's possible with + a little hacking.
    • +
    + + +

    Invocation

    + +

    All parameters are adjustable in the preferences manager.

    + +
    diff --git a/doc/preferences.html b/doc/preferences.html new file mode 100755 index 0000000..866ba06 --- /dev/null +++ b/doc/preferences.html @@ -0,0 +1,233 @@ + + + + tkgoodstuff Preferences Manager + + + + +

    Configuring TkGoodStuff with the Preferences Manager

    + +

    The preferences manager lets you view and set all preferences and configuration +parameters for tkgoodstuff. You enter it from the tkgoodstuff menu (which, +by default, is available by clicking on the clock and also within a menu +on the Menu client button).

    + +

    In addition to selecting and arranging the elements of your panels, +you can adjust fonts, colors, icons, "tiled" backgounds, the +default screen-edge or orientation, and a zillion other things, including +the setup for each client (e.g., the Menu client's menu, the Biff client's +mailboxes, etc.).

    + +

    Changes do not take effect until they are saved and tkgoodstuff is restarted. +All configuration information is saved to the configuration file (by default, +".tkgrc" in the user's home directory---which you can edit + by hand if things go so wrong that the preferences manager won't + work).

    + +

    + +

    Setting Preferences

    + +

    It should be fairly obvious how to set various preferences: you find +them through the notebook pages and menus in the preference manager and +set them, e.g., by clicking on an indicator or by entering text.

    + +

    You might want to set a preference based on an environment variable. +You can do this by using "$env" as follows. To set a certain +preference to a value based on the user's home directory, you can enter +this:

    + +
    $env(HOME)/whatever
    + 
    + +

    + +

    Including and Configuring a Client

    + +

    To include a client (for example, Clock), you enter the preferences +manager and use mouse button 3 at the desired point in the configuration +(which is presented as a hierarchical list) to choose "Insert", +at which point you enter the name of the client.

    + +

    You configure a client in the preferences manager (double click on its +entry in the configuration).

    + +

    + +

    Adding a Button

    + +

    You can easily add a button to display an icon and/or a bit of text, +which runs a command when pressed. You need to decide:

    + +
      +
    • If you want an icon on your button, then the icon filename. The +file can contain an image of any of several formats (see Icons +for more).
    • + +
    • If you want a bit of text on the button (either under the icon or by +itself), then the text string (a "\n" in the string makes a line +break for multi-line text). E.g., "Telnet to/nwork".
    • + +
    • The (unix) command to run. E.g.:
    • + +
       xdir "xless /var/adm/syslog" 
      + rxvt -T Syslog -sl 400 -e {"tail -400 -f /var/adm/syslog"}
      + rxvt -T Syslog -sl 400 -e \"tail -400 -f /var/adm/syslog\" 
      + +

      (The last two are equivalent.)

      +
    + +

    You add the button in the Prefernces manager by choosing "Insert" +with mouse button 3 at the desired place in your configuration, and entering +the desired information. Double-click on the Button's entry in the configuration +to configure it.

    + +

    Notes:

    + +
      +
    • The expression "@selection@" in a unix or tcl command will +be replaced by the current X selection.
    • + +
    • By default, a unix command button stays down and inoperative after +you press it until the launched unix command terminates. This is so you +can see that you're already running that command. You can configure the +button to pop back up after launching the command, ready to launch the +command again.
    • + +
    • When you press an already-depressed unix command button, if +you are running tkgoodstuff as an fvwm module, by default you move to the +next window that is named by the name of the unix command of the button. +But you can configure the button to look for an alternative window name +(for instance, the program tkman names its window "TkMan", netscape +"Netscape" and so on).
    • +
    + +

    + +

    PanelButtons

    + +

    A PanelButton is like a standard tkgoodstuff button, except that what +it does is to produce an additional tkgoodstuff panel adjacent to the panel +containing the PanelButton (this allows you to group a of buttons together +and have them appear when you press a single button in your main panel). +To add such a button use the "Insert" mouse-3 menu item, and +double-click to configure.

    + +

    See below on how to create Panels.

    + +

    PutPanel

    + +

    Instead of having a Panel produced by a PanelButton, you might want +an additional Panel to be placed on the screen at startup. To do this, +(as always) use the "Insert" mouse-3 menu item, and double-click +to configure.

    + +

    See below for how to create Panels.

    + +

    Adding a Label Box

    + +

    To add a box containing a bit of text (which differs from a button in +look, in color, and in that it doesn't run any command), use the good old +"Insert" trick.

    + +

    Swallowing an Application

    + +

    If you want to include a utility that tkgoodstuff doesn't provide, you +can incorporate it in your tkgoodstuff panel as a "Swallow" item. +Use the preferences manager to do this.

    + +

    WARNING: this can be tricky. Some hints:

    + +
      +
    • Before starting, be sure you know the windowname of the window that +you want to swallow. By default we look for the name of the application, +but many applications produce windows with different names. If you don't +specify the correct name, tkgoodstuff will wait forever for the window +to show up.
    • + +
    • It sometimes helps to specify in the application command line a geometry +for the application that is larger than the window you want to produce. +
    • + +
    • If the application has a set size, you can find out what it is with +fvwm's Identify module (if you use fvwm).
    • + +
    • In your application command line, you can specify the tkg background +color (for your application to use) as \$background (same for foreground +and some other resources). Also, use \$width to specify the Swallow +window width (same for height).
    • + +
    • If you are running tkgoodstuff as an fvwm module, you can swallow other +fvwm modules (like FvwmPager) simply by using the module name in place +of a unix command.
    • +
    + +

    + +

    Filling Space

    + +

    If you are using screen-edge mode (for a bar covering one edge of the +screen), then by default all the buttons, clients, etc., are stacked together +in the middle of the bar. But you can indicate where the buttons, clients, +etc., are to be broken apart by the item "Fill" (which you insert +into your configuration like anything else). For example, suppose you have +screen-edge mode set to "bottom", you have four buttons in your +bar, and you include "Fill" items between the first and second, +and between the third and fourth Button items. Then, your bar will contain +the first button at the far left, the second and third buttons together +in the middle, and the fourth button at the far right. (The WindowList +client behaves like a "Fill" region; in particular, in the absence +of Fill commands, it uses all available space.)

    + +

    Stacks

    + +

    The Screen Geometry screen-edge and orientaton preferences govern the +main orientation of your panel; it may be either horizontal or vertical. +If you simply add elements (Clients, Buttons, etc.), these elements will +be stacked all in a row left-to-right (if horizontal) or top-to-bottom +(if vertical). This probably is what you want in an always-on-top desktop +button bar. However you may want to stack two or three small buttons together, +or to generate a fancier panel, with several rows or with several bundles +of related buttons and label-boxes of different sizes, as in this screenshot +(available only on the tkgoodstuff web page; to see it otherwise, just +run "tkgoodstuff -f stacks" in the sample-rc directory).

    + +

    A Stack is itself an item, which is placed in your panel just like a +Button. The difference is that a Stack can have items placed within it. +These items are stacked together in the orientation you choose (you can +also configure other features of a Stack). To explain the stacking commands +it is easiest just to explain how the fancy example was created. We start +horizontally (the Orientation preference is set to horizontal). We will +put together two things horizontally, both of them vertical Stacks. These +are the only items that are in the main stack itself. The first vertical +Stack starts with the Clock client and a labelbox ("Utilities"). +Then we want three buttons side-by-side, so we start a new horizontal Stack. +In this Stack we insert three Buttons. This puts us back in the construction +of our first (vertical) Stack, which so far contains the Clock, the "Utilities" +label, and the Stack we have just finished. The last thing in this vertical +Stack will be another horizontal Stack, this one with a colored border +four pixels wide. Two Buttons are inserted in this bordered Stack. Now +we're done with the first main vertical Stack.

    + +

    This puts us back in the orignal (horizontal) orientation, outside of +all Stacks. So the next item we define will go to the right of the big +vertical Stack we have just defined. This item will be an even bigger vertical +Stack, which contains a label box, a horizontal Stack (which contains the +Net Client, the Load Client, and a vertical Stack of three Buttons) and +a (gold-bordered) vertical Stack, which contains a label box and a horizontal +Stack (which contains three Buttons and a vertical Stack containing three +Buttons).

    + +

    I hope that makes the working of the stacking apparatus clear. If not, +play around with it and you will figure it out.

    + +

    Panels

    + +

    You create a Panel by "Inserting" it anywhere in your configuration. +It doesn't matter where you insert it, since it is not an item that is +placed inside the main panel, but rather is placed by a PutPanel item or +a PanelButton. Various features of the Panel can be configured.

    + + + diff --git a/doc/running.html b/doc/running.html new file mode 100755 index 0000000..5823a83 --- /dev/null +++ b/doc/running.html @@ -0,0 +1,89 @@ + +Running TkGoodStuff + + + +

    Running TkGoodStuff

    + +

    Table of Contents (this document)

    + + + +

    Invocation

    + +You invoke tkgoodstuff by issuing a command of the following form: +
    +tkgoodstuff [-geometry -3+0] [-f configfilename ]
    +
    +Here, the brackets indicate optional arguments, which are discussed below. +

    + +

    Geometry

    + +There are two geometry modes: screen-edge and normal: + +

    Screen-edge mode

    + +If you set screen-edge mode ("no" by default) to "left", "right", "top", +or "bottom", tkgoodstuff will span that edge of the screen. + +

    Normal mode

    + +If fullscreen mode is "no" (as by default), tkgoodstuff looks in two +places for geometry (screen location) information. A geometry +specification is a string that identifies a point on the screen by its +x and y distances in pixels from the top (or bottom) and left (or +right) edges of your screen: + + + + + + + + + + +
    Specification Puts the tkgoodstuff Panel . . .
    +1-123 1 pixel from the left and +123 pixels from the bottom of the screen
    -1+123 1 pixel from the right and +123 pixels from the bottom of the screen
    + +

    +tkgoodstuff chooses the first geometry specification it finds in the +following ways: +

      +
    1. In the command line, as follows: +
      +       tkgoodstuff -geometry +34-88
      +       
      +
    2. +
    3. In the current preferences. +
    4. +
    + +

    Determination of Configuration File

    + + tkgoodstuff needs a configuration file to run. It uses the first + file it finds in the following ways: +
      +
    1. Named on the command line, as follows (where "configfilename" is the name + of your file): +
      +       tkgoodstuff -f configfilename
      +       
      +
    2. +
    3. In your home directory (as set in the environment variable + HOME) under the name .tkgrc.
    4. +
    5. In the tkgoodstuff directory (by default, + /usr/local/lib/tkgoodstuff), under the name system-tkgrc. +
    + +Using the "-f configfilename" form allows you to have many different +panels defined for different purposes. + + + diff --git a/doc/screenshots.html b/doc/screenshots.html new file mode 100755 index 0000000..d78a7e9 --- /dev/null +++ b/doc/screenshots.html @@ -0,0 +1,16 @@ + + + + tkgoodstuff + + + + + + + +
    Oops! This document requires a browser with frames support.

    +
    -- Others browsers can see the same pages without the FRAMES interface. + + + diff --git a/doc/shots.html b/doc/shots.html new file mode 100755 index 0000000..067cc58 --- /dev/null +++ b/doc/shots.html @@ -0,0 +1,20 @@ + + + + tkgoodstuff + + + + + + + + + + + + + +

    Task Bar

    Vertical Task Bar

    Home System

    Minimal

    Big Mess

    + + diff --git a/doc/tkgoodstuff.html b/doc/tkgoodstuff.html new file mode 100755 index 0000000..9c86fe4 --- /dev/null +++ b/doc/tkgoodstuff.html @@ -0,0 +1,151 @@ + + + + tkgoodstuff + + + + +
    +
    +

    tkgoodstuff

    + +Screenshots: +
    +A few sample configurations
    + +Eric Kahler's desktop
    + +CoffeeNet Help Page +
    + +

    Tkgoodstuff for the X Window System is a utility panel---normally, +a button bar. It is easily configured and modified using a GUI +preferences manager. Some "clients" are included: +analog/digital alarm clock, new-mail indicator, log file watcher, WWW +browser launcher, dialup network dialer and status indicator, note +taker/manager, calendar program alarm daemon, POP/IMAP mail fetching +scheduler, system load display, system menu, and fvwm (window manager) +support, including a window list (buttons for all running +applications) and virtual desktop pager. See below for details about +the clients. In addition to the clients, you can configure buttons to +run commands, and you can embed any X program window in your bar (such +as xosview, FvwmPager, etc.).

    + +

    Tkgoodstuff, especially when used with the fvwm window manager, can +be set up to behave in many ways like the Win95 taskbar (spanning any edge +of the screen, containing buttons for every running application, with the +ability to "hide" along the side of the screen and to be "dragged" +to another side, with a GUI-configurable menu, etc.). But it is not a taskbar +"clone" and is considerably more customizable.

    + +

    Included Clients

    + +
      +
    • Clock: analog and/or digital time and/or +date alarm clock.
    • + +
    • Biff: a feature-rich mail checker.
    • + +
    • Net: indicates the status of a PPP or +SLIP connection and allows you to bring the connection up or down with +a click. Also can display net uptime, and can periodically "ping" +so that the remote host won't close an inactive connection. Included is +a GUI Dialer program, which you can call from +Net to dial your modem (with nice repeat-dial features), log you in, and +start your network software while you watch.
    • + +
    • Jots: A tool for writing, editing, and +searching for notes: diary entries, addresses, ftp sources, ideas, etc. +Support for easy shuffling between multiple "folders" of entries. +
    • + +
    • WWW: Launch your web browser or instruct +the browser to visit the URL in the current X selection.
    • + +
    • Watch: This client watches one or more +files (e.g., log files) for changes with configurable alerts (and can display +the files).
    • + +
    • Load: An xload-like system load-average +display (auto-scaling graphical, digital, or both). Button 1 launches an +xterm running (for example) "top".
    • + +
    • Menu: A button that produces a menu, +which is easily configured in the GUI preferences manager.
    • + +
    • Webster: Retrieve (over the net) +the dictionary definition of a word (the current X selection).
    • + +
    • Ical: The program ical +(as opposed to this client) is a nice calendar program. The client reads +your ical calendar and serves as an alarm daemon, posting alarm notices +to your screen when ical would if you had it running.
    • + +
    • PopImap: periodically run pop or +imap client to get any new mail on remote mail server. Don't get too excited: +the fetching is done by a program or script that you provide (e.g., fetchmail). +No button is produced by this client (though it produces some stuff in +the tkgoodstuff popup menu).
    • + +
    • WindowList: For use with Fvwm, +produces buttons for open/iconified windows (like the Win95 taskbar).
    • + +
    • Pager: For negotiating desktops with +Fvwm.
    • + +
    • Chooser: (by Eric Kahler) This client, +at tkgoodstuff start-up, posts a list of tkgoodstuff configuration files +to choose from.
    • + +
    • TkMan: (by Gary Dezern) The program +tkman +is a very nice man-page browser. Start tkman, or tell tkman to look up +the man page for the word in the current X selection.
    • +
    + +

    Customizing Features

    + +

    User-defined buttons

    + +

    The "standard" user-defined buttons can be configured to show +either icons or (multi-line) text labels or both at once (with the icon +on any side or in the background), and global options can request no labels +or no icons. Among the unlimited possibilities here are use of the current +X selection in your command, execution of unix and/or Tcl commands, and +more. See the documentation on configuration for more.

    + +

    "Swallow" Windows

    + +

    If you really like xosview or xdaliclock or whatever, you can embed +it within your panel as a Swallow item (tkgoodstuff "swallows" +the application window).

    + +

    Label boxes

    + +

    A label box contains text, e.g., to label a group of related buttons. +

    + +

    Stacks

    + +

    You can form vertical or horizontal stacks of elements (e.g., buttons +and labels or other stacks), that can be nested indefinitely. If you're +not careful, you might get something like the large example above (or worse). +

    + +

    Panels

    + +

    You can create multiple panels (of buttons, labels, etc.) to place at +different parts of the screen or to call up (like a menu) from a "PanelButton". + +

    Documentation

    + +

    The only documentation for tkgoodstuff is in these html pages, which +are included in the distribution's "doc" subdirectory. From the +"About tkgoodstuff (help)" window accessed from the popup menu, +you can launch a built-in help browser or your web browser (by default, +netscape) to read these pages (either your local copy, installed automatically +during tkgoodstuff installation, or the latest copy on the net).

    + + + diff --git a/doc/tkman.html b/doc/tkman.html new file mode 100755 index 0000000..97968cd --- /dev/null +++ b/doc/tkman.html @@ -0,0 +1,32 @@ + +TkGoodStuff TkMan + + + +

    TkGoodStuff TkMan

    + +by Gary Dezern (gdezern@uniquecr.sundial.net) + +

    Description

    + +The TkMan client is launcher for the tkman man-page reader. + +

    + +The TkMan button behaves as follows. Clicking mouse button 1 on the +TkMan button launches tkman (the button stays depressed and +inoperative until you exit tkman). Button 3 is used to direct tkman +to look up the man page for the word that is the current X selection +(e.g., highlighted with the mouse in some application). We start +tkman browser unless it's already running; if it's running, we simply +send tkman instructions. + +

    Invocation

    + +To include the TkMan button in your panel, include in your Configuration: + +
    +Client TkMan
    +
    + +All parameters are adjustable in the preferences manager. diff --git a/doc/toc.html b/doc/toc.html new file mode 100755 index 0000000..062c44a --- /dev/null +++ b/doc/toc.html @@ -0,0 +1,69 @@ + + + + tkgoodstuff + + + + + + +
    + + + + +
    +Getting
    + +Running
    + +Configuring
    + +Fvwm2 stuff
    + +Writing a client
    + +FAQ
    + +Recent changes
    + +Mailing Lists
    + +

    Clients:

    + +Clock
    + +Biff
    + +Menu
    + +Net
    + +Jots
    + +Watch
    + +Load
    + +WWW
    + +Ical
    + +Webster
    + +PopImap
    + +WindowList
    + +Pager
    + +Chooser
    + +TkMan +
    +

    +Latest version: 8.0-final
    1 Oct, 1997 + + + diff --git a/doc/watch.html b/doc/watch.html new file mode 100755 index 0000000..f9c5dff --- /dev/null +++ b/doc/watch.html @@ -0,0 +1,44 @@ + + + + TkGoodStuff Watch + + + + +

    TkGoodStuff Watch

    + +

    Description

    + +

    The Watch client is a file-change notifier. It provides a button on +your tkgoodstuff panel that can display an icon indicating the status +of a file, a text message indicating +"Unchanged"/"Changed", or both. A more detailed +display is available in multiple-file mode (below).

    + +

    Watch watches one or more files. For each file, at a configurable +interval Watch looks for a change to the file and flags the change by +beeping and changing the icon and/or label of the Watch button. Each +file is assigned an "alert level", and the icon indicates +the maximum alert-level of all changed files.

    + +

    If you configure Watch to watch just one file, mouse button 1 +produces a file-viewer (which updates each time the file is found to +have changed). If you use multiple files, then mouse button 3 +produces a menu that indicates which files have changed, and which +allows you to view any of them individually, and button 1 produces a +viewer of all the files simultaneously. If you like, Watch can also +pop-up the viewer for a file when it is changed. Also, if you use +multiple files, you can replace the normal Watch button in the +tkgoodstuff panel with the menu of files, allowing you to see at a +glance which files are changed. You can also "tear off" the +files menu to position elsewhere on the screen.

    + +

    Button 2 instructs Watch to regard files as unchanged.

    + +

    Invocation

    + +

    All parameters are adjustable in the preferences manager.

    + + + diff --git a/doc/webster.html b/doc/webster.html new file mode 100755 index 0000000..8345761 --- /dev/null +++ b/doc/webster.html @@ -0,0 +1,32 @@ + +TkGoodStuff Webster + + + +

    TkGoodStuff Webster

    + +

    Description

    + +The Webster client directs your web browswer to retrieve +dictionary-definitions over the net. + +

    To use it, highlight a word as the X selection, and click on the +Webster button; if all goes well, you will soon see a popup containing +the definition of the word. + +

    By default, this client produces a button on your tkgoodstuff +panel. But you can set preferences so that it will not, in which case +you can use the (Tcl) command "WebsterDefine" as a Menu client item. + +

    You can customize the URL if you have access to a +better dictionary server. If you know of a web page that has a "form" to fill +out to get a definition, to determine the needed URL you may have to look +at the html source of the page. Typically, you will want something like: +

    +http://www2.hti.umich.edu/bin/oed/oed-idx.pl?q1=@word@
    +
    +That's what I use, but I think only University of Michigan people can access +that server. The Webster default is Merriam-Webster's server: +
    +http://www.m-w.com/cgi-bin/mweb?book=Dictionary&va=@word@
    +
    diff --git a/doc/windowlist.html b/doc/windowlist.html new file mode 100755 index 0000000..f45e45c --- /dev/null +++ b/doc/windowlist.html @@ -0,0 +1,43 @@ + +TkGoodStuff WindowList Client + + + +

    TkGoodStuff WindowList Client

    + +

    Description

    + +

    This is for use with the fvwm2 +window manager, when tkgoodstuff is started as an fvwm2 module (see +the documentation for tkgoodstuff's Fvwm2 +functionality for how to do this). WindowList produces a window +containing buttons for each open or iconified window on your display +(here's a +screenshot). + +

    The sunken button corresponds to the current (focused) window, and +when a window is iconified, its button is grayed-out. Clicking mouse +button 1 on a window's button brings the window into focus (even if +it's iconified). Clicking button 3 iconifies the window. If the +Pager client is being used, button <2> allows you to "drag" a window +(from its WindowList button) to any page on the display. If the +buttons fill up the window so that some are out of view, the window +names are abbreviated, and if necessary a scrollbar is created. If +screen-edge mode is "no", you can adjust the height and width of the +window manually in the preferences manager. + +

    Since this functions as an icon manager, you probably don't want +fvwm2 to post icons. By default, tkgoodstuff will tell fvwm2 not to +post icons. But this will affect only windows created after +tkgoodstuff starts up. So if you normally start other apps (that you +might iconify) before tkgoodstuff, you may want to tell fvwm2 yourself +not to post icons. In fvwm2.0, the command (in your .fvwm2rc) is: +

    Style "*" NoIcon
    Be sure to put that AFTER any other Style +lines that define Icon in your .fvwm2rc (except for windows for which + you do want icons). + +

    Invocation

    + +All parameters are adjustable in the preferences manager. + diff --git a/doc/writingclients.html b/doc/writingclients.html new file mode 100755 index 0000000..00f7ae9 --- /dev/null +++ b/doc/writingclients.html @@ -0,0 +1,405 @@ + + + + Writing TkGoodStuff Clients + + + + +

    Writing TkGoodStuff Clients

    + +

    Table of Contents (this document)

    + + + +

    + +

    General Information

    + +

    Clients are housed in files with the extension ".tcl". They +might do anything at all, though what they in fact mainly do is to produce +buttons or displays and to run and to schedule tasks. Clients can be very +complex (like the Jots client, which is a notecard manager), or very simple. +

    + +

    There is a commented example of a very simple button-producing client +called "Example" in the file tcl/Example.tcl +in the tkgoodstuff library directory. You might start with it.

    + +

    This document is not as complete as it should be, but I think it's at +least mostly correct, and hopefully it's better than nothing. Still, +your best bet may be to look at the actual code for various clients. + +

    + +

    Basic Client Interface

    + +

    Let's assume you are writing a client named "Foo". Your Foo.tcl +file is "sourced" by tkgoodstuff when it reads the configuration +file (or when Foo is added in the preferences manager). If you have defined +a procedure "FooDoOnLoad", it is called then, as is "FooDeclare", +if it exists ("FooDeclare" is called also when Foo is added in +the preferences manager). "FooDeclare" should contain all your +calls to TKGDeclare (for declaring preferences items). TKGDeclare is described +below.

    + +

    When the panel is being drawn (or redrawn following, e.g., a screen-edge +move), the procedure "FooCreateWindow" is called if it exists. +Ordinarily "FooCreateWindow" will make a call to TKGMakeButton +or TKGLabelBox to produce a button or display window in the panel at the +appropriate place. After all panels have been drawn, the procedure "FooStart", +if it exists, will be called. During a screenedge move, the procedure "FooSuspend" +will be called, if it exists, the client window will be ungridded, and +then when the panel is redrawn "FooCreateWindow" and "FooStart" +will be called.

    + +

    TKGButton

    + +

    A "tkgbutton" is a button with either text, an icon, or both +on its face. This command can be used either to create a button (but see +TKGMakeButton) or to configure an existing button. If TKGButton is used +to create a button, the button is not placed in the tkgoodstuff panel until +TKGGrid is invoked. The syntax is as follows:

    + +
    TKGButton name arguments
    +
    + +

    The name is an arbitrary name for the window (containing only +characters suitable for variables). The other arguments are all optional +(most also take "modified" forms; see the "-mode" switch +for more about this):

    + +
  • -pathname pathname
    +This switch is used when creating the button (but see also TKGMakeButton, +which is the easier way to make a TKGButton for inclusion in the tkgoodstuff +panel). The value must be a tk pathname.
  • + +
  • -image tkimage
    +The value must be an already-created tk image. The button will display +the image.
  • + +
  • -text textstring
    +The button will display the text indicated.
  • + +
  • -font (standard font specifier)
    +The button will display text (if any) using this font.
  • + +
  • -exec command
    +The button, when pressed, will lauch the indicated unix command. Regular +Tcl substitution is performed on the command string at execution.
  • + +
  • -command command
    +The button, when pressed, will perform the indicated tcl command. Regular +Tcl substitution is performed on the command string at execution.
  • + +
  • -menu menu
    +The button will be a tkgmenubutton, and produce the indicated menu. No +"exec" or "command" will be performed.
  • + +
  • -iconside left, right, top, bottom, or background
    +This sets the side of the button taken by the icon, when your button has +both an icon and text ("top" by default). If "background", +then the text is written over the icon.
  • + +
  • -staydown 1 or 0
    +If 1 (which is the default), the button will stay down and inoperative +after you press it until the launched unix command terminates. This is +so you can see that you're already running that command. If 0, the button +pops back up after launching the command, ready to launch the command again. +
  • + +
  • -usebutton2 1 or 0
    +If 1 (which is the default), mouse button 2 will execute the button's unix +command, if any, whether the button is up or down, and whether or not the +unix command is already running.
  • + +
  • -windowname name
    +This affects what happens when you press an already-depressed unix command +button if you are running tkgoodstuff as an fvwm module. By default +you move to the next window that is named by the name of the unix command +of the button. But this switch allows you to look for an alternative window +name (for instance, the program tkman names its window "TkMan", +netscape "Netscape" and so on).
  • + +
  • -font font
    +The font to use for text on the button
  • + +
  • -ignore 1 or 0
    +If 1 (0 is the default), we will ignore the global iconsonly and labelsonly +variables.
  • + +
  • -state active or normal
    +The button goes into the active state automatically when the mouse pointer +enters, and into the normal state when it leaves. The state affects the +button's colors (see also the "mode" switch). This is useful +to call manually primarily when you pack a child window in a button (as +in the Load client) and want to set its colors.
  • + +
  • -foreground color
    +-background color
    +-activeforeground color
    +-activebackground color
    +These set the colors for the button.
  • + +
  • -padding (any number)
    +The number of pixels of empty space to put around icons and labels in buttons. +
  • + +
  • -mode mode
    +Switches the button to the indicated mode. Each mode for a button is associated +with values for text, image, exec, command, font, staydown, windowname, +and four colors: foreground, background, activeforeground, and activebackground. +Switching modes is the way to change a button's appearance and/or function +dramatically with a simple command. By default a button is in the "normal" +mode. For instance, Biff defines "nomail" and "newmail" +modes, and Net defines "netup", "netdn", and "netwt" +modes.
  • + +

    To set values for a mode, use modified switches like the following: +

    + +
         TKGButton Talk -foreground(notalk) red \
    +         -exec(notalk) {mesg y}
    +     
    + +

    (Unmodified switches set the values for the current mode.) The parameters +of the button are stored in a global array. If the name is "BarBar", +the pathname of the created window will be stored in the global variable +BarBar-params(window), the current mode in BarBar-params(mode). +Mode-sensitive parameters are stored as follows: e.g., the text is stored +in BarBar-params(text,normal) (supposing the button is in the normal +mode, as it is by default). (In fact this is the "textvariable" +for the button; setting it changes the button text directly.) There are +no "unmodified" parameters for mode-sensitive parameters. For +instance BarBar-params(text) does not exist.

    + +

    TKGButton is a wrapper around the widget commands "tkgbutton" +and "tkgmenubutton"(part of libtkg).

    + +

    TKGMakeButton

    + +
    TKGMakeButton name . . .
    +
    + +

    Creates the indicated button, assigns it an approriate pathname, and +packs it into the tkgoodstuff panel (at the position appropriate to the +current stacking context). If the name is "Foo", the pathname +is stored in the variable Foo-params(pathname). Takes the same arguments +as TKGButton (which it calls, in fact), except that it is silly to give +a "-pathname" switch to TKGMakeButton.

    + +

    TKGLabelBox

    + +

    Creates a "label box" is a window with text on its face. The +arguments are as follows:

    + +
    TKGLabelBox name [-label "label text"]
    +
    + +

    (The square braces indicate that the argument is optional. If no label +text is supplied, you get an empty frame, which is what Clock and Load +use.)

    + +

    The name is an arbitrary name for the window (containing only +characters suitable for variables). If the name is "BarBar", +the pathname of the created window will be stored in the global variable +BarBar_window.

    + +

    The text is a text string that will be displayed in the window. +The window containing (just) this text has the pathname BarBar_window.label.msg. +The textvariable for the label is BarBar-lbparams(text)

    + +

    TKGGrid

    + +
    TKGGrid pathname
    +
    + +

    Packs the indicated window into the current tkgoodstuff panel (at the +position appropriate to the current stacking context).

    + +

    Adding to the Popup Menu

    + +

    Two commands are provided for adding to the popup menu:

    + +

    TKGPopupAddClient

    + +

    adds a cascade menu entry in the main popup menu. It is invoked as follows: +

    + +
    TKGPopupAddClient clientname
    + +

    Suppose your clientname is FooBar. Then, this command generates +a cascade menu entry labelled "FOOBAR:", and a corresponding +(empty) menu with the pathname .tkgpopup.foobar, which is the menu to which +you should add items in your client code.

    + +

    TKGPopupAdd

    + +

    adds an item to the main popup menu at the end of the client-added section. +The arguments are any arguments that would come after ".menuname add" +in a normal addition of an item to a menu. + +

    +

    TKGPeriodic

    + +

    You can schedule a Tcl command for periodic execution as follows:

    + +
    TKGPeriodic name period offset command
    + +
      +
    • The name is an arbitrary name.
    • + +
    • The period is the interval (in seconds) between executions of the periodic +command.
    • + +
    • The offset is the delay (in seconds) between invocation of the TKGPeriodic_command +and the first execution of this periodic command.
    • + +
    • The command is the command to execute at theat interval after that +offset.
    • +
    + +

    You should try not to do anything periodically in this way that will +take a lot of time to finish processing (e.g., don't have a periodically-called +procedure wait for something before returning), since this will screw up +the user interface responsiveness and other periodic processes. If you +have to do something time-consuming, you should exec a shell script in +the background with bgexec (see the BLT documentation) and trace the bgexec +variable to get its output (for an example see Ical_fetch in Ical.tcl). +

    + +

    To cancel a scheduled periodic command, use:

    + +
    TKGPeriodicCancel name
    + +

    This will cancel any command that was scheduled by the same name with +TKGPeriodic.

    + +

    Other Utilities

    + +

    + +

    TKGDialog

    + +
    TKGDialog name [ -wmtitle string ] [ -title string ] \
    +      [-image imagefilename] [-message string] [-text string] \
    +      [-titlebg color] [-titlefg color] [-bitmapfg color] \
    +      [-buttons buttonlist] [-nodismiss]
    + +

    All the options in brackets are optional. This command pops up a dialog +box with pathname ".name". The -wmtitle string +is what will be put in the window manager title bar. The -title +string is put in the dialog box title frame (up top, in a large font). +The icon from the file named by the -imagefilename identifier is +also put in the title frame. The -message string is put in a framed +message widget under the title frame, if any. The -text widget is +put in a scrollable text widget under the title frame, if any (and message +frame, if any). The color options are as follows: -titlebg is the +background of the title frame; -titlefg is the foreground of the +title string; and -bitmapfg is the foreground color of the icon +(if it is a bitmap; otherwise this switch does nothing). The button list +is a list of button items, where a button item is a list of three items: +a (lowercase) name for the button (the button's pathname will be ".name.buttons.buttonname"), +a string of text to put on the button, and the command that the button +will execute when pressed (usually this should include "destroy .name"). +Unless you include the argument "-nodismiss", there will +also be a button labelled "Dismiss" which destroys the dialog. +The buttons are placed at the bottom of the dialog, left to right in the +order of your list, with the default "Dismiss" button at the +right.

    + +

    TKGNotice

    + +
    TKGNotice "Notice text."
    + +

    Posts a simple notice dialog with a dismiss button.

    + +

    TKGError

    + +
    TKGError "Error text." ?exit?
    + +

    Posts an error dialog with a dismiss button, a stack-trace button, and +a preferences manager button. If "exit" is present, tkgoodstuff +will be suspended and will exit when dismissed.

    + +

    ColorConfig

    + +
    ColorConfig pathname foregroundcolor backgroundcolor
    + +

    This command sets the foreground and background colors of the window +whose pathname you indicate, as well as the colors of its descendants, +to the colors you name. Using "-" in place of the name of a color +leaves that feature unchanged.

    + +

    RecursiveBind

    + +
    RecursiveBind pathname sequence command
    + +

    This command binds the sequence to the indicated command in the window +whose pathname you indicate as well as in all of its descendants.

    + +

    TKGDeclare

    + +
    TKGDeclare variable value [-typelist {type1 type2 ...}] \
    +        [-vartype boolean/radio/optionMenu/text/entry] \
    +        [-textsize WxH] \
    +        [-radiolist {{"Label 1" value1} {"Label 2" value2} ...}\
    +        [-optionlist {value1 value2 ...}]\
    +        [-label "Preferences Manager Label text"] \
    +        [-help "Preferences Manager Help text"]
    +
    + +

    This command sets the indicated variable to value unless the +variable already has a value (due, e.g., to the user's preferences settings), +in which case that value is retained. (This is how a client should set +those of its global variable that you want users to be able to set in the +preferences manager.) The other switches govern how the variable is treated +in the preferences manager.

    + +

    SetImage

    + +
    SetImage name filname
    + +

    This command creates an image named name, reading it from the +file filename, and returns the image type (e.g., "bitmap", +"photo").

    + +

    DEBUG

    + +
    DEBUG string
    + +

    This command writes the string to the internal log, and, if TKGLogging +is 1, also to the log file.

    + + + diff --git a/doc/www.html b/doc/www.html new file mode 100755 index 0000000..7d9b684 --- /dev/null +++ b/doc/www.html @@ -0,0 +1,57 @@ + +TkGoodStuff WWW + + + +

    TkGoodStuff WWW

    + + NOTE: Netscape's remote-control functionality is disabled in +Netscape Communicator beta versions (at least up to beta 3). We'll +become compatible when it works. + +

    Description

    + +The WWW client is a web browser launcher. + +

    The WWW client can manage just one browser or more than one +browser. In the preferences manager, you can specify a +space-separated list of browsers (by default, a single browser, namely +your main default tkgoodstuff browser, which by default is netscape). + +

      +
    • Single-browser mode: If (as by default) the WWW client + knows about only one browser (e.g., netscape), the WWW button + behaves as follows. Clicking mouse button 1 on the WWW button + launches your browser program (the button stays depressed and + inoperative until you exit the mailer program). Button 3 is used to + visit the URL that is the current X selection (e.g., highlighted + with the mouse in some application). If your browser is supported + (Netscape and lynx), then WWW starts the browser unless it's already + running; if it's running, WWW sends the browser instructions to go + to the selected URL. This is useful, e.g., for visiting web pages + that are mentioned in news articles, email, etc.
    • + +
    • Multi-browser mode:
    • If in the preferences manager + you give the WWW client a list of browsers such as "netscape lynx + mosaic chimera hippo tkwww", then you still use buttons 1 and 3 as + above, except now you'll get a popup menu to choose your browser. + (For instance, I like lynx for its startup speed and resource usage + for most things, but I use netscape when I need to see graphics or a + netscape-specific page.)
    + +

    The WWW client automatically knows what to do for the browsers +lynx (using an xterm) and netscape. It +launches others fine if they can be started by their name. + +

    Thanks to Seth Golub for the idea of using the X selection in this +way. + +

    Invocation

    + +To include the WWW button in your panel, include in your Configuration: + +
    +Client WWW
    +
    + +All parameters are adjustable in the preferences manager. diff --git a/fvwm-patch-2.0.45 b/fvwm-patch-2.0.45 new file mode 100755 index 0000000..6f037e0 --- /dev/null +++ b/fvwm-patch-2.0.45 @@ -0,0 +1,14 @@ +This patches fvwm2.0.45 to let tkgoodstuff screenedge mode +work. I think screenedge mode now won't work with earlier versions +of fvwm2 now. + +--- events.c~ Wed Jan 22 08:37:39 1997 ++++ events.c Mon Jan 27 14:26:57 1997 +@@ -1294,6 +1295,7 @@ + * requested client window width; the inner height is the same as the + * requested client window height plus any title bar slop. + */ ++ ConstrainSize(Tmp_win, &width, &height); + SetupFrame (Tmp_win, x, y, width, height,sendEvent); + KeepOnTop(); + diff --git a/icons/biffgreen-sm.xpm b/icons/biffgreen-sm.xpm new file mode 100755 index 0000000..e9308d9 --- /dev/null +++ b/icons/biffgreen-sm.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * biffnew_sm_xpm[] = { +/* width height num_colors chars_per_pixel */ +"24 18 8 1", +/* colors */ +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #7fff00", +"+ c #c0c0c0", +"@ c black", +"# c white", +/* pixels */ +" ...XXXXX.ooooooXX", +" .....OOOO.ooooooOO", +" .X.....OO+.ooooooOO", +" @XXX.....O+.oooo.OOO", +" .XXXX.....+.oo.+++OO", +" .XXXX.....O.o++OOOOO", +" .XXXX.....O.oOOOOOOO", +" .XXXX#####O.oOOOOOOO", +" .XX#######O.oOOOOOOO", +" .##########O.oOOOOOOO", +" ###########+.oOOOOOOO", +" .#########OoooOOOOOO", +" ..########O.ooOOOOOO", +" .O..#######OOOOOOOOX ", +" .OOOO.######OOOOOX ", +"..OOOOOOO#####OOX..X ", +"OOOOOOOOOO##OOX....X ", +"OOOOOOOOOOOO....XXXX "}; diff --git a/icons/biffgreen.xpm b/icons/biffgreen.xpm new file mode 100755 index 0000000..59b63bf --- /dev/null +++ b/icons/biffgreen.xpm @@ -0,0 +1,51 @@ +/* XPM */ +static char * biffnew_xpm[] = { +"46 38 10 1", +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #3c3c3c", +"+ c #7fff00", +"@ c #c0c0c0", +"# c #3c3c3c", +"$ c #ffffff", +"% c #808080", +" .......XXXXXXXXX.ooooooooooooXXXXX", +" ..OOOOO..++++++++.oooooooooooo+++++", +" ..OOOOOOO..+++++++.oooooooooooo+++++", +" .OOOOOOOOOOO.++++++.oooooooooooo+++++", +" .XXXOOOOOOOOO.++@@@.oooooooooooo+++++", +" .XXXXXOOOOOOOOO++@@@.ooooooooooo.+++++", +" .XXXXXXOOOOOOOO.++@@.ooooooooo..++++++", +" .XXXXXXXOOOOOOOOO++@@.ooooooo..@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooooo..@@@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooo..@@@@++++++++", +" .XXXXXXXXOOOOOOOO.++@.oo.@@@@++++++++++", +" .XXXXXXXXXOOOOOOO.++@.oo@@@++++++++++++", +" .XXXXXXXXXOOOOOO##.+@.oo@++++++++++++++", +" .XXXXXXXXOOO####$$.+@.oo+++++++++++++++", +" .XXXXXXX####$$$$$$.+@.oo+++++++++++++++", +" .XXX####$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ##$$$$$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$#######$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$$$$$$$#######$$$$.@..ooo++++++++++++++", +" ##$$$$$$$$$$$$$$####.@.ooooo+++++++++++++", +" #$$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .#$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .O#$$$$$$$$$$$$$$$.+..oooo+++++++++++++", +" ...O#$$$$$$$$$$$$$$.++..oo+++++++++++XXX", +" .++...#$$$$$$$$$$$$$.+++++++++++++++XXX ", +" ..++++++#$$$$$$$$$$$$.++++++++++++XXX ", +" ..++++++++#$$$$$$$$$$$.+++++++++XXX ", +" .+++++++++++##$$$$$$$$$.++++++XXX.X ", +"...+++++++++++++#$$$$$$$#.+++XXX....X ", +".++++++++++++++++#$$$$##X.XXXX......X ", +"++++++++++++++++++#$##+++.XOO.......X ", +"+++++++++++++++++++#++++..OOO....%%%X ", +"++++++++++++++++++++++...OOOO.%%%%%%X ", +"+++++++++++++++++++++.. OOOOO%%%%%%%X ", +"++++++++++++++++++++.. OOOOO%%%%%%%X "}; diff --git a/icons/biffnew-sm.xpm b/icons/biffnew-sm.xpm new file mode 100755 index 0000000..67b4c7a --- /dev/null +++ b/icons/biffnew-sm.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * biffnew_sm_xpm[] = { +/* width height num_colors chars_per_pixel */ +"24 18 8 1", +/* colors */ +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #ffff00", +"+ c #c0c0c0", +"@ c black", +"# c white", +/* pixels */ +" ...XXXXX.ooooooXX", +" .....OOOO.ooooooOO", +" .X.....OO+.ooooooOO", +" @XXX.....O+.oooo.OOO", +" .XXXX.....+.oo.+++OO", +" .XXXX.....O.o++OOOOO", +" .XXXX.....O.oOOOOOOO", +" .XXXX#####O.oOOOOOOO", +" .XX#######O.oOOOOOOO", +" .##########O.oOOOOOOO", +" ###########+.oOOOOOOO", +" .#########OoooOOOOOO", +" ..########O.ooOOOOOO", +" .O..#######OOOOOOOOX ", +" .OOOO.######OOOOOX ", +"..OOOOOOO#####OOX..X ", +"OOOOOOOOOO##OOX....X ", +"OOOOOOOOOOOO....XXXX "}; diff --git a/icons/biffnew.xpm b/icons/biffnew.xpm new file mode 100755 index 0000000..d3dd1ad --- /dev/null +++ b/icons/biffnew.xpm @@ -0,0 +1,51 @@ +/* XPM */ +static char * biffnew_xpm[] = { +"46 38 10 1", +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #3c3c3c", +"+ c #ffff00", +"@ c #c0c0c0", +"# c #3c3c3c", +"$ c #ffffff", +"% c #808080", +" .......XXXXXXXXX.ooooooooooooXXXXX", +" ..OOOOO..++++++++.oooooooooooo+++++", +" ..OOOOOOO..+++++++.oooooooooooo+++++", +" .OOOOOOOOOOO.++++++.oooooooooooo+++++", +" .XXXOOOOOOOOO.++@@@.oooooooooooo+++++", +" .XXXXXOOOOOOOOO++@@@.ooooooooooo.+++++", +" .XXXXXXOOOOOOOO.++@@.ooooooooo..++++++", +" .XXXXXXXOOOOOOOOO++@@.ooooooo..@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooooo..@@@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooo..@@@@++++++++", +" .XXXXXXXXOOOOOOOO.++@.oo.@@@@++++++++++", +" .XXXXXXXXXOOOOOOO.++@.oo@@@++++++++++++", +" .XXXXXXXXXOOOOOO##.+@.oo@++++++++++++++", +" .XXXXXXXXOOO####$$.+@.oo+++++++++++++++", +" .XXXXXXX####$$$$$$.+@.oo+++++++++++++++", +" .XXX####$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ##$$$$$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$#######$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$$$$$$$#######$$$$.@..ooo++++++++++++++", +" ##$$$$$$$$$$$$$$####.@.ooooo+++++++++++++", +" #$$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .#$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .O#$$$$$$$$$$$$$$$.+..oooo+++++++++++++", +" ...O#$$$$$$$$$$$$$$.++..oo+++++++++++XXX", +" .++...#$$$$$$$$$$$$$.+++++++++++++++XXX ", +" ..++++++#$$$$$$$$$$$$.++++++++++++XXX ", +" ..++++++++#$$$$$$$$$$$.+++++++++XXX ", +" .+++++++++++##$$$$$$$$$.++++++XXX.X ", +"...+++++++++++++#$$$$$$$#.+++XXX....X ", +".++++++++++++++++#$$$$##X.XXXX......X ", +"++++++++++++++++++#$##+++.XOO.......X ", +"+++++++++++++++++++#++++..OOO....%%%X ", +"++++++++++++++++++++++...OOOO.%%%%%%X ", +"+++++++++++++++++++++.. OOOOO%%%%%%%X ", +"++++++++++++++++++++.. OOOOO%%%%%%%X "}; diff --git a/icons/biffno-sm.xpm b/icons/biffno-sm.xpm new file mode 100755 index 0000000..f7f7f5d --- /dev/null +++ b/icons/biffno-sm.xpm @@ -0,0 +1,30 @@ +/* XPM */ +static char * biffno_sm_xpm[] = { +/* width height num_colors chars_per_pixel */ +"24 18 6 1", +/* colors */ +" s None c none", +". c #808080", +"X c #ffffe3", +"o c black", +"O c #f81440", +"+ c #3c3c3c", +/* pixels */ +" ................. ", +" .XXXX.XXXXXXXXXXXXX. ", +" XXXXXX.XXXXXXXXXXXXXX ", +" .XXXXXXX.XXXXXXXXXXXXX.", +".XXXXXXXX.XXXXXXXXXXXXXX", +".XXXXXXXX.XXXXXXXXXXXXXX", +".XXXXXXXX.XXXXXXXXXXXXXX", +".XXXXXXXX.XXXXXXXXXXXooo", +".XXXXXXXX.XX...oooooooOO", +".XXXXXXXX.Xooooo.....OOO", +".XXXXXXXX.XXXXXXXXXX.OOO", +".XXXXXXXX.XXXXXXXXXX.OOO", +".XXXXXXXX.XXXXXXXXXX.OOO", +" .XXXXXX.XXXXXXXX.. OOO", +" .XXX.XXXXX. Oo ", +" ...X..+++ ", +" .++++++ ", +" +++.... "}; diff --git a/icons/biffno.xpm b/icons/biffno.xpm new file mode 100755 index 0000000..20a1516 --- /dev/null +++ b/icons/biffno.xpm @@ -0,0 +1,49 @@ +/* XPM */ +static char * biffno_xpm[] = { +"46 38 8 1", +" s None c None", +". c #808080", +"X c #ffffe3", +"o c #000000", +"O c #f81440", +"+ c #3c3c3c", +"@ c #3c3c3c", +"# c #808080", +" ................................. ", +" ..XXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX.. ", +" .XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXX.. ", +" ..XXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX.. ", +" .XXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", +" ..XXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX.. ", +" .XXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", +"..XXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX..", +".XXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX.", +".XXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX.", +".XXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX.", +".XXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX.", +".XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXX.", +".XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXX.", +".XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXoooooo", +".XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXooooooooooOo", +".XXXXXXXXXXXXXXXXX.XXXXXXXXooooooooooooooOOOOo", +".XXXXXXXXXXXXXXXXX.XXXoooooooooooooooXXoOOOOOo", +".XXXXXXXXXXXXXXXXX.XXoooooooooooo......oOOOOOo", +".XXXXXXXXXXXXXXXXX.XXoooooooo..........oOOOOOo", +".XXXXXXXXXXXXXXXXX.XXXoooX.......XXXX..oOOOOOo", +".XXXXXXXXXXXXXXXXX.XXXXX....XXXXXXXXX..oOOOOOo", +".XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXX..oOOOOOo", +".XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXX..oOOOOOo", +".XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXX..oOOOOOo", +".XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXX..oOOOOOo", +"..XXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXX..oOOOOOo", +" ...XXXXXXXXXXXXX.XXXXXXXXXXXXXXX... oOOOOOo", +" ...XXXXXXXXXX.XXXXXXXXXXX.... oOOOoo ", +" ..XXXXXXXX.XXXXXXXX... oOOo ", +" ...XXXXX.XXXXX...++. ooo ", +" ...XX.X....+++++. o ", +" ...@+++++++++. ", +" .@@@@+++++++. ", +" @@@@@++++###. ", +" @@@@@+######. ", +" @@@@@#######. ", +" @@@@@#######. "}; diff --git a/icons/biffred-sm.xpm b/icons/biffred-sm.xpm new file mode 100755 index 0000000..f2e5014 --- /dev/null +++ b/icons/biffred-sm.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * biffnew_sm_xpm[] = { +/* width height num_colors chars_per_pixel */ +"24 18 8 1", +/* colors */ +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #f81440", +"+ c #c0c0c0", +"@ c black", +"# c white", +/* pixels */ +" ...XXXXX.ooooooXX", +" .....OOOO.ooooooOO", +" .X.....OO+.ooooooOO", +" @XXX.....O+.oooo.OOO", +" .XXXX.....+.oo.+++OO", +" .XXXX.....O.o++OOOOO", +" .XXXX.....O.oOOOOOOO", +" .XXXX#####O.oOOOOOOO", +" .XX#######O.oOOOOOOO", +" .##########O.oOOOOOOO", +" ###########+.oOOOOOOO", +" .#########OoooOOOOOO", +" ..########O.ooOOOOOO", +" .O..#######OOOOOOOOX ", +" .OOOO.######OOOOOX ", +"..OOOOOOO#####OOX..X ", +"OOOOOOOOOO##OOX....X ", +"OOOOOOOOOOOO....XXXX "}; diff --git a/icons/biffred.xpm b/icons/biffred.xpm new file mode 100755 index 0000000..0da899f --- /dev/null +++ b/icons/biffred.xpm @@ -0,0 +1,51 @@ +/* XPM */ +static char * biffnew_xpm[] = { +"46 38 10 1", +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #3c3c3c", +"+ c #f81440", +"@ c #c0c0c0", +"# c #3c3c3c", +"$ c #ffffff", +"% c #808080", +" .......XXXXXXXXX.ooooooooooooXXXXX", +" ..OOOOO..++++++++.oooooooooooo+++++", +" ..OOOOOOO..+++++++.oooooooooooo+++++", +" .OOOOOOOOOOO.++++++.oooooooooooo+++++", +" .XXXOOOOOOOOO.++@@@.oooooooooooo+++++", +" .XXXXXOOOOOOOOO++@@@.ooooooooooo.+++++", +" .XXXXXXOOOOOOOO.++@@.ooooooooo..++++++", +" .XXXXXXXOOOOOOOOO++@@.ooooooo..@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooooo..@@@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooo..@@@@++++++++", +" .XXXXXXXXOOOOOOOO.++@.oo.@@@@++++++++++", +" .XXXXXXXXXOOOOOOO.++@.oo@@@++++++++++++", +" .XXXXXXXXXOOOOOO##.+@.oo@++++++++++++++", +" .XXXXXXXXOOO####$$.+@.oo+++++++++++++++", +" .XXXXXXX####$$$$$$.+@.oo+++++++++++++++", +" .XXX####$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ##$$$$$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$#######$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$$$$$$$#######$$$$.@..ooo++++++++++++++", +" ##$$$$$$$$$$$$$$####.@.ooooo+++++++++++++", +" #$$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .#$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .O#$$$$$$$$$$$$$$$.+..oooo+++++++++++++", +" ...O#$$$$$$$$$$$$$$.++..oo+++++++++++XXX", +" .++...#$$$$$$$$$$$$$.+++++++++++++++XXX ", +" ..++++++#$$$$$$$$$$$$.++++++++++++XXX ", +" ..++++++++#$$$$$$$$$$$.+++++++++XXX ", +" .+++++++++++##$$$$$$$$$.++++++XXX.X ", +"...+++++++++++++#$$$$$$$#.+++XXX....X ", +".++++++++++++++++#$$$$##X.XXXX......X ", +"++++++++++++++++++#$##+++.XOO.......X ", +"+++++++++++++++++++#++++..OOO....%%%X ", +"++++++++++++++++++++++...OOOO.%%%%%%X ", +"+++++++++++++++++++++.. OOOOO%%%%%%%X ", +"++++++++++++++++++++.. OOOOO%%%%%%%X "}; diff --git a/icons/biffwhite-sm.xpm b/icons/biffwhite-sm.xpm new file mode 100755 index 0000000..1088b86 --- /dev/null +++ b/icons/biffwhite-sm.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * biffnew_sm_xpm[] = { +/* width height num_colors chars_per_pixel */ +"24 18 8 1", +/* colors */ +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #ffffe3", +"+ c #c0c0c0", +"@ c black", +"# c white", +/* pixels */ +" ...XXXXX.ooooooXX", +" .....OOOO.ooooooOO", +" .X.....OO+.ooooooOO", +" @XXX.....O+.oooo.OOO", +" .XXXX.....+.oo.+++OO", +" .XXXX.....O.o++OOOOO", +" .XXXX.....O.oOOOOOOO", +" .XXXX#####O.oOOOOOOO", +" .XX#######O.oOOOOOOO", +" .##########O.oOOOOOOO", +" ###########+.oOOOOOOO", +" .#########OoooOOOOOO", +" ..########O.ooOOOOOO", +" .O..#######OOOOOOOOX ", +" .OOOO.######OOOOOX ", +"..OOOOOOO#####OOX..X ", +"OOOOOOOOOO##OOX....X ", +"OOOOOOOOOOOO....XXXX "}; diff --git a/icons/biffwhite.xpm b/icons/biffwhite.xpm new file mode 100755 index 0000000..8994783 --- /dev/null +++ b/icons/biffwhite.xpm @@ -0,0 +1,51 @@ +/* XPM */ +static char * biffnew_xpm[] = { +"46 38 10 1", +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #3c3c3c", +"+ c #ffffe3", +"@ c #c0c0c0", +"# c #3c3c3c", +"$ c #ffffff", +"% c #808080", +" .......XXXXXXXXX.ooooooooooooXXXXX", +" ..OOOOO..++++++++.oooooooooooo+++++", +" ..OOOOOOO..+++++++.oooooooooooo+++++", +" .OOOOOOOOOOO.++++++.oooooooooooo+++++", +" .XXXOOOOOOOOO.++@@@.oooooooooooo+++++", +" .XXXXXOOOOOOOOO++@@@.ooooooooooo.+++++", +" .XXXXXXOOOOOOOO.++@@.ooooooooo..++++++", +" .XXXXXXXOOOOOOOOO++@@.ooooooo..@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooooo..@@@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooo..@@@@++++++++", +" .XXXXXXXXOOOOOOOO.++@.oo.@@@@++++++++++", +" .XXXXXXXXXOOOOOOO.++@.oo@@@++++++++++++", +" .XXXXXXXXXOOOOOO##.+@.oo@++++++++++++++", +" .XXXXXXXXOOO####$$.+@.oo+++++++++++++++", +" .XXXXXXX####$$$$$$.+@.oo+++++++++++++++", +" .XXX####$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ##$$$$$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$#######$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$$$$$$$#######$$$$.@..ooo++++++++++++++", +" ##$$$$$$$$$$$$$$####.@.ooooo+++++++++++++", +" #$$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .#$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .O#$$$$$$$$$$$$$$$.+..oooo+++++++++++++", +" ...O#$$$$$$$$$$$$$$.++..oo+++++++++++XXX", +" .++...#$$$$$$$$$$$$$.+++++++++++++++XXX ", +" ..++++++#$$$$$$$$$$$$.++++++++++++XXX ", +" ..++++++++#$$$$$$$$$$$.+++++++++XXX ", +" .+++++++++++##$$$$$$$$$.++++++XXX.X ", +"...+++++++++++++#$$$$$$$#.+++XXX....X ", +".++++++++++++++++#$$$$##X.XXXX......X ", +"++++++++++++++++++#$##+++.XOO.......X ", +"+++++++++++++++++++#++++..OOO....%%%X ", +"++++++++++++++++++++++...OOOO.%%%%%%X ", +"+++++++++++++++++++++.. OOOOO%%%%%%%X ", +"++++++++++++++++++++.. OOOOO%%%%%%%X "}; diff --git a/icons/biffyellow-sm.xpm b/icons/biffyellow-sm.xpm new file mode 100755 index 0000000..67b4c7a --- /dev/null +++ b/icons/biffyellow-sm.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * biffnew_sm_xpm[] = { +/* width height num_colors chars_per_pixel */ +"24 18 8 1", +/* colors */ +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #ffff00", +"+ c #c0c0c0", +"@ c black", +"# c white", +/* pixels */ +" ...XXXXX.ooooooXX", +" .....OOOO.ooooooOO", +" .X.....OO+.ooooooOO", +" @XXX.....O+.oooo.OOO", +" .XXXX.....+.oo.+++OO", +" .XXXX.....O.o++OOOOO", +" .XXXX.....O.oOOOOOOO", +" .XXXX#####O.oOOOOOOO", +" .XX#######O.oOOOOOOO", +" .##########O.oOOOOOOO", +" ###########+.oOOOOOOO", +" .#########OoooOOOOOO", +" ..########O.ooOOOOOO", +" .O..#######OOOOOOOOX ", +" .OOOO.######OOOOOX ", +"..OOOOOOO#####OOX..X ", +"OOOOOOOOOO##OOX....X ", +"OOOOOOOOOOOO....XXXX "}; diff --git a/icons/biffyellow.xpm b/icons/biffyellow.xpm new file mode 100755 index 0000000..d3dd1ad --- /dev/null +++ b/icons/biffyellow.xpm @@ -0,0 +1,51 @@ +/* XPM */ +static char * biffnew_xpm[] = { +"46 38 10 1", +" s None c None", +". c #3c3c3c", +"X c #808080", +"o c #f81440", +"O c #3c3c3c", +"+ c #ffff00", +"@ c #c0c0c0", +"# c #3c3c3c", +"$ c #ffffff", +"% c #808080", +" .......XXXXXXXXX.ooooooooooooXXXXX", +" ..OOOOO..++++++++.oooooooooooo+++++", +" ..OOOOOOO..+++++++.oooooooooooo+++++", +" .OOOOOOOOOOO.++++++.oooooooooooo+++++", +" .XXXOOOOOOOOO.++@@@.oooooooooooo+++++", +" .XXXXXOOOOOOOOO++@@@.ooooooooooo.+++++", +" .XXXXXXOOOOOOOO.++@@.ooooooooo..++++++", +" .XXXXXXXOOOOOOOOO++@@.ooooooo..@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooooo..@@@@@+++++", +" .XXXXXXXXOOOOOOOO.+@@.ooo..@@@@++++++++", +" .XXXXXXXXOOOOOOOO.++@.oo.@@@@++++++++++", +" .XXXXXXXXXOOOOOOO.++@.oo@@@++++++++++++", +" .XXXXXXXXXOOOOOO##.+@.oo@++++++++++++++", +" .XXXXXXXXOOO####$$.+@.oo+++++++++++++++", +" .XXXXXXX####$$$$$$.+@.oo+++++++++++++++", +" .XXX####$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" ##$$$$$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #####$$$$$$$$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$#######$$$$$$$$$$$.+@.oo+++++++++++++++", +" #$$$$$$$$$#######$$$$.@..ooo++++++++++++++", +" ##$$$$$$$$$$$$$$####.@.ooooo+++++++++++++", +" #$$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .#$$$$$$$$$$$$$$$$.+.ooooo+++++++++++++", +" .O#$$$$$$$$$$$$$$$.+..oooo+++++++++++++", +" ...O#$$$$$$$$$$$$$$.++..oo+++++++++++XXX", +" .++...#$$$$$$$$$$$$$.+++++++++++++++XXX ", +" ..++++++#$$$$$$$$$$$$.++++++++++++XXX ", +" ..++++++++#$$$$$$$$$$$.+++++++++XXX ", +" .+++++++++++##$$$$$$$$$.++++++XXX.X ", +"...+++++++++++++#$$$$$$$#.+++XXX....X ", +".++++++++++++++++#$$$$##X.XXXX......X ", +"++++++++++++++++++#$##+++.XOO.......X ", +"+++++++++++++++++++#++++..OOO....%%%X ", +"++++++++++++++++++++++...OOOO.%%%%%%X ", +"+++++++++++++++++++++.. OOOOO%%%%%%%X ", +"++++++++++++++++++++.. OOOOO%%%%%%%X "}; diff --git a/icons/blue_marble.xpm b/icons/blue_marble.xpm new file mode 100755 index 0000000..709e6f0 --- /dev/null +++ b/icons/blue_marble.xpm @@ -0,0 +1,393 @@ +/* XPM */ +static char *blue_marble[] = { +/* width height num_colors chars_per_pixel */ +" 200 150 231 2", +/* colors */ +".. c #798fa6", +".# c #687f95", +".a c #8090a6", +".b c #a7afbe", +".c c #596f85", +".d c #98a7b6", +".e c #909fae", +".f c #70879d", +".g c #a7b7be", +".h c #b7bec6", +".i c #9fafb6", +".j c #8097a6", +".k c #244974", +".l c #8190ae", +".m c #bfc6ce", +".n c #7f8e9d", +".o c #afbfc6", +".p c #889fae", +".q c #98aeb6", +".r c #69879d", +".s c #2b4164", +".t c #89b0ce", +".u c #697f9d", +".v c #90a7b6", +".w c #7aa0c6", +".x c #81a0c6", +".y c #98afbe", +".z c #90a7be", +".A c #7190a6", +".B c #81a0ae", +".C c #97a7ae", +".D c #ced6ce", +".E c #91afce", +".F c #b7c7ce", +".G c #a0c6ce", +".H c #1c2a54", +".I c #a0b6be", +".J c #899fb6", +".K c #425f7c", +".L c #42677c", +".M c #afcece", +".N c #7998a6", +".O c #52789d", +".P c #cecece", +".Q c #23395c", +".R c #a8bfce", +".S c #c6cece", +".T c #7998ae", +".U c #152a4c", +".V c #91b8ce", +".W c #99bfce", +".X c #bfcece", +".Y c #b7cece", +".Z c #90aeb6", +".0 c #1d426c", +".1 c #81a0b6", +".2 c #ceced6", +".3 c #bfc7d6", +".4 c #90b0be", +".5 c #bec6c6", +".6 c #99b8ce", +".7 c #a8bec6", +".8 c #4a6785", +".9 c #4a6f85", +"#. c #1c325c", +"## c #90b6be", +"#a c #6a90a6", +"#b c #a0b7c6", +"#c c #81a7b6", +"#d c #072354", +"#e c #91b0c6", +"#f c #afc6ce", +"#g c #00072f", +"#h c #c7ced6", +"#i c #799fae", +"#j c #1c3154", +"#k c #526f8d", +"#l c #98afc6", +"#m c #6a88a6", +"#n c #89a8be", +"#o c #99b7d6", +"#p c #98b8c6", +"#q c #b0c7d6", +"#r c #afc6c6", +"#s c #0e1c3d", +"#t c #a0c0ce", +"#u c #617f9d", +"#v c #bfcfd6", +"#w c #617f95", +"#x c #001b3d", +"#y c #070e36", +"#z c #91b8d6", +"#A c #7a98be", +"#B c #61879d", +"#C c #8897aa", +"#D c #a1c0d6", +"#E c #0e2345", +"#F c #91b7c6", +"#G c #153a64", +"#H c #154164", +"#I c #001d45", +"#J c #a8c6ce", +"#K c #070e3d", +"#L c #a8c6c6", +"#M c #7188a6", +"#N c #79a0b6", +"#O c #7190ae", +"#P c #7290b6", +"#Q c #7298b6", +"#R c #3a5774", +"#S c #3a5178", +"#T c #3a587c", +"#U c #b7ced6", +"#V c #334974", +"#W c #000e3d", +"#X c #152454", +"#Y c #597795", +"#Z c #a8bfd6", +"#0 c #81a8be", +"#1 c #a0bec6", +"#2 c #89a8c6", +"#3 c #7aa0be", +"#4 c #81a0be", +"#5 c #2b416c", +"#6 c #2b486c", +"#7 c #98bec6", +"#8 c #81a8c6", +"#9 c #89b0c6", +"a. c #b0ced6", +"a# c #7998b6", +"aa c #0e325c", +"ab c #33587c", +"ac c #33517c", +"ad c #335f7c", +"ae c #91b0d6", +"af c #597f95", +"ag c #00143d", +"ah c #6a90ae", +"ai c #6289a6", +"aj c #6a89ae", +"ak c #6288ae", +"al c #98b6be", +"am c #000e2f", +"an c #2b506c", +"ao c #6281a6", +"ap c #a8c7d6", +"aq c #89afbe", +"ar c #5b80a6", +"as c #0e2354", +"at c #5a809d", +"au c #1c395c", +"av c #000e36", +"aw c #1d3a64", +"ax c #1c3854", +"ay c #527095", +"az c #244164", +"aA c #4a708d", +"aB c #244864", +"aC c #2c5074", +"aD c #2c4a74", +"aE c #072345", +"aF c #4b7095", +"aG c #0e3154", +"aH c #7198ae", +"aI c #0e1c4c", +"aJ c #527895", +"aK c #0e234c", +"aL c #073154", +"aM c #153154", +"aN c #001536", +"aO c #0e2a4c", +"aP c #3a607c", +"aQ c #0e314c", +"aR c #0e2b54", +"aS c #a1c7d6", +"aT c #5a789d", +"aU c #3a677c", +"aV c #4a688d", +"aW c #000736", +"aX c #072a45", +"aY c #32486c", +"aZ c #072b54", +"a0 c #436085", +"a1 c #43688d", +"a2 c #436885", +"a3 c #335074", +"a4 c #24486c", +"a5 c #24426c", +"a6 c #42587c", +"a7 c #15395c", +"a8 c #07244c", +"a9 c #00234c", +"b. c #0e395c", +"b# c #071c4c", +"ba c #3b6085", +"bb c #1c405c", +"bc c #89a8b6", +"bd c #7197a6", +"be c #1d4064", +"bf c #99c0d6", +"bg c #0e3854", +"bh c #15335c", +"bi c #15234c", +"bj c #07143d", +"bk c #2c5774", +"bl c #15405c", +"bm c #52778d", +"bn c #070e45", +"bo c #071545", +"bp c #244f6c", +"bq c #1d486c", +"br c #1d4764", +"bs c #335874", +"bt c #071c3d", +"bu c #071c45", +"bv c #152a54", +"bw c #001545", +"bx c #07294c", +"by c #243964", +"bz c #516885", +"bA c #0e1c45", +"bB c #071536", +"bC c #002345", +"bD c #49677c", +"bE c #324f6c", +"bF c #153954", +"bG c #0e1545", +"bH c #2b4764", +"bI c #15304c", +"bJ c #0e2945", +"bK c #ced6d6", +/* pixels */ +"#W#K#W#KbjbobubobAbubua8aMbeazazawaMasbuaKaKaRa7awazaz#.bvaKaKaRbhaubba7aMaGaRaOaRaRaOa8a8bubububAbtbAbu#EaEaKaMbhaza4aCa3abaPaPaPbaaPaPba.Lba.KaPbsana4beaGaGaGaZbxaRbxaObxbxa8aEbu#xbjag#yavaWavaWav#KaN#yaN#yav#yavav#yagbuaRa7beaCbaaF#m#N#e.R.Y#vbK.X.X.F.7#p.Jbc.1.B.T#c.T.1bc#p#1#t#J#t#t#7#t.W#p#0#NahaoataTaJaJ.8bs.saMbAbj#Kbu#Xaua3a0aFaTaiah#OahahajaiaiaiaiaTaAa2bs#6bebebeaza4anaCbsbsaPa3aB#.bvbu", +"#KavbjbjbubAaIbAaIaKaKaRaua4#6a4bybvaKbob#aKaRaMawawau#.aRaRaObvaubeazazbeauaMaMaR.UaKaKa8bAbububtbAbj#sbu#EaKaGaMbea4a3bkabbaba#TbaaPaPaPa2.KaUa0adana4bea7aGaGaZaRaQaZbxaOa8aOa8aEbubtbjav#yaW#yaW#y#W#ybj#ybBav#yav#Kbjbo#EaRa7a4abbaaJaj.1#p#J#v#vbKbK#v.X#f#b.4aqbcbcbc.zbcbc.y#b#t.R#J#t#t.R#t#t.6#9a#ah#uatatataTaA#R.s#jaIbj#Kbobv#.a3a0#k.Oaoaiak#mai#mai#mak#maraJa0abaCaBawbbazbrazanaCbsbsaCaz#j.Ubo", +"#WbjbjbobuaKa8aKaKaKaOaMbe#6aC#5bybvaIbubub#aKaMbhauaubhaRaKasaMa7azbeazbebhaMaRaRaOaRa8#Ea8bububGbtbtbAbubuaKaObhbeaBa3abbabaa0aPbaaPaPa0a2baa2ba#TaCanaBa7a7b.aGaZaRbxaRbxbxbxbxaEaEboag#y#y#yaWaW#y#y#W#yaN#KaN#yav#KbjbuaKaGaua4aCa0aJah.1#F#f#U.D#vbK.D#U#f#1.4.4#nbc#n.4bcbc.4###p#1.R#J#J#Jap.G.6aqa##mataTaTat#YaVbsa5#jbAbobjbu#X#.a3baaA.OaT#uaoat#uaiataoaiaoataAa2bs#6beauauawbbbe#6a4anaCanawaMaObo", +"#KbjbobuaKaO.UbvaOaRaMawa4aC#6aB#.bvbobobAb#aKbh#.aubhbvaRaKaKaRaMauaubeauaua7aMaMaRaOaOas#EbubjbubGbjbGbtbubAaKaRaua5bsaba0a1a2ba.LbaaP.Ka2a2a2a2.KbsaC#6brbea7a7aGaGaRbxbxaRaOa8#EaEbtbjavavaWamaW#yav#yav#yav#yav#ybjbtbuaOa7bba4abbaaJaj#N#p#f#U#vbKbKbK#v.Y.o#l.y.4.4.Z.4bc.J.v.4.I#b#J#fapa.#Jap#p#naHaiataTaf.O.O.8#Taz#jaKbjboaI#jbya3a0aF#kaJaJaFaAaFaJaTatataTaJaVbaaCa4a7a7a7a7aua7aBbea4a4aBaubvaKbu", +"#Wbubu#EbvaMbvaM#jaMbhaz#6aCa3az.HaKbobjbob#aKaOaRaRaOaKaKa8aOaRbha7beazaBazaubhaMaMbvbvaRaObububjbj#y#KbjbjbuaKaOaua4a3babaa2a0aPbaaPaPaPa0a2a0a2aP#TbsaCazazbeaubhaGaObxa8aObxaOa8bububj#y#y#yaW#yaW#KaW#yav#yav#yavbjboaOaMbea5aCaba2.O#a.1#e#f.Y#v.DbK.XbK.Y#f#1#b#p.y#p.y.ybc.v.Z.4#b#J#J#fa.#J#t#F#N.raJaAaFaFayaAa2aCazaMaIbobjaK.Hawa3baa0a1bababa#TaUaVaAaTaJaJaJa2abanbebhaGbvaGaMbhaua7bebebea7bv.UbA", +"bjbubAaKbIaMaM#.bhaMbeaBaDaC#6bybvb##Kbobobubua8aKaKaKa8aEaKaOaGa7auazaBa5azaua7bhaubhbFbhaR#Eb#bAbAbjbubobuaKaKaMawa4bsbabaa1a2ba.Ka0aPa2a2a2a2.KaP#Tbsa3ana4a4auaGaGbxaKbxaOaOaOaKbubj#KavavaW#y#K#y#Kav#Kav#yav#K#ybjbu.Uauazbpbsbaa1atah.1#e.R#f#v#vbK#v.X#U#f.R#1#b#b#p#bal.4.v.v.4al.7#J#fap#J#paq.T#BaAaAa0baaUa0ab#6byaMaKbububi#.azaC#T#Tababa3aCaCabbaa2aAaFaVa2abaCa5awaMaRaRaOaRaRbFa7a7bebbaMaG.UaK", +"bjbAbuaKaRaMbhaxbha7awa4anaC#6au#Xbubobjbubua8aEa8#Eb#bAa8a8aKaGbhaubbazazazbeauazaBazazbeaMaOaKaKaKaKbAaKbiaRaMauaza4a3ada0baa2a2a2a2a2a2.8a2a2a0aPaPbsbsaCanazbebhaRaOa8bxaRbxaKaEbubjbj#K#y#K#y#W#Kav#KavaW#yav#y#KbuaKbvaua4an#Ta2aF#uaha#.4#p#J.Y.Y.Y#U.Y#J.R#t#l.4#l.4.4.4bcbcbc.Z.y#1#1.R#t#7#l#caHafaAbaaPbsacaCaCa5aubvaKbubAbvawazaDbsabaCaba4bpa5anbkaPbaa2aPabaCaBa7bhaRaObxaKaOaOaaaMa7a7bebhaMbvaO", +"bjbobAaKaO.UbvaMaMaGbeanaCaC#6auaKbubububuaKaEaKaEbubububAaKaOaMbFa7awbeazazaBazaCa3a3#6azbhaRaOaObv.UaObiaMbhaubea5a4aCaCbs#TaPbaa2.8a1.9aVa1.8aU#Tbsa3aCa3#6azauaMaRaOa8a8aOa8#Ebububjbj#W#KbB#Wbjbj#K#K#y#yav#yavbjbjaK.UauaBaC#Ta1aJaraj.T#0.4#b.R#f#f#f.R#b#p#b#e.4.4#nbc#n.B.Bbcbc.4.4#p#p#paq#n#NaiaJ.8adana4.0azauauaMbv#Eb#aKbv.QbeaDaCaCa4a4.0bebea4#6bkab#Tabbs.kbea7aGaRbxaKa8a8aOaRaGaabFa7aMaRaMbv", +"bjbobubAaKaKaOaRaRaGbe#6aCaC#6auaOaI#EaKaKa8aKaEaKbububuaEaKaOaGbhaubbazbeaB#6#6bs#TbsbEa4auaGaMaGaMbhbhaubeazaz#6a4a4aBa4a4aCaba2a2aAaAaA#kaAaAbabsa3#6a4#6aBazauaMaRbxaObxaKa8aEbubobjbj#Kbjbjbo#Kbobjbj#K#W#y#K#KbjbAaK.Ubhbe#6aba2ayatahaha#.1#n#p.6#t.6#p#e#9#n.1#N.1.T.T.T.Tbd.T.T#c#c#c#0.1a##i#O#BaJa2a3bqaua7aM#.aMbv.UaKbAaKaMbhaw#6a4a4bqa4bebe#Hbea4aCaCababaCanbeawaGaRaKa8aKa8a8aRaGaGaaaMaGbvaR.U", +"#Kbjbjbobubua8aKbxaRbeaCbsan#6aubiaKaKaOaKaO#Ea8aEbAbubu#EaKaObhaMa7bhbbbeazana3.K.KaPbsanbea7bha7aubeazaBanaCanaCana4be.0a4a4bsbaa2aA#kaJaJayaAaPa3a4aBbeazazbea7bhaGaRbxaObx#EbububjbobjbjbGbobGbAbAaIbobjbj#KbjbjbGbAaKaKaMbhbeaCbaaJataoai#m#OaH#4#n#e#e#2.1#Na##Q#Oah#O#O#a.AaH.A.AaH.T#O.AaH#mah#mataJa2#6bebhaRaR.Ubv.UbiaKaKaObvbhbb.0.0bqa5a4a4bqbebrbea4aCaCbsaCa4bea7aMaRaKaKb#aEaKaOaRaRaGaRaRaOaOaK", +"#K#KbjbjbobuaEa8a8aGbe#6aCan#6auaRaObvbiaKa8aEbua8aKbuaKaKaOaRaMaGaRaMbhbebHaDbsaPaPaPbsaCazbea7bb#Hbea4aCa3abababana4be#Gbla4aCaPa2#kaJaJaJbmaVaPaCaz#Haubebebeaua7aGaMaGaRbxa8aEbtbububtbo#sbAaIaKbiaIbAbGbjbj#KbjbAaIaKaKaRaGaua4bsa1ayaJ#Yatat#u#O#Q#N#3#N#Q#Pahahah#mah#a#mai#m#B#B#B#m#B#uaiatatatayaVada4auaGaOa8aKaKaKaKaKaKaKaRaMa7bebea4a4bpa4a4a4bebebqa4aCaCaCa4az#GaMaRaKbububob#a8aOaRaRaRaOaOaKa8", +"#WbjbobubuaEa8a8bxaRbe#6#6#6a5#..UbvbvaOaOaKaKaEaKaKaKaKaObvaRaMaRaRbxaG#.beaBana3bsa3anana4aBbebebqa4aCbsbabaaPabaCa4#Gau#Gbean#Ta1aA#YaT#YaJaAaPanbebha7a7auawa7a7bhbFaGaRaOaEbu#IbtbjbubtbuaKaK#Xbv.HbiaIbAbjbjbjbAbuaKa8a8aRb.be#6aba2a1a1aAayaJaTaiajah#P#Pahajahahaj#makatataf.OaJafat#YaJaJayaJaAa1baa3bebhbxb#bububu#EaK#EaKaOaOaR#Gbebe.0a4aCa4a4bqbebebq#6aCaCanaCbrawbhbvaKbobububAa8aKaZaOa8a8a8a8aE", +"bjbu#Ea8aOaOaOaObxaRbea4a4az.sa7bvbvaMaKaKa8buaIa8aKa8aRaMaMaMaGaRaObxaRa7bbaza4#6a4#6ananaCanaCanaCaCaPbaaAaAaVaPaCa4bb#Gblbea4ada2aAaTaf.OaJaVaPa4bea7aaa7bhbFbhaMaMaMaGaObxa8bubtagbubjbubuaObv#jauaubvbibAbobjbGbuaIa8aKbxaZaM#GbeaCababaPbaaPbaa2ayafaraiajahak#majaiaiai#u.O#YaJaA#kaAaAaAaAa2a2a0aPadaCbebFaRa8aEbua8bA#EaK#Ea8aRaGbha7bebqa4aCaCa4azbe#Hbebqa4a4a4bqbeauaMbvbubAbobobua8asaRaRaRaOa8aEa8", +"bAaKaObvaMbFbhaGaRaGbeazbeazaz#.aRbvaRaKbub#aIa8aOaRaMbhaua7bhbhaGaZaOaRa7aubeaubebbbea4anbkbsababaPbaaFaF.OaJaVaPaCa5a7a7#Gbea4aba0aAaJaJ#kaAa2abaCbea7a7aGaGaGaMaRbvaRaOaOa8bubtbobjbjbtbj#Ebvbhauazaw#..UaIbubobubAa8aKaRaRbxaabha7a4a4an.kaCaCa3abbaa1ay.OaraoaiaoaiaiaiaoataJaJaA.8aAaAa2a1a2a0baabbsaCa4bea7aGa8a8a8#Eb#bua8a8aKaGaGb.#G#Hbea4a4a4a4bea7a7#Gaw#Hbebeawa7auaRaKaIbobobobuaIaOaRaMaMbvaOaKaE", +"aObvaMaubebebba7a7#Haza4by.QaubvbvaMaRb#bub##EaKaRbhaMa7a7aua7aMaGaGaGaMa7bbawa7a7a7a7aBanbsaPbaa2a1aF.OaTataTaFabaCbea7bha7beaBbsaPa2aA.8aAa2aPbsaCaBa7aGaRaRaKaRaOaRaRaOaKaEbAbubuagbjbjbtaEaOaubeazaBaubvaKbAbubobuaEaKaZaOaRaGaGbha7#Hbebebebebra4#6abaPa1aJaJaT.OataTataTaJaVa0a0a2.Ka2a2a2a0ad#TbsbsaCbpbea7aRaOa8aKa8buaK#Ea8aOaRaGaGa7#GbebqaBbebea7bhaMaGbhaGbhaGa7aabvaKaKbubobobuboaKaR#ja7aubhaMaOaK", +"aaaubea4anana4aBaBa4ana4azby#.bvbvbvaKaKaKaKaRaMbhauau#.awa7a7a7a7bha7bebebebebb#Ga7a7beaCbsbaaAaAayaTataiaoafa1aba4awaaa7a7#GbraCab#TaPaPaPabbsa3a4bebhaGaOa8a8a8aOaKaOa8aKbububjbjbjbjbjbtbAaMa7beaBa5auaMaKbAbububAa8bxaOaZaRaRaZaGaGaGbhaGaMbhaMbha7a4aCabaPa1a1.8aAaAaVa2a6bsa3bEa3ab#RaPaP#TbsbkaCaCa4aBaua7aRbxaKa8b##Ea8aKa8aRaGaGaabFaaa7a7aua7bhbvaOaOaKaOaRaOaRbxaKa8bububobjbobobuaKaMa7awazaua7aMaG", +"a7a4a4bsabaPbsaPabaPaPa3az.Q#jaKaKaOasaKaRbv#.#.#.auawaubebea7a7aubebeazaBaBa4beazbebea4anaPa2#kaFaJaTaraiar.OaVbsa4a7aGaaa7aubeaB#6bpa4anaDanana4azauaMaRa8b#a8aKbxasa8aKbubobobGbjbjbBbjbGaE.UaMbbbeaua7aRaKbububua8aKa8aRaObxaOaRaRaGaRbxaRa8aKaRaOaMbhbeaB#6aCbsabaPaP#Ta3#6.sbybyazbHaCa3abbsaCaCa4bqbebea7aMaRaOaKaOaKasaOaRaOaGaMb.aGaGaMaRaMaGbvaOaKaEbubububua8buaEbububobjbobobuaIa8aObhauazazazaua7aM", +".0aDaCaP.9aA.8aAaAaAa1#T#5#.bvbAaKaKaKaObvbhbybebybeazbeazawbbawbraBa4aCaCanaCanaCanaCbkabaUaVaAaFaJaJataoataAbaaCbea7aGaMb.a7aubebbauaubeblawbebba7bhaOaIbubuaKa8aMaGaRaOaKbububjbjbj#KbBbB#s#EbvaMbha7bvaOa8bAbubuaEaKaOaZaKaRa8bxaZaObxa8a8aEa8aIa8aOaRaMa7awbeaza4#6a4azaz#jbvbv#j#.beaBaCaCaCaCa4.0beawa7bhaRaOaKaKaRaRaRaMaMbhaMa7aMaGaRaOaKaKaOaKaEbAbubobjbtbjagbu#IbtbubjbubAbAaK.UbvaMaubea4bpa4azbea7", +"a4bsbaaA#YatatatataJay.Ka3.Qbv#Eb#aEaKbvbhau#6#6az#6.sazazazaza4#6aCbsbsadbsaPaPaPaPbaaUa2aVaAaAaVaAaFaJaJaya2aba4aub.bhaGaMbhaGbvaMaOaRaRaGaMaGaMbvaRaKbubub#aKaRaaa7aGbvaR#EbAbAbobjbBbjbjbGbtaKaOaOaRaOaKbububuaKaKaRaRaOaRaOa8aKbxa8aKa8#Eb#aKaKaKaOaKaOaRaOaGaMa7a7aua7bvaKaKaIaK.Ubh.QaBa4a4beaw#Ha7bhaGaRaKaKb#aKaObvaMauaua7a7bhaGaOaOaKbubu#EbAaEbA#sbjbj#KagbjbtbububububAaK.UaMaubyaza4anaCana4a4be#G", +"aDbaa2at#mah#Oahai#uaJaVa3az.HaKbua8aKaGauaza5bE#6#6aC#6#6#6#6anbsabaPaPaPa0a2aAaAaJaJayaJaFaAaVa2a1.8aVaAa2#TbsaBa7aGaGaRaRaOaOaKaEbuaEaEa8aEaOa8aOaKaEbububua8aKaMbhbhaMbvaKb#bubjbj#y#ybBbjbtbA#Ea8aEb#bububuaKaKaMaMa7aMbhaRaOa8aKa8a8aKaKaObv.UbvaKaKa8bua8a8aKaRaRaRaOaKa8bubobuaKbvbhaubebea7aaaaaRaZaKa8b#aKbuaKbvaMaubeazbba7a7aMaRaKbAbjbjbjbubtbAbjbjbjbjbjbjbA#EaK#EaK.UaM#.azazanaCaCbsaCaCanbrbrbe", +"aba2aJ#m#N#0#4#NahaoaJaVa3#5auaRbAa8aRbhawa4#6a3#6#6#6az#6aCa3abaPa0a2a2a1aAaAatatao#maiatafay.9a1a2a2a1a2babsaDbebhaRaOaKaKaKbububtbobjbubuaEbuaEbubububobtbubAbxaRbhaMbhaMbvaObAbtbjbj#ybj#ybjbjbtbububtbubub#biaM#.awbbawa7aRaRaOa8bxaKaRaM#..Qau#.bvaObububub#aEa8aOa8aOa8bAbubAbAaIaOaMbha7bhaaaRaGa8aO#daKbuaKa8aKaOauau#6#6aBbeauaMaK#EbAbobjbtbjbAbtbAbG#KbjbGbtaI#EaOaObv#jazaBaYa3bsabaPbaaPada3bpa4aB", +"a2aJ#ua##n#e#9#4ahataya2#T#Vby#jaRaMbhbbaz#6ana3#6#6#6a4#6a3aP.KaVaAaA#kaJaJai#maH#Qa##QahataJaVa2a2a0a2aP#T#6azaubvaKbAbubububjbj#KagbjbtbjbubtbobubtbtbobjbubAaOaRaG#.a7#.aM.U#Ebobjbjbj#y#W#ybj#KbjbjbjbobuaKbvauaza4azbea7a7aRaRa8a8aOaMauaz#6azauaMasbububobubua8aKaOaRbvaOaKaKaIaKaKbvaGaRaGa8a8aO#daKaKaKa8aKaKbiaRauauan#6#6aza7aRaKbubGbjbobubAbubA#sbjbjbGbjbAaO.UaRaMa7az#6bsab#RaPaPa2aVaAa2aPabanaC", +"aJ#uah#c.V.V#e#cajatayaVbaac#6azauawbe#6#6a3a3bs#6a4aB#5#6a3.Ka2aAaJaTatat#maH#A#3#4#3#Q#maiaJaAaVa2baaPbs#6azauaMaKaKbubobobj#KbjavbjbjbjbjbjbjbjbtbjbjbjbtbobuaIaKaObvaMaMbvaOaKbubtbjbjbB#KaN#yaNbjbjagbtbAaK#.awaz#6a4.0beauaGaGaKa8aRaMby#6bE#6azbhaObubobuaKaKbvbhauau#.bhbvbvbAaKaKaKaKa8a8b#aEa8aOasaOaRaKbvaRbvaMau.Q#6a4bHbrauaOaKbubjbjbGbtbtbAbtbAbjbj#s#EaKaMaMbhbFbea4bs#TaPaPaPa0aAaJaJaJaAa2aPab", +"#Bah#N#n.V.6#F#4ahataya1a0#T#V#6#6ana3bs#Taba3ana4azbeaza4a3aPa2ay#Yai#mah#Qa##4#0#3#N#Qaiataya2a2aP#TaC#6a4au#.bvaKbAbobjbjbj#Kavbj#ybj#KbjbjbjbjbjbjbjbjbjbjbtbubuaKasbv.UaRaKaEbububtbj#KbB#y#WbB#KbjbjbobuaK.Hauaza4a4bebe#GaaaRbxa8aRbhaB#6bsanaBbhaRaKbuaKbvauaz#6#6#6#6az.QaMaKaKa8a8b##Eb#bubua8asaObvaMbvbvaMaMaM#.auazaBaBbeauaKaKbAbjbAbjbtbubtbubtbjbubAaOaMa7a7a7bbazaCaP.KaUaPaPaUayataiaiatayaVa2", +"#O#3#4#9bf.6.E#0#PaiaFaVa0ba#Rab#T#T.Ka2a0a2aPa3#6bebeaBana3aPaVaAataiaha##N#3#3a##QaH#mataJaAa2aPabbk#6aBaubhaMaRaK#Ebubobjbjbjbjbjbjbjbjbjbjbjbjavbjav#ybjbjbobAbAa8aKaOaKaOaEaKaEbAbubjbj#Kav#y#KbBbjbjbjbuaKaMawbea5be#G#Ha7aMaGaRa8aOaMaza4an#6brbh.UaKaObvaza3#Tbaa0.KabbEaz#.bvaIb#bAbub#bu#Iboa8aKbvaMbhbhauau#.bh#jbhauawazbeaMaOaIbubjbGbu#sbu#EbjbtbGbuaOaMaubbbebebebpbsaPa2a0baa0aA.Oah#O#Oah#uafaJ", +"a##4#8.V.6#z#9#0#Oai.OaFaV.8a0.8aAaA#kaA#kaV.KabaC#6aBa4a3bs#Ta2aVaJ#uahah#PaHah#aaiataJaAaVa2#TabaCa4bea7aaaRaOaOaKbAbubjbobjbjbjbjagbtbjbAbtbjbj#Kavbjav#KbjbjbobubAbua8aEa8#EaE#Ea8#EbAbobj#K#ybB#KbjbjbubuaKbva7aubebe#G#Ga7aaaRbxa8aKaMaubeaBa4bebFbhaMau#5bsa0aA#kaAaAa0#R#6byaOaKbububububobjbobuaKaOaMaua7aubeau#.aMaMaMbha7a7aMaK#EbobGbjbAbubububtbjbt#Ebva7beaBbpaBana3aPa0a2a2a1aA.Oai#Qa##Q#Qahakao", +"#3#3#2#9.V.6.t#8a#ak#uayaFayaJaJaTataT#YaJaAa2aPabbsaCaCbsaCabaPa2aJatak#a#maiatayaAaVa1.KaPabbsanaBbeaGaGaObxaKaOa8#EbAbubtbjbjbubtbjbubububGbj#Kbj#W#y#Kav#KbjbjbububuaEa8#EbxaObxaK#EbAbubG#ybj#Kbtbobu#EaKaKaGbha7be#H#Ga7a7aGaGa8a8a8aKbvaM#.a7aua7blaza4#RaVaJ#Yatat#Y.9a0a3azaMaKb#bububobjbwbjbu#EaObvbFaubbawazaMbvaMaMaMaubbbhaOaKbAbjbububtaEbtbtbtbuaKaMbba4ananaCbsada2a2a2aAaAaTai#P#N.w#4#A#QaHah", +"#Qa##3#2.t.V.V#2#3aHakatat#uaoai#mai#BataTaJaAa2a2#TbsaP#TadaPaPba.8aJatat.OaJaAbaaPaPabbkaCana4brawaGaGaZa8a8a8aKaEbubtbjbjbubtbububububtbobjbjbj#W#Kag#Kag#Kbjbjbububu#EaEaOaRaOaMbIaKaKbAbubj#KbobGbtaKaKaOaRbhbbawbebe#Ha7a7aGaRaOaEb#aKaKasaGaMb.aubeaCa3a0aA#Yat#Bat#Ybma2bs.s#.aObubAbubobubjbjbjbubAaOaGa7auauaubhaMbvbha7awbbbhbvbibAbAbjbububububtbjbAaOaxazbpanbsbsada0a2.9aVaFaJaiaha##3#4#3#3#Q#Oah", +"ah#P#Q#0#9.E#e#9#4#AaHajah#QaH#QaH#Oaiat#YaJaJ#kaAa1a2a0aPaP#TaPaPaUaVaA#kaAa2aPaCbpa4a4a4aBa4bea7aGaGa8aKa8aE#Ebubububjbjbtbubu#EaEbubububububjbobj#Wbjag#KagbobjbubtaEa8a8bIaMaGaMaMaR.UbvbAaIbAbAaKaK.Ubh#.bFauazbra4a4aB#Ga7bhaGa8b#bubuaIaKaKaRaGawaBbsaPa2aJaJaJatafaJaJa2#Ta4aubvaKb#bAbubj#Kbj#KbjbubuaO.UaMa7auaMaMbh#jauauawbFbvaKbububububtaEbtbubjbAaOauaBanbsbsbs.Ka2aA#kaF#Yatai#P#3#3#3#Aa##QaH#O", +"aiajah#A#4#9.E#9#8#0#3#3#4#0#0#2#0#Q#Oaoat#YaJaJaJaJaAaAbaaPaPabaPbaa2a2.8baabaCaBaw#Hbba7#Ha7a7aGaRa8aEbububububtbjbjagbj#KbtbAa8aKa8aEbububjboagbnbjbnbjbwbjbobtbububu#EaOaMa7axaua7aMaM#jbvbvbiaK.UbvaubbazazaBa4anbp#6a4beblaGaGaKa8bAbobobobuaKaGawbpaba2aAaA#kaAbmayaAaA.8aPbEazaubvaKbubj#Kbj#ybj#ybjbjbAaObvaMaubhaua7aua7aua7aMbvaK#EbAbubu#EaEbubtbjbu.UauaBaCbkbsaPbaaAaJaJaJaraoaj#Q#A#3#A#N#Q#Q#Q#O", +"araiah#O#N#8.V#9#9#2#2#0#9.6.6#F#9#0aH#maiataiaiao#uafaJaAa2aPaP#TaPa0aUba#R#6aza7aGaMaRaGaMaGaOaOa8bubu#Ibububjbwbjag#y#KagbjbA#Ea8aObububuagbjbobjbjbwbubobububububu#EaOaGaMaubbaubbauau#.ax.HbvbvaGbhbeaBa4a4a4a4a4anbpa4aBbebebhbvaKbubGbjbobobuaRaua4adaP.8aA.9a2aAaA.8aAa2aPbs#6beaMaKbAbobj#Kbj#ybj#Kbjbjbu#EaOaMauauauauauawauaubvaKbAbububuaEbuaEbububAaO#.aBanbsbsaP.LaAaJaTat#uaiahah#A#3#N#3#Aa##Qah", +"ai#majaH#Q#2#9#2.t#9#e#e.W#t#t#D#p#9#N#Oah#mah#Oahahai#uaJaA.8baaPbaaP#Tab#6beaubvaE#EaEaEaEaKa8aE#Ebububjbubtbubjag#K#W#KbjbuaEaKaOaOaKaEbubtbjbjbobtbobtbububuaEaEaKaOaOaMauauaubbbeaubb.QawauaMa7aube#6ana3anaBa4a4a4#6anbpanbebbbhbiaIbobobjbobAaOa7aBa3adaPa2ba.Ka2.KaUa0aU#TbsaCaBaubvaKbAbjbG#ybj#yav#ybjagbuaKaMaMaubha7bhauaMaM.UaKbAbubtbAaEaKaE#Ebua8.Uaua4bsbsadaPa2aF#Yatataoaiak#O#Q#3#4#3#3a##QaH", +"#mahaH#Q#N#8#2#9.E.E.V.V#tapa.ap#J#laq#4#N#Q#A#N#AaHah#mat#kaAa2aPba#TabanazaMaKaEbubtbubjbubtbububoagbjbobjbububububobjbo#saIaKaObvaRbxbAbubjbjbjbj#xbubububCbuaEaKaOaRaMaMaMbFauaMauauauaubbaua7aube#6aCbsbsbpa4bebebranaCbsbsanazauaR#EbubobjbobuaKbvbba4aCbsaPaPaPabadabbsbsbsbk#6a4awaMaOaIbubjbj#K#y#Kav#Kbjbu#EaRaMa7aMaMaGbvaOaOaKbAbubjbuaE#Ea8aOa8aEaKaGbbanbsad.Ka2a2aAaJaTatataoai#Pa##3#8.x#0#3#3a#", +"aH#Qa##3#0#2#9#9.t#e.V.6.G#qa.a.#J#t#p#9#9#2#9#8#2#3a##aataJa2ba#Tababanaz#.aKbubjbBbjagbBbtbtagbjbj#Kbjbobua8a8a8aEbAbuaIaK.UbvaMaGaO#EaEbtbjbjbjbjbjbt#xbuaEa8aOaOaRaMaMaGaM#.aMa7axa7a7auauaubhbea4a3aPaPadanazbea7bea4bsadaPab#6azaMaKaIbAbobobubuaRaMbebpanaCbsbsbka3anaCaCanaCbpaBbebhaR#Ebobjbj#K#W#K#KbjbobuaK.UaGaMaMaRaRaOaRaKaKbAbtbjbtbAaEa8aOa8bxaRbFawanabaPaPa0a2aVaAayayaJaTar#a#Q.x#8#8#2.x#4#3", +"#N#4#4#8#e.t#e.t#e#9#e.W#ta.#U.Ya.#f.G.6.6.V.V.E.t#2#3ahai#ka1aPbsaCaCazaubvbAbjav#ybjbjbjbtbjbjbj#W#KbwbuaEaKaOaRaObvaKbibv#jbhaMaMaOaE#sbjbjbBbBaNbjbtbuaEaEa8aRaGaMa7bhaMaua7#.aMaubhaMaRaMaMaGbeanabaPa2aPaCa4#Ha7beaCada0a2.KbsazauaMasaKbAbubjbubuaOaMawbr#6aCanbpbpa4aBbqbra4bebebea7aMaKaKbobo#Kbj#KbjbGbA#EaKaOaOaRaRaOaOaOaKaK#Ebubtbjbjbu#EaOaZaOaRaGa7bbbpbs#TaUa0a2a2a1a2a1aAaJaTai#P#3#4#8#2#8#8#4", +"#3#0#8#9.E.V#9.E#9#8#9.6#t#Ja.#U.Ya.#J#D.W.6#o.V.E#0#3#aat.8aPaC#6a4a5aubhaKbtagbBbjbjbtbtbobubj#KbnbjbjbuaKaZaGaMaRbvbvbvaMaMauaMbIaKbubtbj#y#yagbjbtbuaEa8a8aOaGbha7aubbawazbbaubeauaMa7aGaMa7a7bebsaPa1#k.9aban#6a4aCaPa2aAaAa2#TanbebhaMaOaKb#bububua8aKaGbhblbea4a4bebebebebebrbebebla7a7bvaKbAbj#Kav#KbjbjbAaEaKaOaObxaOa8a8a8a8aEbubtbobjbtbuaEaKaOaLbxaGaGaua4#6bs#TaPa0aUa0aPbaa0a1aJaiah#3#8#8#2#8#8#8", +"#4#8#9.E.V.V.V.t#9#2#9.W#t#J.M.Ma..M#q#JaSbf.6.t#9#4aHaoaJaPaba4bebba7bvaO#Ebobjbtbj#EbAaK#EaIbAbj#KbobobuaKaGaMbhaMaMaGbvaM#jbh#jaO#Ebt#y#y#yaNbjbjbuaEa8aOaRaGa7a7bebeaBaza4bHa4#6beawa7aua7a7awa4aba2aAaJaya2baaPbaa2aAay#YaJaAaPbsa4aza7bhaMaKaEbubobubua8aObha7awa7#Hbl#Hbebra4brbebe#GbFaRaKbubj#K#W#KbjbGbuaKaObxa8bxaEa8aEaEa8buaEbubtbjbjbtaEaEbxaOaZaOaGaMa7bb#5anbs#RabbsaCaCada0aJao#Qa##3#4#8#4#3#0", +"#4#8#9.E.6.V.E#9#2#0#e#F.W#Jap.M.Ma..Map#t.W.Vaq#0a#ahaJaAbs#6bbaMaRaR#Ebubububu#EaKaObv.Ubv.UaKbobobjbub#aOaGaMa7a7aMbvaRbvaObI.UaK#sbjaN#yav#ybj#saKaOaRaRbga7#GbeaBa4a4anbsa3bsa3a3ana4#6a4ana4bsaPa2ayafataJaJaJaJafatafaTaf#ka1aPbsanaBazaubhbvaK#Ebububua8aObhaGa7bha7a7bea4a4a4bqbea7bhaOaKbo#K#W#KbjbobAbAa8#Ea8#Ea8aEbububububububtbjagbtbubuaEa8aKbxaRaGaObvbvaubya4#6aCa4a4aCaba0aJar#a#O#Q#Qa##Q#3#3", +"#4#0#2.V.V.E#e#9#8#0#9.6#t.G#J#J#J#fap#J#t.6#e#2#0#Q#maJ.KaCbeaMaOaKaEbubAbuaE#EaKaOaMaubh#jbhas#Eb#bAbuaKaGaaaMaMaMaRaKaKaKaKaO#E#sbt#y#yav#ybjbjaEaKaRaMb.a7#Gbbbra4ana3ad.KaP.Ka2aPaPaPaP#TaPabaPa2a1bmat#uaiaiai#maiaiai#uatafaAaAa0bsa3aC#6azauaM#XaKbAbuaIa8aOaRaRaLaGa7bea4a4aBbea7b.aGaRaKbubj#KbjbobGbjbuaEaE#Ea8aEbubu#Ibubu#IbubjbjbjbjbtbubuaEa8a8aKa8aKbua8aKaMauazaB.0aBbpaba1aJ#uaiaiaoaiahah#Oa#", +"#3#4#8#e.E.V.t#9#2#2#F.6.W#t#t.G.R.G#JaS#t.V#F#8#4aHataAadaBauaRaEbubAbubtbu#EaKaG#.bbazbeauauaMasaKaKa8aRaGaGaGaGaRaKaE#EbuaEbubtbjbj#yaN#KbBbjbu#EaRbF#G#H#Gbebea4anaCbsaPa2a2a2aAaAaAaVaJaFaA.8aAaAaAaTaiai#O#Qa##Q#Q#Oaiai#u.ObmaAa2a0aPabbsaC#6az#.bvaIbubuaIa8bxa8aRaGbhbea4bpa4be#Ha7aRaKbubu#Kbj#KbjbtbobjbtbuaEaEaEbubububu#IbjbubjagbjbjbjbjbjbuaEbuaEbububobjboaKbvbh#Gbe.0aCaba0aFataTataJ#Yatataiah", +"#N#4#8#9.t.E#9#9#2#9.V.Wbf#t.W#p#1.G#J.G#t.V#e#9#Nahafa2a3beaMa8bubjbtbubuaKaOaGbhbea4#6#6a4azbhbhaGaRaRaRaGaaaGaOaKaEbAbubAbububjbj#y#KbBbjbjbjbAaKbIa7bebebebqa4aCaCbsaPa0a2aAaAaJaJaTafar#BaiatatataTat#mah#Q#3a##Q#Qah#uaiataJayayaAa2aAa2a0aP#RaDazbhbvaKaKa8aKa8aKbxaRa7beaBa4a4beauaaaObxbAbobjbobGbubAbubtbubuaEbuaKbubuagbububjbjbj#KbBbjbjbjbubobubububAbobobobAb#aKaGaMa7bebpbsbaaAayaAaVa0a2a2ayaJat", +"#3#3#4#8#9#2#2#2#9.t.Vbf#t.6#F#p#p.W#t#D.W.6#9#n#Nah#YaUaCa7aGb#btbobjbu#EaRaGbha7aB#6aCaC#6a4bebhbha7aGbhbgbhaGaOa8aIbu#EbAbu#sbjbjbjbBbjbjbGbtbu#EaRa7bebebqa4a4bk#TaPa2a1aAayaJaTatataiah#PaH#Pahaiat#Bak#O#Q#3#Q#Oahaiatat#YaybmaFaA#kaF#kaAaVaPbs#5aubhbvaKbiaOaKa8aRaRbhau.0a4azbea7aGaRaKbubububGbubAbAbAbjbubAaE#EaEbAbububububjboag#y#KbjbjbobGbubAbAaIa8bAbubGbubub#aOaaa7bqaCabaPa2a0aba3aCaDa3a2aVbm", +"#O#Q#Q#4#8.x#8#8#2.t.6.6.V.V#e#9#F#p.WaS#t.W.V#9#3#aaJbaa4a7aRbububjbtbAaOaRaGbha7.0anbsabaCa4.0bba7a7a7b.bhaGaZbx#EbubAbubAbtbobtbjbjbo#sbubtbt#Ea8aRa7bebea4aCaCabaPa1a2#kaJaJatataoaiaj#O#A#Na##Q#aaoai#mah#Q#Qahai#uat#YaTaJaAaFaJaJaJaTaJaJaAaV#TaCaw#.bhbvbhbvbvaKaOaMbhaubra4bebebbbhaOaRaKbubjbubGbobAbjbubA#EaK#EaKa8aEbAa8bubuag#KbjbBbjbGbt#sbuaIaKaKaKaIbubub#bAa8aRaGa7bea4bsabababaCa5beaBaDaPa2aF", +"ai#mahaH#3#4#8#8#9#9.V.V.6#9#n#0#9#e.6.W#D.W.V#na#aiaA#Ta4bbaGaKbubjbubua8aGaRb.a7.0a4abbsaCaCa4be#Haw#Ga7aaaGaOa8a8bAbtbjbjbjbjbubobAbu#EaK#Ea8aKaOaOaM#Gbea4aCabaPa2aVaFaJaTataT#uataoah#Q#3#3#3a#ajai#maiahah#aaiat#YaJaJaJaAaAayaJ#Yatatat#YaJa1#Tanawa7bh#.awaz#.aMbhaMa7bea4a4aBa4beauaMbvaObAbubAbjbobjbGbtbuaKaK#EaK#Ea8aEaKaEbubjagbjbjbubG#sbuaI#EaKaKaKaOaIbuaIa8aKaGbh#Gbea4aCaCaCaCa4bebybe#6ab.Ka2", +"ai#aah#P#A#3#3.x#2#9.E.E.V#9#8#4#8#9#Fbf.Wbf#e#0aHata1abanbebhaObububjbuaKaRaGaaa7bea4bk#TbsaCan.0.0beawa7aaaGaZaKa8bubGbjbtbjbjbubAaEaKaOaOaO#EbxaOaRaGa7bra4aCaPa0aAayaJaJatatataTataiak#O#A#3#4#Q#mai#Baiai#m#uaTaAaAaJaJaJayaJ#YataraiaoataTaJaVbaaCawa7auawaB#5azaubhaMawaza4anbpazazaua7bvaOaK#EbubobjbjbjbAbA#EaEbAaKaEaKaOaRa8bububtbtbu#sbtbAbAaIaKaKbvaRaOaIaEb#aKaRbha7bebebqa4bp#6a4bea7a7aw#6#RbaaV", +"ah#O#O#Q#3#A#3#8#8#2.t.t.E#2#8.x#0#8.t.6bf.6.V#0#Oata2#TbpbeauaO#EbobobubuaRaZaG#G#G.0anabbsaCaCa4a4bqawa7bhaRbxaKaEbAbjbjbjbjbu#EaKbvbvaMaGaOaObxbxaOaGa7bqaCabbaa1aAaJ.O#YaTataT.Oatataoah#Q#A#Q#QaiatataT#uatafaFaAa2#kaJ#YaJ#uarai#majaiataT.OaAa0aCbebh#Gbe#6aC#6azbhaMa7be#6bkaCana4be#.aMaOaKa8bAbubj#KbjbobubAaI#E#EaKaOaRaMaRbxaEbubuaEbAbubAbubuaKaKaOaKaOaIbuaKaKaMa7awbebqa4a4a4bqbebeawaua4bsa0.8aJ", +"aHa##N#3#3#0#2#2#9#9#9.t#9#8.x#8.x.x#9.V#o.W.E#0ahaT.9ada3aBauaGb#bubtbobuaKaRaRaGa7#Ga4anaCaCanbpa4bebebhaGaObx#Ebubu#KbjbjbubAaObva7auawaubFaRaObxaRbgauaBaCaba2aVayaJaJ.OaJaJayaJaJaTaoaiah#Q#Qah#matatatataTaJayaVa2aJ.OaJaTaiaiaiahahaoar#uataya1bs.0awbea5aCa3anbeauaaauazanbsaPaCaCazauaMaR#Ea8bubobj#KbjbjbjbububAaKaOaMa7a7aGaMbxaEa8aEaE#Ea8bAbu#EaKaKaKa8bubuaKaMbhazaBa4bpa4a4aBbebe#Gbeanbsa0#Yatai", +"#n#0#n#9#9#9#9.t#9#2#2#9#2#8#8.x#8#8#2.t.Vae.E#4aHataFaPbsa4bebvaKbubobjbub#aKaZaRaaa7bba4a4anana4azbea7aMaRbxaKaEbubjbjbj#EaKaObhaubyazaBbea7aGaObxaRaGbea4aCaP.Ka2aAaJayaAaAaVaAaAayaJaTataiajajaiat#Y#Y#Yataf.ObmaAa1aJaJaJaJ#uarai#mak#BatarafaJa2acbrbe#GbeanaCa4aza7aGa7be#6adba#T#TaCazbhaQaKaK#EbubAbjbjbjbjbjbAaEbvaMa7bbbebba7aMaGaOaOa8aEaEbubua8aKaKaKaKaKaKaRaMauazbpaCaCaCana4a5brazaC#Ta2aJai#m.A", +".W.W.6.6.6.E.E.V.E.t#2#2.t.x#0.x#8#3#8#2#2.t#8#8#Pai#ka2ab#6beaMbxbubjbjbobuaKaKaOaOaRbgbeazbraBbebeaMaMaOaKaEaEbAbjbjbubAaK#jauaza4anaCa3a4auaMaZaKaGa7branbsabaPa2aVaAa2a1a0a2a0a1aAaAaJaJat#u#BataJaAaAaAaAaJaJayaF#kaJaTaTataiai#uaiaoao#BaiataJa1bsa4bebebebpa4aB#GbvaRbhaw#6ada0aPaPbsa4auaMaOaOaKbubtbobjbjbobu#EbvaMbbaBa4ana4azbba7aMaGaOaOa8bubuaKaO.UbvaMbvaOaMauaza4a3bs#TbsaCa4.0bea4bsa2aT#m#i.1#n", +"#J#JaS.Gbf.W.6.V.t#2#8#8#8#4#8#8#8#8.x#8#8#8#8.w#QaiaTaAbabsa4awaR#Ebubjbjbobubua8a8a8aOaGa7a7aua7aMaRaOaEaEbAbtbjbjbjbAaK#.be#6aC#TaPaPaPaCazaMbxbxaRa7bea4aCbsaPaPaUa0a2aPabaPbaa2.8aAaVayaJat#YaJa2baaPaPaVaVaJaJaJayataTatar#uatataTat#BaoaiaoaJa2aba4bebebebrazbea7aRaOaMbe#6aPaAa1a1ba#6a4auaOaObJbubAbtbjbobtaKaOaubb#6aCbEbkanana4bebba7bhaRaOaKaOaR#j#.au.Q#.#.aubea5anabaUa2babsaCbra4aCbaaJaiaH#n#F#p", +"#fap#Jap#D#t.V#e#9#0#4a##3#8#4#8#9.x#0.x.x.x.w#3#PajataJaAa0ad#6aubvaKbubjbobjbubobtbua8aOaQaRaQaRaOaKbububtbjbjbjbjbAaKbvbb#6a3aPa2a1.8baa3azbhaRa8aGa7bea4bpanaCab#Tad#TabbsbsabaPaPa2a2aA.9aVa1babs#6#6aC#Ta2aAaJayaJ.OaTatat#uat#Yafataiahahai#Ya2bsbpa4brbebrbea7a7aOaRaMbeaCa2aVaAaya2#T#6bb.UaO#EbtbubAbu#EaKbvauaz#6bsbsad#Rabbkana4azbea7a7bhaGbhauaz#5#6azazbebe#5anbsa0a1.8.9babs.kanabbaaJah.1#e.W#t", +".Ma.a.#Jap.W.V#n#4#N#Q#Qa##3#0#8#2#8#8#3#8.w.w#A#Qah#maoafaJaVaPaCaz#jaKbAbtbobjbjbobtbuaEbua8#EaEbububtbjbj#ybjbjbjbubiaMa5bsaPa2#kayaAa2#Ta4aMaZaKaRaGa7bea4bq#6bpaCbka3aCbpaCblaP#TaPa2a0a2aP#Tanbeaua7azanab.8aFaAaA#kaJ.Oataoatatatao#aah#maiaJa2abaCa4brbebebea7aMaZaObhbb#6baaAaAaFaAaban.QaOaKbubtbu#EaK.UbhazaBanbsaP.Ka2aP.Kadbsa3anana4aBazawaz#5ana3bsa3a4a4aBanaCaba2.9aAaAa2abbsaCaba2aJ#m#Naq#p.G", +"a.#Ua.#J#J.6aq#0aH#O#aaj#Q#Q#3#4#8#n#8.x#8.x#3.w#Q#PahahajaiaiaJ.8bsazau.UaKbubobjagbububuaEbuaEbubububj#K#W#KbjbjboaK.Uau#6a3aPaVbmaJaAaAbaanauaRaObxaRbhblbebea4a4bpa4bpa4a4bpa3bkbsaPabaPbsaCbpbeaMaOaRaGauanaPa0a2a2a1aA.O#uaiai#uaiaiah#Oah#uaya2abbsana4brbebbbhaOa8aOaRau#6ada2aVaAa2bs#6auaO#EbtbjbAaK.Ua7azbHaC#RaPa2a2aAa2a2a0aPaPadabbsa3#6a4#6anbs#R#Tbsa3anaCa3ab.La2ay#kaAaVadbsbkabbaayaiaH#9#p.G", +"#f.Map.M#t.W#n#i.Aai#Bai#a#Qa##0#9#9#9#2#2#8.x.x#3#Q#3#N#N.1a##a#uaA#T#6aubvaKbubububu#EaKaKaKaKa8bAbubobjbjav#KbjbAaObhaz#6abaPa2aAaybmaV.KbkazbhaRaObxaGa7bebrbqa4a4a4aBbqbraBbq#6aCbsbsbkana4auaMaOa8aEaObhbeaCbsababaPbaaA.O#uaiaiah#O#PaHajataAaPbsbkaCa4a4beblaMaRa8aKaObhaza3aPbaa0aPaCazauaKbAbtbu#E.Uauazana3aP.Ka2aAaA#kaA#kaAa1a2a2.Kbaabbsbsbsab#Tab#Rbsbsab#TaPa2a2#kaJaJbma2aPabbsaba0aAataH#c#e#t", +"#f.Ma.#J#J#1aq#i.Aai#u#BahaH#3#2#e.E.V.E.t.t#8#8#8#4#n#n#9#eaq#0.T#BayaUanbbbh.UaKa8aKaKaRaOaRaOaOaKaEbubj#KbjbjbuaKbvauazaC#RaPa2aV.9a1a2aba3aBbhaRaO#daGa7#HbebraBbrbqbebebe#Hbebra4bpana4aza7aRa8bubjbua8.Uaua4a4bp#6aCaCaPaAar#m#O#A#Na##QahataAa0adbsa3anbpaBauaGaOaEaEaKbva7beaCbsabaCa4aubvaEbjbAbu.UaMazbE#RaPa2.8aAbmaJaJaJaJaJaJ#kaAaA.8a2a2a2a2.KaUaPaPabaPaPa2a2aAaAaJaJaJaya2aPbsbsabaUaA#u#O#n#e.W", +"#f.M#q.M#f#t.4#cbd.r#Bai#a#P#N#2#9.V#e#9.t#2.t.E#9#e.V#F#p.W.6#F#naHat#kbabEaza7aMaRaGaMaMa7bFbhaMaRaKbububjagboaKbvaubr#6bkbs#TaPaPadaPaPbsbkazauaGaOaOaGa7a7bebebebebe#Hbl#Ga7bl#GbeaBa4beawaMbxbubjagbubuaKaGawbebe#Hbebqa3a1aJaiaH#Q#3#3#Q#maJ.8aPbsaCananaBbebFaR#EbubuaIaOaRa7aza4a4aBawaMaObububj#Ebv.Q#6bsaPa2aAaJaJ#YaTafatatatatataJaJayaAaAaVa2a2a0aPbaaPaPa2aVaAaAayaAaJ#kaAa2ababbsaba2#kaiaH#n#F#t", +".Y#U.Y#U.Y#J#1.Z.BaH#a.A#Q#N#n.t.V#F.V.V#e.t.V.6.V.W.6#t.Gap.G.6aq#Nahat#kaPbs#6bebbbebeaBa4brbea7aMaOaEbububuaKbva7azanaCbsabbsbsabbsbsaCa3anazbhaMaRbxaRbga7#Hblbebebla7a7a7b.bha7a7#Gbebea7aMaEbubjagbjbua8aOaGa7aaa7a7#GaCaPaAataj#Qa##Q#Oak#Ya1aPbsaCana4be#jaGaKbububobubuaKaRb.blau#GbFaRaKbubjbAaO#.aBa3aPa2aA#Yat#uaiat#uaoai#m#mai#uataJbmaAaAaVa2aUba.KaUa2aV.9aAaAbmayaJayaAaPabbsabaPaAaJ#a#N.4#1#J", +".X#v#v.X#v.Y#r#1.4bc.B.1#0#2#9.V.6.V#F.E#F.E.6bf#t#DaSaS#Jap.G#t#e#0#O#aataAa0ada3ana3bkbsaCanaBbbaMaOa8aEaIaKaMawazaCaCbsbsbsaCbkanbpana4brazbbaGbvaOaOaGaGbFaGbha7a7aaa7b.aGaGb.aGaGaMa7a7a7aM#Ebobj#Kagbo#EaOaRaGaaaaaaa7beaCbaaAafaiakah#mataJa2aPbsaCa4azauaMaK#EbubobjbubuaEa8aRaGaGaGaRaKbubububAaRauaBa3aPaAaJat#mak#maiai#aahah#Oahai#uat#YayaAaAa2a2a0baa0a2a2aAayaAaJayaAaAa2abbsbkbsaPaA#uaH#n#p#t#f", +"bK.DbKbKbK#v.X.F#1.y.4aq#n#9#F.E#F#e#e#9#F.V.6.G#Dap#Ja.apa.aS#t.V#2#N#P#mafaJ.8aUbaaP#RabbsanaBauaGaKaEaIaO#.aw#6a3bsababa3bkaCana4a4brbebea7bhaObxaOa8aOaGaRaGaGaGaGaGbFa7a7aGbhaGaRaGa7bhbFbvaKbAbj#WbjbjbuaKaOaRaQaGaGaG#GaBanaba0aAaJaJ.OaJaAa0adan#6beaMaOaKbAbubjbubjbubua8a8aOaRaRaOaKbubjbobuaEaRauaBa3aPaAaTaiah#O#Qah#O#PaH#Q#QaHaj#BataJaJaA.8a2a2aP.LaUa1a2aAaAaAa1.9aVa2aPbsaCbkaba2#Yah#N#e#J#f#v", +"bKbKbKbKbKbKbK.Y.F.7#1#p#e#F#9#9#9#9#9#9.E#FbfaS#Japa..Ga.aS.G.6.V#n#3#Q#O#BataJaAaV.8a2aPaPanazbFaOaKbuaObhawbEabbaabbsa3aCana4aBbebbaua7bFaGaOaEa8#EaKaOaObxa8bxaKaOaRaaa7a7a7aGaGaGaRa7bhauaMaObAbjbB#WbjbjbuaEaKbxbxbxaRaGa7#Ga5aCaCaba0a2baaPaba3a4azaMaRaIbubjbjbjbjbubjbubuaEa8a8a8bububoagbubuaKaMa7a4bsa2ayaiah#Q#A#Q#Q#Q#Qa#a##Q#OaiataT#kaAbaaPadabab#TaPbaaPa0a2.8a2a2aUbaabbsbsbsaPaA#BaH#n#1#f#U#v", +"bKbKbKbKbKbKbKbK.Y#U#f#t.W.6#F#e#e#9#9.E.V.V#tapap.Ma..G.G#t.W.6#9#2#N#Nahai#uat#YafaJaAa2aPanazaMaObuaKaR.Q#6baa0a2baabana4a4azbbauaMaGaQaRaOaEaE#Ea8#Ea8aObx#Ebxa8bxaGbhaubebebeaubhaGa7a7aubv.U#Ebjbj#Kbjbjbo#Ea8aOaObxbxaRaOaGaaa7be.kaCaCbkaCana4beaubvbAbobjbj#KbjbjbjbjbjbububububububwbubAaKaRaMa7bea4bsa1#Yak#Q#Q#3#A#A#A#3#3a##Qah#mataJ#ka2aU#TaCananaCaCbsa3adaPbaabaPaP#TbkbsabaPa1at#a#c#e.R#U#vbK", +".D.D.DbK.D.DbKbK#h.X#U#f#t#t#F#9#9#2#8#9.t.E.W#D#Japap#J#t#t.6#F.V#9#4#Nah#maoatatatataJaVaPa4auaMaKaKaKaMa4a3a1aAaV#Taca4azauaubhaMaObxaOaOaOaOaKaKaKaKaOaOaOaOaRaGaRa7a7aza4bHa4beaua7a7aMaMbvaK#Ebjbjagbj#Kbtbu#EaEaKbuaEaEa8a8aOaaaaa7#HbebqbebrbebhbvaKbubj#K#W#yag#KbjbubububuaEb#bububo#EaK#jaubeazaBanabaVaJ#m#P#Q#A#3#Q#N#A#Q#QaHaj#BaJaJaAba#TaCa4azazbeaza4a4#6a3bsa3ababbsbsabbaaAafah#N.4#p#J.F#v.D", +".DbKbKbKbK.D.2bK.S#v.Y#f#J#t#p#e#9#8#8#2#8#9#e.W#7#t#1.W#p#F#F#e#e#9#4#N#OaiaiafaT#uaTaAa1bsa4a7bvaOaEaOaua4#TaVaAaV#T#6beaubhaMaMaOaOaEaOaOaQaOaObvaOaObvaMaRaGaMbha7awaza4ana3an#6a4aua7bhaM#EaKbubtbtbjbjagbjbobububAbubjbubua8bxaRa7a7#Gbba7a7bhaMaGaRaKbobj#Kbjbjbjbobu#EaKaOaOaRaKbAbuaKbv#.az#6ana4bpaCaUayatah#Q#3#A#Q#A#Q#Q#Q#Pahai#Yay.9a0adanazaua7aMbhauaubebeaza4a4a4a3bsaba2aAat#a.1#n#F.W#J.Y#vbK", +".2bKbK.2bKbK.DbKbKbK#v.Yap#J.6.V.E#0.x#3#4#4#0.4#e#p#Faqaq#9#n#9#9#2#2#3aHaj#BatatatataJa2ab#6auaMa8aOaRaw#6adaVa2baaCa5bhaMaR.UaKaEaE#EbxaOaMa7auauauaMbFbhaMa7bha7bbaza4a3#T#T#RaC#6beauaM.Ua8bAbubububububububAbtbububjbjbwbuaEaRaGa7bebl#GaMaGaRaRaOaKaKaIbubobjboaI#EaKbvbh#.bv#jbvaRbibv.QaY#T#Tad#RbsaPaVatah#Q#3#A#N#Q#Q#P#QahahaiataJaAa2aPa3#6aubvaKaKaKbxaRaMaGa7azbea4bkabaP#k#B#a#N#9#9#p.6#J.F.XbK", +".DbKbKbK.2bK.2.D#hbK#v#U#U#JaS.6.E#0#3a#ahaHaHa##c#0.1.1#Na##N#4#n#9#n#0a#ah#maoao#BaTaFa1ab#6beauaOaRaMbba4bsbaaPab#6awaMaKaKa8bubu#EaKaOa7bbazazaBaBawaua7aMa7a7azazananbsaPaP.K#TbsaBaubvaKbububtaEaE#EbububAbubAbGbtbjbjbjbuaKaMa7brbebebFaRbxa8aKaRaOaKaIbAbubuaKbvbh#.azaza5a5azazauawaza3aP.8aAaAa2a1aAat#m#Qa##3#3#A#Q#Pah#Pah#OaiaTaAa2a0#Ranaz#.aObAbubuaEaEa8aRaGa7bebeaCaPaPaf#m#Naq#p#p.W#p.R#f.Y.X", +".DbK.2bKbK.2bKbKbKbK.X.Y#L.R#p.6#9#8a#ahaiat#uai#aahaH#OaHaHa##c#2aq#9#0#4aHakaiataoataJa2abanbeauaRbIaa#.braC#Rbs#6bea7aRaOa8aKaEbubxaOaMbFaB#6a4an#6bebeaua7#Gbebea4aDa3#R#TaPaP#RaCbH#..Ububtbububua8aKbu#EbubAbjbjbj#KavbjbtaOaubeanaBbebhaOaOa8aKaObiaKaKbuaKa8aMa7bya4aD#Taba3aba3aDan#Ta0#kaJaf#Yaf#Yat#a#Q#3#0#8#4#3#O#Pahah#P#Paiat#kaU#TbkazaubvaKbubububuaEa8aOaGbhbea4aCaPaA#B.Taq#p.W.6#t#7#t#f.F.Y", +".2bKbKbKbKbK.2bK.2.m.o.I.q.zaq.4#9#N#Oar#ka2a2aAaJaf#u#Bai#a#m#Q#N#0#4#n#3aHahaiao#Bat.OaVbaana5auaRaOaMbhbb#6ana4beauaGa8aOaKaKaE#EaEaOaQauaB#6anaCbsaBbe#Ga7bha7awazanaCabaPaP.Kada3#6auaK#Eboagbub#aEaKb#bAbububjbjbjbj#KbjaEbvbbbHananaBbFbvaOaKaObiaRaKbAaOaRaGbhbea4aDabbaa0baa0baaPa0aVaJataiaiaiai#a#O#3#0#2.t#2#2#3#Qah#P#Q#Q#Q#PataFa0abana4auaOaIbubububCaEaEa8aMaMbea4bsaPay#a#i.4#7#1.W#p#F#b#J#r#f", +".2.D.2.2.2.2.P.m.5.g.i.p.j.N.B.1#N#OaiaAaPbkacbsa0aAaJaJatatat#a#O#N#0#n#0a#ah#maiaoaoataJa2ab#6auaMaRbvaGa7beaBbeaua7aOa8aRaK#EaKbu#E#EaKaQaza4ana3bka4bebeb.#G#Gbe.0#6aCa3bsaPaP#Rbsanaubv#Ebubobubub#buaKbubububobjbj#ybjbu#EbhazbpanbkazauaMaMaObv.UaKaKa8aRaMa7#Gbqa4aCac#Tbabaa1aVaVaFafao#mah#OaHa##N#0#9#e.E.E.t#9#3#P#PaH#P#Q.w#QaoaJa2aba3aBawaMaKbubuaEbuaEaEaEaRa7azaC#Ta2af#a.1###p#p#p#p#F#F.7.R.7", +".m.3.m.h.g.b.b.b.d.e.j.n#w.##B#M#a#uaFaPaDbebeazaCbsa0aAaAayaJ#u#a#Q.1#0#0a#aHahaj#aakaoaJaAaba4awaMaOaRaRaMa7a7a7a7aGaRaOaKaKaK#Ebtbtbu#EaKaxbbazanbs#6.ka4bebebebe.0a4a4anaCaCabaPbsanazaMaKbubububububububobubjbjbj#WbjbjbAaOauaBana3bsa4bebbaubFaMaRbvaOaKaGa7a7bebe.0a4aCbk#TbabaaAaF#Yar#aahah#Q#3#n#9#F.6.6.V.V.V#2#3a##Q#Q#3.x#4#3ah.OaAa2abanazauaOa8aEa8aEa8bua8bIaua5a3aUaAat#Obcal#7#p#p#F#9.4#p#1.7", +".7.g.I.d.C.e#C.p.a...#.c#kbD.8#k#kaVaPa3awaGbhbhbba4bsaba2a1aAaJat#a#Qa##N#Q#Oahah#O#QahaoaJa0aCazaubhaMaMaGbha7aGaRaGbxaKaGaOaK#EbAbjbtbt#EaMau.sana3bkaCaC.0be.0#Gbea4bqa4aCaCbsab#Tbs#6azaubvaKaKbuaIbubobubobobjbjagbjbjaK.UauazaCa3bbbsaBbebba7bhaMaMaRaMa7bebl#G#Hbe#Ha4aCaCababbaaAaJ#uak#O#Qa##3#9#F.V.6.W.6.V.V.E#0#3#N#3#4#8#9.wa#aiataAa2a3#6auaRaKaKaKbxa8a8aOaMawaBaba0aA#u#iaq.6.R#7#p#F.4#9#p#p#b", +".q.y.v.j...l...A.f.ubmbz.K.K#T.Ka6#RaCazaGaRaKaGbhawa4bpaCbsaba0aAaT.raHa#aH#O#Oah#Q#OahahaoaFa0acazazbyaubhbFbhaRaGaRbxasaRbiaObi#sbBbjbjbjbiaMau.sa3aCbsaCa4a4be#Hbebea5a4a4aCbsaPaP#TabaCazaw#.bvbvaKaIb#bubububoagbjbjbA#EbvaxbeaBa3bsana4azbebea7a7a7a7awaBa4aBbebe#Gbe#Ha5a4aCaCaba0aAaJarakah#A#4#2#e.V.W.W#t.W.W#p#9#n#n#n#9.V.E#9#0#Q#mafaA.Kbsa5azbhaMaRaRaQaOaRaMbeazaC#TaVataH#n#7#1#p#p.4#naq#e#F.W", +".J.B.T.f#u#B#u#uaT#Yay#ka0a3aYa3#6.sazauasaOaKaObva7a7bea5a4anab.Lbmai#O#N.1#3#N#Pah#OajaiataJa2a6a3#5azazaubha7aMaMaaaRaMaR.UaKbA#sbj#ybBbjbAbiaMauaz#6a3aCaCa4.0aw#Gbe#Ha5a4aCbk#TbabaaPacaC#6azaz#.#.aMbvaKb#bububoagbobtaIaObvaubeaB#6a4ana4aBbebea7bebebr#6aCana4bqbebebebebebebr#6aCaba0aAaTai#Q#3#9.E.6.6#t.W#t#t.6#p#F#F#p.6#t.6.6#e#n#N#m#uaAa0bsa3#5azbebhbhaGaGa7bbaz#6abaA#Y#O#c#p#p#7#paq#9#n#e#e.6", +"#i...A#uafaoatatataTayaAa0#RaYbE#5azby#.aOasaOaRaRaGbha7b.bba4a4bsa2aJ.r#O#Na##N#QahahaiataTaFaVa2#Tbsa3aDazaza7#Ga7auaMbhaRaOaKbAbjbjbBbjbjbtbAbi.U.QbyaB#6a5aBbeaw#Hawbebea4aCaCabbababaaP#Tbsa3aDaYa4azau#.aMaRaKaK#EaKbA#EaKaRaMaubea4a4a4a4bqaBbebebebra4aCabbk#6a4aBbea7bea7aubha7awaz#6aba0.Oai#P#3#9.V.6.WaS#t#J#t#1.R#1.R#J.G.R#t.W#p.4#Nbd#u#Y.8a0#Tab#6a4beaua7aubebea4aCaPaA#m#N.4#7#t#1#F#e#9aq#e.V", +".T.T.A#a#mahahajakarayayaVa6#Ta6a3aY.sauasaOasbvaRaMaGaRaGa7a7bea4aba2#Y#u#O#Q#Q#OahaiaoataJayaAaVa0.Ka6#Tan#6a5beawbea7a7aMasaK#Ebjbj#KbB#KbjbG#saI.Ubv#jauauawaua7auawazbea4a4aCaCabaPa0a1a0baaP#T#Ta3a3#6azbe.Qau#.#j#jbvbvaOaRbva7awbea4a4aBa4bqbr#Hbea4a4bs#Tabbsa4azaua7aMbhbvaRbvaMbhaw#6aca1.Oaia##0#9.V#t#t.Gap#J#J.M.M#fa.#fa.#J#J#t#p.4.1.A#mataTa6aTa0a0abananbebeauawaBaCa2afaH#n#p.G#b#F.4#0#n#9#e", +".1a##Na##Q#QahakaoaTaAaVaVa0a0aVa6a3a5#.aOaKaRaMaMbhaMaRaRaaaaa7bba4a3a2afajaHa##QahaiataT.OaJayaAa0#Tabbsa3aCa4#6aBa5beawauaRaKbAbubj#y#Kav#yavbjbjbjbAaKbvbvaMaubhbh#.a7aubea5braCa3abbaa0a2a0a0a2a0a0aP#Ta3anan#6.s#5azauaMaMaRaGbh#Hbebea4a4bpa4.0be.0a4aCabaPaPaCanbebhbvaObvaKaOaKaKaRaMawaDadaAat#O#N#9.6#taS#Jap.Ma.#f#U.Y#U.Y#U.M#q#f#J#p#p#n.1a#a##P#mataJaya2abana5bl#GbeanaC.8at.Naq#p#F#e#n#0#0#8#9", +"a#.1#4#N#3a#aj#u.OaAbaa0a1aA#kay.8a3azauaRaKaRbvaMbhbhaRaOaRaGbha7azanaPaA#u#a#O#Q#OajatatayaAaVa0aPa3a3aCaDanaCaCbpaC#6a4awaMa8a8bjbjbj#y#WbB#Kav#ybjbjbjbt#EaK.Ubv.UbvbvbhbhbbawbqbpabaPbabaa2babaa2a2a2a2a2.K#T#T#Ra3aYbHbyaubhbha7a7be.0a4bqa4a4bebebra4aCbsabbsa4awaM.UaK#EbubAaIaKaKaObhaua4ab.8aTah.1#9.6.G.Gap#Jap.Ma.#U#U#v#v.Y.Y#f#J#J#t#t#p#9#2#4#3#A#PahaiaTaAaPaCana4#6aCbkaPaA#B.Taq.4#n#0#0#4#4#0", +"a##N#4#4#3#QajataFa2#TbaaV#kayaJaVa3a4bhaRbxaRbvbvbvaMbvbxaRaGbva7au.0an#TaAaTai#mahaiaoaJaJa1a2baabaCaCaCanaCaCaCa3a3aCa4bebhaRa8bubj#Kag#y#W#yav#Kavav#ybjbjbubAaKaKaKaKaObvaGbhbebeaCabaPa0a2ba.Ka0a2aVa1a2aA.8a2a2.K.Ka3anazbeblawbebebra4a4bqa4br.0a4a4aCaCaDa4awbhaOa8bubobjbjbu#EasaMawaBaCbsa2aJ#a.T.4#t#D#Jap#Jap#J#fa..Y#U.Da.#f#J#1#1#t#t#b.6.E#e#8#4.x#A#QakaTaAaPabbsaCbp#6bka2#Y#a.1#c.1#Na#aHa##Q", +"#Oa##N#A#Qajataya2baabada2a1aVa1aPaCbeauaGaRaObvbvbvbhbvaKaRbvaGaMa7auazaC.KaAatataiataTaJayaAa2a0abaCana4a4aDanaCbsaCaCaCa4a7aGaKa8boag#K#K#W#yav#y#yav#yavbBbjbj#sbubAbAb#aIaOaRa7awa4bsbabaa2a2babaa2a2a2aVaAaV.8.9.8a0.KbsaCa4a4be#Hbebebqa4a4a4ana4aCbpa4a4beauaMaRaKbobtbjbjagbAas#jbe#6bsaba0.9af#a.B.4#t#Jap.MaS#Jap#J#J.M.Ma..M#J.R#1#1.R#t.G#D.W.6.E.E.t#8#4#Q#BaJa2aPbsaC#6bpaCaP.9#w#a#a#O#a#mahah#P", +"ajah#OahahaoaJaAbabaab#TbaaPaba3anazbebla7aGbhaMaRbvaMaRbvaMbhbhbhaMa7a7a4bsa2aAaJ#YaJaFaJaAaVaAa1babsaCa4bqa4aCaCababa3aCa4bebhaGa8bububobjag#Kav#Kav#yav#y#y#ybjbj#Kbjbobjbob#a8aGa7beaCaba0a2a0baa0baa2a2a2aV.9a1.9a2a2.KaPbsaCanbqbe#Gbebea4anaCaCbkbsaCa4.0bhaRaKaKbubjbobjbjboaKaMbe#6a3aP.8aJaf#maH.1##.W.Gap#J#Jap#J#J.G#J#f.R#f#f.R#1#t#1.R#JapaS#t.6.V.t#4#Qah#uaJa2a2abbsaCbp#6bkaP.9aAafatataiaiaiao", +"ataiaiai#maiaTaFaFaVbabaaPa3#6azawa7aubebeaubhbhaRaOaRbvaabh#.aMa7bhbFa7az#6abaPa1aVaAa2aAaVa1a2aVba#Tbk.ka4aBaCaCbsabbsaCbpbeblbhaGaKa8aEbobjagbj#Kbjav#K#yag#y#Wbj#Kbj#KbjbjbubuaKaaaua4bkaPbaa2a0aUbaa2a2aV.9a1aAaA.8a2a2aPabbsaCa4.0bebe.0bpaCabab#Tabana4a7aRaEbububobjbjbjagaEaOaua5aCaPaVaJatai#O.T#c#n#p#t#taS#JaS#J#D#1.R.7#1.R#J.7#1.R.R#J#f#fapapbf.6#9#3#PaiaJaAa2aPaPaCanaCa4bpa3abaPa1aAayaJatarar", +"at#uatataoat.O.OaJaAaVa2aba5auaGaMaGa7brazbea7a7aOa8aRbvbvaMauaMbhaGaMbhbea4anab#TaPbaa0a2a2a2aAa1a2baadbsaCbpaCbsabbsbsaCan#6bqaua7aMaRaKaEbububjbubjbjbj#W#yag#y#KaN#Kbj#W#Kbjboa8aKbhbe#6abbaa2a0baaPaPa0a2a2.8.9aV.9a2a2aPaPabaCana4bqbqa4aCbsabaPbsbka4auaRaKbubobjbjbobjbobuaKaMbean#Ta2aFaTai#O#Q#N#4#n#9#F#t#D#t.Gap#J#b#t.7#t.7ap#J#J#f#f.M#Ua..Ya..G.6#2#NahaT#kaAaPabbsana4a4aBa4bpaCaCaba0aAay.Oatat", +"atatataTaoaratataTaJaAa0a3bbaRaKa8aOaMbebrbrbeauaGaRaRaGaGbhbhbhaMaRaGaaauaz#6bs#TadaPa2aAaAayaJaJaA.8ba#TbsabbsaPabbsbsbsabbka3bpa4bba7aGbvaOaOaKaKbAbububobjbj#W#y#Kbj#Kbj#WbjbjbuaIaObhazaC#TaPa2aP#TaPaPa2a2a2a2a2a2a0ba#TbsbsaC.ka4a4a4anbsabadbsbs#6bea7aObububjbjbj#KbjagbuaRbhazaCaPaV.Oatah#N#A#N#0#0#2#e.V.W#t#J#Jap.7.R.7.R#f.M#q#U#U#U#v.X#v#U.Map.W#na##mafaAa2abbsbpa4bebrbebeaza4bpbsbaa1aJatao#u", +"#m#maj#aahahajaiaoaJaVaP#6bh#EaEbAaOaGa7aubebea7aMaZaOaKaRbhaMaGaaaRaRaMawbeaCbsaPaPa2a2#kaAaJaJay#kaAa2baaUbabaa2a0aPabaPaPaPaPabbsana4azbebbaubhaMbvaKaKbububobjbj#KbB#W#y#K#W#KbjbubuaKbFaza3bsaPabbsabad.KaUa1a2a2baaPaPbsaCbsaCaCaCaCaCaCbsaba3ana4beaMaMaKbubtbj#K#KbjagboaKaGa7a4bsbaaA.Oaoah#A#Q#3.x#8#8#9.6.6#D.Gap#f#f#f.F#f#f#q.Y.M#U.XbK#v.D#U#U#f#7#n#QaiaJaAa2#Tbkana4beawbl#GbebraDabba#kataiaiah", +"#Q#Q#Q#Q#P#OakaoataFa0a3be.Ua8bubtaEaKaGbFaua7aMaGa8a8a8aOaRaRaRaRaGaGbhbe#6anbs#T.Ka0.9aF#kaJ#kaJaAa2a0aUa1aAaAaJaAa2a2baa2a1.8a2a2a0aPbsbsa3aC#6aza7aMaRbvaKaKbAbubjbjbj#KaN#Kbj#KbjbjbuaKauazanaCbsbsbsabaPbaa0.KbaaPbsaC#6a4aCaCanaCbsbsabaPbsana4auaMaRaK#Ebubjbjav#K#KboaEasaMawa4aCbaaAaJ#uaj#Q#3#3#8#n#9.E.V.W.Gap#fa.#U.Y#U.Y#fa.a..Y#v#vbKbK#U.Dbf#U#taqa#ai#YaAa2aPbsanbe#Ha7a7a7bea4abbaaA.Oai#m#O#N", +"#4#0#4#3#Q#Pai.Oaya0bs#6#.aOaEbuaEbuaEaOaRaGaGaOaOa8aKa8aKasaOaRaRaRbhaua4#6a3aPaPbaa2a1#kaFaJ#kaAaVa2baa2#kaJaTataJaAaVaAaA#kaJaybmaAaAa2a2a2aPbs#6azbebeauauaM.UaKbAbjbjbj#KbB#Kavbj#Kag#saOaMbb#6a4anaCbsbsbsabadbsanaCa4a4bea4a4a4aCbsbsabbsaCaB#GaGa8#EaEbubGbjbj#y#WbjbAaKaRbhbl.0aCaPa1aJataj#Q#N#8#9.E.V.6.W#tap#Ja.#U#U#v#v#U#U.Y#f#U#U#v#UbK#UbK#U.W#J.4#NahataJaVaPabaCaBbe#Hbebebp#Ta1bmaTaiah#Q#N#4", +"#9.t#2#8#AahaoaJa1#T#6awaGaKa8#EbuaEa8aEaEaKaObxa8aKa8aOaRaRbvbhauaube#6ana3aPa0aPa2.8aAaAbmayaAaAa2a2aPa2ayaJatat#YaJ#kaJayaJafaJat#YaJaJ#kaAa2a0bsaC#6#6aBazaz#.aOaKaKbubjbjbj#K#KavbB#Wbt#EaMa7bba4bpananaCaCbb#RaCa4azbba7#Gbbbea4bpaCaCbsaCa4beaMaOaKbubAbububG#yag#Kbjb#aKaRaM#GaBaCaPaFaT#maH#N#2#9#e.W#t#taS#JaS#J#q.M#v#v.Y#v.Y#q#f#J.M.Y#vbK#U#U.Ybf#J#9#N#O#uaJaA.LadaCa4a4azbqaC#Ta2aJatai#O#N#4#2#9", +".E.E.E#8#3aharaVbaa3awaMaKaK#EaKaOaEaEbuaEaEb#aEa8a8aKaRbvaubyaz#6aDa3bs#TaPa0a2a2aVaAa2aAaAaAaV.9a2ba.Ka2aAaJ#YataTbmaFaJaJ#YaTafaJataJafaTaJaAa2aP#Rbsbsa3ana4azauaMaOaKaKbububjbjbjbjbjbtaEaKaMbbaza4a4bpa4anaCbpa4bebbbhaaa7au#Hbea4a4a4#6aBawauaMaK#EbubobGbjbB#K#ybjbj#EaKaRaGa7beaCbaaAataha##0#e#p.6.G#tap#Jap#Jap.Ma.#U#U#U.Ya.#J#J.R#f.Ma..Y#Ubf.D.G#p#9#Nahai#YaAa0baaPbsbkbkbsaPaAaJaiajaH#3#n#9.V.6", +"#9.t.t.x#3ahaTa1#Ta4#.asaKaKa8aOaOaKa8#Ea8buaEbubuaKaRaMaua5#6a3#T#TaPa0.8a2aAaAaVaAaAaA#kaF#kaAa2a2aPaPbaaAaAaJaJaJaybmaJ#Yaf.O#YaJaJaJaJaJaJ#kaAa2baaPbaaPbsaCa4bebhbhaMbvaRbiaK#EbAbubuaEaKaOaGa7bebebrazbebebebebebea7aGaGaGbhbha7bebebebea7a7aMaGaK#EbAbjbjbjbjaNbjbjbua8aOaRaGa7awaDbaaJaia##0#e.W#tap#Jap#J#J#J#J#Ja.#fa..Y#Ua..Map#t#t.R.R#J#q.M.M.W.V#e#4#Qaj#uaJ.8a2a2aPaPaPbaa2a2aJat#m#Q#3#2#9.V.6.W", +"#4#8#2#0#4#ParaA#Ta5aMaKbAaEaKaKaO#EbxaKa8aEb#a8a8aObvaua5bE#Ta0aVaAayaJayaJ#YaJ#YaJataJaJaJ#kaAaAa2a0aPaPa2a2a2aAaAaAaJataJatafaJaF#kaAaA#kaAaAa2a2a2a2.LbabsaCana5aBa5a4azazbyaubvbvbvaOaKaOaOaMa7bl#Gbea7a7a7#Haua7a7bhaabvaGaGaGaaa7a7aaaMaGaRaMaObiaKbAbjbjbGbjbjbjbu#EaKbvaGbvbh#H#6baaJaj#N#9.6.Gap.Map#J#J.M#J#Jap#Jap.Ma.a..G#Z#t.6.6.6.6#t.W.6.6#eaq#4#Nahai#YaAa2a2a2ba.Ka2a2.8aFafaoaha##0#2#9#e#F#9", +"#Q#0#8.x#8a#akayaPa5bhaKbubu#EaKaEaOaOaOaOaOa8aKaOaRaMawa4a3a0aJ#Y#u#uat#uaTatatat#B#uat#YataFaAaAa1.LbaaPaPbaaPa2aVaAayafaTaT#YaFa2a2a0a1bmaJ#Y.OayaAaVa2baaPabbkacbkabababa3a3#V#6az.Qaubhaua7awbebea7a7a7aaaaa7aabha7bhaGaRaRaGaRaLaGaGaGaOaOa8aObiaObibAbobjbj#sbA#E#E.UbvaMaGbhaabeaCa2aTah#4#e.W#Jap.M.M#J#J#J#J#Ja.#J#Jap.G#t#t.W#F#e#9#e#n#2.4#n#n#4a##Qaj#uaJaAa1a2a2a2a2baa2a2a2aAaJat#m#Q#3#0#0#0#4#c", +"aha##3#4#8#3ajaJa0#6#.aKbububu#EaKaOaOaMaRaOaOa8aOaRa7be#6#T.8aJatai#B#uaiaiaoaiao#uataTafaJaJ#kaA.8baaP#Tbsbsaba0a2aAaJ#YafaJaJaJaVaAa1aJ.OaoatataTaJaAaF.8aUbabaaPbabaa2a1a2a1a0#TabaC#6azbrazbebebebba7aaaGaRaGaMaaa7a7aMbhaRaRbxaKaRaOa8a8aEaEaK#EaKbAbAbjbjbjbAbtaKaKaMaMa7bha7a7aua4baaAai#Naq.6.G#q#Ja.#J#f.M#J#fa.ap#J.G#D#t.V#e#2#8#8#3#Na#a##O#QahajaiataFaAa2bsabaPaPaP.Ka2aPa0a2aVaJatai#O#Qa#aH.A#a", +"aiaj#O#Q#3#QaharaVabazaMaKbububuaEaOaMaMbFaMaRaOaRbvauaBaCaPa1#kataoaiai#mai#m#BatatataJaJaJ#kaAaAa2aPbsbsbsaCbsaUaVa2#kaJaFaJaJayaAaFaAaJataoaoatatataJayaAa1a0babababaa2a1aVaJaJaAaVa2abbsacaCana4br#Ga7aMaGaGaGaGbhaMaMbvaOaKa8a8a8a8a8a8aEbububAbA#EbAbtbjbjbGbtbAaK.UaMaxauaua7aubea4#TaAata##n#FaS#Jap#J.M#J#f.Ma..Mapap#t.W.E#n#8#Qa##P#Oahajaiaiaoatat.OaAbabsbs#6ana3bsabaPad#TbsaPbaa2aF#Yai#uatatafaJ", +"aAafat#m#P#PaharayaPaDbyaMaKbAbu#EaKaMbhauaMaRaOaOaMaua4a3#TaAaJat#B#maiai#maiaoat#uatayaJaybmaVa1a2#TbsbkaCbsbs#TaUa0a2a1.8aAayaJaJaJayaTatar#BaraTaJaAaAaVa2baaP#Tab#T#TbaaAayatataTaJaVa2aPabana4a4bbbea7bhaGa7aGaGbvaRaOaKb#bAbubububububububu#EbAbAbtbGbjbjbjbA#E#EbIaMa7a7aua7bebea4aba1at#Q#n.V.Gap#Ja..M.M#U.Ma.a.#Jap#t.6#9#N#PaiarataTaTataT.OaJ.OaAaVbabsaDa4bebea4aCbsbsbsbsabbsabaPa2a1aAaAaAa2a2a2", +"baa1aA.OaiahajaiaJaV#Ta3az#jaOaKaKaKaQaMaMaMaMaOaRbvbhazaCbsba#kaTat#uaiai#uatataJaJaJaA#kaAa2aUa0aPadbsbsaCaCbsabaPababaP#Tbaa1aVaFayaJataTataTaJaFaAa0a1baabababaC#6a4a4bE#TaAaTaiaiataJaVbabs#6a4a4bebebebea7a7aaaGaOaKaIbububobobobobubjbobA#EbubAbubjbBbjbjbjbjbu#EaOaGaMa7a7a7#Hbeanaba2at#O#0#F#tapap.M#U#U.Y#U.M#qap.Gbf#e#0aharaJaVaFaFaFaVaAaAaAaVbaaPa3aBblauaGa7beaBaCbsabbsbsbsabbsababaP#TbaaPabbs", +"aCabaPa2ayaiaiak#uaJa2aPa3az#jaO#Ea8.UaMaMaMbvaOaKbvaMbe#6aba2aAaJatat#uatat#uataJayaAa2babaaP#Tad#Tabbka3bkanaCbsaC#6a4a4#6aCaba2a1aVaFaFaJaFaAa1ba#TaCaCa3#6azaBaubFaMaMauana0aF#u#mai.OaV#TaCbrazbqbeazbrbea7bbbhaRaKb#bubobobobobjbobjbobtbuaK#EbAbtbjbj#Wbjbjbjbta8aKaQaMa7a7bbbea4aCabaVatah.1#9.6.G#J#q#U#U.Ybf#U.MaS#t.W#9a#aiaybaadab#Tbabaa2baa0aPa3ana5a7bvaRaKaRaMbe#6bsabaPaPaPababbsaCaCbkaCanana4", +"a4ana3baaFaiaiajaiatay.8aP#6awaMaO#Ea8aObvaMaObiaOaK#.au#6bsbaa2aJ#Y.OaTaJaJayaJaAaFaVbaaPabababbaabbsbsaCanaCa4anaBaua7aMa7bea4a3ababa0aUa0a2baabaC.k.0awaua7bvaRbxaEaEa8aOauaCa0aJaoataJa0aCa4aw#HbebebrazbrbeawaGaRaEbobj#W#K#K#Kbo#KbjbjbobAaKaK#EbubjagbBbjbjbubtbuaEaOaGaMa7bea4a4abbaayataH#3#2.V#taS#J.Ma..Y#U.MaS#t#D.6#2aHata2#TaCacababaPabbsbsaCazawaMaRaKbuaEa8aRaua5anbsaP#TadaPabbsaCa4a4a4bebqbe", +"a4bkaba2.O#mahahahaiaJaAa2a3aBaubva8aKaKaKaKaKaKbiaKaKaMawa4bsa2aFayaJaJayaAaFaAaVaAaUbaabbsaCaCabbsabaCaCa4aBbebea7aMaOaOaOaMa7bea4a4aCacababab#6bqa7aRaOaKaKaEaEbubtbjbu#Ebvaz#RaVaJaJaVbsbebhaGbhbl#Gbebea5bebbbhaMaKbubobn#Kbjbo#Kbjbobjbo#E#EaOaKbubt#KbjbobjbobuaEa8aGbhbeaBa4#6bkbaa1aJai#Oa##0#9#p#p#t#J#Ja.aS#J#D.W#o#F#0#OaJa2bkaC.kaCaCaCana4a4byaubvaObAbububub#aOaGawbraCabaPba.KaPabaCa4bqbebebebe", +"aCbaa2aJai#Qa#a#a#ah#u#YaA#T#6bea7aOaKaEaK#E#E#EbAbuaK.UbhaBaC#Ta2aA#kaAaAaVaAa1a2baabaCa4a4.0a4a4aCaCanbpa4bea7a7aGaKaEbuaEaEaKaRaa#Gbea4aCaCan.0bbaGbxa8aEbubububu#xbjagbuaK#.#6#Ta0aPaba5a7aRaRaGaabFa7bea7beaubhaRaKb#bobo#KbobjbobjbjbobtaIaOaK#EbubobjbobAbubu#EaKaRaxaza4aCbsab#Ta2aAaJaTahah#N#n#9#9#F.6.W#t#tbf.6.V.E#9a#aiaFbaaC.ka4a4aBbeaw#.aMbvaKbAbubobubobuaKa8aRa7au#6bs#TaPa2babsaCa4brbebebebr", +"aPaAaJaoaH#4#0#8#8#Nahat#kaPbkaBawaMbvaOaKbAaIbu#EbAb#aKaMaw#6bsbaa1a1aAa1aAa1a2#Ta3aCbe.0aw#Gbebea5bra5bebea7aMaR#Ebu#xbtbjbuaEa8aRaRbh#Gbra4a4br#GbhaOa8aE#E#E#EaKbububub#aK.UauaB#6#6azauaRaRa8aRaGaRaGbhaMbhbhaMbh#XaIbAbobobGbobjbobjbjbobAaEbAaEbubjbubjbubAaKaKaMbhazanbsaPbaaPa2a1aF#Yatak#O#N#0#0#0#n#naq#e.V#F.V#9#2#3ahataA#Tbk#6a4beawbhaOaOaKbububobjbobjbubuaEaKaOaRaMbe#6bsaPbaaP#TblbsaBbebr.0aB", +"aJat#maH#3#2#9#2#9.xa#ahata2abaCaBawbhbvaKaEbubAbubA#EaKaObhbeaCbsabbaa2a2a2a0bsaCa4beawa7a7aMbh#Gbeawbla7bhaGaOa8aEbubjbjbtbububua8bxaRbgawbebebebla7aGaRbvaRbvaMbvbvaKaEa8#EaRaM#.au#.bhbvaKa8aKa8aRaRaRaGaRaM#jbhbvbvaKaIbAbobGbobjbj#KbjbjbubAbubAbubAbjbA#Ea8aKaM#.bb#6a3abaPa0baa2a2a1ayaJai#m#Q#Qa#aHaH.T#N#3#n#2#8#0#3#Qai.Oa2baaCaCa4bebhaOaKbobubobjbjbobjbobuaIbua8a8aKaRa7beaCbs#TaPadbsaCa4a4bpanaC", +"#u#aah#A#4#9#2.t#9#9#3#OaiaAa0bs.kaBbbbhbvaK#EbubAbububuaRaMbea5aCa3aba0a2a0aPa3a4aubhaQaRaObxaRaGaOaGaGaRaGaKbxaKbubj#Ibjbjbubtbubua8bxaRb.a7bl#Gbba7a7aube.sa5azazbhaMaRaOaRaOaRaRbv.UaKaKa8aKb#aKaKaKaOaObvaRbvbvbvbvaKaIaIbAbubGbj#K#K#KbjbobobAbubA#EbuaKa8bAaKaRaube#6bsaPbaa2a0baaPa0a2aAaTaiai#Oah#mai#B#maHaHaHa##P#aaiaTaVaPabaCbpbeauaOb#bwbjbnagbobjbobtbGbu#EaKaKaKaEaKbvaua5anbsabbsa3aCanaCbsabaP", +"ah#Qa##N#N#8#8#2#9#2#8a#ahaobmbabsa4a5bbaMaOaKbububAbuaKbvauawa4a4aCbsbaa2a2#T#6bbbhaObxaEaEaEbuaEbxa8a8aOa8aKa8bubtbobjbobobAbAbuaIa8a8aOaGaaa7a7#Hbea5a4a3ab#Taba3#6aBawa7bhaRaOaKbub#bAbubAbubAbua8bAa8bAa8aKbiaO.UaKaK#EaIbubGbjbj#W#W#y#K#KbGbtbAbubAaEbAaKaKaObvauaua4a3aPaPaPaPabababaPbaaFataoai#BataJaJbm#Yatat#uataTaJaAbaabbsana4bbaMaKbobj#WbobobubjbubjbjbAbuaK#Ea8bAa8aKaMbeaBaCa3bkbsbsbsaPa2a2aA", +"#N#4#N#3a##N#4#N#4#8#0#3#Q#a.OaVabbsa4be#.aMaKaK#EaKbvaM#.awaza4a4aCbkbaa0ba#Ra4#jaR#EaEbtaEbtaEaEaEa8a8a8a8aEaEbububobAbAbAb#bAbubu#Ebua8bxaGaGa7awbqanabbaa0a0a2ba#Tabana4awa7aRa8bAbububububAb#bAbuaIbubAbA#EaKaKaKaKaKaEaK#Ebubu#K#KavaW#K#KbjbjbubAaKaEaKaE#Ea8.UbhauazbpaCa3ababbkanaCabaPa1aA#YaTaJaA.9a2a2aAa2aAaAaFa1aVa2aPabbs#6az#.aRb#bobjbobububobtbjbjbjbu#sbubAbubobubAaKaMawaBbpanbsabaPba#kayaJ", +"#2#8#4#3#Q#QaH#Qa##3#3#4#3#QaiaJbaa3#6beaubhaMbvaM#j#.byaza4a4a4a4aCacaPba#T#6aubv#Ebt#sbt#sbtaE#EbxaOaOaOa8bububuaIbuaKaKaKaKaKaK#EbuaEaEa8aOaaa7bea4aba0aAaFayaFaFa1a0baaCa4auaMaKbububobububububobtbAbubAb#bAaEb#aEbuaKaKaKaOaKbAbubo#K#K#K#y#KbobAaEaK#Ea8aKaEaKaKaOaGa7bea4a4anaCa4a4a4bpaCaPbaa1.9a2aPaPabaPbsabab#TaPbaa2baabbsaC#5aubvaKbAbububububububububjbjbjbubAbubAbobubua8aObhaua4anbs#TaUaVafatai", +"#9#2#0#3a##O#PaH#P#Q#3#4.x#Nahat.8aba3a4beauauau.Qazaz#6aCanaCaCaCaCab#TaPab#6auaObAbtbubtbtbt#E#EaObvaRaOaOa8bububuaKaKaOaRaK.UaKaKaK#Ea8aOaRaGa7a4aCaba1ayaJ.OaTaTaJaFa1aPa3a4bhaGaKa8aKaKbAaEbAbAbubAbubAbubububububuaEaEaOaOaOaKaIbAbG#y#KagbjbobAaEa8aE#Ebubububua8aRaGaubea4bqa4a4bqa4a4.kaCabaPbaabbsaCana4bpa4a4anaCababaPaba3bHbyaMaIbAbubub#aKa8#EaEbtbjbjbjbjbjbubjbjbjbjbobua8aOa7bea4bsaPa1#karai#m", +".V.t#2#0#QaHahah#Oa##3#2#2#8#Qaiaybabs#6azbeazaB#6a3bsbsababacbsabab#Tadaba3a4#.aObAbobtbAbu#EbJaOaRaMaMaRaOa8bua8aKa8bvaRaMbvaRaObiaKa8aKbxaRbhbla4aCaPaAayaJaTararatataJaVabanawbhaRaOa8aOaRaKaOaKaKaK#Ebubububjbubt#EaKaOaMaMbvaOaKbAbjbj#KbobjbAbubAa8buaEb##Ebua8aKaOaGa7#Hbebebe#Hbe#Gbebqa4bpaCaCana4brazauaua7bb.0a4bpa3abbsanaz#.bibGbobobuaKaOaOaObububjbjbjbjbjbjbj#KbjbjbobuaKaRbFbba4bkaPaVaJ#m#a#Q", +".V.E#9#0#A#Q#O#Q#Q#3#8.t.t#4a#ajata1#TaCa4#6ana3aP.Kba.K#T#Tababab#Tababa3a4aubvaKaIbu#E#EaKaO.UaRbIaMaMaGaOaKa8a8aOaGbhaua7a7#jbvaRaOaKaOaRaGaGbea4bsbaaVaA.O#YaraiaoataTaAbaaCaBbebhbhaMbhaMaMbh#j.Ubv.UaKbAbububuaEaRaMa7auawa7aM#E#Ebobjbj#KbGbubAbu#Ea8#Ebua8bubua8a8aRbha7bl#Gb.a7b.#Gb.#G#Gbe.0bebebba7aMaMaGaMaGa7.0#6bka3aC.s#.bibGag#Kbua8aOaOaGa8#EbjbjbBbjbjbjbjbj#ybjbjbubAaKaGa7beaBbsaPaAaJahah#Q", +".E.E#9#2#4#3a##3#3#4#8#2.t#8#3#QaoaJa1#TbkaCbsba.8aAa2a0baaPab#Tad#Taban#6az#.aRaKaKaKbvbvaMaMaMaOaMaMaG.UaRbxaOaOaRaMa7awbbawa7a7bhaMaRaRaOaZa7bea4#6aba2a1bmaT#Baiaoao.OaAa0a3aCazbe#Hbebeaube.QauauauaMbvaOaKaKaKaOaMaubebrazbFaMaK#EbobGbjbGbjbubAb#aEaKaEaKaEaIaEb#aOaGaGa7a7b.b.aaaaaaaaaaaaa7a7a7a7aGaOaOaEaEaOaOaabbbqa4bpazaubvaIbo#KbjboaKaOaQaOaObtbjbjbjbjbjbjbjbB#K#Wbjbu#EaOaMa7bea4bkbaaAat#m#O#Q", +".E.V.t#8#4#3#3#3#4#8#2.t#2#8.x#Q#Oaraya1#TabaPa2aAaAaVa2a2babababaabbs#6a4awaMasaKaKbvauazawaubhaGaOaOaOaOaGbxaRaGbha7blbebeaza5bbaubhaGaGaRaGaaa7awbranaba2aAaTaiaiaiat#YaAbaabaCaCa4a4a4a4a4#6a4a4azazaua7aMaMbvaMbhbba4an#6aBauaR#Ebobj#KbjbobAbubA#Eb#aEbAa8aKaKa8aKaRaMa7a7a7a7aGaLaZaZaRaZaRaGaGaGaGaOaKaEbtbuaEa8aQaabbbebeaubvaKbG#K#W#KbjaEaKbxaOaEbubjaNbBbjbjbtbjbj#ybBbjbAaKaGaubbbra4bs.KaAaT#a#P#Q", +".t.E#9#2#0#4#3#4#8#8#8#8#8#4#3a##PaharayaAa2a0aAayaJayaAa1a2a0aP#TabaCbebebhaRa8aRaRawazaDanaza7aMbxaObxaOaRaOaGa7a7aubea4a4a4a4be#GbhaGaRaZaZaGaaa7aua4aCaPaAaJ#uai#uataFaVbaabaCaCbpaCaCaCaCaCan#6a4a4aBbyawauawaubea4a3bsaC#6auaObobjav#K#KbjbjbAbubu#EbuaOaKaOaOaGaRbFbha7aua7aaaZaZa8a8a9a8a8bxbxaOa8#EaEbtbjbtbtaEaOaGa7#HauaMasbubj#K#Wbjagbo#EaEbAbAbtbB#K#ybjbjbjbjbjbB#Wbt#EbvbFbeaBa4bpbsaPaAaTai#O#Q", +"#9.t.t#8#4#0#3#3#3#4#3#Aa##Q#Q#P#PahaiaTaJaFaAaJatat.OaJaVa1ba#TabaCa4aw#GaGaRaKaRbhaw#6a3aCanbeaMaRaOaObxaGaGaMa7beaza4a4a4a4a4beawa7aaaaaaaRaRaGaGb.bea4aba2aJaiaiataJaAa2aPabaCbkaC#6aCaCaCa3aCaCanaCana4a4a4aBa4a4anbkbsaCaBauaKbubj#K#W#KbjbjbobobubuaKaOaMaMbhaMaMaua7aua7bhaGa8a8bububua9aEa8a8aEaEaEbtbjbtagbuaEa8aObFbha7bvaKbAbj#K#K#Kbjbjbubjbubjbj#y#ybBbjbBbBbjbBbjbBbj#EaMa7beaBa4anbsbaaAataiah#Q", +".t#2.t#8#3#3#A#Qa##Q#QaHahah#OaiaiakaoarataTat#uaoaiataTaFa2#TbkaCbqawa7bhaaaRaZaRbhaz#6abbsa4awbgaObxaOaRaOaMa7aua5a4a4#6a4aB.0be#Ga7a7aaaLaZaZaZaRaRbgbebsaPaJ#uaiataJaVaPaba3aCan.kaCaCbka3bkbsbsbsbsa3bsaCanaCana4aCaCaCbpaza7aObubobobjbjbobjbjbubAaKaOaMbhauauaubeaubeaua7bhaRa8aEbubububu#IbuaEaEaEbubuaEbAbuaEbt#EaKaObvaOaOaKbAbobj#Kbj#W#Kbjbjbjbj#ybjav#y#ybBbjbBbjbBbjbt#EaOa7bbbqaBaCbsaPaVaJao#a#P", +"#2#2#8#3a#ahahajah#maj#maiatataTaJ.Oat.O#Yatataraiaoar#YaFa0abaC.0beb.aaaGaR#daOaRbhawa4aCaCa4aubhbxaObxa8aRaM#.be.san#6aC#6a4bqbea7#Gb.aGaGaGaZbxaZaRb.beaC.LaFat#uataAbaabaCana4a4a4a4aCaCbsababbsab#Tad#TbsbsabaCbsanbkana4beauaRaRaKbububobjbjbjbobuaObva7bebebebeazbrbeaua7aRa8aEboboboagbubu#IbuaEa8#EaK#EaK#EbAbubuaEaKaKaKaKbAbAbobGbj#Kbj#Kbj#K#K#y#K#y#Kav#yaNbBbjbtbjbtbAbJaGbFbeaBbpaCbsabaVaJaoah#Q", +"#8#4#3#Q#maiatatat#BarataJayaAa2a2a1aAaFaJaTataTataoaTaJa1baaba4.0a7aaaZaZbxa8a8a8bva7auaBbebea7aGaObxaKaRaObhauby#6a3a3aCa4a4be#Gb.aGaaaaaGaaaGaGaGaGa7bebsaPaA#YafayaA#Tbk#6a4aBa5aBa4#6aCaCbsbsabaPaPa0aUbaaPaPbsaCaCana4a4be#Ga7aMaRaKaKbububjbjbjaKbvaua4anananana4a4aza7bhaOa8bubobjbjbjbobtbuaEa8aEaKaObvaOaO#EbububtbA#EaK#EaKaKbAbubGbobGbjbGbjbj#K#Kav#y#yav#KaNbBbjbtbtbtaKaQa7bebqanaCbsaPa1aJaoaj#Q", +"#3#N#Q#mat#YaJaAaJ#YaJaJaAa2aUabbsabaPaPa2aAaFayaJaFaAaVa1aPaCa4beb.aaaZbxasa8a8bxaRbvbha7a7bhaGaRbxasbxa8aOaR#.az#5a3bsa3aC.0bea7b.aGaGaGaaaMb.aMaaaGa7aBaCaP.9aJaJaAa2abana4bebeblbebeaBa4anaCbsbsaPa2.La2a2a0aPaPbsbsaCana4a4brawaubhaGaOaKbububjbuaKbvby#6bsa3acbsa3aBbe#.aQa8bububjbwbjbjbobubua8aKaRaMaMau#jaMbv#EbubAaEaKaK.UaR.UaKbAbubAbAaKaKbAbobjbjbj#K#KaNbjaNbj#xbBbtaEaEaOaGbbbqana3ab#Ta2aFataj#Q", +"#Q#Oah#uafaF.8a1.9aAaVa2a2aPabana4bra4aDbkbaa2a2baa2a0baba#TabaC.0a7aGaZbx#dbxaKaKaRaRaGbvaGbxa8aKa8a8a8aOaKaMauazaY#Taba3aCa4blb.aaaZaRaZaGaGa7aabFa7#HaBaCaPa2aA#kaAaPbsa4beaua7a7aua7awa4a4anaCbsbsaPbaa2a2.8a2a2aPaPbsabaCana4beaubFbvaOaK#EbubobuaK#.be#6ababbsabbEa4aubhaKbubuagbobj#KbjbobAa8aObvaMa7byazazazaubvbv.Ubvbv#jaMaMaRaKa8aKbiaR.UbvaKaKaIbobobjbjbjbjbjagbjbtbu#EbxaOaaa7bea4anbkaba0aAataoah", +"ao#BataJaAaVa2aUa0aUbaabbsaCa4brbeau#Hbbaza4aCa3abbkababadbabaabaCbra7aGaRbxa8a8aOasaOasaOaKaKa8a8#Ea8aKaRaRbhaua4#6bsaba3aCa4a7aaaRbxa8bxaRaGa7a7a7bebea4bsaba2a2a2a2abaCa4bea7bhaabhbha7bbbea4aCbkbs#TaPa2a2aAa2a2a0aUa0aUbaabana4a7aMaRaK#Ea8buboboaIbv.QaDbs#TabbsaCazauaMa8bububoagbjbjbobubuaKbvaMa7auaB#6#6an#6az.Qawaz.saBa5awauaMbvaM#.#.auawaubvbvaKbAbububububtbtbjbtbuaEaKaLaGa7bebqbpa3aba2aVaJatat", +"aJayaJaAaVa2.LbaaP#Tbsbkana4bebla7aaaMaGa7awbebea4a5a4aC#Tbaa1a2abaCbeaaaOa8a8aKa8aKaKa8aIa8b#bAb#aKaKaRaMauauazaDa3#T#Tbsa4.0a7aGaZa8a8a8aZaRaMa7blbebra4bkbsaPbaa2aPbsaCa4bea7a7aGaGaRaGa7awa4anaCaCbsabaPa2a1aAaVaAaJaFaJaA.KbkaBbhaMaOaKaEbAbubjbAbAaK#.aza3bsaP#Tanaz#.aKb#bububobAbobobtbAbuaKaMbhaube#6anab#T#Ra3a3a3#R#TaPaba3#6a4azazazaza4#6a5azaubhbvbvas.UaK#Ebubjbubu#Ea8aOaGb.blbea4bpaCaba2a2aFay", +"a2.8a2a2a2a2baaPabbsaCa4a4bea7bhaGaOa8aRaOaRaMa7aubebqaCbaa1aAaF.8ada4a7aGaRa8a8aRaKaKb#aIbububobAaKbibvau.Qa4#6anabaPaPabaCaza7aRa8a8a8a8a8aRaGaaaubea4bpa3abaPaPaPaPabananbea7a7aGaGaRaRbhblbea4ananaCbs#TaU.8aAaJatat#uataJa2a3a4bhaRaKbubAbububobobuaIaRaua5aCaC#6az#.bvaKbubAbobubGbububGbub#aObvbFaube#6bk#Ta2a2a2aV.8aFayaJaFaAa0#TabaCaCaCa3bsaca3aD#6byau#.aMbvaKbAbjbjbubuaKbxaGaa#G#Hbea4bpaCbsaPbaaP", +"adba.Ka2a2a2.KabbsaCbqbe#Hbla7aaaRbxa8bua8aKaKaRaaa7beaCaPa1aJaJaAa0anbebhaOaRaOaKaKaKbuaIbobGbobuaIbvauaz#6anbs#TaPaPaba3a4awaaaRbxa9a8a8a8bxaGa7#Gbra4anaCbsababaPaPa3aCa4bebea7bhaaaGaRaaaubeaB#6aCanbsada0aAaJataiah#maiaJa1bsa5bFaRaKbububobjbubobobuaKbhaua4azaz#.aMaKb#bubobAbubAbubGbububuaKaRaGa7azbpa3a0aAaAaVaJaJaTaoaoatat.OaAa1a0a0baa2aVa1.8a0ab#6a4awaubvaKbubjbjbjbuaEaRaGb.a7#Hbebra4anaCaCaCbk", +"anbkbsabaPaPaPaPbsbpbe#Ha7#GaaaGaGaOa8bAbubub#aKaGauazbkba.8ayaJaAa2aCaBa7aGbxaKaZb#bububobobobGbAbi#j.Q#6a3bs#Tad#TadabaCa4auaaaRa8a8aEa9a8bxaRaaa7beaBbpaCaCbsbsabbsbkana4bebe#Haua7bhaGaMa7a7awaBa4a4bs#Ta2aAatao#O#Oah#maJa2aba4#.aRaKbubobubAbubAbobuaKbvbhawbeaubhas#EbubobGbubGbubAbubububuaEaKaRaMbeaCbsaPa1aVaAaFayatarahakaiaraTaFaAaFaAay.OaJayaVa2ab#VazaubvaIbo#K#KbjbjaKbxaRb.a7blbebebebrbqaBbqaz", +"br#6aCanabaPabbsbsa4.0#Ha7bla7a7aGaOaKbububobububvawa4abaPa1aAaAa1aPaCaB#Ga7bhaGbvaKa8bAbubobjboaI.U#..sanbs#TaP#Tadaba3a4awa7aGaRbxa8bxa8a8aZaRaGaMblbea4bpaCaCbsbsbsaC#6a4brbebebebea7a7bhbhaMa7aubeazaCada2#Yai#O#Q#Qah#uaFaPa3brbhaRaKbubjbubjbAbubAb#aKaRaMa7aubhaRaKb#bububobobubGbtbobjbubjbuaEa8aMbeanaba0a2a1a0aVaFaJaoakahajaoafayaJayataraoaoataTaVa0aba5#.aKbAbj#K#Kbjbjbua8aGaGa7#Ha7#Hb.#Gbla7#H#H", +"#Hbebqanbk#RadbsaCa4brbebebebea7bhbva8aIbubGbAaKbhazanabaPbaa2a2aPabaCaBbrbebeauaubhbvaKaKaIbubuaK#Xau#6a3bs#Tabbsa3bk#6.0aubhaGaRaZaRaZbxaObxbxaRaaa7bebra4#6bpaCaCaCana4aBbeazbra4aBaza7a7aMaGbvbha7azaCaPaAatah#Q#Q#OaiaJa2bsaCbebhaR#EbobjbobubAb#buaKaKaRbhaaaRaGaRaKaKb#bAbububAbtbobubjbjagbj#IaEaOau#6bsaPa2a2baa2a1aFaTaiaoaratayaF.Oataoaiaj#maoaTaJa2#SazaMaIbo#K#K#KavbjboaEaOaGbgaaa7b.a7a7b.a7b.a7", +"a7#Hbea4anabbsabaCbpaz.0bra4a4aBbbaGaKbubobobA#X.Q#6a3#TaPbs#TaPabbkanaCa4ana3ana5beaubvbvbvaIaKbv#jaz#6bs#TadbsaCaCa4be#Ga7bhaabhaabFaGaGaZaRbxaRaGbha7beaBa4a4a4bpa4a4bra4bqa4aBa4a5azbbaubhbvaRaRbhbeaCa0aJ#uahah#maiaJa2abaCa4bbaGaRbubububtbubAbuaKaKaRaRaMaaaRaRa8bxaKa8bubububuaIaEbAbubjbtagbtbuaKauaBaC#RbaaPaPbaba.8aAaFaJaAa1aAaVaJaoajajahahak#uaya2a3aw#Xbubj#K#WbB#KagbtbuaEbxaOaQaRaOaGaGb.aGb.aa", +"aabl#G#Ha4anaCbsbsaCbpanaCbkanbpbbaMaKbubobuaIaMazbE#TaPaPab#TbsaCanbkaCbsaPbaaPbsa3a4azawauaMbvauauaza3#RabbsaCan.0be#Ga7aRaGbha7a7bea7a7aGaRaZbxaRaGb.bebebqaBa4aBa4aBbqaBaBa4bea4aBbeaza7aMaRa8aKaMawan.KaAat#m#maiaJaVaPbsa4bra7aRbxb#bububAbuaKbua8aKaKaGaGbvaZaO#daKa8aOaKa8aKaK#EaKbubAbubjbjbjbt#EbvauaBanbsabbsababbaa2a1a0a0babaa1ayataiahaj#maiaTaAa0aDauaKbubobjbjbjbjbB#xbtaEaEa8aEa8bxa8aGaGaGaGbg", +"aLaaa7a7bra4bpaCaCanaCbkabaP#TaCazbFaKbubjbAaI.Haza3#TaPaPababbsbsabaPa0a2aAaAaAa1a0aPaC#6#6azbeazbe#6bsabaPbsaCa4be#Ga7aGaRbhaMawbebrbe#Ga7aGaRaZaRaab.a7#Hbebrbe#Hbrbrbebqa4a4beaB.0beawaubvaKbuaKbvbeana0aAataoaiataya2bsbpaB#Gb.aGaKa8bubAa8bAa8#Ea8.UaRbhaRaGasbxaOaZaKbxaKa8a8aOa8#EaKbubtbjbjbtbjbtbJaMauaza4anaCaCbs#TabadabbsbsaPbaaAaJ#uataiaoat#YaAaP#6#.aKbobobjbtbtbtbtbjagbtbtbtbubtbua8a8bxaGaGaG", +"aZaGaGa7#Ga4a4anaCbsbsaP.KaPaPbsaBbhaObubobjaK.HbybE#TaPaPaPaPaPbaa2aAaFaJatataTaJaJaAa2a0aPacanaDanaCbsaPbsbsaCa4bea7a7bhaRaGawbea4ana4bea7bhaGaZaGaGaGa7a7bl#G#HaubebebeaBbqaBbebebebbaw#.aGaKaIa8bhaza3a0aAaJafataJaAaUaca4be#Ha7aRbxa8bAaEbA#EaKbuaKbvaMaMaMaRa8a8aZaKbxasbxaKaOaOaOaK#E#Ebu#sbjbBbjbtbA#EaOaMauazaBanaCbsaCana4a4aCa3aPa2aAaFaJaJatataFa2aba5aMaKbubobjbAbubtbtbBbjbBbjbjbjbtbubuaEbxaZbxaZ", +"bxaGaZaGaGa7beanbkaPaPa2a2a2a2#TaBa7aOa8bjbuaIaM.Q#6bs#T#TaPbaa2.8aAaJataoaiajaiaiaoataJayaAaVbaaPabbsbsad#TaCanaBbea7bhaGaRbhbea4anaCana4#Ha7aaaGaGaaaGaGaGaMbFaMb.bFa7bba7bebeblawblawa7bhbvaKa8aRau.sbsaPaAaAaybmaya2aPbka4beblaGaRa8aEaIbAa8bAaKaKaOaMaMaRaRaRa8aOaKbxaKbxaKaEaKaO#Ea8aK#EbubtbGbtbBbjbtaEaEaOaObFauazazazazbeaBbqaBaCaCabaPa2aA.O#YaJaybaanawbvaIbjbobtbA#E#Ebtbtbjagbj#KbjbobjbuaEaKa8aEaO", +"bxa8bxa8aOaGaua4a3aPa2aVaA.8a2aPanauaMaObububibvbhazaCbsabaPa2a2aFaJataoakah#OahahajaiarataTaJaJa2a2aPaP#Tbsanbpazbebha7bhaMbhaza4aCaCanbqbe#Ga7aaaGaaaGaGaRaQaGaOaGaMaMaMa7a7a7a7a7bea7bbbhaGaRasaMaua4aCaPa0.8aAaAa1a2abanbqbla7aGbxbubAbubAbA#EaEaKaKbvaRaOaOaOaKaRaOasbxaKaEa8aEbAaEaKaEaK#Ebubtbjbtbt#Ebu#EaK#EaOaO.UaMauauaua7bebebranbkabaPaVaAaJaJaVaP#6a7aKbububjbjbtbA#EaEbtbtbj#KbjbobjbobubobuaEb#aE", +"aEaEaEaEa8aRa7aBbkaPa2aAaAaAaVaPaCbea7aRaKa8aObvbhaua4anaCaP.KaA#kaTaiaiajahah#PahahajajaiakaiataJaAaVaUaPadbsa4a4bea7bhaMbhawaz#6a3bka4a4be#Ga7b.b.aaaGaObxaOa8aO#EaOaOaRaOaMaMbFa7bebe#Ga7aaaRaabhbea4bsaPa0a2a2a1.LabaCa4bea7a7aRa8aEbubAbubububA#EaKaO.UaOaKbxbxaOaRaOaKa8#EbuaEbubAa8#Ea8#EbubtbAbtbuaKaOaKaXaKbuaE#E#E.UaObIaGbha7bebeanaCbsbaaAaAaya1#Ta4auaRbubobj#KbjbA#E#EbubAbubjbjbobGbjbjbubobtbubu", +"#xbuaEaEaEaGau#6#Ta2aA#kaA.8a2aPaCaBawaMaGaObvbha7aubebr#6bkbaaAayatataoaiajahah#Oakahak#mahaiaoaJaJaAa2a0aP#TaCa4beauaMbh#.beaBaCa3bsaCbpbq#H#Ga7bhaGaGbxaEaEaEaEa8#Ea8#EaOaOaOaGa7aubbbe#Gbhb.a7#GaBa4aCabaPbaaPaPabaCa4brbea7b.aQa8bububobjbobobubuaKaOaKa8a8aObxaOaOaRaOaKaK#Eb#buaE#EaKaKaO#EaE#EaKaOaGaMaGaOaOaE#Ebt#E#E#EbuaOaRb.a7bea4aCaCaPa0aVaVa2aca4bhaRbubobjbjbjbtbu#EbuaEbubobubobtbobjbjbjbubobu", +"btbu#IaEaOaMbbanaPa2.9aAa1a2aPaPaC#6aBawaMbha7a7a7a7bebebraCaPa1aAaJaTataiajah#Pahaiajaiaiaoatat#YaFaA.8aUa0aPbs#6bebhaMbhbhaza5anbsbkaCaCa4be.0awa7aaaOa8a8aEaEaKaEaEaKbubuaEaKaOaMa7awbe#H#G#G#G#H.0a4anbkabaPabbsa4bqbe#H#Ha7a7aRaEbubtbjbobtbAbu#EaEbAaEaEaEa8aKbxaOaO.UaKaKbubAbubuaKaKaOaObvaOaRaGa7aublaua7bIaO#EbubtbjbtbububxaRb.blbebpaCabaPa2a2baa3a4a7aKaKbobj#KbjbjbubtbAbubububobubjbjbjbobjbobobu", +"agbtbuaEaObFaBbsaPa2a2a2aPaPaba3aCbpa4bebla7a7a7bea7a7#HbeaCbsa0aVaAayaJaoaiaiaiaiat#uaTaJaJaJayaAaAaVa2a2aUbaabanaza7aMaGbhaza4a3ababbsa3aCa4brawa7aRaOa8a8a8aOaOasaKaOaKbua8aEaKaGa7bebebe#H#G#Hbebea4a4aCaCaCana4.0bl#Gbe#Hbea7bFaOaEbubjbobububAaKaKaEaKaEaEa8aOa8aKaKaKaK#Eb#bububu#E.UbvaMaMa7aubbbebeazbeblauaMaO#E#EbjbjbjbubuaOaGa7be.0bpaCbsab#TbsaCazauaRaKbubobj#Kbjbjbubu#Ea8aEb#bububobjbjbobjbj#K", +"bjbobuaOaMbran#TaU.Ka2aPabaCanbpa4a4brbebeawa7bb#Hblawbebea4aCabaPaUa1aAaTatai#maiaTafaFaAaVa2a2a2a0aUa0baa0aUaPaba4auaaaMbhbea4aCbs#TbsbkaCa4a4aubhaRa8aEa8aKaOaRaGaMbvaRaKaKaEaKaRbha7aw.0#G#Ha7#Gbe#Hbqa5bqaz.0#Ga7#G#Hbebebrbea7aRa8aEbubjbubuaKaKaKaKaEaKaKaKaEaOaE#EaKaK#EaEbAbubuaKaOaMauaBaB#6anana4bpa4.0bebebFbv#Ebtbjagbubua8aRaGa7blbea4bpaCa3aCa4aB#GaGaKbAbo#KbjbjbjbjbtbuaEa8a8aEbububwbjbj#K#Kbj", +"#WbtbuaObFazbsadaPaPabbsana4a4bqbebebebea7a7#Gblbebe#Hbebebr#6anaCabbaa2aJaTaiaiaiaTaJa1baadbsababab#Tad#Rad#T#Tbs#6bebha7a7bea4a3bsababbsaC#6.0a7bvbxbua8aEbxaRbhaMbhawaMbvaKa8a8aOaM#G#Haw#H#G#H#Gbl#G#Gbl#Ga7bhb.a7aa#Hbea4aBbrblbhaQa8bububuaEaIaO#EaKaOaOaKaOaKaKbub#aEbubub#bububuaEaMauaza3a3bsadababa3aCana4aBawbFaObububjbubuaEbxaRaGaabbbea4a4bpa4bebea7aMaKaKbjbj#Kbj#Kbjbububua8aKa8aEbububobjbj#W#K", +"bjbubuaObhaBanbsbsbsaCanbqa4bebe#Hbbawa7#Gbba7awbebebrbebrbebea4a4#6aCaba2aF#Yar#uaJaAa2bsaCanaCaCbsbkbsbsabbsbsabana5bebeawaBaCbka3abbsbkaCaCazbhaOaKbua8aObva7a7bea5azbebh.UaKa8aKaRa7au#H#Gbla7#Ga7b.bhaaaaaRaaaaaab.#Gbrbea4bebebgaGaRbxaKa8aK#EaKa8aKaKaKa8aKaKbubububobubu#Ea8aOaOaR#.azanbsabaPa0aPbaadababbsa4beaMaKbububGbububAaEbxbxaGa7blbebea4bebqbebebhaRaKbubobjbjbjbjbobubuaKa8aOa8a8bAbubjbo#K#W", +"agbobuaOaMa7a4anaCbpa4a4brbebebea7a7blawa7awblbebebebebebb#Gbebebebea4.kbsbaaA#kaJa1aUabaCbpa4a4ananaCaCbkanaCanbka3anan#6anaCa3bka3bkaCaCaDaza7bvaKbuaKaKbhaua5a4a4a4#6azauaGaKa8aKaRa7a7a7#Ga7#GblaaaaaGaGa8aZbxaZaGaGa7bebebrbe#Ha7a7aGaGaRaOaOa8aKa8aEa8aKaKaKbubAbobububuaKaRaMbhaubbazana3aPaPa2baa0baa0baaPac#6beaMaKaKbAbu#sbubububuaEaRaGa7#Gbbbebra4aBbrawaMaRbAbGbobj#KbobjbububuaKaKaKa8aEbubjbjbj#K", +"bjbuaEaKaGaubbbr.0be.0bebe#H#H#Ha7bha7a7a7a7awa7bbbeazbeazbl#Ga7b.aaa7bebeaCaPa2a2a2babsaCa4brbea4a4a4bp#6bqaB.ka3bkbsababbsabbsaCaCaCaCa4beawbva8bubuaKaMaua5an#6aC#6a4beaubvaKaEaKaOaRbha7a7b.a7aGaGaGbxa8a8aEbxbxaRaGaGa7a7a7bebl#Gbb#Ga7a7bFbhaR.UaOaKaKaKa8#Eb#aIbu#EaKaOaMaubyaB#6#6aCbsaPaPa2a2a2a1a1a1a2baa3a4aubvaK#EbAbAbu#sbjbtbtbubxaObgaubebq#6aCbp#6braubhaKbAbubGbjbobjbobobubAa8aEaKaEbububobuag", +"bubua8aOaOaGa7a7bFa7b.a7a7a7#Ga7bhaGa7bhbbbebebeazaBa4a4a4aBbba7a7aGaGaGa7aza4bsabbsbsaCanaBbe#HbebraBa4a4bra5bpaCbsaPaPaPaPabbsaCaCa4bq.0bbbhaObubub#bi#.az#6a3aCaCa4aza7aMaKaEbubu#EaOaOaZaQaGaGaGaObxa8aE#IaEa8aEa8bxaObxaOaMa7a7blbebraBazbeazauau#.aMaRaOa8aIaEaKaKaKaRbhaua4ana3bsbsaPaPba.8aAaAaVaAaVa1a0#TaDbe.HaKbubAbubAbtbubjbjagbuaEaOaabeaBanbkabbsbsaDbrauaMasbAbAbAbubGaIbubAb#bub#aEaKbubu#Ibubu", +"buaEaEa8aObxaQaOaLaOaRaGaab.bFbhbgbhaubeaza4#6aza4a4a4anana4bebbaaaOasa8aOaGaubea4anaCana4bqbba7#Hbebebr.0bebranbsaPbaa2a0aPabbsaC.0bq.0bea7aGaKbubobuaK#jaza3bsbsana4aubhaOaEbAbtbubuaE#Ea8aKaEbxa8aEaEbubtbtbubtbuaEaEbuaEaEbxaOaGbebra4bpanan#6#6#6azauaMaRaKa8aOasaMbhaube#6bsa0a2a2a2ba.La2a1aVaAaVaAaVa1babsaz#.aRbAbubAbAbubtbAbj#xbjbuaEaGbFa4aC#Ta2.9a0babsaDbeaubhbvaK#XbiaKaKaKaIaIbAbubuaEaEbuaEaEbu", +"a8bxaKbxaObxa8bxa8bxa8bxbxaRaRaGbhaMawbebH#6aCbp#6bp#6anaCa4aBa7aGa8aEbubua8aOaMaubea4aBbqbe#Ha7bebl#Hbebe#Ha5aCabaPa2a2a0aPabaC.ka4bebe#Ha7aMaKbuboboaI#jby#6aCana4awbFaKbAbubj#ybjbBbjbtbuaEbuaEaEbtbtbjagbjagbjbtbjbt#xbtbuaEaOaabea4aCbs#TaPab#Rbsa3a4aza7aMaMbhauauazazana3aPaAaJaybmaAaV.8.9aVaAaVaAa1a2ab#6awaMaKbubAbubAbtbubtbubjbtbuaOaMbba3aPa2aJaJaAaAbabsbpa5azauau#.#j#.#.bvbvbia8bAbubua8aEaOaRbx", +"aOaOaRbxaKbxaEa8aEbua9a8a8a8aOasaRbhauazaCbsaPab#Tbsaba3bEbpbeaMaOaEbubjagbjaIaOaMa7bebrbebbbla7#Hbebe#HbebrbpbsaPa2a2a0aPbsbk#6bqbqbebebe#GaMaR#EbobjbAbvbhauaz.0auaMaRaEbobBag#yaNbB#WbBbjbtbt#sbtbtbjbjbjaNbj#ybjagbjaNbjaNbuaXaMbeanadaPa2a0a2a2a0aPbsana5bebea5a4#6ana4bsadaVaJataT.OaJaAa1a2a1aAaAaV.9a0aba4a7aRaKbobubtbu#sbubtbtbtbuaO.Uau#6ada2aJaf#uataJaAbabsanan#6.s#6.sazazazawbh#Xa8bubuaEa8bxaOaG", +"aGaGaQaObxaKbububububuaEbuaKaOaRaMawazanaba0a2.8a2aPbsbk#6azauaMaKbubj#W#KagbjbuaKaGbFbb#HbebrbeaBaBbrbeaBa4aCaPa0a2a2aPbsaCana4a4bqbe.0brbea7aMaKbAbjboaIaObhbha7aMaRaEbubjbB#yav#yavam#ybB#ybtbtbGbjbj#y#y#KbjbjbjbjbB#KaNaNbta8aMbebsaPa0.8aAa2.8a1a0#Taban.kana3ab#TabbsabaPaVatataiaiaJaAaAa2.La2aVaAa1a2aba4auaRaEbobjbobjbjbtbubA#EaO#jauaBbs.LbmataiaiaoataAa1aPbsa3bsa3bsa3an#6a5azaubvaOaIbuaE#EbxaOaZ", +"aMaMaGaRaKaEbuaEbububububuaKaRaM#Gaza4a3aPa2aAaFa2aPaCaBbebhaMaKbubjag#Kav#y#WbjbtaKaGa7#Hbea4aBa4bp#6bqbpanabaPaAaVa2abbsaCbpa4a4a4bqbea4aBbeaM.Ububj#KbobA#EaKaOaOa8bAbjag#KbB#ybB#y#g#yavbBbjbGbtbBbB#K#ybjbG#sbA#sbjbjbBagbta8bFaBaCbaa2aAaAaVaVaAa2baaP#Tbabaa2a2a2a0ad#Ta2aF#Bajah#maTaAa2a0aPaPa2a2aAaA.KaCaBbhaKaEbAbububtbubu#EaO#jaua4a3aPa2aJao#m#aaj#uaTaAa2baaP#TaPaP#Tbsa3bpa5bea7bvaK#Ebub#aOaOaO", +"aaaMaGaOa8a8aEbubububobob#aKbv#.be#6anab.8aAaJbma0bk#6a7aMaRaKaEbobj#W#yaWav#y#WbjaEaRaGa7aBbpa4aCanbpanaCbsbaa2a2.9a0adbsana4bqa4a4a4bpa4a4aBaubvaKagbjagbobububua8btbobubjbjbjbjbB#y#y#g#y#ybBbGbBbj#y#y#KbjbjbAbAbAbGbBagbjbtaKa7a4bsbaaAayaJaJayayaVaVaAaAaF#YaTataJaya2a2aAafai#O#QahaiayaAa2aPa0a2aA#kaJa1ab#6auaGaKa8bAbubjbubAaKbvauaBanbsbaaAataiahahah#aataTbm.8aUaPaPaP#RaCana4bebbawaMaRaKbubu#Ea8aO", +"aGaGaRaRaEa8bububububobobAasbhbea5anbsbaaAaJayaA#T#6auaMaOa8bAbjbj#WbB#W#yavavbBagbubxaGa7bea4bpbpaCanaCbk#TaPa2a2baaPbsaCa4bqaBa4bp.kaCana4aBawaMaKbububjagbjagbjbobjbubjbu#sbubAbjbj#y#y#y#ybBbBbB#y#KavbjbGbAbAbibAbtbj#y#Wbta8bFa4bsa0aAaJataTatat#Yafataoaiahah#aaj#Batafat#a#Qa##N#Q#mataJaAa1a2aAayaJ#YbmbabsbeaMaRaOaEbobubjbAaOauaz#6aCaPa2aA#uahah#Oahah#mataTaAa2baaP#Tbsbpa4bebebebebeaMbi#Ebjbububu", +"aRaRbxbxa8aEbuaEbobobjbob#.Ubhbe#6bkaba2.8aVa2#TbHa7bva8bubububjbjagbjaNbjbjbjagbjaEaKaRa7bea4a4#6bpa4anaCbsaPadaPaPaPbsaCana4a4bpaDanaCaCbpa4bba7aO#EbubjagbBbjbjbubububAbubAbubAbubj#yav#yav#ybj#y#yav#y#ybjbAbi#EbAbobj#ybjbuaOaua4aba2#katai#aah#aah#O#OaH#N#3a##3#Na#aHahaHa#.1#0#4#3#Q#mai#uafayaJafatataJa1bs#6bea7bvaKbububuaKbvawa4aCbsbaa1aJaoah#Pah#Q#PahaiataJ.8a2aPabaC#6brbba7bebeazaubvaKbjbjbjbu", +"a8bxa8a8bua8bububububobobAaR#.beaCa3bs#TaP#Ta3bH#.aRaKaEbAbobjbobtbtbAbubtbjbtbtbobuaEaOaRa7be.0a4bea4a4bpaCaCbsababbsbsaCbpa4bpaDaCbkabbsaCana4aua7aOaKaE#sbjbjbobtbAbAaKaIaKaKaEbAbobB#y#y#y#yav#y#g#yaW#KbGbobAbAbubGbBbjbjaEbvaubpaba2aJ#m#O#N.1#c#cbc#n#n#n#9#n#8#0#0#4#0#0aq#9#9#9#n#0#N#Q#Oah#B#uaiaiaoafaAbaa3aBbea7aRaEbuboaKbvauazbpacbaaV.Oai#P#Q#Q#PaHah#maiaJaAa0aPbsanbebea7a7bea4a4azaubvbAbAbjbu", +"a8a8a8a8bubuaEbububjbjbob#aRbhbe#6aCbs#T#Ta3#6beaMaKaKbububAbubGbu#E#E#E#EbtbAbtbtbuaKa8aRaabebebebebqa4a5a4an.kanbsaCbsaCanbpa4bpbsab#TadbsaCaBbebFaM.U#EaEbubububAb#aKaKaKaKaKaK#Ebu#Kbj#W#yav#yav#yav#y#KbjbGbubGbj#Kav#KbjaEbvbba4aP.9at#m#Q#0#n.4#e###p#F#F.E#9#9.E#9#F#e#F#F.6#F.6.V#2#8#0a#aHaiai#maiaiaTaAa2bk#6a5auaRaKbubuaKaMa7be#6bkbaa1#Yak#Q#Q#Q#Qa##PahaiataAa2aPbsa4bea7a7a7beanaCa5.Q#jaKbjbGbo", +"a8a9aEb#bCbubububtbobjbwbAaObhbea4a3bs#TbE#6bybvaKa8bAbubobubGbtbAaKbJaOaO#E#EbAbuaEaEaKbxaRb.#GbebeaBbebebebebra4bpaCaCbkanaCaCaCabaPab#TbsaCa4azaua7aMaO#EbAbubAaEaKbvaKaOaKaOaKbubAbjbj#yav#y#yav#g#y#ybjbGbobGbobjav#KbBbjaKaMbean#TaAafah.1aq#p.W.G#Jap#t.W#F#e.t.V.6bfbf#DaSaS#Dbf.W#o.V#e#8#3aH#Oah#m#u.OaAa0abana4aubva8bAbuaKbv#.beaCaCbaaAaTai#P#Q#P#Q#Q#Pahaiat#ka2baabanbeawa7awa4aCa3an.s#.bibAbubA" +}; +SIMPLE = T BITPIX = 8 NAXIS = 2 NAXIS1 = 200 NAXIS2 = 150 HISTORY Written by XV 3.10a END %/9AKOSIC8)" "$%%!!""'/399@9999=ADIILGIIIPWPSOIA<42,%!")"%"%" +",9GSgu‡˜¤¯´º¼¾·´¬¨§®°¶¶¸¼¼¸¶´±®¨Ÿ—ŽŠ‡‚ypg[PGA4) ")19IIYgs€‹‹‹‡€wi_YPG9626AIKG>1$ '/9CIOSSKC9,""!!!!" ',9999>A>AGCGOIOIGDADOPSTOI@90,(!""""""!)8AWew‚ž §¨ª¯¬¬©¦¦©¦¬¨¬¬°¬°®¢Ÿž’Ž€€‚€€sg_LC>4'"",29CLYaq€’‹‡€wg_WOA92229GI>6/" "  '19IKOSWSKA1'"%'29;A9AADIIOPPOOIDADFILPOIGA42%"""" + )4DP_o‚Š–˜œœŸ   ¦ Ÿžžšžž¤¦¦¦ ž–Š‡}y€€|ugYK@92'")4GOYgokgSC4,% "*29ADDIGILSW__YWOIA>@ADCIGA@6,"$ 0AO[gowswwquw|€‡‡†„}wuw†’–‚woga_gkoqmYO9,'%%4AAADAA@4)"  +"2AOYgkookkccggiqswok__gu€Š‡€kg_W[_gioaPC4*" ")4@GOYgw€‡‡‡†wsmaZWWWQIGA986,'"! %,,*'""',3DGPWgc_POIDAAA>9A@9,(!"%%  + 0@IY_ggccg_YWSYY___[TS_i}„‡‚sg_[WW__ggYI@/"!%/4AKW_o|‚†„ysg_YWSWWSOKD>92)"!%%%**)%"""%',69;=92,"%//2,' ,9OW[ag_aa[SPGCGKPSPOPWcww€€ogg_]_cga_PA4'!%/4@O]mw€€|wgaWOKOKOKGC><4)%!"%%%%'"""  %#'/4>9993,'!)/4<;4,'",9GTW_[__[WOG>99>ACGAOTcowspoga_aggce[PA2'"%(4CT_ouywogYOGGC>C><<<6/&  "%* """%" " " ""''*/,69ACIDCDCGIA@2*  %,49A@>972957997>IPW__[WPICA9972,"/8CIGA60"%,9AIOSWPQOKA<2,,/44<<441/11))$  %'" %")%(%'*,/0/-/4982799=;9=GOWY_[WPOI;>;92*""/DIOWWWWPOIIA>;8/%$1@CKLOPPOPOIIIIA96) ",4>GCICA94)""%'/22/2***" ""'**22295383220/'(%""" !!"%,48@CCIOWW___aaa_YKA4)"!"%-49>CIDC=4/" "%,2AGIDAA=999225626599999839999ACOYgioaZPIDAAGGIILGIGLKGGCGIKLKLIIF<2)"""/4>AAAC<4*" "'2223235,,** %"%**299=9722**'%% "  """"',/48A997862382699=9=99AACIP_iqyyog_OIGIIOLOOPOOPG>996@ILKPOLII<9/(" "'24735232//,,',,,/3=9A99-*'"" "!" """ ""! %%'199/'"" % %09999223599799=CGIPY_os€€€soaYTOPPPSTQTSSOC9/229AKOPPOIC;2)" "'/,/6,)" %,3767373533532//2,79A@=5/) %!"%%"%"",4>><;323799=92' """""""%!""!"%,4@@CGGADA;990)! '*259ADIKIA@3*" %0@OW___WWPKIDA9522292279IO[cgko|€€€€wysoookggc__ZYPG<2,*/GOLIIA9;62,% """%,26973337;AGLPWPOA>97722'! ""%%(""""%%)%'*24542+%!"'/59DIPW__YKA2""*4CS_giga_WI@6,*%)/249=CLYgkww|€„‡‡Š€‡€‚‡€|oog_[WSIA94,/19@IKOID>732/**" ! !%%%*24893//23@AIPWYWWPIA=92/) "%" %"%%'%""!!""%!!"%*,*%%!!!!%'/29AIIW[cc_MA/'! '2@LW_gggcWI92'" %)/4AGIWYgis€€„‡‡‹‡‡„„€€€wogcZWTOAA92/,/6932,*,**')*%*,,,22222928/*'#,4AIW[agga_PG>52*"!"")'%%%"'%#"" ""!!!"!%%(,444299=GLPWcgoocWC2"!"*%**29GLWW____S@2% ,6COSSWY_agow|€„€€|wokgcYWPOOTSIG@92/*'/9AGIGA72,**,***,0,/02829956562/)" '4>OWggkmk_WLA95*'  ""%,,''' %""""""%! "!%%04<<<<9@>@IIPW_gpqokYG6)!!" %%**23AAGIOOWYWWO@/%"+8ISWWWWWY_giowwsoog_[WMGFGIOWOOIA922/'*69AGA92/*%***225374999@>@999861*" /,""%"%(,22=ADIIGILPWSI<0"+AA9@;964)"")9G[gw|€wk_OD@3/*"   ! ('/'*#"%%""" % !"$,4@A@A@>@@A9A@9<2,' ",6GYgw‚‚€ocWOA=2'"" ""**)%%!" %" ""!"!)4@GOPOPPY_a[[YYakw€‡„‚€sg[F4"  " ****-279AGPOPID<;=AA@8*"&6CKSWOSWPLGIAGKG>94)))")/A@A><84/)''/9I[oy‡‡‚€o_PIA8*'""'',,'' "" "4@IQYWWYYagiogagco|„„‡‡€yk_K6&"%)'%**/*/,79>GLQTOIA=99992/) "/GOSWSTPKA62*'" " %'*,59ADIIOOOICA=999922//,2491" **2727/35277GLOPWWWWOD9723,**% "*4@>9752,'"  ""',29IWaoog[G9/%'%""")40'""/4A<<1,""'*2IYagiaTA2*' '"""$)46ACGPWWPI<2' '*,49ADKPWWWWPGG922**''/59AGGIOSZagowwywo_KA/'"'4>IIC<1)"%)049CLS___caikoig[SPIIIKOMKFC841,)"""*,379ADIOWYWokogc_]YWSOLGA952,,*2699A>AISYa_PI9,% " ""  ""',44<4/))#("!! %*/59ADIP__ik|}wogc_Z[ZYPOIA=9478@>64,),11464))""(*29>DKP_cowwŠ‡yuiaaegc__WPGA=AFLY__Y_[YYSPI;2*%"!"""''*)*" " %",4GKPS_iw„Ÿš—‚€www}ywokg__agioswsw|soaYPA;2,%%" )24@992*%""'%/48CKKIAA93/*,,*,****29OWgqukgSLCA@>@ACIIOOPWW[ZYWWOIIGAA932,'""")4AGGGGAA<2/%  "%)%%!!"!""")29>GIOWao|„¢¢Ÿ—’‡‡„‡‚„‚€wwsopwpqwwy€|yqi[PI;9/,*'!%'/6AIIA4/"%" ',19>GCICA>923/***%"%'/9I]iwywgYPIGAAAAIIOPPOPSTSOOPIOGLGA94''"%)29999<=942'  !"!"!""""$*09@DIOPco|‡§¢§Ÿ——“’Ž‡‡Š€€€|ywswy|€wsi_SLI>62/,'%'/AACA@;9322,(%%%''-9OWoy€wocWPKIGCIILKLOOOOKOIGIGAIIID<2%"%,/44494942/' !"%)%%"!%28>@IOWco|†‹¦§§Ÿšž———š—“’‹‹‡€soigowwpocaYSPIA63*'"'/6CKIG9,'%%"**,2984/**'*,26=GP_gs€€€wqgYPIIAAAAACAA<<42,,),/8AGC@4'!! "" "',2222*(%%'%'****%" ),8994)"""%"*48=AOYgs†‹©©¦¢š—’——šŸ¢§Ÿ—|oaSLIOYag_[YWPSTSPGC<1'""")),,,%,,*('"%%',268622/,''%%29ACP_ams}€||pg[KI<9799496444,)%"""%,49=<0,"!""%**22//,,,,,,2222*%%%%,8>AD<4)"%)%%!%,29ALYgw‚Š®©¦ž“Š—Ÿ§§š’„waSIACGKWYYYSSPPPSPPKA4)"!!"%('+,,*%" %*/422/)'%"%'**9AOYcgpqy€|wsgYI@9//,/,,//()("',2462,!!! !  '/253/2/3/339;9982,,*,*2;CLKI>1$ %%* !"*29@OWgo‡‡®§¢žŽ‡‡Š’—¢¢Ÿ€kYOC<9<@CKOOPPMOPPSTPKA1%!$%',,'%  " )',)'%$" ""'/5AIWgkosyywwocPG6/'% %'"%"""!!"%,,)%" ! "%*279997939>ADIIGA=<4428;ADKPOG<1$"%%%"'08ALWco‚†¦¢ž—’Š‹Ž‹—š›–‡waPKA94446<AA>AACIPWYPOIGADAAGIPPWPKA8," ! %29AOWaiy€‚¢Ÿš—Ž’——š—€oYKC94/,),/18GPY[[_YSPGA62' !""""""! ""! (/48,%"")46AAIOY__SC8/%"" % "  %*,2279>AKPSPKC@62/'%"   "$%(""!""%)44AKWWWWPPPWYiw|€}woomqwwywsogYPOGA8,""!  ",9@IKLOOOW__gy†‡“š¦¢§¦¦—Š€g[OC@8/)"!',9>IKP[_[WKA4/)'%"'*%**'*""" "'/25382249>><GOPOKIGIOPWow‚Ž—¢¦¢¦›’‡w_PI@6/)"!"%/9IOPY___[OIA9622,/39652/*%  "'-699952*')'),))" !',141/)" " '''*',//))"! ",18CKPW[Y__ako€‚’ŽŽ–— ¢Ÿž—€p_YIIA9/%" "'29IOSWTOIAADGIWgo|ŽšžŸŸ–‡wiWL@6,)%"!",6COYaagaga_SKI9;6399>=>992,'! ''/3=AA=3/% !!!""(4@CC<4'' '*'*/,//,/&"",/2''*,029294/'"%"!!"'22'%""!)98/,"!!%" */9@ACLYao€Š’ž¦¯¯·¼¼Ä¼¼¸´±¬žŠo_LICIIIGAA84)%%*6=IPWYYWPIA>9999AGKYi€€„€wkaWC6,%! %),%$%"14COY_oqpsookogicYWPPPYPOOIGIAG@42,29AKPP[Z[_YPIC;642)'" %4I[o|wo[IA6799=<=96*'""!%*,29AAPYkwŽ—¢®·¼¼ÃÄÆÇü·¸°¢Žw_SIMPPWPOOI<6,'" '4>GOWSTWPOIAAA9>9IPW_k€€€yo_WK9<=928/'""! "),2289AIPcw‡˜¦°º¼ÁÇÇƶÇü·´¦’€kYTPSYY_Y[WKG>2)'"',9COPWWWPPOIILIGGAYagp€‡„€ocSK/"!"%%%%% "%',6AK[oqyywyswww}ywqwigga]YWWYW_cgkussqi__[amoqpkgc_YWPLMLPPPKKHC<64/42699222,,2,/2/*''*'(***%% %$%$!!(),*/,9I_s‡š¨´¼¾Ãü¼¼¼¼Ä¼¼¾º··´¬¨¦¨ ¢§  š’„yoga____Y___gow‚—žžžšœšŸ¢žš‹ygS>,"""%!""  %)4>IS[cgkokoqoqowoooigg_[WW___gggowowuoiiggigg____]YOIG>@>A<<84)))%"%%,25392227422/,)***,22,,*',%$"!")*)/7CYo„–¦°º¾Ã¾¼¼Ã¼¼¾¼¾ÃÄĺº·°°°°·´°°¨¤š–‡€qg___YY__aiu|‡’ž¢¦¨¬¦¦§§›—‡saSA1#"" %%" ! "',4>CKSSW[a_ggcgggiiig__WWYggoookmoqupqooooooig_YWYWOIA9//,)'$"!"%*299=<9999992***//2999922,*"! %'*26FYo€’ž¨´·¾¼¾¼¼¼¼¼Ä¿ÄÆÇÄþ··¹¹¼ÁÃô®¨š„yoa__WWWY__ow‚—¢¦®°´©©©Ÿ—‡ycYK6,""!"% "')48IS_ow€Š–š¢¦šžš—‹€pk[OC1%%'**%% " "#%'''/4ACKWWY_aiioigc_Y_ioswogcggiokmgg___WOC<9944,("%,8CAGIOOOPTOGIAA9AAAIOOPOI@3* !"'/5;IWaow„–Ÿ¦©®°´·¾¼ÄÇÇÊÊÇÇÆ¿ÇÇÊÇÓÇÓÇ´¼§–‡wocWPI@9799DSams€‡–š‹Š€|wi[K9( "*042,* %''''**/9CGOSY[eiioiog_[Zaggog__Y_aa__[WOOKIC<2,')"""44*,*2=<922% ')),4,/*,/9AGPSWY[___ga_YTOIDIOPOOIGC>42,'" "/9CPY_[YWW[__aece__WWPIGA>>AIOPWOLA4'"",9GS_is€Š–š ¦¬·¸·º¾¼±····¾¼¼¿¿ÃÇÄÆĺ°¢–‡sigWPOGAA@ADIIP[gkpwww€€€‚€siicYYWKC<624994//'%'),/1,2/02IWcow€Šœ ¯··¼¼¼¼¸´¹·´¹¼·´¹¹¼¿¿¾¾¶°¦—‹€og_WWIGIADKPWagkowyy„‡Š‡‡|ogYYPSYWPKG<952*/,'),'),///,22AO_goqoiogcgaYOIA>AIIPPKIA9/*  *29IP[_[Y[Y___ceae__YWOIG>9399AGIILOIA;/'""",9CKWaou‚Ž˜ª´º¾¼¼¾¼¼º¼¿¹¿¿¹´·´¹¼¾¼·°®§š‡yo__POIDCLWeguww€€€|Š’–“„wk_YPT_acaWI94*'%)))/)"')*,24AAAGAIDAA94,'"#/9COP[eu†—§·¼¾Ã¼¼¾¼¼ÃÃÄü¹´´¹·º¸´°©©§Ÿš}o_WOICDIWex††Š†‚‡‡‹’–šš—„wi_SYcikocKA/'"'))),)"'*)24;GSgs€‚‡€|ooa_YPIIIGIIIKKIA9/' """"%)*/99IPW[_YY[_ca_ga__YYKG<95699=AA>A=;AAIIFA6/% !#,6@IO_o†§·¸¼¾¼¾¼¿ÄÆÇÒÄ¿¼´´··±°©¨Ÿš›“€sgWPOIDCL_q†˜œ˜–’Ž’’˜š–—’„ypgY[agikaK<4'"'),//'%'*/2DPWYY_YY_____YSSQKFA84//229;A>AA99=AIOPOA6,("!""%/4APas‡˜¦°ºº¾¼¾ÃÄÇÇÊÊÆÆ¿¼¼··¯¦¢š—“‹‡€sgWIGACILWg}¤§ žžššž˜’–’‡€|sgcc[[cVK>1%"',,/,'',,28AK_u„Ž’‡€wspokg[SPOKIAC@>964'"")),4//1249>=IKPY[_[[_[[WSKGGC>@<4,,'*/799AADA;9;AIPWWIG9/)%)"%""',6FTgwŠ–¦°·¼¼¾ÃÄ¿ÇÆÇÆÇÃÁ¿¼¯¯ ˜’’‹‚wok_PG>539GIaw¤¯¬¨ žžŸ¦ˆ†‚‡‡„€ykkcVSVKF>4#%#)',*'*229AP_qyŠŠ‡€|wokgc[YVSGC>96922,#"!()/4464246<9AAIIPW[a[YWSSKKC<9641//))%')269AA@A>=79AAOSPOA<42,/)'),/6CMap€’ž¦®··º¾¼¼ÃÿĿļ¼·¯§˜ˆ‚wsVs[[PGG9946@I_uŽ ¯º±¬§ž ¦¨”‹ˆyu|wwwskg[QFI@<81%#%''*/2/8AAO_o€Š–’–‡‡€wsic_SOKF<<2324,/'%"$(68@C>@967699AIIPYYYWSOKFFA<41,'""!"!"',49AAAA>@999=AIPLCA@92924/26<4#%"%)229>AGP]m€Š–˜—–‹‡Š„€wo_VK@<<4/2,,,','("$,4AILSYYWMIC<<11,)"%)49@CAGA@99299=CIGA>999999=CIP[gs€—¦©°°·´··°¯¬¬¯°·°°¨ –‚yg[OK@<9//**28KIOIAA9799>AAIOWWSPI<61))"!)29@KOGA<9922226@A@99397>AIIP[goy€‡“š¢¨®´´·´´¯¦   ¦®©¦ž‚ugYO>GKLII;9;39A>AIIOPSOC<4)"""(4KZgwŠŸ¬²¯¯¬¦§¯´·ÏÒÏÏÏÏÎÄòª™‘—˜–Š€gWLMO[goowww†Š–ž ž’‡‚€||wo_PC4,')*29@942% '"!"!!")AIMSYYacciu|‚‡ŠŽ’–ž¦¨©©§¦—‹‹Ž‹˜|o_PK@6,"'24'%,/8CGA94* %""!%)4@CGIO@932/26><<46/,'("!"%,2444,0/,2/289=9/)"!"/49<@GPco‚‹“—–“Ž„}oogYSIA<<9IIP[_YWPKA<,' ",2AO_k€‡“’’Š€wsigYWTPPSWYW[_a__ZYPOOOWg}Ž ´¿ÇÊÓÒÓÓÓÊÈ´©§¤ ¦¬©¬¨¨¦¬®°º¸¾¼Ä¾Ä¼·®¢–‹‚uoaZYWQPOG@4*"%16CKOPPKLIGAA=992/%"% %*'*****022*/*'*2/0)""%')***3@GP[goopog[TGC9,%" %''%"'4@KWgs€‡Š‡Š‹ŽŽ„}wooga__W]Za_gggaec_WOILP_q‡–¨¼¿ÊÈÊÊÈÊƾ´§Ÿ—˜ž¢¦®°®¬©¬©°¶·¸¼¼¼¾º·¨žŠ†wg[TKGKLOIG@8,% ",6Kao€Ž——‚oaWOIGG@90'!%'299979=ADGA<2'  (4AADCIIWgy‚Š“–’‡wg[TOKGD@4*%")29IOPIA4)(,AAA@>=@>CIOOLGA4,% %/9IOPPWYgpy€€‡Š‹Ž„wgWOLIAA95,' "%/OW_ikg_SA,%"'*29A>CDILKIDI5WSW_[_WSG942GPZ_YOI=AIYo€Ž ¬¯´´°°°©©®©§¢¢§›ž›Ÿ—Ÿ¢¢§ŸŸ‹€i_PC9,"""%%'-9<=@99,,%""/4=IKG94,462/'""!")),*%%""%*2>IPYagopqswspww|‡“€wwsywuig_ioqoyy€‚„€wspg[I9/39CICAAA>9964AO[ao€†‡‹“——›¢¦©©®¦ŸšŸ¦¬¶´¶¨žŽwaPG9/%"'*,29ALSOIG;;962,*%" "%%%!"%'*2=AIW[gkoowwwsw€€Š“—š‚€}€€‚ysggoookoqwy€|wsocYI6246@@<4/,6ADCA9226CQYc€‚‡Ž—šŸŸ¦¦®®°¦ ž¦¨°´¸´® ’€gSA8*" *'/2;APOIIA97632,*% !"! "%%,39AIPW_cioswsyw|‡———’„€‚€‡‡†€wqoooggkoqwwwqoaSG62/16<1,/,29AA@A94,)%""!"! "!"""% "*/39AIIIIA989CPY_ŠšŸ›ŸŸ¢§°°®®¨¦¬¯´¼·´®¦—†oYA2'%'*/2;GOPIA;8222//*%"!! '299AIIPWa_iooww|€„Š“–’†|€‚‡‡€ywqsogiooosoogcSI61/)/))"%,/4=A998/%'"!"!"  """ '*29AOPPPI>9@FW_i——šŸ¦¢¢¢¦§®¶·°¬¯¯´·¸´°¦ –‡qZI2*!'*/2@CIICA9//2*/-/*% !!'299>AALSW_agkosww€‡‹Ž‹‡€w}€Š—Š‡€wwqkmigiiigcWO@4/)"$%" ''/4;A<92*'"! %,2>IPW_[PKIFK_cm–šŸ¦§©¦¦¢¦®´¶·´¯´º¼º·®¨¦–‡u_K9, "%*/9ACCAAIIOW[_ggoosuy}€wwwsw‚‡—’‡y€wokkg_g_[WQF92/%" ! !  ""'*%))48ACIAAIP[oy†Š’——šŸ¦©®®®§¦¢¦´·¼ÃÃÄÃÁ¼¼¶°§¦šŽ|oWPA982)%!!"!"*,/,,*),///%! %'*2299@4/""%*,'))),,4,+" %*/2486<8494,2*,229OWaiePGCAIW_gg_SG9/,%" "*/59AA99999=99522)""%%"% "%("**4ACOSW[Z[WY[ao€‡—ŸŸ¢ŸŸŸ–ššŸ¨§¨§¨¦¨´·ÄÇÆÄ¿º°°®®©§¢—‡€iaWOII<4)"%'%)"$)//,,% '*,2/,421,4/,',,*9GPW_WIA729IT[_YO<4,#"%,6=CIGDDA@>=A9992,""!"%%''%%%""!!%%%'*28DOSZ[__a_agos€‹—šŸ¢ŸŸšŽ’—ž¢¦¦§¨®°ºÁÄļ·¯¦¦¢¦Ÿ¢—’†wo_YSPPG<1" "(),*%! %%',,*,1,2222444/9AKWWTG<929AOTWPC<,"',9DGIOOLKGIIGID@9/'!"(*,,''%'"" % "'06GPWW[_cgkkosy†›ŸŸ¢›š—‚‡Ž–Ÿ¢¦©©®®·¾Ä¾¼ª¤š–“–“Ž‡‚wig_WYSPG<,""%)'""%',,,04,444484249CIOODA99=GIOOG<4'!")8AIOWWWPTPOOOLCA6,%!',2,,*)%%"! % "*8GOTY__gosww|€‹’—Ÿ›ž——’€‚„Ž¢¦¢§¦¨¨´··¸¯¦–Š‡‚‡Š‡‡€yogaYWYWSPC94)!" !"%%""%%,4448948664,249CGKG@AAACGDG98/$%2@KTW_YY_YZ[ZSOI@4)"",,4/2/4,,(""! (4AOOTW_iqww|€€Š—š——’Žy€‡Š–Ÿ®¦¦¢¢ž¦°°¬¦žŽ‚€w€€|yuog_WWSW[ZYQC<2*,'*,*%% ! %!%*,48484412+))*/9@AAAAAGDA@99/)"'4ATWage_ggag_WOC9,"!%,44444644)"%1@GOOW]goswy€‡‡“—–—“’‡€„‡“š¦©¦Ÿž——šžž¢žŠ|wqooooggYWWPWY__aYPI@6782722*'  " !%,2242,,/))$"()48<<@AGDCA95**" "*6DP_ggigmkggaWI<4)"%),4/424242,)"!!(4@ILOWYgoooy|„“—“–Š‡‹ž¦©¨¦š“Ž„‡ŽŽŠ€wqooiga_[WWSWWZcgig_WIDAAA@A92** " !! +,*,,'()""(/104<=AA@32/* ""'*6@OW_ooowuoo_SA4)"%(,24,,//4460)"%4@GOOOY_giiqw€‹———“’ŽŠ’—¢§®®¢—Ž€wwy|€‚€}wsog__SOWSTWWYaowwpogYWWPLIGA=6**% "!%'%,+""""%'/8699722*'%""#*,/49IK[gqw}wqm_O>1%%*2444/,)/268/)$%29372,*' %,ICCICCCCGOPWWW[_ggookoigc_aacg_SO@2**''%%" % %" ",//,)"! "",,2,/'% " ""%)()""  "'''%" ")/4992,,'%" ""),49<822,'"!"!"(,1<<<<88992,'%"%"#%'%*,/**,',*)%"  %/4<<<42,,49AGGA@@AGA<81)))""""',/44162222/2999983229IOYggksw€|uaPA6,223=IPSWWWPOKA9/*% %"% ",29@>4," "%%''%***/*,/,/2AIPWaaaggc_VOKIKPQWWSOLIIA@42'"" ! " '**,0,2242/)%%"%'%'"" ",26<42,*%),4998227@992/,*/*/*2,)"""'/24/,%""%),0/*'*9<9<<1')'" %',/42//*%%'2494989AGLOPPWYiipocWI>2239AP[gooig_PI922***,')'%% !)/4<61( "''",/2AAGCIIKPYakpy|€|€€€|woogagg_a_[YPOIA92* ! "**/379AAAA92236799624'"%',,)%"! %%%%"'9AA<>2)),""  " ',,,*'%"'28AIIA<979>AAA>94,) #'''%   "'9CCC>1())%%""""""%)',''"*19@GKOKGGA@99>AIOYYWPIA3439GSagqsqogWG9/224622/0*'%""&)+$" '/9CP_aagkos€„‡‹‹‡„‡‡„‚€wwupouwqookogaYK9/"!"!"%%'399;AIAA>99>CIIGI=6/)" "%%  *9CIGC4'%)$"  """%',*',/9AFOWWWOI<92879AIKPPPGA935AIW_iooomcWI<7499942*,*'" "$""'*4AOakoqwwyŠ–—–‹‡‡‡‚‡†‚€‚}}}‚}y€wwwkcTA4*% """""""',299AADAAA99>AIIIA<3,'" %'''%%"  ""'9IOGC4$""%"%! !"%/,2/89>AA>9=9AIIOIA92,'"""%''*''%%"""%''*9CIIC4%!"" """%*/48<9@CCOSOIA4*,*,//49<42,1,)("",/6CAA>A9979AIIPPIG96*'" " '**,,*)'("%(),,*9GIIC4""""%,0269<<@AIIOSWY_aaecaaZSOKIKC<4,'% % !"(4@ISaoy„ž§±¹¿¿¿¹±¯±¨§§ Ÿ ——ŸŸ§§¯¯¯¤ –€oaTGA;<44,)!")69FIIAA;99ACLPSPOC92*'"" %'*,02,',)"',/2/26AGIC4&  ! "*/48<<<94<@<<9,%"""""$',44)")6GLWY_WPI@2/'%""%%,,229/,)%"+,,1/,9@FIC8) """ "%*24<@><42/4/0/'!"",6AOYYa_YY[W____YWSOKGAA4**"""%%%" (46,''%''02298,*("!),),/,/IP_p†˜¨¿ÆÊÒÓÈÓÆ¿´±¯©¯©©Ÿ¡¤§±¼¼¿Ä¼·¬–€ogiikg_I<,"+6KY[aYYYSZcgsooo_PG9/*)*,/429992)("%()%',6AIC@1)"/14/)'""',449442,,'%%#!"'4>OP[a_Y]YWY____YOIC=922**'""'% !  %28APYo„–¯¿ÇÊÓÓÓÊƺª©§§¤§Ÿ›¡§¯±¼¿¾Ä¼¾¯ Ž€wsuppaS/&1KYgpsy|wy€w|€|wg_OC944689CAGIG6,%""'4ACA8)""',6641''%)49<<94,,'("" !"*,9AKLPYYSYWWW_YZ[TGA92**%')%"% %   !'2APYo„˜¯¼ÊÊÓÓÊÈ¿±§¤ŸŸŸ¢ŸŸ©±·¹¼··¹··°¦’‡ywwwsgQ>/)1K[ip|€€‚€‚€‚€‚yo[PI@68<=,&4K[is€‡Š‡‡„€€€€sg_OC999%i4_@G!Y;HB826_HY7Y=SnGCZZxjf2{xJ&g>;IZqq*a zP+|6AcXsBSv$H3cMjd+XGpIM5G#g}b06{dEKs|dJj>6=1BOTq|!2x_ajXJ!=4_O3J z7!RWilGjl`7(b6EDKXOiOE~Gj#P8uVYSloDolTsZyEx<6l8c<1wRO}~5=ikN0C#UU z2p=Cst>%htGEPE?BjuE&z2b0P+L^`8BNQn@JyTK?NfjH{or~2_gY~Mh;{0MqQdgxs zQPCml=1|Ha*3hwN!BSRCRai~@hgfpE>TcRIakoFil2XAm6rR_E!OG(+dyp+^VS?)C zMjLto)IIcl^h)of^R@4E{Im9H3&baA8C^?mLF&lww*B55y}bowOZoh;=XXTj+TV{4 z-a@vdNUv$vlm8P7sUk&sq7Pet`Jbsmpj0~XJKc-R8@QgtSr#U6{{g)#*!G&6gA#JN zZR`AaIUu9h0d{~LUug3f1*DiL5{`Q%p@6^iFp<-! zoU`%*$>@SuHH`=s0ac%?rwhyAO2^V^#4nv&z+p&Zm2lXuy07X@KOK?Qq1_O94Oyeu w2+197bC8IXo-E*TrkY2X(l`UuxB|n9GsNi{4|aeZU + + This command establish the communication with the parent FVWM +process through the two pipes identified by the file descriptors. The + is the file descriptor used to send messages *to* FVWM, while + is the fd that receives messages *from* FVWM. The typical +usage is: + + fvwm init [lindex $argv 0] [lindex $argv 1] + +2) fvwm send + + This command sends the given message to the parent FVWM, +indicating the windowID over wich the command will be applyed. Typical +usage is: + + fvwm send $id {Iconify ""} + fvwm send 0 Send_WindowList + +3) fvwm ?