Initial commit of Mark Crimmins' code as of Oct. 1, 1997.

This commit is contained in:
jaeger401 2015-07-08 10:33:48 -04:00
commit ed3a73f960
244 changed files with 36025 additions and 0 deletions

470
CHANGES Executable file
View File

@ -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

1135
Dialer Executable file

File diff suppressed because it is too large Load Diff

26
Dialer.README Executable file
View File

@ -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

91
FAQ Executable file
View File

@ -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.

39
INTERNATIONALIZATION Executable file
View File

@ -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 <Yves.Arrouye@imag.fr>

95
Makefile Executable file
View File

@ -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

92
Makefile.in Executable file
View File

@ -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

65
README Executable file
View File

@ -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

9
TIPS Executable file
View File

@ -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.

65
TODO Executable file
View File

@ -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.

17
config.cache Executable file
View File

@ -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'}

3
config.log Executable file
View File

@ -0,0 +1,3 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

142
config.status Executable file
View File

@ -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

970
configure vendored Executable file
View File

@ -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 <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/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 <<EOF
# 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
$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 <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile libs/Makefile"}
EOF
cat >> $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

97
configure.in Executable file
View File

@ -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)

470
doc/CHANGES Executable file
View File

@ -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

55
doc/Example Executable file
View File

@ -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"

91
doc/FAQ Executable file
View File

@ -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.

19
doc/NOTICE Executable file
View File

@ -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.

93
doc/biff.html Executable file
View File

@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>TkGoodStuff Biff</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.26 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<H1>TkGoodStuff Biff</H1>
<H2>Description </H2>
<P>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 &quot;No Mail&quot;/&quot;New Mail&quot;,
or both (optionally, &quot;New Mail&quot; is replaced by a counter of new
messages). A more detailed display is available in multiple-mailbox mode
(below).</P>
<P>Biff watches one or more &quot;mailboxes&quot;: 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 &quot;alert level&quot;, and the new-mail icon
indicates the maximum alert-level of all mailboxes with new mail. </P>
<P>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 &quot;tear off&quot; the mailboxes menu to position
elsewhere on the screen.</P>
<P>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 &quot;No Mail&quot;), and to wait until
you get yet more mail before notifying you. </P>
<P>For each mailbox, you can choose (in the preferences manager) between
several &quot;methods&quot; 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/<B>username</B>): &quot;atime&quot;,
&quot;filesize&quot;, and &quot;internal&quot;. With the method &quot;atime&quot;
(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 &quot;filesize&quot;, Biff decides that
there's new mail when the file is nonempty. The &quot;internal&quot; method
scans the message headers for &quot;Status:&quot; lines, and treats messages
with a status of &quot;N&quot; or with no &quot;Status:&quot; line as new.
The &quot;atime&quot; or &quot;internal&quot; method is probably best for
those who keep old mail in their spool file. The &quot;filesize&quot; method
is better for those who normally regard all mail in the spool file as new
mail. </P>
<P>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 &quot;+&quot;. With the mh method,
we assume a message is new if it is in the &quot;u&quot; 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: </P>
<PRE>MHLIB=/usr/lib/mh
:0
* ^(To|Cc|Subject):.*tkgoodstuff.*
|$MHLIB/rcvstore +tkg</PRE>
<P>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 &quot;INBOX&quot;. You can supply your password (at the server)
in the preferences manager, <B>in which case it will be stored in your
.tkgrc file (which it's up to you to protect!!)</B>, 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. </P>
<P>All parameters are adjustable in the preferences manager. </P>
<ADDRESS>Thanks to G. Dezern. </ADDRESS>
</BODY>
</HTML>

41
doc/chooser.html Executable file
View File

@ -0,0 +1,41 @@
<HTML><HEAD>
<TITLE>tkgoodstuff Watchdog</TITLE>
<!-- Changed by: Eric Kahler, Feb-3-1996 -->
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>tkgoodstuff Chooser</H1>
by Eric Kahler (ekahler@mars.superlink.net)
<H2> Description </H2>
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.
<H2>Invocation and Variables</H2>
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:
<PRE>-------Configuration-------
TKGSet ChooserList {/usr/local/lib/tkgconfigs/config1 /usr/local/lib/tkgconfigs/config2}
Client Chooser</PRE>
Here is how to select every file in a given directory:
<PRE>-------Configuration-------
TKGSet ChooserList /usr/local/lib/tkgconfigs
Client Chooser</PRE>
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).

38
doc/clock.html Executable file
View File

@ -0,0 +1,38 @@
<HTML><HEAD>
<TITLE>TkGoodStuff Clock</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff Clock</H1>
<H2> Description </H2>
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.
<P>
The alarm utility is used by selecting <B>ALARM</B> 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.
<P>
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.
<P>
The Clock also serves as a clicking-point for the tkgoodstuff popup
menu (mouse button 1).
<H2>Invocation</H2>
All parameters are adjustable in the preferences manager.

55
doc/dialer.html Executable file
View File

@ -0,0 +1,55 @@
<HTML><HEAD>
<TITLE>Dialer</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff Dialer</H1>
<H2> Description </H2>
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).
<P> It USED TO BE that to run Dialer you needed the expectk program,
but no longer (now Dialer runs on basic tcl/tk). </B>
<P>
Dialer expects a Hayes-compatible modem (like nearly all modems sold
these days).
</P>
<P>
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.
<P>
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.
<P>
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:
<PRE>
Dialer /home/markcrim/.DialSettings Dial
</PRE>
<P> 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.

116
doc/fvwm.html Executable file
View File

@ -0,0 +1,116 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>TkGoodStuff Fvwm Client</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.29 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<H1>TkGoodStuff Fvwm2 Interface</H1>
<H2>Description </H2>
<P>Tkgoodstuff can interact with the <A HREF="http://www.hpc.uh.edu/fvwm/">fvwm2
window manager</A> (or the <A HREF="http://ltiwww.epfl.ch/~barth/fvwm95.html">fvwm95</A>
window manager; but see below).</P>
<P>The main reason for the Fvwm2 interface is to enable some of tkgoodstuff's
cool clients: <A HREF="windowlist.html">WindowList </A>and <A HREF="pager.html">Pager</A>.
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). </P>
<P>It also allows you to: </P>
<UL>
<LI>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 &quot;Utilities&quot; menu (you can make a button run this command):
</LI>
<PRE>fvwm send 0 {Menu Utilities Nop &quot;&quot;}
</PRE>
<LI>Use the tcl command &quot;FvwmNextOrExec&quot; (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. </LI>
<LI>Use the tcl command &quot;FvwmNext&quot;, which moves to and raises
the next instance of the application you specify. </LI>
</UL>
<H2>Invocation and Use</H2>
<P><B>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.</B> </P>
<P><B>The fvwm2 interface REQUIRES that you run fvwm2</B>. 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 &quot;mini-icons&quot; 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. </P>
<P><B><FONT SIZE=+1>You must start tkgoodstuff as an fvwm2 module</FONT></B>.
To do this, in your .fvwm2rc set ModulePath to a directory path which includes
your tkgoodstuff library directory. For example: </P>
<PRE>ModulePath /usr/lib/X11/fvwm2:/usr/local/lib/tkgoodstuff</PRE>
<P>You now have an fvwm2 module called &quot;tkgoodstuff&quot;, which you
invoke like any other fvwm2 module, e.g., in fvwm2's InitFunction. Here's
how: </P>
<PRE>AddToFunc InitFunction &quot;I&quot; Module tkgoodstuff</PRE>
<P>You also can make &quot;Module tkgoodstuff&quot; an item on your fvwm
menus. To specify a configuration file, use &quot;Module tkgoodstuff -f
filename&quot;. </P>
<P>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). </P>
<H3>FvvwmNextOrExec </H3>
<P>You can use FvwmNextOrExec wherever a tcl command is called for---e.g.,
in a Button or Menu item, as follows: </P>
<PRE>FvwmNextOrExec emacs</PRE>
<P>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 &quot;emacs&quot; (either its window name
or its resource class) in tkgoodstuff's list of windows if there is one,
and to run the unix command &quot;emacs&quot; 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
&quot;emacs&quot; (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.</P>
<P>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). </P>
<H3>FvwmNext and FvwmPrev</H3>
<PRE>FvwmNext cmd ?name?</PRE>
<P>(Primarily for &quot;advanced&quot; 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.
</P>
</BODY>
</HTML>

30
doc/ical.html Executable file
View File

@ -0,0 +1,30 @@
<HTML><HEAD>
<TITLE>TkGoodStuff Ical</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff Ical</H1>
<H2> Description </H2>
The Ical client is an alarm/calendar utility. It relies on the
calendar generated by the very nice program <A
HREF="http://clef.lcs.mit.edu/~sanjay/ical.html"> ical</A> 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.
<P> 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.
<H2>Invocation</H2>
All parameters are adjustable in the preferences manager.

31
doc/icons.html Executable file
View File

@ -0,0 +1,31 @@
<HTML><HEAD>
<TITLE> TkGoodStuff Images </TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1> Using Icons in TkGoodStuff </H1>
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:
<PRE>
/usr/include/X11/bitmaps/stopsign.xbm
</PRE>
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).
<P>
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.
<P>
Formerly, you had to compile an additional package to get xpm image
support. Now, this functionality is compiled and installed
automatically at tkgoodstuff installation.
</BODY></HTML>

18
doc/index-orig.html Executable file
View File

@ -0,0 +1,18 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>tkgoodstuff</title>
</head>
<frameset cols="170,*">
<frame src="toc.html" marginwidth="1">
<frame src="tkgoodstuff.html" name=contents>
</frameset>
<noframe>
<BODY>
<br><b>Oops! This document requires a browser with
<a href="http://home.netscape.com/comprod/products/navigator/version_2.0/frames/">FRAMES</a> support, such as <a href="http://home.netscape.com/comprod/mirror/index.html">Netscape 2.0</a>.
<p></b>
<br>-- Others browsers can see <a href="toc.html">the same pages</a> <i>without</i> the FRAMES interface.
</BODY>
</NOFRAME>
</html>

18
doc/index.html Executable file
View File

@ -0,0 +1,18 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>tkgoodstuff</title>
</head>
<BODY>
<br>
I have stopped all work on tkgoodstuff as of October 1, 1997. Anyone
who would like to take over, please email
<a href="mailto:markcrim@umich.edu">me</a>. I can supply sources and
some useful extra stuff.
<P>
The tkgoodstuff home page as I left it is <a href="index-orig.html">here</a>.
</BODY>
</NOFRAME>
</html>

93
doc/install.html Executable file
View File

