Newsgroups: comp.lang.lisp.x
Path: cantaloupe.srv.cs.cmu.edu!das-news2.harvard.edu!news2.near.net!howland.reston.ans.net!swrinde!elroy.jpl.nasa.gov!decwrl!netcomsv!netcom.com!mayer
From: mayer@netcom.com (Niels P. Mayer)
Subject: Re: Looking for xlisp object library
Message-ID: <mayerD1B5E7.17K@netcom.com>
Organization: NETCOM On-line Communication Services (408 261-4700 guest)
References: <D16E3r.1q4@dcc.uchile.cl>
Date: Sat, 24 Dec 1994 09:08:31 GMT
Lines: 826

In article <D16E3r.1q4@dcc.uchile.cl>, chsantia@cec.uchile.cl (SANTIAGO CHRISTIAN) writes:
> Is there a Xlisp Object Oriented library ? 
> or a repository of Xlisp Object Oriented code ?
> Thanks in advance.

Take a look at the WINTERP 2.0 distribution. This contains numerous
examples of XLISP object code. WINTERP 2.0 is a superset of XLISP for Unix
and X/Motif which allows you to program object oriented user interfaces,
graphics, and animation at a high-level, using the XLISP object system.

For more information on WINTERP, see the WWW home page 
	http://www.eit.com/software/winterp/winterp.html
A summary of various WINTERP applications is available at
	http://www.eit.com/software/winterp/examples/INDEX.html
WINTERP 2.0 is available via anonymous ftp
	ftp://ftp.eit.com/winterp/winterp-2.03.tar.gz

		========================================

For those without WWW access, the following summarizes some of the example
programs and object libraries available with WINTERP:

		========================================

