commit ed3a73f96061193a04030887de67a16f9924152f Author: jaeger401 Date: Wed Jul 8 10:33:48 2015 -0400 Initial commit of Mark Crimmins' code as of Oct. 1, 1997. 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 + + 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 ?