@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>tkgoodstuff</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.29 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<H1>tkgoodstuff: Availability and Installation</H1>
<P>Get the source for the current version here: <A HREF="dists/tkgoodstuff8.0-final.tar.gz">tkgoodstuff8.0-final.tar.gz</A>
Older, and sometimes more stable, versions are available <A href="dists">here</A>. </P>
<P>To run this utility, you need tcl8.0 and tk8.0 (get the source at
<A HREF="ftp://ftp.smli.com/pub/tcl">ftp://ftp.smli.com/pub/tcl
</A>). </P>
<P> (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.)</P>
<P>Once you have the tkgoodstuff distribution</P>
<OL>
<LI>Unpack it in a directory somewhere (say, /tmp). One way (suppose you
have the distribution in /tmp/): </LI>
<PRE> cd /tmp
cat tkgoodstuff8.0-final.tgz | gunzip | tar xpf -
</PRE>
<LI>cd to the source directory: </LI>
<PRE> cd /tmp/tkgoodstuff8.0-final
</PRE>
<P>Then type </P>
<PRE> ./configure</PRE>
(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.)
<P>If all goes well, you can type </P>
<PRE> make
</PRE>
<P>and if all is still well, type </P>
<PRE> make install
</PRE>
<P>This process will compile C code needed by tkgoodstuff, and install
tkgoodstuff's files in the appropriate places. Look in the <A href="FAQ">FAQ</A> for
hints if you encounter problems.
</P>
<P>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). </P>
<LI>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. </LI>
<LI>If you have problems, check the <A HREF="FAQ">FAQ</A> before
emailing the <a href="mailto:tkgoodstuff@merv.philosophy.lsa.umich.edu">tkgoodstuff
mailing list</a></li>.
<LI>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 &quot;stick&quot; 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: </LI>
<PRE>Style &quot;tkgoodstuff&quot; NoTitle, NoHandles, Sticky, WindowListSkip, StaysOnTop
Style &quot;tkgoodstuff&quot; BorderWidth 0,CirculateSkipIcon,CirculateSkip
</PRE>
<P>HOWEVER, if you use <A HREF="fvwm.html">tkgoodstuff as an fvwm module
</A>(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.</P>
</OL>
<P><IMG SRC="http://wwwcgi.itd.umich.edu/cgi-bin/counter?link=http://www-personal.umich.edu/~markcrim/tkgoodstuff/install.html">
</P>
</BODY>
</HTML>

31
doc/jots.html Executable file
View File

@ -0,0 +1,31 @@
<HTML><HEAD>
<TITLE>TkGoodStuff Jots</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff Jots</H1>
<H2> Description </H2>
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.
<P>
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.
<p>
More help for Jots is available in the "Help" menu of the Jots window.
<H2>Invocation</H2>
All parameters are adjustable in the preferences manager.

35
doc/load.html Executable file
View File

@ -0,0 +1,35 @@
<HTML><HEAD>
<TITLE>TkGoodStuff Load</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff Load</H1>
<H2> Description </H2>
<P> 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.
<P> The graphical display is a histogram drawn to an automatically
adjusting scale. A "Scale" preference parameter (by default 1) sets
the initial and <b> smallest </b> 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.
<P> Clicking mouse button 1 on the Load button (by default) launches
an xterm running "top" (so you can see what's causing the load).
<P>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.)
<H2>Invocation</H2>
All parameters are adjustable in the preferences manager.

12
doc/mailinglists.html Executable file
View File

@ -0,0 +1,12 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>Mailing Lists</title>
</head>
<body TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<h1>Mailing Lists</h1>
<B> Tkgoodstuff mailing lists have been disabled as of October 1, 1997. </B>
</html>

48
doc/menu.html Executable file
View File

@ -0,0 +1,48 @@
<HTML><HEAD>
<TITLE>TkGoodStuff Menu</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff Menu</H1>
<H2> Description </H2>
<P> The Menu client produces a button that produces a menu. The menu
is configured within the preferences manager.
<P> 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.
<H2>Configuration</H2>
<P> In the preferences manager, there is a GUI menu-editing tool, which
(hopefully) is self-explanatory.
<P> The following items can be added to the menu:
<P> <B>Menu</b> <BR>
This creates a new sub-menu within whatever menu you are currently
defining.
<P> <B>Execute</b> <BR> 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.
<P> <B>Tcl Command</b> <BR> 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.
<P> <B>tkgoodstuff Menu</b> <BR> 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).
<P> <B>Separator</b> <BR>
This inserts a horizontal separator line in the menu.
<P><B>Run . . .</B>
This inserts an item in the menu which, when selected, calls up a
dialog window allowing you to enter a unix command to execute.

52
doc/net.html Executable file
View File

@ -0,0 +1,52 @@
<HTML><HEAD>
<TITLE>TkGoodStuff Net</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff Net</H1>
<H2> Description </H2>
The Net client is a dialup (PPP/SLIP/TERM) link status indicator and
up/down toggler.
<P>
Clicking on the Net button instructs the Net client to toggle (open or
close) the network link.
<P>One possible way to have Net open a dial-in link (e.g., ppp or term)
is to use the GUI program <a href="dialer.html">Dialer</a>, which is
included in the tkgoodstuff distribution, to dial your modem and set
up the link.</P>
<P>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.
<P> By default, the label on the Net button, when connected, shows the
elapsed time of the connection (up to 24 hours).
<P>
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.
<P>
<H2>Invocation</H2>
All parameters are adjustable in the preferences manager.
<P> 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
<PRE> 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:
<PRE> ifconfig | grep inet.*P-t-P | sed s/inet.*r:// | sed s/P-t-P.*//
<\PRE>

39
doc/pager.html Executable file
View File

@ -0,0 +1,39 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>TkGoodStuff Pager</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.26 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<H1>TkGoodStuff Pager</H1>
<H2>Description </H2>
<P>Pager is a client for TkGoodstuff which provides an interface to the
multiple desktops of the <A HREF="http://www.hpc.uh.edu/fvwm/">Fvwm2 window
manager</A>. 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.
</P>
<P><B>Pager works only when tkgoodstuff is invoked as an fvwm2 module.
</B></P>
<P>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. </P>
<P>Clicking repeatedly on page cycles through the open windows on the page.
</P>
<H2>Invocation</H2>
<P>All parameters are adjustable in the preferences manager. </P>
<P><I> Thanks to Eric Kahler </I></P>
</BODY>
</HTML>

88
doc/popimap.html Executable file
View File

@ -0,0 +1,88 @@
<html>
<head>
<title> TkGoodStuff PopImap </title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple"
alink="red">
<bodytext>
<h1> TkGoodStuff PopImap Utility </h1>
<a name="function"><h2>Function</h2></a>
<p> 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). </p>
<p> 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.</p>
<h3>Interaction with other tkgoodstuff Clients</h3>
<p> 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). </p>
<a name="use"><h2>Use</h2></a>
<p> 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. </p>
<p><b>See also <a href="biff.html">Biff's</a> IMAP method, which doesn't
require any external IMAP program.</b> </p>
<a name="popclients"><h2>Where to Find POP and IMAP Fetching
Utilities</h2></a>
<p> Here I have a decided lack of expertise. I would very much appreciate
pointers to stuff I don't know about. </p>
<ul>
<li> POP </li></ul>
<ul>
<li> "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). </li>
<li> "popclient". Also at sunsite. </li>
<li> "pop-perl". Also at sunsite. </li>
</ul>
<li> IMAP </li>
<ul>
<li> <a
href="ftp://ftp.cac.washington.edu/mail/imap-utils.tar.Z">
imapcopy</a>, which requires
<a href="ftp://ftp.cac.washington.edu/mail/imap.tar.Z">
imap.tar.Z</a> 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!).
</li>
<li> imapmove (simply a unix link to imapcopy), which deletes
all of the remote mailbox after copying as in imapcopy.
</li>
<li> 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. </li>
</ul>
</UL>
<h2>Invocation</h2>
<p> All parameters are adjustable in the preferences manager. </p>
</bodytext></body></html>

233
doc/preferences.html Executable file
View File

@ -0,0 +1,233 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE> tkgoodstuff Preferences Manager</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.29 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<H1>Configuring TkGoodStuff with the Preferences Manager</H1>
<P>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).</P>
<P>In addition to selecting and arranging the elements of your panels,
you can adjust fonts, colors, icons, &quot;tiled&quot; 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.).</P>
<P>Changes do not take effect until they are saved and tkgoodstuff is restarted.
All configuration information is saved to the configuration file (by default,
&quot;.tkgrc&quot; in the user's home directory---which you can edit
by hand if things go so wrong that the preferences manager won't
work). </P>
<P><A NAME="variables"></A></P>
<H2>Setting Preferences </H2>
<P>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.</P>
<P>You might want to set a preference based on an environment variable.
You can do this by using &quot;$env&quot; as follows. To set a certain
preference to a value based on the user's home directory, you can enter
this: </P>
<PRE>$env(HOME)/whatever
</PRE>
<P><A NAME="client"></A></P>
<H2>Including and Configuring a Client </H2>
<P>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 &quot;Insert&quot;,
at which point you enter the name of the client.</P>
<P>You configure a client in the preferences manager (double click on its
entry in the configuration).</P>
<P><A NAME="addbutton"></A></P>
<H2>Adding a Button</H2>
<P>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:</P>
<UL>
<LI>If you want an icon on your button, then the icon filename. <B>The
file can contain an image of any of several formats (see <A HREF="icons.html">Icons
</A>for more).</B> </LI>
<LI>If you want a bit of text on the button (either under the icon or by
itself), then the text string (a &quot;\n&quot; in the string makes a line
break for multi-line text). E.g., &quot;Telnet to/nwork&quot;. </LI>
<LI>The (unix) command to run. E.g.: </LI>
<PRE> xdir &quot;xless /var/adm/syslog&quot;
rxvt -T Syslog -sl 400 -e {&quot;tail -400 -f /var/adm/syslog&quot;}
rxvt -T Syslog -sl 400 -e \&quot;tail -400 -f /var/adm/syslog\&quot; </PRE>
<P>(The last two are equivalent.)</P>
</UL>
<P>You add the button in the Prefernces manager by choosing &quot;Insert&quot;
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. </P>
<P>Notes: </P>
<UL>
<LI>The expression &quot;@selection@&quot; in a unix or tcl command will
be replaced by the current X selection. </LI>
<LI>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. </LI>
<LI>When you press an already-depressed unix command button, <B>if</B>
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 &quot;TkMan&quot;, netscape
&quot;Netscape&quot; and so on). </LI>
</UL>
<P><A NAME="addpanelbutton"></A></P>
<H2>PanelButtons</H2>
<P>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 &quot;Insert&quot; mouse-3 menu item, and
double-click to configure. </P>
<P>See below on how to create Panels. <A NAME="putpanel"></A></P>
<H2>PutPanel</H2>
<P>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 &quot;Insert&quot; mouse-3 menu item, and double-click
to configure. </P>
<P>See below for how to create Panels. <A NAME="addlabelbox"></A></P>
<H2>Adding a Label Box </H2>
<P>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
&quot;Insert&quot; trick. <A NAME="swallow"></A></P>
<H2>Swallowing an Application </H2>
<P>If you want to include a utility that tkgoodstuff doesn't provide, you
can incorporate it in your tkgoodstuff panel as a &quot;Swallow&quot; item.
Use the preferences manager to do this. </P>
<P>WARNING: this can be tricky. Some hints: </P>
<UL>
<LI>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. </LI>
<LI>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.
</LI>
<LI>If the application has a set size, you can find out what it is with
fvwm's Identify module (if you use fvwm). </LI>
<LI>In your application command line, you can specify the tkg background
color (for your application to use) as <B>\$background</B> (same for foreground
and some other resources). Also, use <B>\$width</B> to specify the Swallow
window width (same for height). </LI>
<LI>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. </LI>
</UL>
<P><A NAME="fill"></A></P>
<H2>Filling Space </H2>
<P>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 &quot;Fill&quot; (which you insert
into your configuration like anything else). For example, suppose you have
screen-edge mode set to &quot;bottom&quot;, you have four buttons in your
bar, and you include &quot;Fill&quot; 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 &quot;Fill&quot; region; in particular, in the absence
of Fill commands, it uses all available space.) <A NAME="stacks"></A></P>
<H2>Stacks</H2>
<P>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 <A HREF="http://www-personal.umich.edu/~markcrim/tkgoodstuff/stacks.jpg">screenshot
</A>(available only on the tkgoodstuff web page; to see it otherwise, just
run &quot;tkgoodstuff -f stacks&quot; in the sample-rc directory). </P>
<P>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 (&quot;Utilities&quot;).
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 &quot;Utilities&quot;
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. </P>
<P>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). </P>
<P>I hope that makes the working of the stacking apparatus clear. If not,
play around with it and you will figure it out. <A NAME="panels"></A></P>
<H2>Panels</H2>
<P>You create a Panel by &quot;Inserting&quot; 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. </P>
</BODY>
</HTML>

