xdaliclock - melting digital clock
program displays a digital clock; when a digit changes, it
``melts'' into its new shape.
This program was inspired by the Alto and Macintosh programs of the same name,
written by Steve Capps in 1983 or 1984.
accepts all of the standard toolkit options, and also accepts
the following options:
- Print a brief summary of the allowed options on the standard error
- Use a twelve hour clock.
- Use a twenty-four hour clock.
- Update every second.
- Update once per minute; don't display seconds at all.
- Do color-cycling.
- Don't do color-cycling.
- -font fontname
- Specifies the X font to use; xdaliclock can correctly animate any
font that contains all the digits plus colon and slash, and in which the
letters aren't excessively curly.
The xdaliclock program also contains four builtin bitmapped fonts,
which are larger and more attractive than the standard X fonts. One of
these fonts will be used if the -font option is given one of the
fontnames BUILTIN0, BUILTIN1, BUILTIN2, or
- This is the same as specifying -font BUILTIN0.
- This is the same as specifying -font BUILTIN1.
- -builtin2 or -builtin
- This is the same as specifying -font BUILTIN2.
- This is the same as specifying -font BUILTIN3.
- Make the window take up the whole screen. When -fullscreen is
specified, the displayed time will wander around a little, to prevent any
pixels from being on continuously and causing phosphor burn-in.
- Display the clock on the root window instead of in its own window. This
makes the digits wander around too.
- -window-id window
- Render the clock on a window created by some other program.
- -visual visual
- Specify which visual to use. Legal values are:
- Use the screen's default visual (the visual of the root window.) This is
- Use the visual which supports the most writable color cells.
- One of StaticGray, StaticColor, TrueColor,
GrayScale, PseudoColor, or DirectColor. Selects the
deepest visual of the given class.
- A number (decimal or hex) is interpreted as a visual id number, as
reported by the xdpyinfo(1) program; in this way you can select a
shallower visual if desired.
If you don't have a 24-bit system, using a visual other
than the default one may cause colormap flashing.
- Causes the background of the window to be transparent, if possible.
If the server supports overlay planes, then they will be used (this is the
case on SGIs, and on certain HP, DEC, and IBM systems.)
If overlay planes are not available, but the server supports the Shape
extension, then that will be used instead. However, the Shape extension is
very inefficient: it will cause your X server to use up a lot of cycles.
Also, if the Shape extension is used, you will probably need to configure
your window manager to not put a titlebar on the XDaliClock window. (This
is the case at least with twm, tvtwm, and mwm.) If
you don't do this, then the window will flicker constantly, as the window
manager tries to add and remove the titlebar ten times each second.
None of these problems occur if overlay planes are used (or if the
-transparent option is not requested.)
- Don't make the window's background be transparent. This is the
- -memory low
- Use high-bandwidth, low-memory mode. If you have a very fast connection
between the machine this program is running on and the X server it is
displaying on, then xdaliclock can work correctly by simply making
the drawing requests it needs when it needs them. This is the
elegant method. However, the amount of data necessary to
animate the display ends up being a bit over 10 kilobytes worth of X
Protocol per second. On a fast machine with a local display, or over a
fast network, that's almost negligible, but (for example) an NCD X
Terminal at 38.4 kbps can't keep up. That is the reason for:
- -memory medium
- Use high-memory, low-bandwidth mode. In this mode, xdaliclock
precomputes most of the frames that it will ever need. This is the
sleazy copout method. The bandwidth requirements are drastically
reduced, because instead of telling the server what bits to draw where, it
merely tells it what pixmaps to copy into the window. Aside from the fact
that I consider this to be cheating, the only downside of this
method is that those pixmaps (about 170 of them, each the size of one
character) are consuming server-memory. This probably isn't a very big
deal, unless you're using an exceptionally large font.
- -memory high
- With memory set to high, the cache is twice as large (the
n -> n+2 transitions are cached as well as the n ->
n+1 ones). Even with memory set to medium, this program can
seem sluggish when using a large font over a very slow connection to the
- -countdown date
- Instead of displaying the current time, display a countdown to the
specified date (if the date has already passed, count up from it.) The
date can take two forms: either a time_t (an integer, the number of
seconds past "Jan 1 00:00:00 GMT 1970"); or, a string of the
form "Mmm DD HH:MM:SS YYYY", for example, "Jan 1 00:00:00
2000". This string is interpreted in the local time zone.
To count up from the current time, do this:
xdaliclock -countdown "`date '+%b %d %T %Y'`"
The following standard X Toolkit command line arguments are commonly used with
- -display host:dpy
- This option specifies the X server to contact.
- -geometry geometry
- This option specifies the preferred size and position of the clock
- -bg color
- This option specifies the color to use for the background of the window.
The default is ``white.''
- -fg color
- This option specifies the color to use for the foreground of the window.
The default is ``black.''
- -bd color
- This option specifies the color to use for the border of the window. The
default is the same as the foreground color.
- This option indicates that reverse video should be simulated by swapping
the foreground and background colors.
- -bw number
- This option specifies the width in pixels of the border surrounding the
- -xrm resourcestring
- This option specifies a resource string to be used.
Clicking and holding any mouse button in the xdaliclock
window will cause
it to display the date while the button is held.
Typing ``space'' at the xdaliclock
window will toggle between a twelve
hour and twenty-four hour display.
Typing ``q'' or ``^C'' at the window quits.
If the xdaliclock
window is iconified or otherwise unmapped, it will go
to sleep until it is mapped again.
understands all of the core resource names and classes as well
- mode (class Mode)
- Whether to display 12-hour or 24-hour time. If 12, this is the same
as the -12 command line argument; if 24, this is the same as
- datemode (class DateMode)
- Specifies how the date should be printed when a mouse button is held down.
This may be one of the strings mm/dd/yy, dd/mm/yy,
yy/mm/dd, yy/dd/mm, mm/yy/dd, or dd/yy/mm. The
default is mm/dd/yy. If seconds are not being displayed, then only
the first four digits will ever be displayed ( mm/dd instead of
mm/dd/yy, for example.)
- seconds (class Seconds)
- Whether to display seconds. If true, this is the same as the
-seconds command line argument; if false, this is the same as
- cycle (class Cycle)
- Whether to do color cycling. If true, this is the same as the
-cycle command line argument; if false, this is the same as
- font (class Font)
- The same as the -font command line option: the font to melt. If
this is one of the strings BUILTIN0, BUILTIN1,
BUILTIN2, or BUILTIN3, then one of the large builtin fonts
will be used. Otherwise, this must be the name of a valid X font.
- fullScreen (class FullScreen)
- The same as the -fullscreen command-line option.
- root (class Root)
- The same as the -root command-line option.
- visualID (class VisualID)
- The same as the -visual command-line option.
- transparent (class Transparent)
- Whether to make the window's background be transparent, if possible. If
true, this is the same as the -transparent command line argument;
if false, this is the same as -nontransparent.
- memory (class Memory)
- This must be high, medium, or low, the same as the
-memory command-line option.
- countdown (class Countdown)
- Same as the -countdown command-line option.
- to get the default host and display number.
- to get the name of a resource file that overrides the global resources
stored in the RESOURCE_MANAGER property.
- to get the current time zone. If you want to force the clock to display
some other time zone, set this variable before starting it. For example:
sh: TZ=GMT0 xdaliclock
csh: ( setenv TZ PST8PDT ; xdaliclock )
You may notice that the format of the TZ variable (which is used by the C
library ctime(3) and localtime(3) routines) is not actually
documented anywhere. The fourth character (the digit) is the only thing
that really matters: it is the offset in hours from GMT. The first three
characters are ignored. The last three characters are used to flag
daylight savings time: their presence effectively adds 1 to the zone
offset. (I am not making this up...)
Other system load will sometimes cause the second-display to increment by more
than one second at a time, in order to remain synchronized to the current
option is disgusting and shouldn't be necessary, but I'm not
clever enough to eliminate it. It has been said that hacking graphics in X is
like finding sqrt(pi)
with roman numerals.
When using a small font (less than 48x56 or so) it's possible that shipping a
bitmap to the server would be more efficient than sending a DrawSegments
request (since the endpoints are specified using 16 bits each, when all that
we really need is 6 or 7 bits.)
Support for the Shared Memory Extension would be a good thing.
It should display the day of the week somewhere.
The color cycling should be less predictable; it should vary saturation and
intensity as well, and should be more careful that foreground and background
The correct default datemode should be extracted from the current locale.
Should have a -analog
mode (maybe someday...)
The latest version can always be found at http://www.jwz.org/xdaliclock/
There is a version of this program for PalmOS available there as well.
Copyright © 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2002 by
Jamie Zawinski. Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and that both
that copyright notice and this permission notice appear in supporting
documentation. No representations are made about the suitability of this
software for any purpose. It is provided "as is" without express or
Jamie Zawinski <email@example.com>, 18-sep-91.
Please let me know if you find any bugs or make any improvements.
Thanks to Ephraim Vishniac <firstname.lastname@example.org> for explaining the format
of the bitmap resources in the Macintosh version of this, so that I could
snarf them for the -builtin3
And thanks to Steve Capps for the really great idea.