WINTERP 2.0 example programs

	o Command.lsp
	  Demo of XM_COMMAND_WIDGET_CLASS
	o FileSB.lsp
	  Demo of XM_FILE_SELECTION_BOX_WIDGET_CLASS
	o Form1.lsp
	  Form widget layout -- same as formtest.c on p 88 of Doug Young's
	  Motif book.
	o Form2.lsp
	  Form widget layout -- similar to formtest.c on p 91-92 of Doug
	  Young's Motif book.
	o Form3.lsp
	  Example options panel for Bob Leichner's audio controller...
	o List.lsp
	  Demo of XM_LIST_WIDGET_CLASS including methods and callbacks.
	o List1.lsp
	  Demo of accessing/using Scrolled XmList widget's Scrolled Window
	  callbacks.  This was used to prototype an incremental list
	  browser that would only read/generate data (object lists) when
	  the XmList was scrolled to the first or last list item.  this is
	  useful for accessing persistent data that is potentially
	  unbounded in size...  This demo, however, is boring...
	o List2.lsp
	  Test of XmList using multiple font-lists/character-sets this
	  assumes your system has the following fonts:
	  -*-courier-medium-r-normal-*-12-*-*-*-m-*-iso8859-1
	  -*-courier-bold-r-normal-*-12-*-*-*-m-*-iso8859-1
	o List3.lsp
	  Demo of XmList using multiple font-lists and multi-line list
	  entries.  I think multi-line list entries only work as of Motif
	  1.2.  This assumes your system has the following fonts
	  -*-courier-medium-r-normal-*-12-*-*-*-m-*-iso8859-1
	  -*-courier-bold-r-normal-*-12-*-*-*-m-*-iso8859-1
	o RowColumn.lsp
	  Some examples of XmCreateSimpleRadioBox(),
	  XmCreateSimpleCheckBox(), and XmCreateSimpleOptionMenu().  Note
	  that in Motif 1.1, XmCreateSimpleOptionMenu() invokes window
	  manager "close" bug.  See ./../doc/BUGS for details.
	o SHELL.lsp
	  tests out the following classes and methods on those classes
	  OVERRIDE_SHELL_WIDGET_CLASS, TRANSIENT_SHELL_WIDGET_CLASS,
	  TOP_LEVEL_SHELL_WIDGET_CLASS, APPLICATION_SHELL_WIDGET_CLASS,
	  TOP_LEVEL_POPUP_SHELL_WIDGET_CLASS,
	  APPLICATION_POPUP_SHELL_WIDGET_CLASS,
	  OVERRIDE_POPUP_SHELL_WIDGET_CLASS,
	  TRANSIENT_POPUP_SHELL_WIDGET_CLASS,
	  XM_DIALOG_POPUP_SHELL_WIDGET_CLASS.
	o Scale.lsp
	  shows use of XM_SCALE_WIDGET_CLASS.
	o SelectioB.lsp
	  tests XM_SELECTION_BOX_WIDGET_CLASS methods and callbacks.
	o (screen
	  snap) Table.lsp
	  demo of TABLE_WIDGET_CLASS
	o Text.lsp
	  Tests XM_TEXT_WIDGET_CLASS methods and callbacks.  Also
	  demonstrates use of :CALL_ACTION_PROC to invoke a widget action
	  procedure programmatically.
	o accel.lsp
	  Example of accelerator usage.  Load this file, and type letters
	  [a-z] into any pushbutton widget.  each pushbutton widget has a
	  single accelerator, one of key [a-z], and accelerators for all
	  other pushbuttons get installed on each pushbutton...  THe
	  accelerator arms the pushbutton, and the pushbutton's arm
	  callback enters the typed character into the text widget.  Thus,
	  this is a highly rube-goldbergian means of echoing characters
	  typed into the text widget...  (Note that focus must be on a
	  pushbutton or the textwdget.)
	o barchart.lsp
	  A 256 elt barchart which meters the number of elements/hashbucket
	  within WINTERP's *saved_objs* hashtable.  This measurement
	  demonstrates the heisenberg uncertainty principle, :-) since
	  repeated re-evaluation of this form will show the growth of each
	  list-hashbucket within the hashtable *saved_objs*.  The barchart
	  element in this app is a gadget, so these show up on the graph in
	  subsequent invocations of this app.  NB: *saved_objs* is a
	  globally accessible storage area for all objects in the outside
	  world that WINTERP must interface with -- in particular, WIDGETS,
	  CALLBACKOBJs, TIMEOUTOBJs, EVENTHANDLEROBJs INPUTCBOBJs, etc.
	o bigoptmenu.lsp
	  Example code to create an option menu with lots of items on it;
	  Normally, option menus would create a single-column layout of the
	  option-buttons.  This one uses a 10x10 rectangular array...  Load
	  this file to see the example.
	o bitmap-br.lsp
	  Given a directory of X11 bitmaps at location
	  <bitmap_directory_path>, the function
	  (BROWSE-BITMAP-DIRECTORY <bitmap_directory_path>
	  [<ext-regexp-str>]) will put up a browser that will allow
	  you to change your root pixmap pattern by clicking on a bitmap
	  image in the browser.  EXAMPLES: (BROWSE-BITMAP-DIRECTORY
	  "/usr/local/include/X11/AIcons/bground/" "*.xbm")
	  (BROWSE-BITMAP-DIRECTORY "/usr/include/X11/bitmaps/")
	o bitmap-br2.lsp
	  Similar to bitmap-br.lsp, except that simply loading this file
	  will bring up a browser of the bitmaps in directory
	  /usr/include/X11/bitmaps/*.  Unlike bitmap-br.lsp, this file
	  contains comments on what is happening in this simple
	  application..
	o calculator.lsp
	  A simple calculator.  The layout on this example leaves much to
	  be desired.  Shows a use of widget subclassing.
	o calendar.lsp
	  Simple and Stupid Calendar UI generated by Unix 'cal' command.
	o callbacks.lsp
	  Demonstrates using callbacks and timeouts.  Just load this file
	  and click on the "start" or "stop" button...
	o colorsetr.lsp
	  Each time you load this file, it will bring up a window
	  containing a single slider for red, green, and blue colors.  You
	  can use the sliders to create colors interactively, then click
	  the button "Set Color On Selected Widget", followed by clicking
	  on the widget whose color you want to set.  Once the color on a
	  widget has been set, you may move the sliders to change that
	  color value without having to reselect the widget.  By bringing
	  up multiple instances of the colorsetr.lsp application you can
	  set multiple color planes in other winterp widgets...  Note that
	  this uses XM_GET_COLORS to generate top/bottom/shadow colors
	  based on the background color you've dialed in.  Unless you have
	  a lot of planes on your display, this can cause you to run out of
	  colors quickly.  Note that this works only on Motif 1.1 or later.
	o dialogshel.lsp
	  Demonstrates WINTERP's dialog shells, and what happens when you
	  manage/unmanage them.  You may either load this file in it's
	  entirety, or interactively evaluate individual forms using
	  gnu-emacs or w_ctrlpnl.lsp.
	o dircmp.lsp
	  A browser allowing the comparison of directories...  a motif'd
	  version of the SYSV-Unix 'dircmp' program.  To use this app,
	  browse the desired directories in the file selection widgets,
	  then click the vertical "Compare Dirs" button.  Then use up and
	  down arrow keys, or the following mouse/key bindings to browse
	  the differences between the directories.
	  Mouse bindings on browsers:
	  * single left click -- select item for use by
			   $EDITOR button or other op...
	  * double left click -- select item and browse it in
			   associated viewer widget.
	  * single middle click -- select item and browse it in
			   associated viewer widget.
	  * single right click -- select item and display
			   corresponding text in $EDITOR.
	  Key bindings on browsers:
	  * E -- view selected item in user's
			   editor ($EDITOR).
	  * ^E -- select next item and view in
			   user's editor ($EDITOR).
	  * ^N, ^DownArrow -- select next item.
	  * ^P, ^UpArrow -- select prev item.
	  * N , DownArrow -- browse next item in viewer.
	  * P , UpArrow -- browse prev item in viewer.
	  
	o epoch-test.lsp
	  Test/demos of Epoch_Widget_Class (see lib-widgets/epoch-text.lsp)
	  a text editor widget created by reparenting an EPOCH multiwindow
	  emacs editor window inside a WINTERP/Motif widget.  This allows
	  you to edit files with a real text editor while placing the
	  Epoch-edit windows into y our WINTERP-based applications.  Epoch
	  is a multiwindow gnu-emacs-based editor available for free by
	  anonymous ftp from cs.uiuc.edu.  You must load epoch-widg.el into
	  Epoch first, as this file calls epoch-functions defined there.
	  This file also assumes that you have Andy Norman's gnuserv
	  package running under Epoch -- the program
	  /usr/local/epoch/bin/gnudoit is used to send emacs-lisp commands
	  to Epoch.
	o epoch-widg.el
	  Epoch 4.X Emacs-Lisp functions used by epoch-widg.lsp in this
	  directory.  You must load these functions into Epoch before you
	  load epoch-widg.lsp into WINTERP.
	o epoch-widg.lsp
	  Create a drawing-area widget containing a reparented epoch 4.0
	  "screen" -- this allows you to edit files with a real text editor
	  while placing the Epoch-edit windows into your WINTERP-based
	  applications.  Epoch is a multiwindow gnu-emacs-based editor
	  available for free by anonymous ftp from cs.uiuc.edu.  You must
	  load epoch-widg.el into Epoch first, as this file calls
	  epoch-functions defined there.  This file also assumes that you
	  have Andy Norman's gnuserv package running under Epoch -- the
	  program /usr/local/epoch/bin/gnudoit is used to send emacs-lisp
	  commands to Epoch.
	o fake-app.lsp
	  Example application using XM_MAIN_WINDOW_WIDGET_CLASS +
	  XM_ROW_COLUMN_WIDGET_CLASS/:simple_menu_bar +
	  XM_ROW_COLUMN_WIDGET_CLASS/:simple_pulldown_menu to create a
	  window with a menubar and pulldowns, etc.
	o fake-app1.lsp
	  Example application using higher-level widget-class subclasses
	  WINTERP:APPLICATION-WIDGET-CLASS,
	  WINTERP:POPUP-MENU-WIDGET-CLASS, WINTERP:RADIO-BOX-WIDGET-CLASS,
	  WINTERP:CHECK-BOX-WIDGET-CLASS,
	  WINTERP:OPTION-MENU-WIDGET-CLASS...  to create a window with a
	  menubar and pulldowns, etc.
	o fifo-read.lsp
	  A text widget that reads whatever text is sent to the named pipe
	  (~/.fifo).  See fifo-write.lsp for a similar program which uses a
	  text widget to write to a named pipe.
	o fifo-write.lsp
	  A text widget that writes to a named pipe (~/.fifo) See
	  fifo-read.lsp for a similar program which will read text sent to
	  this named pipe.
	o getvalues.lsp
	  This file should is a random test to see whether the code in
	  winterp/src-server/w_resources.c has any machine dependencies.
	  Load this file, and if your stdout beeps and you see messages
	  about "failed: ..." then please send the output to
	  mayer@netcom.com NOTE: the actual graphical result of loading
	  this file is not pretty.  In fact, it's not supposed to be
	  pretty....
	o gif.lsp
	  Demo of displaying GIF in a widget; GIF retrieved via
	  GIF_TO_PIXMAP.
	o graphcalc.lsp
	  A calculator with "direct manipulation" graphic display of
	  previous results.  Expressions may be entered by typing them in
	  on the mock-keyboard, inputting the value into the XmText widget,
	  or by clicking on a "node" in the XmGraph widget.  Operators are
	  entered by clicking the operator buttons ('*' '/' '-' '+') on the
	  mock-keyboard.  Expressions must be terminated by clicking on the
	  '==' operator button.  Users may also enter expressions in
	  infix notation into the text widget, and these will be displayed
	  with disambiguation provided by precedence rules in the code
	  below.  As a test of this, paste the following into the XmText
	  widget
	  [ HW1 + HW2 + HW3 + 2 * MT1 + HW4 + HW5 + 2 * MT2 + HW6 + HW7 + 4
	  * FIN ] / 15
	  then hit the [return] key and watch the results.
	o graphcalc1.lsp
	  Add an "options" button and popup panel for graphcalc.lsp
	o graphcalc2.lsp
	  Add a scale widget to display results from graphcalc.lsp
	o grep-br.lsp
	  A file search browser using the Unix "grep" command to perform
	  search.  Enter the desired search string in "Search Regexp" and
	  enter the set of files to search in "Wildcarded Files"; then
	  enter [return] in one of those widgets, "Do Search".  Then use up
	  and down arrow keys, or the following mouse/key bindings to
	  browse list of search items
	  Mouse bindings on browsers:
	  * single left click -- select item for use by
			   $EDITOR button or other op...
	  * double left click -- select item and browse it in
			   associated viewer widget.
	  * single middle click -- select item and browse it in
			   associated viewer widget.
	  * single right click -- select item and display
			   corresponding text in $EDITOR.
	  Key bindings on browsers::
	  * E -- view selected item in user's
			   editor ($EDITOR).
	  * ^E -- select next item and view in
			   user's editor ($EDITOR).
	  * ^N, ^DownArrow -- select next item.
	  * ^P, ^UpArrow -- select prev item.
	  * N , DownArrow -- browse next item in viewer.
	  * P , UpArrow -- browse prev item in viewer.
	  
	o grep-br1.0.lsp
	  Old version of grep-br.lsp, for Motif 1.0.  Motif >= 1.1 users
	  should use grep-br.lsp.  This file is loaded from grep-br.lsp
	o grph-sexpr.lsp
	  Using XM_GRAPH_WIDGET_CLASS to display a lisp s-expression (or
	  any lisp list) as a tree.  Click on button "Graph Methods of
	  Selected Widget" then click mouse on a WINTERP application
	  widget.  Will pop up a display of the methods on that widget.
	  This is really only interesting if widget has been subclassed
	  such that there are Winterp-Lisp methods available on the
	  widget-class.  Alternately, you can just call SHOW-SEXP
	  interactively, e.g.
	  (show-sexp '((5 6 7 '(6 7) 7 "quackity" #(0 1 2 3 4))))
	  (show-sexp (map 'list #'(lambda (i) i) (generic #'show-sexp)))
	  (show-sexp (map 'list #'(lambda (i) i) (generic
	  #'show-sexp-aux)))
	  (show-sexp (map 'list #'(lambda (i) i) (generic #'pp)))
	  (show-sexp (map 'list #'(lambda (i) i) (generic #'pp1)))
	  
	o grph-whier.lsp
	  Displays the widget hierarchy under a shell widget.  Click on
	  "Show Widget Hierarchy" button, then click mouse on a window
	  created by WINTERP -- a widget hierarchy will be displayed.
	  Click on a "node" within the graph widget -- the fully qualified
	  resource name and other info will be displayed in the Text widget
	  more info will also be printed onto standard output.
	o helloworld.lsp
	  10-20 lines of Winterp-Lisp code is all that is needed to produce
	  the canonical "Hello World" program in WINTERP.
	o hostlookup.lsp
	  A lamo application that uses method :FORCED_EXPOSE_UPDATE to
	  popup and display contents of a "working dialog" before a
	  time-consuming subprocess begins to execute.
	o identifier.lsp
	  A useful UI debugging tool.  Loading this file creates a panel
	  that allows you to click on a widget to identify it, click on a
	  widget to destroy it, or change the foreground and background
	  colors of the widget you click on.  For Motif 1.1, the "Identify
	  Selected Widget" button becomes especially useful because it will
	  print out the fully qualified resource name -- this allows
	  setting up your X-resources on a per widget basis and allows you
	  to better understand which widgets are affected by a particular
	  setting in your ~/.Xdefaults...
	o identifier2.lsp
	  Like "identifier.lsp" except that it allows you to print out the
	  translations and accelerators on a widget.
	o inf-square.lsp
	  Run "bc" calculator as subprocess, computing infinite number of
	  powers of 2 (or until user gets bored and quits).  Displays them
	  in a row-column widget.
	o mail-br.lsp
	  A simple MH mail browser based on Object_Browser_Widget_Class.
	  This does MH's scan(1) operation on the last:30 messages in
	  folder +inbox, then allows you to browse the messages via the
	  following mouse/key bindings on the message browser:
	  Mouse bindings on browsers:
	  * single left click -- select item for use by
			   $EDITOR button or other op...
	  * double left click -- select item and browse it in
			   associated viewer widget.
	  * single middle click -- select item and browse it in
			   associated viewer widget.
	  * single right click -- select item and display
			   corresponding text in $EDITOR.
	  Key bindings on browsers::
	  * E -- view selected item in user's
			   editor ($EDITOR).
	  * ^E -- select next item and view in
			   user's editor ($EDITOR).
	  * ^N, ^DownArrow -- select next item.
	  * ^P, ^UpArrow -- select prev item.
	  * N , DownArrow -- browse next item in viewer.
	  * P , UpArrow -- browse prev item in viewer.
	  
	o man-br.lsp
	  Load this file to create a simple manual page browser for looking
	  at formatted manual pages installed in
	  /usr/local/X11R5/man/man3/*.3 (see *MAN-DIR-REGEXP-STR*).  I use
	  this application to browse my X11/Motif manual pages, which are
	  kept in that directory.
	o menushare.lsp
	  Demo of shared pulldown menu panes.  Some versions of Motif are
	  buggy when using shared menu panes and may coredump WINTERP when
	  you destroy the windows created in this file.
	o menutear.lsp
	  menutree.lsp with tear-off menus enabled...
	o menutree.lsp
	  Simple menu tree program.
	o modal-dia.lsp
	  Tests of Modal Dialogs through resource :XMN_DIALOG_STYLE
	o modem-dialer.lsp
	  Dials phone numbers on a Hayes-Compatible modem by running
	  kermit(1) as an asynchronous subprocess.  Hayes-compatible
	  commands may be sent to the modem directly by entering text in
	  the edit-field widget directly below the menu bar.  The app.
	  provides a browser of people/phone-numbers -- in the browser,
	  double-left click (or single-middle click) on the person to dial
	  his/her number (details on mouse and key bindings below).  Put
	  your database of people in file "$HOME/people.lsp" (see variable
	  *MODEM-DIALER-FILEPATH* below)
	o numentry.lsp
	  Test of Cardinal_Number_Entry_Field_Widget_Class
	o popup-menu.lsp
	  POPUP menu example.  This is a 1-to-1 translation of the popup
	  menu example in the Motif Programmer's Guide.  Just 'load' this
	  file to see the example.  See fake-app1.lsp for a less lame way
	  of creating popup menus.
	o radiobox1.lsp
	  The straighforward way to define a radio box.  See radiobox2.lsp
	  for a better way using a WINTERP-subclassed toggle-button.
	o radiobox2.lsp
	  A better (?) way of creating a radio box, using subclassing of
	  togglebutton.  Note that this version doesn't waste as much
	  memory as radiobox1.lsp because it defines a single
	  entry-callback on the rowcolumn widget instead of forcing each
	  toggle-button to have separate copies of very similar
	  callback-closures.
	o radiobox3.lsp
	  Create radio-box via XM_ROW_COLUMN_WIDGET_CLASS/
	  :simple_radio_box.
	o rc-shell.lsp
	  Load this file to put up a default rowcolumn shell for
	  experimentation purposes.  Create other widgets with rc_w as
	  parent and they'll appear in this manager.
	o subcalc.lsp
	  Demo of spawning an interactive subprocess and interacting with
	  the subrpocess through XT_ADD_INPUT/:READ_LINE_TO_STRING.
	  Subprocess can be off doing a long calculation while WINTERP GUI
	  remains active.
	o subcalcslo.lsp
	  Demo of spawning an interactive subprocess and interacting with
	  the subrpocess through XT_ADD_INPUT/:READ.  Subprocess can be off
	  doing a long calculation while WINTERP GUI remains active.  A
	  faster version of this same example is in "subcalc.lsp"
	  efficiency is improved by using
	  XT_ADD_INPUT/:READ_LINE_TO_STRING....
	o subshell.lsp
	  Demo of spawning an interactive shell subprocess and interacting
	  with the subrpocess through XT_ADD_INPUT.  Subprocess can be off
	  doing a long computation while WINTERP GUI remains active.
	o timesheet.lsp
	  Project timesheet application.  You probably want to modify this
	  file to create a project timesheet for your own organization --
	  the named entries in this timesheet example are bogus...  This
	  example makes use of the timechart widgets in
	  lib-widgets/timechart.lsp.
	o w_ctrlpnl.lsp
	  A control panel for WINTERP, including a rudimentary way to edit
	  and send lisp to winterp's xlisp evaluator without having to use
	  the gnuemacs interface (src-client/winterp.el) or
	  src-client/wl.c.  For details on this application, see
	  ../doc/winterp.doc section [[Interacting with WINTERP via the
	  "Winterp Control Panel":]].
	o xbiff.lsp
	  Load this file to have WINTERP check for new mail periodically.
	  This periodically runs '/usr/ucb/mail -H' (or if running HP-UX,
	  or OSF1 ...  'mailx -H') to create listing of unread mail in
	  /usr/mail/$LOGNAME...  I make no promises this will work on other
	  Unix machines, but it does work on HP-UX, SunOS, OSF1, Ultrix,
	  etc.  If other hosts have problems you need to set variable
	  *xbiff-nondestructively-scan-mail-headers-cmd* (see below).
	  Also, you may want to modify variable
	  *xbiff-incorporate-new-mail-cmd* -- the default calls MH's 'inc'
	  program (must be on your path) and outputs the result in the
	  xbiff window.  I personally use one which calls "gnudoit
	  '(mh-rmail)'" which uses GNU Emacs' mh-e package to read the new
	  mail; WINTERP notifies GNU Emacs through Andy Norman's
	  gnudoit/gnuclient package.
	o xtaddinput.lsp
	  Demo of XT_ADD_INPUT with :READ_LINE_TO_STRING versus
	  :READ_SEXP_TO_USTREAM options.  The program itself is stupid -- I
	  spawn cat(1) as a subprocess just to echo the input to the
	  subprocess back to the output, then use XT_ADD_INPUT to read the
	  output back line-by-line or sexpr-by-sexpr.

---------------------------------------------------------------------------

WINTERP 2.0 Widget Class Library (subclasses of Motif primitive classes)

	o 2label-pb.lsp
	  Widget hackery -- A composite widget masquerading as a special
	  pushbutton containing both a pixmap and a label.  Major
	  difference between this "pseudo-widget" and a real pushbutton is
	  that you don't do :add_callback :XMN_ACTIVATE_CALLBACK, but
	  rather, you set a callback via method :SET-ACTIVATE-CLOSURE.
	o XmGraph.lsp
	  Define utility methods for WINTERP's built-in
	  XM_GRAPH_WIDGET_CLASS
	o application.lsp
	  WINTERP:APPLICATION-WIDGET-CLASS a subclass of
	  XM_MAIN_WINDOW_WIDGET_CLASS which contains a message area
	  instance of TIMED-MESSAGE-DISPLAY-WIDGET-CLASS and has a pulldown
	  menu system created from a WINTERP:MENU-BAR-WIDGET-CLASS
	  instance.
	o clock-disp.lsp
	  Define Clock_Display_Widget_Class, a subclass of
	  XM_LABEL_GADGET_CLASS which displays the time in Month/Date/Year
	  Hour:Minute format.  This makes use of the Unix 'date' command
	  "date '+\#(%y %m %d %H %M)'" -- if this doesn't work on your
	  system, it's because your unix isn't SVID2, XPG2, XPG3, or
	  POSIX.2 compliant and can't understand the special '+' formatting
	  option for 'date'.
	o epoch-text.lsp
	  define Epoch_Widget_Class -- a text editor widget created by
	  reparenting an EPOCH multiwindow emacs editor window inside a
	  WINTERP/Motif widget.  This allows you to edit files with a real
	  text editor while placing the Epoch-edit windows into your
	  WINTERP-based applications.  Epoch is a multiwindow
	  gnu-emacs-based editor available for free by anonymous ftp from
	  cs.uiuc.edu.  You must load epoch-widg.el into Epoch first, as
	  this file calls epoch-functions defined there.  This file also
	  assumes that you have Andy Norman's gnuserv package running under
	  Epoch -- the program /usr/local/epoch/bin/gnudoit is used to send
	  emacs-lisp commands to Epoch.  See also ../epoch-test.lsp and
	  ../epoch-widg.el ...
	o file-br.lsp
	  File_Browser_Widget_Class, a subclass of
	  String_Browser_Widget_Class, a subclass of XM_LIST_WIDGET_CLASS.
	  Inherits bindings from String_Browser_Widget_Class.  Note mouse
	  bindings on browser override XmList(3x)'s:

	  * single left click -- make item the current selection
	  * double left click, or single middle click
		      -- select item and call Xt-action
			 ListKbdActivate() which calls the
			 :XMN_DEFAULT_ACTION_CALLBACK you
			 have defined on an instance.
	  * single right click -- select item and call method
	    			 :EDIT_SELECTED_ITEM

 Note key bindings on browser overriding XmList(3x)'s:

	  * [Key]E: -- Call method :EDIT_SELECTED_ITEM
	  * Ctrl[Key]N or Ctrl[Key]osfDown:
		      -- Call method :GOTO_NEXT, which selects
			 the next item in the list.
	  * Ctrl[Key]P, or Ctrl[Key]osfUp:
		      -- Call method :GOTO_PREV, which selects
			 the previous item in the list.
	  * [Key]N, or [Key]osfDown:
		      -- Call method :BROWSE_NEXT which
			 selects the next item in the list and
		         calls ListKbdActivate() which calls
			 the :XMN_DEFAULT_ACTION_CALLBACK.
	  * [Key]P, [Key]osfUp: -- Call method :BROWSE_PREV which
			 selects the next item in the list and
		         calls ListKbdActivate() which calls
			 the :XMN_DEFAULT_ACTION_CALLBACK.
	  
	o file-lview.lsp
	  Labelled_File_Viewer_Widget_Class a subclass of
	  XM_FORM_WIDGET_CLASS.  Note key bindings on viewer overriding
	  XmText(3x)'s:

	  * [Key]space: next-page()
	  * [Key]osfBackSpace: previous-page()
	  
	o file-view.lsp
	  File_Viewer_Widget_Class a subclass of XM_TEXT_WIDGET_CLASS with
	  :SCROLLED option.  Note key bindings on viewer overriding
	  XmText(3x)'s:

	  * [Key]space: next-page()
	  * [Key]osfBackSpace: previous-page()
	  
	o filecomp.lsp
	  Load this prior to creating any
	  XM_FILE_SELECTION_BOX_WIDGET_CLASS and all WINTERP
	  XmFileSelectionBox instances will have a simple file completion
	  capability within the "Filter" and "Select" text areas.
	  Completion occurs on [space] key entry.
	o fileselect.lsp
	  WINTERP:FILE-SELECTION-WIDGET a subclass of
	  XM_FILE_SELECTION_BOX_WIDGET_CLASS which allows file selection as
	  part of a larger widget panel without forcing user to see the
	  dialog controls (e.g.  "Ok" "Filter" "Cancel" buttons).
	o numentry.lsp
	  Cardinal_Number_Entry_Field_Widget_Class, a subclasses of
	  XM_TEXT_FIELD_WIDGET_CLASS.
	o object-br.lsp
	  Object_Browser_Widget_Class, a subclass of
	  String_Browser_Widget_Class, a subclass of XM_LIST_WIDGET_CLASS.
	  Inherits bindings from String_Browser_Widget_Class.  Note mouse
	  bindings on browser override XmList(3x)'s:

	  * single left click -- make item the current selection
	  * double left click, or single middle click
		      -- select item and call Xt-action
			 ListKbdActivate() which calls the
			 :XMN_DEFAULT_ACTION_CALLBACK you
			 have defined on an instance.
	  * single right click -- select item and call method
	    			 :EDIT_SELECTED_ITEM, which may
			 be redefined by superclasses.

 Note key bindings on browser overriding XmList(3x)'s:

	  * [Key]E: -- Call method :EDIT_SELECTED_ITEM
	  * Ctrl[Key]N or Ctrl[Key]osfDown:
		      -- Call method :GOTO_NEXT, which selects
			 the next item in the list.
	  * Ctrl[Key]P, or Ctrl[Key]osfUp:
		      -- Call method :GOTO_PREV, which selects
			 the previous item in the list.
	  * [Key]N, or [Key]osfDown:
		      -- Call method :BROWSE_NEXT which
			 selects the next item in the list and
		         calls ListKbdActivate() which calls
			 the :XMN_DEFAULT_ACTION_CALLBACK.
	  * [Key]P, [Key]osfUp: -- Call method :BROWSE_PREV which
			 selects the next item in the list and
		         calls ListKbdActivate() which calls
			 the :XMN_DEFAULT_ACTION_CALLBACK.
	  
	o simple-RC.lsp
	  Subclasses of XM_ROW_COLUMN_WIDGET_CLASS which simplify access to
	  the "simple menu" creation routines.  Specifically:
	  WINTERP:RADIO-BOX-WIDGET-CLASS, WINTERP:OPTION-MENU-WIDGET-CLASS,
	  WINTERP:MENU-BAR-WIDGET-CLASS, WINTERP:POPUP-MENU-WIDGET-CLASS,
	  WINTERP:PULLDOWN-MENU-WIDGET-CLASS,
	  WINTERP:CHECK-BOX-WIDGET-CLASS
	o string-br.lsp
	  String_Browser_Widget_Class, a subclass of XM_LIST_WIDGET_CLASS.
	  Note mouse bindings on browser override XM_LIST_WIDGET_CLASS's

	  * single left click -- make item the current selection
	  * double left click, or single middle click
		      -- select item and call Xt-action
			 ListKbdActivate() which calls the
			 :XMN_DEFAULT_ACTION_CALLBACK you
			 have defined on an instance.
	  * single right click -- select item and call method
	    			 :EDIT_SELECTED_ITEM, which may
			 be redefined by superclasses.

 Note key bindings on browser overriding XM_LIST_WIDGET_CLASS's:

	  * [Key]E: -- Call method :EDIT_SELECTED_ITEM
	  * Ctrl[Key]N or Ctrl[Key]osfDown:
		      -- Call method :GOTO_NEXT, which selects
			 the next item in the list.
	  * Ctrl[Key]P, or Ctrl[Key]osfUp:
		      -- Call method :GOTO_PREV, which selects
			 the previous item in the list.
	  * [Key]N, or [Key]osfDown:
		      -- Call method :BROWSE_NEXT which
			 selects the next item in the list and
		         calls ListKbdActivate() which calls
			 the :XMN_DEFAULT_ACTION_CALLBACK.
	  * [Key]P, [Key]osfUp: -- Call method :BROWSE_PREV which
			 selects the next item in the list and
		         calls ListKbdActivate() which calls
			 the :XMN_DEFAULT_ACTION_CALLBACK.
	  
	o text-view.lsp
	  Text_Display_Widget_Class a subclass of XM_TEXT_WIDGET_CLASS with
	  :SCROLLED option.  Note key bindings on browser overriding
	  XmText(3x)'s:

	  * [Key]space: next-page()
	  * [Key]osfBackSpace: previous-page()
	  
	o timechart.lsp
	  Interactive_Chart_Widget_Class, and
	  Interactive_Chart_Elt_Widget_Class used by ../timesheet.lsp
	o timed-msg.lsp
	  TIMED-MESSAGE-DISPLAY-WIDGET-CLASS, a subclass of
	  XM_TEXT_FIELD_WIDGET_CLASS which displays a message for a
	  predetermined amount of time.  Useful for "status lines"...

---------------------------------------------------------------------------

WINTERP 2.0 Xtango Graphics/Animation examples

	o barchart.lsp
	  A 256 elt barchart which meters the number of elements/hashbucket
	  within WINTERP's *saved_objs* hashtable.  The barchart element in
	  this app is a TANGOIMAGEOBJ.  See barchart.lsp for a similar
	  display using gadgets.
	o cls-image.lsp
	  Installs special methods on all the Xtango image classes.  These
	  methods allow the interactive manipulation (move, resize, etc) of
	  images drawn within an instance of XTANGO-WIDGET-CLASS.  (see
	  also cls-widget.lsp).
	o cls-widget.lsp
	  XTANGO-WIDGET-CLASS, XTANGO-BUTTON-WIDGET-CLASS.
	  XTANGO-WIDGET-CLASS requires special methods installed on all the
	  xtango image classes -- see ./cls-image.lsp.
	o ctrlpnl.lsp
	  Pile of GUIs to let me easily play with and test WINTERP's Xtango
	  functionality.
	o fluid2.gif
	  An example GIF (by Dave Scruton) used as a background for
	  hanoi.lsp and also used as a test gif by other programs...
	o hanoi.lsp
	  Animated "towers of hanoi" algorithm.
	o icls-plrar.lsp
	  Define POLAR-ARROW-IMAGE-CLASS -- a subclass of
	  TANGO:POLYGON_IMAGE_CLASS
	o icls-plrli.lsp
	  Define POLAR-LINE-IMAGE-CLASS -- a subclass of
	  TANGO:LINE_IMAGE_CLASS.
	o im_methpop.lsp
	  popup-menu-of-methods-of-object -- pops up a menu of the methods
	  available on the class of the given instance.  This is a pretty
	  random way of inspecting the methods of an image given that the
	  popup menu entries don't actually do anything.
	o imag-build.lsp
	  Interactive "image builder".  Allows you to create/edit/save/load
	  images consisting of tango-image-objects.  The actual drawing UI
	  leaves much to be desired, and the use of flashing to show the
	  selected set of images is clearly the wrong metaphor.  But
	  remember that I wrote this mostly to test out WINTERP's xtango
	  interface -- though with some work this could become a useful
	  drawing tool.  

	  On the drawing area, remember that left-mouse selects, left-drag
          moves, middle-drag resizes, and right-click
	  pops up a menu of methods on the selected image (doesn't actually
	  do anything, yet).  Shift-left-mouse does a multiple-selection
	  operation, adding or removing the selected image-object to the
	  multiple selection list.  Once multi-selection has occurred,
	  "Tango-->Group Selected Images" will group the images into a
	  single composite image; composites can be acted on as a group by
	  other tango operators, e.g.  movement.  "Tango-->Window
	  Snapshot" requires you have xwdtopnm ppmtogif executables
	  installed and on the search path (from PBM-PLUS), and you cannot
	  currently save the GIF images resulting from a screen snapshot...
	  Please feel free to fix/improve/debug this application and submit
	  code back to winterp@netcom.com
	o imag-rndom.lsp
	  Load this file to bring up a test UI for randomly placing the
	  requested TANGOIMAGE within the Tango drawing area widget.  On
	  the drawing area, remember that left-mouse selects, left-drag
	  moves, middle-drag resizes, and right-click pops up a menu of
	  methods on the selected image (doesn't actually do anything,
	  yet).
	o movi-cube.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of a cube
	  rotating.  bitmap-movie is in bitmaps/movi-cube.lsp
	o movi-earth.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of earth
	  rotating.  bitmap-movie is in bitmaps/earth-movie.lsp
	o movi-eyeb.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of the back of a
	  walking eye-man...  bitmap-movie is in bitmaps/movi-eyeb.lsp
	o movi-eyebl.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of eye blinking.
	  bitmap-movie is in bitmaps/movi-eyebl.lsp
	o movi-eyef.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of the front of
	  a walking eye-man...  bitmap-movie is in bitmaps/movi-eyef.lsp
	o movi-eyej.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of eye-man
	  jumping.  bitmap-movie is in bitmaps/movi-eyej.lsp
	o movi-eyel.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of the left of a
	  walking eye-man...  bitmap-movie is in bitmaps/movi-eyel.lsp
	o movi-eyer.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of the right of
	  a walking eye-man...  bitmap-movie is in bitmaps/movi-eyer.lsp
	o movi-face.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of scary faces
	  bitmap-movie is in bitmaps/movi-face.lsp
	o movi-run.lsp
	  XTANGO TANGO:BITMAP_IMAGE_CLASS displaying movie of a little man
	  running.  bitmap-movie is in bitmaps/movi-run.lsp
	o test-bbox.lsp
	  Test of tango bounding boxes -- bounding boxes visible due to
	  lack of expose-callback/:refresh, and displaying images
	  individually, with :tap_show, and using non-white background
	o test-class.lsp
	  Random attempts at playing around with OOP on tango-images.  The
	  expressions in this file are meant to be evaluated interactively;
	  do not load this file.
	o test-compo.lsp
	  Tests on TANGO:COMPOSITE_IMAGE_CLASS.  The statements in this
	  file should be evaluated interactively; the results of loading
	  this file are somewhat uninteresting.
	o test-dial.lsp
	  demo/test of DIAL-WIDGET-CLASS defined in wcls-dial.lsp
	o test-gauge.lsp
	  Test/demo of GAUGE-WIDGET-CLASS, defined in wcls-gauge.lsp.
	o test-gif.lsp
	  Random tests involving TANGO:GIF_IMAGE_CLASS.  This file is meant
	  to be evaluated interactively.  Also, many of the paths to GIFs
	  below won't be valid on your system.
	o test-knob.lsp
	  Demo/test of KNOB-WIDGET-CLASS, defined in wcls-knob.lsp
	o test-tango.lsp
	  Various interactive tests/demos of WINTERP's xtango
	  functionality.  this file can either be loaded, or you may
	  evaluate individual expressions in the file interactively.
	o test-text.lsp
	  Test for TANGO:TEXT_IMAGE_CLASS -- show bounding box around text
	  image.
	o test-trans.lsp
	  Test/demo of Xtango transitions on various image classes.  It is
	  probably best to interactively evaluate statements in this file,
	  but it can also be somewhat entertaining if you just load the
	  file.
	o test.lsp
	  Random bits of code I wrote in testing WINTERP's Xtango widget.
	  This file isn't meant to be loaded, rather, each lisp form is to
	  be interactively evaluated using the gnuemacs interface or
	  w_ctrlpnl.lsp...
	o util.lsp
	  xtango utilities
	o wcls-bgcol.lsp
	  XTANGO-BG-COLOR-SELECTION-WIDGET-CLASS -- dialog box for
	  selecting background color of a tango image.
	o wcls-delay.lsp
	  XTANGO-DELAY-SELECTION-WIDGET-CLASS -- dialog box for entering
	  animation delay factor for xtango.
	o wcls-dial.lsp
	  DIAL-WIDGET-CLASS -- use xtango to define the graphics of a new
	  motif widget class without having to use low-level xt widget
	  subclassing uglyness.  See also test-dial.lsp.
	o wcls-fgcol.lsp
	  XTANGO-FG-COLOR-SELECTION-WIDGET-CLASS -- dialog box for
	  selecting foreground color of a tango image object.
	o wcls-gauge.lsp
	  GAUGE-WIDGET-CLASS -- use xtango to define the graphics of a new
	  motif widget class without having to use low-level xt widget
	  subclassing uglyness.
	o wcls-imopt.lsp
	  XTANGO-IMAGE-OPTIONS-SELECTION-WIDGET-CLASS -- a dialog box for
	  inputting image parameters for image creation, e.g.  line width,
	  fill values, arrow directions, etc.
	o wcls-knob.lsp
	  KNOB-WIDGET-CLASS -- use xtango to define the graphics of a new
	  motif widget class without having to use low-level xt widget
	  subclassing uglyness.  See also test-knob.lsp
	o xbm-to-arr.lsp
	  (bitmap-file-to-array <fname>) converts *.xbm bitmap file
	  to a xlisp 2-D array, for use by TANGO:BITMAP_IMAGE_CLASS

---------------------------------------------------------------------------