89
doc/running.html Executable file
View File

@ -0,0 +1,89 @@
<HTML><HEAD>
<TITLE>Running TkGoodStuff</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1> Running TkGoodStuff </H1>
<H2> Table of Contents (this document) </H2>
<UL>
<a href="#invocation"><LI> Invocation </LI></a>
<a href="#geometry"><LI> Geometry </LI></a>
<a href="#configfile"><LI> Determination of Configuration File </LI></a>
</UL>
<a name="invocation"><H2> Invocation </H2></a>
You invoke tkgoodstuff by issuing a command of the following form:
<PRE>
tkgoodstuff [-geometry -3+0] [-f configfilename ]
</PRE>
Here, the brackets indicate optional arguments, which are discussed below.
<P>
<a name="geometry"><H2> Geometry </H2></a>
There are two geometry modes: screen-edge and normal:
<h3> Screen-edge mode </h3>
If you set screen-edge mode ("no" by default) to "left", "right", "top",
or "bottom", tkgoodstuff will span that edge of the screen.
<h3> Normal mode </h3>
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:
<TABLE>
<TR>
<TH> Specification </TH> <TH> Puts the tkgoodstuff Panel . . . </TH>
</TR>
<TR>
<TD> +1-123 </TD> <TD> 1 pixel from the left and
123 pixels from the bottom of the screen </TD>
</TR>
<TR>
<TD> -1+123 </TD> <TD> 1 pixel from the right and
123 pixels from the bottom of the screen </TD>
</TR>
</TABLE>
<P>
tkgoodstuff chooses the first geometry specification it finds in the
following ways:
<OL>
<LI> In the command line, as follows:
<PRE>
tkgoodstuff -geometry +34-88
</PRE>
</LI>
<LI> In the current preferences.
</LI>
</OL>
<a name="configfile"><H2>Determination of Configuration File </H2></a>
tkgoodstuff needs a configuration file to run. It uses the first
file it finds in the following ways:
<OL>
<LI> Named on the command line, as follows (where "configfilename" is the name
of your file):
<PRE>
tkgoodstuff -f configfilename
</PRE>
</LI>
<LI> In your home directory (as set in the environment variable
HOME) under the name .tkgrc.</LI>
<LI> In the tkgoodstuff directory (by default,
/usr/local/lib/tkgoodstuff), under the name <B>system-tkgrc</B>.
</OL>
Using the "-f configfilename" form allows you to have many different
panels defined for different purposes.
</BODY></HTML>

16
doc/screenshots.html Executable file
View File

@ -0,0 +1,16 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>tkgoodstuff</title>
</head>
<frameset rows="50,*">
<frame src="shots.html" SCROLLING=NO BORDER=NO MARGINHEIGHT="10">
<frame src="win95.jpg" name=shots BORDER=no>
</frameset>
<noframe>
<BODY>
<br><b>Oops! This document requires a browser with frames support.<p></b>
<br>-- Others browsers can see <a href="toc.html">the same pages</a> <i>without</i> the FRAMES interface.
</BODY>
</NOFRAME>
</html>

20
doc/shots.html Executable file
View File

@ -0,0 +1,20 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>tkgoodstuff</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.29 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<BASE TARGET="shots">
<TABLE WIDTH=100% CELLPADDING=0 CELLSPACING=0 BORDER=0>
<tr>
<td><h3><A HREF="win95.jpg">Task Bar</a></h3></td>
<td><h3><A HREF="vert.jpg">Vertical Task Bar</a></h3></td>
<td><h3><A HREF="home.jpg">Home System</a></h3></td>
<td><h3><A HREF="minimal.jpg">Minimal</a></h3></td>
<td><h3><A HREF="stacks.jpg">Big Mess</a></h3></td>
</tr>
</table>
</BODY>
</HTML>

151
doc/tkgoodstuff.html Executable file
View File

@ -0,0 +1,151 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>tkgoodstuff</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.29 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<BR>
<BR>
<H1>tkgoodstuff</H1>
Screenshots:
<blockquote>
<A HREF="screenshots.html">A few sample configurations</A><BR>
<A HREF="http://mars.superlink.net/ekahler/fvwm2.desktop.html">
Eric Kahler's desktop</A><BR>
<A HREF="http://www.coffeenet.net/help/index.html">
CoffeeNet Help Page</A>
</blockquote>
<P>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 &quot;clients&quot; 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.).</P>
<P>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 &quot;hide&quot; along the side of the screen and to be &quot;dragged&quot;
to another side, with a GUI-configurable menu, etc.). But it is not a taskbar
&quot;clone&quot; and is considerably more customizable. </P>
<H2>Included Clients </H2>
<UL>
<LI><B><A HREF="clock.html">Clock: </A></B>analog and/or digital time and/or
date alarm clock. </LI>
<LI><B><A HREF="biff.html">Biff: </A></B>a feature-rich mail checker.</LI>
<LI><B><A HREF="net.html">Net: </A></B>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 &quot;ping&quot;
so that the remote host won't close an inactive connection. Included is
a GUI <A HREF="dialer.html">Dialer</A> 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. </LI>
<LI><B><A HREF="jots.html">Jots: </A></B>A tool for writing, editing, and
searching for notes: diary entries, addresses, ftp sources, ideas, etc.
Support for easy shuffling between multiple &quot;folders&quot; of entries.
</LI>
<LI><B><A HREF="www.html">WWW: </A></B>Launch your web browser or instruct
the browser to visit the URL in the current X selection. </LI>
<LI><B><A HREF="watch.html">Watch: </A></B>This client watches one or more
files (e.g., log files) for changes with configurable alerts (and can display
the files). </LI>
<LI><B><A HREF="load.html">Load: </A></B>An xload-like system load-average
display (auto-scaling graphical, digital, or both). Button 1 launches an
xterm running (for example) &quot;top&quot;. </LI>
<LI><B><A HREF="menu.html">Menu: </A></B>A button that produces a menu,
which is easily configured in the GUI preferences manager. </LI>
<LI><B><A HREF="webster.html">Webster: </A></B>Retrieve (over the net)
the dictionary definition of a word (the current X selection). </LI>
<LI><B><A HREF="ical.html">Ical: </A></B>The program <A HREF="http://www.research.digital.com/SRC/personal/Sanjay_Ghemawat/ical/home.html">ical</A>
(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.</LI>
<LI><B><A HREF="popimap.html">PopImap: </A></B>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., <A HREF="http://locke.ccil.org:80/~esr/esr-freeware.html">fetchmail</A>).
No button is produced by this client (though it produces some stuff in
the tkgoodstuff popup menu). </LI>
<LI><B><A HREF="windowlist.html">WindowList: </A></B>For use with Fvwm,
produces buttons for open/iconified windows (like the Win95 taskbar).</LI>
<LI><B><A HREF="pager.html">Pager:</A></B> For negotiating desktops with
Fvwm. </LI>
<LI><B><A HREF="chooser.html">Chooser:</A></B> (by Eric Kahler) This client,
at tkgoodstuff start-up, posts a list of tkgoodstuff configuration files
to choose from. </LI>
<LI><B><A HREF="tkman.html">TkMan:</A></B> (by Gary Dezern) The program
<A HREF="http://http.cs.berkeley.edu/~phelps/tcltk/tkman-help.html">tkman</A>
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. </LI>
</UL>
<H2>Customizing Features</H2>
<H3>User-defined buttons </H3>
<P>The &quot;standard&quot; 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. </P>
<H3>&quot;Swallow&quot; Windows </H3>
<P>If you really like xosview or xdaliclock or whatever, you can embed
it within your panel as a Swallow item (tkgoodstuff &quot;swallows&quot;
the application window). </P>
<H3>Label boxes </H3>
<P>A label box contains text, e.g., to label a group of related buttons.
</P>
<H3>Stacks </H3>
<P>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).
</P>
<H3>Panels </H3>
<P>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 &quot;PanelButton&quot;.
<H2>Documentation </H2>
<P>The only documentation for tkgoodstuff is in these html pages, which
are included in the distribution's &quot;doc&quot; subdirectory. From the
&quot;About tkgoodstuff (help)&quot; 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). </P>
</BODY>
</HTML>

32
doc/tkman.html Executable file
View File

@ -0,0 +1,32 @@
<HTML><HEAD>
<TITLE>TkGoodStuff TkMan</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff TkMan</H1>
by Gary Dezern (gdezern@uniquecr.sundial.net)
<H2> Description </H2>
The TkMan client is launcher for the tkman man-page reader.
<P>
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.
<H2>Invocation</H2>
To include the TkMan button in your panel, include in your Configuration:
<PRE>
Client TkMan
</PRE>
All parameters are adjustable in the preferences manager.

69
doc/toc.html Executable file
View File

@ -0,0 +1,69 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>tkgoodstuff</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.29 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<BASE TARGET="contents">
<CENTER>
<A HREF="tkgoodstuff.html" BORDER=no>
<Img SRC="tkgshadow.jpg" HEIGHT=50 WIDTH=150 BORDER=0></A>
<BR>
<A HREF="install.html">Getting</A><BR>
<A HREF="running.html">Running</A><BR>
<A HREF="preferences.html">Configuring </A><BR>
<A HREF="fvwm.html">Fvwm2 stuff</A><BR>
<A HREF="writingclients.html">Writing a client</A><BR>
<A HREF="FAQ">FAQ</A><BR>
<A HREF="CHANGES">Recent changes</A><BR>
<A HREF="mailinglists.html">Mailing Lists</A><BR>
<H3>Clients:</H3>
<A HREF="clock.html">Clock</A><BR>
<A HREF="biff.html">Biff</A><BR>
<A HREF="menu.html">Menu</A><BR>
<A HREF="net.html">Net</A><BR>
<A HREF="jots.html">Jots</A><BR>
<A HREF="watch.html">Watch</A><BR>
<A HREF="load.html">Load</A><BR>
<A HREF="www.html">WWW</A><BR>
<A HREF="ical.html">Ical</A><BR>
<A HREF="webster.html">Webster</A><BR>
<A HREF="popimap.html">PopImap</A><BR>
<A HREF="windowlist.html">WindowList</A><BR>
<A HREF="pager.html">Pager</A><BR>
<A HREF="chooser.html">Chooser</A><BR>
<A HREF="tkman.html">TkMan</A>
</CENTER>
<BR> <BR>
Latest version: 8.0-final<BR>1 Oct, 1997
</BODY>
</HTML>

44
doc/watch.html Executable file
View File

@ -0,0 +1,44 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>TkGoodStuff Watch</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.26 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<H1>TkGoodStuff Watch</H1>
<H2>Description </H2>
<P>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
&quot;Unchanged&quot;/&quot;Changed&quot;, or both. A more detailed
display is available in multiple-file mode (below).</P>
<P>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 &quot;alert level&quot;, and the icon indicates
the maximum alert-level of all changed files. </P>
<P>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 &quot;tear off&quot; the
files menu to position elsewhere on the screen.</P>
<P> Button 2 instructs Watch to regard files as unchanged. </P>
<H2>Invocation</H2>
<P>All parameters are adjustable in the preferences manager. </P>
</BODY>
</HTML>

32
doc/webster.html Executable file
View File

@ -0,0 +1,32 @@
<HTML><HEAD>
<TITLE>TkGoodStuff Webster</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff Webster</H1>
<H2> Description </H2>
The Webster client directs your web browswer to retrieve
dictionary-definitions over the net.
<P> 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.
<P> 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.
<P> 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:
<PRE>
http://www2.hti.umich.edu/bin/oed/oed-idx.pl?q1=@word@
</PRE>
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:
<PRE>
http://www.m-w.com/cgi-bin/mweb?book=Dictionary&va=@word@
</PRE>

43
doc/windowlist.html Executable file
View File

@ -0,0 +1,43 @@
<HTML><HEAD>
<TITLE>TkGoodStuff WindowList Client</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff WindowList Client</H1>
<H2> Description </H2>
<P>This is for use with the <a href="http://www.hpc.uh.edu/fvwm/">fvwm2
window manager</a>, when tkgoodstuff is started as an fvwm2 module (see
the documentation for tkgoodstuff's <a href="fvwm.html">Fvwm2</a>
functionality for how to do this). WindowList produces a window
containing buttons for each open or iconified window on your display
(here's a <a
href="http://www-personal.umich.edu/~markcrim/tkgoodstuff/win95.jpg">
screenshot</a>).
<P> 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.
<P> 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:
<pre>Style "*" NoIcon</pre> 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).
<H2>Invocation</H2>
All parameters are adjustable in the preferences manager.

405
doc/writingclients.html Executable file
View File

@ -0,0 +1,405 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE> Writing TkGoodStuff Clients </TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.26 i586) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<H1>Writing TkGoodStuff Clients </H1>
<H2>Table of Contents (this document) </H2>
<UL>
<LI><A HREF="#general">General Information </A></LI>
<LI><A HREF="#interface">Basic Client Interface </A></LI>
<UL>
<LI><A HREF="#combowindow">TKGButton</A> </LI>
<LI><A HREF="#tkgmakebutton">TKGMakeButton</A> </LI>
<LI><A HREF="#labelbox">TKGLabelBox </A></LI>
<LI><A HREF="#tkggrid">TKGGrid</A> </LI>
<LI><A HREF="#popup">Adding to the Popup Menu </A></LI>
<LI><A HREF="#periodic">TKGPeriodic </A></LI>
</UL>
<LI><A HREF="#other">Other Utilities </A></LI>
<UL>
<LI><A HREF="#tkgdialog">TKGDialog</A></LI>
<LI><A HREF="#tkgdeclare">TKGDeclare </A></LI>
<LI><A HREF="#setimage">SetImage </A></LI>
<LI><A HREF="#debug">DEBUG </A></LI>
</UL>
</UL>
<P><A NAME="general"></A></P>
<H2>General Information</H2>
<P>Clients are housed in files with the extension &quot;.tcl&quot;. 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.
</P>
<P>There is a commented example of a very simple button-producing client
called <A HREF="Example">&quot;Example&quot;</A> in the file tcl/Example.tcl
in the tkgoodstuff library directory. You might start with it. </P>
<P>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.
<A NAME="interface"></A></P>
<H2>Basic Client Interface</H2>
<P>Let's assume you are writing a client named &quot;Foo&quot;. Your Foo.tcl
file is &quot;sourced&quot; by tkgoodstuff when it reads the configuration
file (or when Foo is added in the preferences manager). If you have defined
a procedure &quot;FooDoOnLoad&quot;, it is called then, as is &quot;FooDeclare&quot;,
if it exists (&quot;FooDeclare&quot; is called also when Foo is added in
the preferences manager). &quot;FooDeclare&quot; should contain all your
calls to TKGDeclare (for declaring preferences items). TKGDeclare is described
below. </P>
<P>When the panel is being drawn (or redrawn following, e.g., a screen-edge
move), the procedure &quot;FooCreateWindow&quot; is called if it exists.
Ordinarily &quot;FooCreateWindow&quot; 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 &quot;FooStart&quot;,
if it exists, will be called. During a screenedge move, the procedure &quot;FooSuspend&quot;
will be called, if it exists, the client window will be ungridded, and
then when the panel is redrawn &quot;FooCreateWindow&quot; and &quot;FooStart&quot;
will be called. <A NAME="combowindow"></A></P>
<H3>TKGButton</H3>
<P>A &quot;tkgbutton&quot; 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: </P>
<PRE>TKGButton name arguments
</PRE>
<P>The <B>name</B> is an arbitrary name for the window (containing only
characters suitable for variables). The other arguments are all optional
(most also take &quot;modified&quot; forms; see the &quot;-mode&quot; switch
for more about this): </P>
<LI><B>-pathname </B>pathname <BR>
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. </LI>
<LI><B>-image </B>tkimage <BR>
The value must be an already-created tk image. The button will display
the image. </LI>
<LI><B>-text </B>textstring <BR>
The button will display the text indicated. </LI>
<LI><B>-font </B>(standard font specifier) <BR>
The button will display text (if any) using this font. </LI>
<LI><B>-exec </B>command <BR>
The button, when pressed, will lauch the indicated unix command. Regular
Tcl substitution is performed on the command string at execution. </LI>
<LI><B>-command </B>command <BR>
The button, when pressed, will perform the indicated tcl command. Regular
Tcl substitution is performed on the command string at execution. </LI>
<LI><B>-menu </B>menu <BR>
The button will be a tkgmenubutton, and produce the indicated menu. No
&quot;exec&quot; or &quot;command&quot; will be performed. </LI>
<LI><B>-iconside </B>left, right, top, bottom, or background <BR>
This sets the side of the button taken by the icon, when your button has
both an icon and text (&quot;top&quot; by default). If &quot;background&quot;,
then the text is written over the icon. </LI>
<LI><B>-staydown</B> 1 or 0 <BR>
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.
</LI>
<LI><B>-usebutton2</B> 1 or 0 <BR>
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. </LI>
<LI><B>-windowname</B> name <BR>
This affects what happens when you press an already-depressed unix command
button <B>if</B> 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 &quot;TkMan&quot;,
netscape &quot;Netscape&quot; and so on). </LI>
<LI><B>-font</B> font <BR>
The font to use for text on the button </LI>
<LI><B>-ignore</B> 1 or 0 <BR>
If 1 (0 is the default), we will ignore the global iconsonly and labelsonly
variables. </LI>
<LI><B>-state </B>active or normal <BR>
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 &quot;mode&quot; 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. </LI>
<LI><B>-foreground</B> color <BR>
<B>-background</B> color <BR>
<B>-activeforeground</B> color <BR>
<B>-activebackground</B> color <BR>
These set the colors for the button. </LI>
<LI><B>-padding </B>(any number) <BR>
The number of pixels of empty space to put around icons and labels in buttons.
</LI>
<LI><B>-mode </B>mode <BR>
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 &quot;normal&quot;
mode. For instance, Biff defines &quot;nomail&quot; and &quot;newmail&quot;
modes, and Net defines &quot;netup&quot;, &quot;netdn&quot;, and &quot;netwt&quot;
modes. </LI>
<P>To set values for a mode, use modified switches like the following:
</P>
<PRE> TKGButton Talk -foreground(notalk) red \
-exec(notalk) {mesg y}
</PRE>
<P>(Unmodified switches set the values for the current mode.) The parameters
of the button are stored in a global array. If the <B>name</B> is &quot;BarBar&quot;,
the pathname of the created window will be stored in the global variable
<B>BarBar-params(window)</B>, the current mode in <B>BarBar-params(mode)</B>.
Mode-sensitive parameters are stored as follows: e.g., the text is stored
in <B>BarBar-params(text,normal)</B> (supposing the button is in the normal
mode, as it is by default). (In fact this is the &quot;textvariable&quot;
for the button; setting it changes the button text directly.) There are
no &quot;unmodified&quot; parameters for mode-sensitive parameters. For
instance <B>BarBar-params(text)</B> does not exist. </P>
<P>TKGButton is a wrapper around the widget commands &quot;tkgbutton&quot;
and &quot;tkgmenubutton&quot;(part of libtkg). <A NAME="tkgmakebutton"></A></P>
<H3>TKGMakeButton</H3>
<PRE>TKGMakeButton name . . .
</PRE>
<P>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 &quot;Foo&quot;, 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 &quot;-pathname&quot; switch to TKGMakeButton. <A NAME="labelbox"></A></P>
<H3>TKGLabelBox</H3>
<P>Creates a &quot;label box&quot; is a window with text on its face. The
arguments are as follows: </P>
<PRE>TKGLabelBox name [-label &quot;label text&quot;]
</PRE>
<P>(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.) </P>
<P>The <B>name</B> is an arbitrary name for the window (containing only
characters suitable for variables). If the <B>name</B> is &quot;BarBar&quot;,
the pathname of the created window will be stored in the global variable
<B>BarBar_window</B>. </P>
<P>The <B>text</B> is a text string that will be displayed in the window.
The window containing (just) this text has the pathname <B>BarBar_window.label.msg</B>.
The textvariable for the label is <B>BarBar-lbparams(text)</B> <A NAME="tkggrid"></A></P>
<H3>TKGGrid</H3>
<PRE>TKGGrid pathname
</PRE>
<P>Packs the indicated window into the current tkgoodstuff panel (at the
position appropriate to the current stacking context). <A NAME="popup"></A></P>
<H3>Adding to the Popup Menu</H3>
<P>Two commands are provided for adding to the popup menu: </P>
<H4>TKGPopupAddClient</H4>
<P>adds a cascade menu entry in the main popup menu. It is invoked as follows:
</P>
<PRE>TKGPopupAddClient clientname</PRE>
<P>Suppose your <B>clientname</B> is FooBar. Then, this command generates
a cascade menu entry labelled &quot;FOOBAR:&quot;, and a corresponding
(empty) menu with the pathname .tkgpopup.foobar, which is the menu to which
you should add items in your client code. </P>
<H4>TKGPopupAdd</H4>
<P>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 &quot;.menuname add&quot;
in a normal addition of an item to a menu.
<A NAME="periodic"></A></P>
<H3>TKGPeriodic</H3>
<P>You can schedule a Tcl command for periodic execution as follows: </P>
<PRE>TKGPeriodic name period offset command</PRE>
<UL>
<LI>The name is an arbitrary name. </LI>
<LI>The period is the interval (in seconds) between executions of the periodic
command. </LI>
<LI>The offset is the delay (in seconds) between invocation of the TKGPeriodic_command
and the first execution of this periodic command. </LI>
<LI>The command is the command to execute at theat interval after that
offset.</LI>
</UL>
<P>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).
</P>
<P>To cancel a scheduled periodic command, use: </P>
<PRE>TKGPeriodicCancel name</PRE>
<P>This will cancel any command that was scheduled by the same name with
TKGPeriodic. <A NAME="other"></A></P>
<H2>Other Utilities </H2>
<P><A NAME="tkgdialog"></A></P>
<H3>TKGDialog </H3>
<PRE>TKGDialog name [ -wmtitle string ] [ -title string ] \
[-image imagefilename] [-message string] [-text string] \
[-titlebg color] [-titlefg color] [-bitmapfg color] \
[-buttons buttonlist] [-nodismiss]</PRE>
<P>All the options in brackets are optional. This command pops up a dialog
box with pathname &quot;.<B>name</B>&quot;. The <B>-wmtitle</B> string
is what will be put in the window manager title bar. The <B>-title</B>
string is put in the dialog box title frame (up top, in a large font).
The icon from the file named by the <B>-imagefilename</B> identifier is
also put in the title frame. The <B>-message</B> string is put in a framed
message widget under the title frame, if any. The <B>-text</B> 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: <B>-titlebg</B> is the
background of the title frame; <B>-titlefg</B> is the foreground of the
title string; and <B>-bitmapfg</B> 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 &quot;.<B>name</B>.buttons.<B>buttonname</B>&quot;),
a string of text to put on the button, and the command that the button
will execute when pressed (usually this should include &quot;destroy .<B>name</B>&quot;).
Unless you include the argument &quot;<B>-nodismiss</B>&quot;, there will
also be a button labelled &quot;Dismiss&quot; 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 &quot;Dismiss&quot; button at the
right. <A NAME="tkgnotice"></A></P>
<H3>TKGNotice </H3>
<PRE>TKGNotice &quot;Notice text.&quot;</PRE>
<P>Posts a simple notice dialog with a dismiss button. <A NAME="tkgerror"></A></P>
<H3>TKGError </H3>
<PRE>TKGError &quot;Error text.&quot; ?exit?</PRE>
<P>Posts an error dialog with a dismiss button, a stack-trace button, and
a preferences manager button. If &quot;exit&quot; is present, tkgoodstuff
will be suspended and will exit when dismissed. <A NAME="colorconfig"></A></P>
<H3>ColorConfig </H3>
<PRE>ColorConfig pathname foregroundcolor backgroundcolor</PRE>
<P>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 &quot;-&quot; in place of the name of a color
leaves that feature unchanged. <A NAME="recursivebind"></A></P>
<H3>RecursiveBind </H3>
<PRE>RecursiveBind pathname sequence command</PRE>
<P>This command binds the sequence to the indicated command in the window
whose pathname you indicate as well as in all of its descendants. <A NAME="tkgdeclare"></A></P>
<H3>TKGDeclare </H3>
<PRE>TKGDeclare variable value [-typelist {type1 type2 ...}] \
[-vartype boolean/radio/optionMenu/text/entry] \
[-textsize WxH] \
[-radiolist {{&quot;Label 1&quot; value1} {&quot;Label 2&quot; value2} ...}\
[-optionlist {value1 value2 ...}]\
[-label &quot;Preferences Manager Label text&quot;] \
[-help &quot;Preferences Manager Help text&quot;]
</PRE>
<P>This command sets the indicated variable to <B>value</B> 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. <A NAME="setimage"></A></P>
<H3>SetImage </H3>
<PRE>SetImage name filname</PRE>
<P>This command creates an image named <B>name</B>, reading it from the
file <B>filename</B>, and returns the image type (e.g., &quot;bitmap&quot;,
&quot;photo&quot;). <A NAME="debug"></A></P>
<H3>DEBUG </H3>
<PRE>DEBUG string</PRE>
<P>This command writes the string to the internal log, and, if TKGLogging
is 1, also to the log file. </P>
</BODY>
</HTML>

57
doc/www.html Executable file
View File

@ -0,0 +1,57 @@
<HTML><HEAD>
<TITLE>TkGoodStuff WWW</TITLE>
</HEAD><BODY bgcolor="#FFFFFF" text="#000000" link="blue" vlink="purple" alink="red">
<H1>TkGoodStuff WWW</H1>
<b> 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.</b>
<H2> Description </H2>
The WWW client is a web browser launcher.
<P> 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).
<UL>
<LI><B>Single-browser mode:</b> 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. </LI>
<LI><B>Multi-browser mode:</b></LI> 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.) </li> </ul>
<p> 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.
<P> Thanks to Seth Golub for the idea of using the X selection in this
way.
<H2>Invocation</H2>
To include the WWW button in your panel, include in your Configuration:
<PRE>
Client WWW
</PRE>
All parameters are adjustable in the preferences manager.

14
fvwm-patch-2.0.45 Executable file
View File

@ -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();

32
icons/biffgreen-sm.xpm Executable file
View File

@ -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 "};

51
icons/biffgreen.xpm Executable file
View File

@ -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 "};

32
icons/biffnew-sm.xpm Executable file
View File

@ -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 "};

51
icons/biffnew.xpm Executable file
View File

@ -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 "};

30
icons/biffno-sm.xpm Executable file
View File

@ -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..+++ ",
" .++++++ ",
" +++.... "};

49
icons/biffno.xpm Executable file
View File

@ -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 ",
" ...@+++++++++. ",
" .@@@@+++++++. ",
" @@@@@++++###. ",
" @@@@@+######. ",
" @@@@@#######. ",
" @@@@@#######. "};

32
icons/biffred-sm.xpm Executable file
View File

@ -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 "};

51
icons/biffred.xpm Executable file
View File

@ -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 "};

32
icons/biffwhite-sm.xpm Executable file
View File

@ -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 "};

51
icons/biffwhite.xpm Executable file
View File

@ -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 "};

32
icons/biffyellow-sm.xpm Executable file
View File

@ -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 "};

51
icons/biffyellow.xpm Executable file
View File

@ -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 "};

393
icons/blue_marble.xpm Executable file

File diff suppressed because one or more lines are too long

29
icons/browser.xpm Executable file
View File

@ -0,0 +1,29 @@
/* XPM */
static char * browser_xpm[] = {
/* width height num_colors chars_per_pixel */
"16 16 7 1",
/* colors */
" s None c None",
". c #0000ff",
"X c #00aa00",
"o c #000055",
"O c black",
"+ c #7fff00",
"@ c #0000aa",
/* pixels */
" ",
" ",
" ... ",
" .XooooO ",
" ..XXXXXoO ",
" ...XX.Xoo ",
" ....XXXXooO ",
" ....+XX@@oo ",
" @...+X@@@oo ",
" ...@@X@@o ",
" @@@.@@@XX ",
" @@@@@@X ",
" @@o ",
" ",
" ",
" "};

13
icons/bullet.xpm Executable file
View File

@ -0,0 +1,13 @@
/* XPM */
static char * bullet_xpm[] = {
/* width height num_colors chars_per_pixel */
"5 5 2 1",
/* colors */
" s None c None",
". c #7fff00",
/* pixels */
" . ",
" ... ",
".....",
" ... ",
" . "};

17
icons/button.xpm Executable file
View File

@ -0,0 +1,17 @@
/* XPM */
static char * button_xpm[] = {
"11 11 3 1",
" s None c None",
". c #843c24",
"X c #cf9a30",
" ... ",
" ..XXX.. ",
" .XXXXXXX. ",
" .X..X..X. ",
".XX..X..XX.",
".XXXXXXXXX.",
".XX..X..XX.",
" .X..X..X. ",
" .XXXXXXX. ",
" ..XXX.. ",
" ... "};

32
icons/calc-sm.xpm Executable file
View File

@ -0,0 +1,32 @@
/* XPM */
static char * calc_sm_xpm[] = {
/* width height num_colors chars_per_pixel */
"24 18 8 1",
/* colors */
" s None c none",
". c #3c3c3c",
"X c white",
"o c black",
"O c #c0c0c0",
"+ c #ffffe3",
"@ c #808080",
"# c #7fff00",
/* pixels */
" ..... ",
" .XXXXXo ",
" .XXXXoXX ",
" O.XXXo . ",
" OO.....+++@@@ ",
" +..##.#.....+++@",
" O......#.#....OO",
" O++++...#..#..+OO",
" ++@@++++.....+OOO",
" ++++++@@++++++OOO@",
" ++@@++++++@@++OOO@ ",
" ++++++@@++++++OOO@ ",
" ++@@++++++@@++OOO ",
" O+++++@@+++++++OO ",
" OO+++++++@@+++OO ",
" @++O++++++++OO ",
" @++O++++O@ ",
" @O+OO@ "};

54
icons/calc.xpm Executable file
View File

@ -0,0 +1,54 @@
/* XPM */
static char * calc_xpm[] = {
/*tan*/
"49 38 10 1",
/**/
" s None c None",
". c #3c3c3c",
"X c white",
"o c black",
"O c #c0c0c0",
"+ c #ffffe3",
"@ c #808080",
"# c #7fff00",
"$ c #000055",
"% c #0000ff",
/**/
" .......... ",
" ...XXXXXXXXXo ",
" ..XXXXXXXXXXooo ",
" ..XXXXXXXXXooXXo ",
" .XXXXXXXXXoXX Xo ",
" O.XXXXXXXXo ..... ",
" O+.XXXXXXXo@ .. ",
" O+O....XXXXo+@@@@@@ ",
" OOOO...#.......++++++@@@@@ ",
" O+O....#..####......+++++++@@ ",
" O+O....#.....##..###.....+++++@@ ",
" OO....#....##.......#.......++OO@ ",
" OO...#..###......###........+OOO@ ",
" O++++......##......#........++OOO@ ",
" O++++++++......##..#.......++OOOO@ ",
" O++++++++++++++...##.......++OOOOO@ ",
" O++++++++++++++++.........++OOOOOO@ ",
" O+++++$$$+++++++++++++....+++OOOOOO@ ",
" O++++$+++$++++++++%%%++++++++OOOOO@ ",
" O++++$+++$@+++$$$++++%%%%++++OOOOOO@ ",
" O++++++$$$@+++$+++$++++++%%++OOOOOO@ ",
" O++++$$$++++++$+++$@++$$$++++OOOOOO@ ",
" O++++$+++$++++++$$$@++$+++$++OOOOOO@ ",
" O++++$+++$@+++$$$+++++$+++$@+OOOOO@@ ",
" O++++++$$$@+++$+++$+++++$$$@+OOOOO@ ",
" O++++$$$++++++$+++$@+++++++++OOOOO@ ",
" O++++$+++$++++++$$$@++$$$++++OOOOO@ ",
" O+++$+++$@+++$$$+++++$+++$+++OOOO@ ",
" O++++$$$@+++$+++$+++$@+++$++OOOO@ ",
" OOOO+++++++$+++$@++$@@@@$@+OOOO@ ",
" @+++OOO+++++$$$@++$++@@$@+OOOO@ ",
" @@@+++OOO+++++++$++++$@+OOOO@ ",
" @@@+++OOO++++@$$$$@+OOO@@ ",
" @@@+++OOO++@@@@+OOO@ ",
" @@@+++OOO+++OOO@ ",
" @@@@++OOOOO@ ",
" @@@+OO@ ",
" @@@ "};

17
icons/client.xpm Executable file
View File

@ -0,0 +1,17 @@
/* XPM */
static char * client_xpm[] = {
"11 11 3 1",
" s None c None",
". c #cf9a30",
"X c #843c24",
" ........ ",
" .........X",
"..XXXXXX..X",
"..X XXX",
"..X ",
"..X ",
"..X ",
"..X .. ",
"..........X",
" .........X",
" XXXXXXXXX"};

5
icons/copyright.info Executable file
View File

@ -0,0 +1,5 @@
Some of these images are my own (net), but most have been pulled from
archives where they are represented as being public domain. I hope
they in fact are! If any of these images is yours and you want credit
or want me to remove it, I would be happy to oblige.
markcrim@umich.edu

16
icons/dimple.xpm Executable file
View File

@ -0,0 +1,16 @@
/* XPM */
static char * dimple_xpm[] = {
"10 10 3 1",
" c none",
". c #747474",
"X c #b4b4b4",
" X . ",
"X X",
" ",
" .. ",
" . X ",
" . X ",
" XX ",
" ",
". .",
" X . "};

29
icons/editor.xpm Executable file
View File

@ -0,0 +1,29 @@
/* XPM */
static char * editor_xpm[] = {
/* width height num_colors chars_per_pixel */
"16 16 7 1",
/* colors */
" s None c None",
". c #f81440",
"X c #808080",
"o c #00aa00",
"O c #ffcf30",
"+ c #cf9a30",
"@ c #3c3c3c",
/* pixels */
" ",
" ",
" . ",
" X.. ",
" XoX. ",
" OOoo ",
" OOO+ ",
" OOOO ",
" OOO+ ",
" OOOO ",
" +OO+ ",
" ++OO ",
" @X+ ",
" ",
" ",
" "};

8
icons/error Executable file
View File

@ -0,0 +1,8 @@
#define xm_error_width 20
#define xm_error_height 20
static char xm_error_bits[] = {
0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x3a, 0x00, 0x58, 0x55, 0x00,
0x2c, 0xa0, 0x00, 0x56, 0x40, 0x01, 0xaa, 0x80, 0x02, 0x46, 0x81, 0x01,
0x8a, 0x82, 0x02, 0x06, 0x85, 0x01, 0x0a, 0x8a, 0x02, 0x06, 0x94, 0x01,
0x0a, 0xe8, 0x02, 0x14, 0x50, 0x01, 0x28, 0xb0, 0x00, 0xd0, 0x5f, 0x00,
0xa0, 0x2a, 0x00, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

17
icons/exec.xpm Executable file
View File

@ -0,0 +1,17 @@
/* XPM */
static char * exec_xpm[] = {
"11 11 3 1",
" c #cf9a30",
". c #843c24",
"X s None c None",
" .X .",
".. .X ...",
"XX. .X .XXX",
"XX. .XXX",
"XXX. .XXXX",
"XXXX .XXXX",
"XXX .XXX",
"XX .. .XX",
"XX .X .XX",
" .X .",
".....X....."};

27
icons/file Executable file
View File

@ -0,0 +1,27 @@
#define file_width 48
#define file_height 48
static unsigned char file_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00,
0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00,
0xf8, 0x03, 0xfc, 0xff, 0xff, 0x1f, 0x08, 0x04, 0x02, 0x00, 0x00, 0x10,
0x04, 0xf8, 0x01, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

21
icons/fileempty.xpm Executable file
View File

@ -0,0 +1,21 @@
/* XPM */
static char * fileempty_xpm[] = {
"18 14 4 1",
" s None c None",
". c #808080",
"X c #ffffe3",
"o c #000000",
" ..... ",
" .XXXX. ",
" .XXXXXX......... ",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".ooooooooooooooooo"};

21
icons/filefull.xpm Executable file
View File

@ -0,0 +1,21 @@
/* XPM */
static char * filefull_xpm[] = {
"18 14 4 1",
" s None c None",
". c #808080",
"X c #7fff00",
"o c #000000",
" ..... ",
" .XXXX. ",
" .XXXXXX......... ",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".XXXXXXXXXXXXXXXXo",
".ooooooooooooooooo"};

21
icons/filegone.xpm Executable file
View File

@ -0,0 +1,21 @@
/* XPM */
static char * filegone_xpm[] = {
"18 14 4 1",
" s None c None",
". c #808080",
"X c #ffffe3",
"o c #000000",
" .. . ",
" . X X. ",
" . X X X . . . . ",
". X X X X X X X X ",
" X X X X X X X X o",
". X X X X X X X X ",
" X X X X X X X X o",
". X X X X X X X X ",
" X X X X X X X X o",
". X X X X X X X X ",
" X X X X X X X X o",
". X X X X X X X X ",
" X X X X X X X X o",
". o o o o o o o o "};

25
icons/filer.xpm Executable file
View File

@ -0,0 +1,25 @@
/* XPM */
static char * filer_xpm[] = {
/* width height num_colors chars_per_pixel */
"16 16 3 1",
/* colors */
" s None c None",
". c #ffffe3",
"X c #3c3c3c",
/* pixels */
" ",
" ",
" ",
" ",
" ... ",
" .......... ",
" ..........X ",
" ..........X ",
" ..........X ",
" ..........X ",
" ..........X ",
" ..........X ",
" XXXXXXXXXX ",
" ",
" ",
" "};

27
icons/graphic.xpm Executable file
View File

@ -0,0 +1,27 @@
/* XPM */
static char * graphic_xpm[] = {
/* width height num_colors chars_per_pixel */
"16 16 5 1",
/* colors */
" s None c None",
". c #ce0000",
"X c #ffff00",
"o c #7fff00",
"O c #0000ff",
/* pixels */
" ",
" ",
" ... ",
" ...... ",
" ....XXX ",
" ...XXXXX ",
" ...XXXooo ",
" ...XXooooo ",
" ..XXXoooOO ",
" ..XXooOOOO ",
" ..XXoooOOO ",
" ..XXooOO ",
" ..XXooOO ",
" ",
" ",
" "};

29
icons/ical-sm.xpm Executable file
View File

@ -0,0 +1,29 @@
/* XPM */
static char * ical_sm_xpm[] = {
/* width height num_colors chars_per_pixel */
"24 18 5 1",
/* colors */
" s None c none",
". c black",
"X c #ffffe3",
"o c #3c3c3c",
"O c #f81440",
/* pixels */
" . ",
" . . . .X. . ",
"oooooooooooXooooooooooo ",
"oXXX.XXXXXXXXXX.XXXX.XX.",
"oXXXXXXXXXXXXXXXXXXXXXX.",
"oXXXXXXXXXXXXXXXXXXXXXX.",
"oXXX.XXXOXXXXX..XX.XXXX.",
"oXXX.XXOXXX.XXX.XXXXXXX.",
"oXXX.XXOXXXXXXXXXX.XXXX.",
"oXXXXXXXXXXXXXXXXXXXXXX.",
"oXXX.XXOOXX.XXXXXX.XXXX.",
"oXXXXXXXXXXXXXXXXXXXXXX.",
"oXXX.XXOXXX.XXX.XX.XXXX.",
"oXXXXXXXXXXXXXXXXXXXXXX.",
"oXXX.XXOXXX.XXX.XX.XXXX.",
"oXXXXXXXXXXXXXXXXXXXXXX.",
"oXXXXXXXXXXXXXXXXXXXXXX.",
" ......................."};

45
icons/ical.xpm Executable file
View File

@ -0,0 +1,45 @@
/* XPM */
static char * ical_xpm[] = {
/* width height num_colors chars_per_pixel */
"38 35 4 1",
/* colors */
" s None c None",
". c #000000",
"X c #ffffe3",
"o c #f81440",
/* pixels */
" ... ",
" . . . ..X.. . . . ",
" . . . . . . .XXX. . . . . . . ",
"................XXX................. ",
".X.XXX.XXX.XX.XXXXXXX.X.XXX.XXX.XXX.. ",
".X..XX..XX..X.........X..XX..XX..XX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXooooXX....XX....XX...XXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXX..XXXXXoXXXXX.XXX..XXXX.XXXXXX.X.",
".XXXX..XXXXoXXXXX..XXXX.XXXXX.XXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXX..XXXXoXXXXXXXXXXXXXXXX..XXXXX.X.",
".XXXX..XXXXooXXXX..XXX...XXXX.XXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXX..XXXXooXXXX.XXXXXXXXXX.XXXXXX.X.",
".XXXX..XXXXoXXXXX..XXX..XXXX.XXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXX..XXXXoXXXXX..XXXX.XXXX..XXXXX.X.",
".XXXX..XXXXXoXXXXX.XXX.XXXXXX.XXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXX..XXXXoXXXXX..XXX..XXXX.XXXXXX.X.",
".XXXX..XXXXoXXXXX.XXXXX.XXXX..XXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X.",
"....................................X.",
" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
" ...................................."};

26
icons/iconic.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * iconic_xpm[] = {
/*4o+@4o+@rkcrim/TKGsrc/icons/iconic.xpm*/
"16 16 3 1",
/*4¸ ¬
*/
" s None c None",
". c #843c24",
"X c #87ceff",
/*¼n+@¼n+@*/
" ",
" ",
" ",
" ",
" ",
" .... ",
" .XX. ",
" .XX. ",
" .... ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

39
icons/jots-sm.xpm Executable file
View File

@ -0,0 +1,39 @@
/* XPM */
static char * jots_sm_xpm[] = {
/* width height num_colors chars_per_pixel */
"24 24 9 1",
/* colors */
" c #808080",
". c #3c3c3c",
"X c #ffffe3",
"o c #c0c0c0",
"O c #f81440",
"+ c #00aa00",
"@ c #ffcf30",
"# c #cf9a30",
"$ s None c None",
/* pixels */
" ",
" ..................... ",
" ..................... ",
" ",
" XXXXXXXXXXXXXXXXXXXXX ",
" XXXXXXXXXXXXXoOoXXXXX ",
" XXXXXXXXXXXXX OOOXXXX ",
" XXXXXXXXXXXXo OOoXXX ",
" XXXXXXXXXXXo++ OOXXX ",
" XXXXXXXXXXo@@++ oXXXX ",
" XXXXXXXXo@@@@#ooXXXXX ",
" XXXXXXXX@@@@@ooXXXXXX ",
" XXXXXXXo@@@@#oXXXXXXX ",
" XXXXXXo@@@@#oXXXXXXXX ",
" XXXXXo@@@@#ooXXXXXXXX ",
" XXXo@@@@@#XXXXXXXXXXX ",
" XXX@@@@@#oXXXXXXXXXXX ",
" XXX #@@#ooooXXXXXXXXX ",
" XXX. ##ooooooXXXXXXXX ",
" XXX.. oooooooooXX ",
" XXXXXXXXXXXXXXXXX ... ",
" XXXXXXXXXXXXXXXXX .. $",
" XXXXXXXXXXXXXXXXX . $$",
" $$$"};

44
icons/jots.xpm Executable file
View File

@ -0,0 +1,44 @@
/* XPM */
static char * jots_xpm[] = {
/* width height num_colors chars_per_pixel */
"29 29 9 1",
/* colors */
" c #808080",
". c #3c3c3c",
"X c #ffffe3",
"o c #c0c0c0",
"O c #f81440",
"+ c #00aa00",
"@ c #cf9a30",
"# c #ffcf30",
"$ s None c None",
/* pixels */
" ",
" ......................... ",
" ......................... ",
" ",
" XXXXXXXXXXXXXXXXXXXXXXXXX ",
" XXXXXXXXXXXXXXXXXXXXXXXXX ",
" XXXXXXXXXXXXXXXXoOoXXXXXX ",
" XXXXXXXXXXXXXXXo OOOXXXXX ",
" XXXXXXXXXXXXXXo+ OOoXXXX ",
" XXXXXXXXXXXXXo ++ OOXXXX ",
" XXXXXXXXXXXXo@@+++ oXXXXX ",
" XXXXXXXXXXXo@@##+++XXXXXX ",
" XXXXXXXXXXo@@@##@ooXXXXXX ",
" XXXXXXXXXo@@###@ooXXXXXXX ",
" XXXXXXXXo@@@##@ooXXXXXXXX ",
" XXXXXXXo@@###@ooXXXXXXXXX ",
" XXXXXXo@@@##@ooXXXXXXXXXX ",
" XXXXXo@@###@ooXXXXXXXXXXX ",
" XXXXo@@@##@oXXXXXXXXXXXXX ",
" XXXo@@###@ooXXXXXXXXXXXXX ",
" XXX @#@@oooooXXXXXXXXXXX ",
" XXX . @@@oooooooXXXXXXXXX ",
" XXX .. @ooooooooooXX ",
" XXX ooooooooooooX .. ",
" XXXXXXXXXXXXXXXXXXXX ... $",
" XXXXXXXXXXXXXXXXXXXX ... $$",
" XXXXXXXXXXXXXXXXXXXX .. $$$",
" $$$$",
" $$$$$"};

17
icons/labelbox.xpm Executable file
View File

@ -0,0 +1,17 @@
/* XPM */
static char * labelbox_xpm[] = {
"11 11 3 1",
" s None c None",
". c white",
"X c black",
" ",
"...... ",
".X.........",
".X....XXX..",
".X....X.X..",
".X....XX...",
".XXX..X.X..",
"......XXX..",
" ......",
" ",
" "};

27
icons/letters Executable file
View File

@ -0,0 +1,27 @@
#define letters_width 48
#define letters_height 48
static char letters_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20,
0x00, 0xfa, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a,
0x00, 0x3a, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2e,
0xe0, 0xff, 0xff, 0xff, 0xff, 0x21, 0x20, 0x00, 0x00, 0x00, 0x00, 0x21,
0xa0, 0x03, 0x00, 0x00, 0x70, 0x21, 0x20, 0x00, 0x00, 0x00, 0x50, 0x21,
0xa0, 0x1f, 0x00, 0x00, 0x50, 0x21, 0x20, 0x00, 0x00, 0x00, 0x70, 0x21,
0xfe, 0xff, 0xff, 0xff, 0x0f, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x21,
0xfa, 0x01, 0x00, 0x80, 0x0b, 0x21, 0x02, 0x00, 0x00, 0x80, 0x0a, 0x21,
0xba, 0x01, 0x00, 0x80, 0x0a, 0x21, 0x02, 0x00, 0x00, 0x80, 0x0b, 0x21,
0x3a, 0x00, 0x00, 0x00, 0x08, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x21,
0x02, 0xc0, 0xfb, 0x03, 0x08, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x3f,
0x02, 0xc0, 0xbd, 0x0f, 0x08, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01,
0x02, 0xc0, 0x7f, 0x7b, 0x08, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01,
0x02, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00,
0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00,
0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00,
0xfe, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

389
icons/lightblue_marble.xpm Executable file

File diff suppressed because one or more lines are too long

25
icons/mailer.xpm Executable file
View File

@ -0,0 +1,25 @@
/* XPM */
static char * mailer_xpm[] = {
/* width height num_colors chars_per_pixel */
"16 16 3 1",
/* colors */
" s None c None",
". c #c0c0c0",
"X c #ffffe3",
/* pixels */
" ",
" ",
" ",
" ",
" .XXXXXXXXX. ",
" X.XXXXXXX.X ",
" XX.XXXXX.XX ",
" XXX.XXX.XXX ",
" XXXX...XXXX ",
" XXXXXXXXXXX ",
" XXXXXXXXXXX ",
" ",
" ",
" ",
" ",
" "};

27
icons/manreader.xpm Executable file
View File

@ -0,0 +1,27 @@
/* XPM */
static char * manreader_xpm[] = {
/* width height num_colors chars_per_pixel */
"16 16 5 1",
/* colors */
" s None c None",
". c #3c3c3c",
"X c white",
"o c #cf9a30",
"O c #808080",
/* pixels */
" ",
" ",
" ... ",
" .X . ",
" .XX . ",
" .XX . ",
" .X . ",
" . . ",
" . .oO ",
" ......oO ",
" O.oO ",
" O.oO ",
" O.o ",
" ",
" ",
" "};

17
icons/menu.xpm Executable file
View File

@ -0,0 +1,17 @@
/* XPM */
static char * menu_xpm[] = {
"11 11 3 1",
" c #cf9a30",
". c #843c24",
"X s None c None",
" .XXX .",
". .X ..",
"X .X",
"X . . .X",
"X . . .X",
"X . . .X",
"X .... .X",
"X .XXX .X",
"X .XXX .X",
" .X .",
".....X....."};

26
icons/netdn-sm.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * netdn_sm_xpm[] = {
/* width height num_colors chars_per_pixel */
"24 18 2 1",
/* colors */
" s None c None",
". c black",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ....... . . . . ",
" . .......... . ",
" . . . . ....... ",
" ...... . . . . ",
" . ............ . ",
" . . . . .......",
"............ . . . ",
" . . . ............",
"...... . . . . ",
". ........... . .",
". . . . ...... ."};

44
icons/netdn.xpm Executable file
View File

@ -0,0 +1,44 @@
/* XPM */
static char * netdn_xpm[] = {
"46 38 3 1",
" s None c None",
". c #000000",
"X c #808080",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" . . .",
" . X. . X. . .",
" X X. . X. . . .",
" .X . ...............................",
" ............XX.XX . . X. X.",
" X. X. X. .X X. . ",
" X. X. X. . X. . ",
" .. X. X. X. . . X. ",
" ....X X. X. X. X. . X. ",
" ........X X. . X. . ",
" X. X................................ ",
" X. . X. . . . ",
"..... .X . X. XX.X .X ",
" .X. .X X. X. X.. . ",
" . X. .X X. X. X. .X ",
" . .X. X. . X. X. ",
".X ........X .X X. X........X ",
". . X.................. . .. ",
". . X. . . . ",
". . . . . . "};

36
icons/netscape-sm.xpm Executable file
View File

@ -0,0 +1,36 @@
/* XPM */
static char * netscape_sm_xpm[] = {
/* width height num_colors chars_per_pixel */
"24 24 6 1",
/* colors */
" c black",
". c #0000aa",
"X c #c0c0c0",
"o c white",
"O c #808080",
"+ c #0000ff",
/* pixels */
" ",
" ",
" .. .. .. .. .. .. .. .",
" .... . . .... . . .... ",
" . . . . . . .",
" .... . . .... . . .... ",
" .....Xoo.......oo......",
" . ...Ooo.. .. OX... ..",
" .... .Xooo .. .OX.. .. ",
" ......OXOoo....OX......",
" ......XX.XoO...OX......",
" ......OX..XoO..OX......",
" ......XX...oXX.OX......",
" ..+...OX....oX.OX.+....",
" .+.+.+OX..+.+XXOX..+.+.",
" ....+OXoooooooXXXOOO..+",
" +OXoXOXX OXXXXOO",
" XX Oo OX",
" ",
" ",
" ",
" ",
" ",
" "};

45
icons/netscape.xpm Executable file
View File

@ -0,0 +1,45 @@
/* XPM */
static char *nscape02[] = {
/* width height num_colors chars_per_pixel */
" 32 32 6 1",
/* colors */
". c #000000",
"# c #0000aa",
"a c #c0c0c0",
"b c #808080",
"c c #0000ff",
"d c #ffffff",
/* pixels */
"................................",
"................................",
"..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.",
"................................",
".##.##.##.##.##.##.##.##.##.##..",
"...#..#..#..#..#..#..#..#..#..#.",
".##.##.##.##.##.##.##.##.##.##..",
".#.#.#.aaaa#.#.#.#.#baaaab.#.#..",
".##.###.#ddd###.###.##dd###.###.",
"..##.###.bddd###.###.#ab.###.##.",
".#####.##bdddd.###.###ab##.###..",
".##.#####babddb#######ab#######.",
".########ba#bddb######ab#######.",
".########ba##addb#####ab#######.",
".########ba###addb####ab#######.",
".########ba####ddd####ab#######.",
".########ba#####ddd###ab#######.",
".########ba######ddd##ab#######.",
".#c##c##cbac##c##cddd#ab##c##c#.",
".c##c##c#ba##c##c#bddaab#c##c##.",
".##c##cbbadaddddddddaaaabbbc##c.",
".cbbadaabaa...........bbaaaaabb.",
".aab.....bd..................ba.",
".......bdddda...................",
"................................",
"................................",
"................................",
"................................",
"................................",
"................................",
"................................",
"................................"
};

28
icons/netup-sm.xpm Executable file
View File

@ -0,0 +1,28 @@
/* XPM */
static char * netup_sm_xpm[] = {
/* width height num_colors chars_per_pixel */
"24 18 4 1",
/* colors */
" s None c none",
". c #808080",
"X c black",
"o c #7fff00",
/* pixels */
" ",
" .X ",
" .ooX ",
" .ooooX ",
" .ooooooX ",
" .ooooooooX ",
" .oooooooooooX ",
" .o..ooooooXooX ",
" .. .oooooX X. ",
" .oooooX ",
" .oooooX ",
" XX.XoXoXXXX ",
" X .XoXooX X ",
" X X XooXXXXX XX ",
" X X.ooXooX X XX ",
" XX X X XXXXooX XX XXX",
"XX X .ooXooXX X X ",
" X .ooXooX X "};

46
icons/netup.xpm Executable file
View File

@ -0,0 +1,46 @@
/* XPM */
static char * netup_xpm[] = {
"46 38 5 1",
" s None c None",
". c #808080",
"X c #000000",
"o c #7fff00",
"O c #808080",
" ",
" . ",
" ..X ",
" ..oXO ",
" ..oooXO ",
" .oooooXO ",
" .oooooooX ",
" ..oooooooXO ",
" ..oooooooooXO ",
" ..oooooooooooXO ",
" ...oooooooooooooXXO ",
" ...oooooooooooooooooXO ",
" ..oooooooooooooooooooooXO ",
" .oooooooooooooooooooooooX ",
" ..ooo...oooooooooooXXXoooXO ",
" ..o... ..oooooooooXX OXXoXO ",
" .... ..oooooooooXX OXXO ",
" ..oooooooooXX ",
" ..oooooooooXX ",
" ..oooooooooXX ",
" ..oooooooooXX ",
" OXXXXXXX..oooooooooXX ",
" XXO X ..oooooooooXXXXXXXXXX ",
" OX X OX ..oooooooooXX XO OXXO ",
" OXXXXXX X ..oooooooooXX XO OX XXO ",
" OX OX OX ..oooooooooXXO XOX XXO ",
" X OXXO X ..oooooooooXXXO XXX X ",
" XO OX XXX ..oooooooooXX XXXO OXX OXO",
" XXX X XXXXXXXXXXXXXXXXXXXXXX OXO X X",
" O OXXX X ..XooXoooooXX XO XXXX X",
" X OX XO .XoooXoooooXX XO OX X",
"OX XXO X ..XoooXoooooXX XO OXX X",
"X X XO X ..XoooXoooooXX X OXX OX X",
"X X XO X ..XXoooXooooooXX OXX OX ",
"X OX XXXXX ..XooooXoooooooXXXXXXXX OX",
"XOX X XXXXXXXXXXXXXOOooXXX X X",
"XX OX ..XoooooXooXXXXXXX X X",
"XO X ..oXoooooXooooooooXX X X"};

28
icons/netwt-sm.xpm Executable file
View File

@ -0,0 +1,28 @@
/* XPM */
static char * netwt_sm_xpm[] = {
/* width height num_colors chars_per_pixel */
"24 18 4 1",
/* colors */
" s None c none",
". c #7fff00",
"X c #808080",
"o c black",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .. ",
" .XX. ",
" oooXX..XXooo ",
" o ...... ooo ",
"ooooo ........ o ooo",
"o o ..XXXXXX.. o o",
" o o XX......XXo o ",
" o oo ......X oo o ",
"ooooo ......X oooo"};

45
icons/netwt.xpm Executable file
View File

@ -0,0 +1,45 @@
/* XPM */
static char * netwt_xpm[] = {
"46 38 4 1",
" s None c None",
". c #808080",
"X c #000000",
"o c #7fff00",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .XXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXX..X... X XXX. ",
" .XXX .X X .X X X X. X X. ",
" .XX .X .X .X X X X X .XXXXX. ",
" .XX .XX .X X X X X. .X X. ",
" X X.X .X .X oXXXX X XXX. X ",
".X. .XX. XXXX XoooXooX XX. X. .X ",
"X X .X .XXXXXXXXXXXXXXXXXXXXX X XX. ",
"X.XX.X X .XooooXooX X X.XX X ",
"X .X X. XoooooXoooX X. X. X ",
"X .X.X X. XoooooXoooX X .X. X.",
"X X .XX X. XXoooooXoooX X X X X",
" X. .X. XXooooooXoooX. X .X .X X",
"X. XXXXXXXXoooooooXooooXoooXXXXXX .X X",
"X X oXXXooXXXXXXXXXXXXXX X .XX",
"X X ooXXXXXXXooXoooooXooo X. .X",
"X X oooXXooooooooXoooooXoooo X .X"};

31
icons/news-sm.xpm Executable file
View File

@ -0,0 +1,31 @@
/* XPM */
static char * news_sm_xpm[] = {
/* width height num_colors chars_per_pixel */
"24 21 4 1",
/* colors */
" s None c none",
". c #808080",
"X c white",
"o c black",
/* pixels */
" ",
" .. ",
" ..X. ",
" .XoXX... ",
" .XoXoXXX.. ",
" .XoXoXoXoXX.. ",
" .X..XXoXoXoX..... ",
" ..XXXoXXoXoXXoXoX.. ",
" .X.o.XXo.XXoXoXoXoXX.",
" .XoXXXoXXX.X...XooXX.o",
" ..XXooXX.o.X.....XXXo..",
" .Xo.XX..XX........Xo..o",
" ...X.o.XoX.......Xo...o",
" ...oXXo.XX......Xo...o ",
" .....X.oXX....Xo...o ",
" ......X..XXXo...o ",
" ...X.X.oXo....o ",
" ....XXX....o ",
" ........o ",
" .....o ",
" ..oo "};

39
icons/news.xpm Executable file
View File

@ -0,0 +1,39 @@
/* XPM */
static char *newspap[] = {
/* width height num_colors chars_per_pixel */
" 34 28 4 1",
/* colors */
". c #000000",
"# c none",
"a c #808080",
"b c #ffffff",
/* pixels */
"##################################",
"#############...##################",
"############.bbb..################",
"###########.bb.bbb..##############",
"##########.bb..b.bbb..############",
"#########.bb.b..bb.abb..##########",
"########.bb.bb.bb.ba.bbb..########",
"#######.b#bbb.bb.#.bb.bbbb..######",
"######.bba.abbb.abbb.bababbb..####",
"#####.b#bbba.#bb#.b.baab.b.abb..##",
"####.bba.abbb#.abbb...b.b.ba.bbb.#",
"###.b#bbba.#bbba.abbb..bbb.bbbb.##",
"##.bba.abbb#.abbb#b.bbb.ab.bbb.#.#",
"#.a#bbba.#bbba.abb.b..bba.bbb.#.##",
"#.ba.abbb#.abbb#b.#bbb..bbbb.#.#.#",
"#.bbba.#bbba.abb.####bbb.bb.#.#.##",
"#.#.abb#.abbb#b.aaa####.bb.#.#.#.#",
"#.a##.abba.abbb..aaaa#.bb.#.#.#.##",
"##..a###abba##bbb..aa.bb.#.#.#.###",
"####..a##.abb#.abbb..bb.#.#.#.####",
"######..a##.abba.abbbb.#.#.#.#####",
"########..a#b#abba.bb.#.#.#.######",
"##########..a#a.abbb.#.#.#.#######",
"############..a##.b.#.#.#.########",
"##############..a##.#..#.#########",
"################..a.a##.##########",
"##################.....###########",
"##################################"
};

Some files were not shown because too many files have changed in this diff Show More