


FVWM(0.93)                                             FVWM(0.93)


NNAAMMEE
       fvwm - Feeble(?) Virtual Window Manager for X11

SSYYNNOOPPSSIISS
       ffvvwwmm [ _o_p_t_i_o_n_s ]

DDEESSCCRRIIPPTTIIOONN
       _F_v_w_m  is  a  window manager for X11. It is a derivative of
       _t_w_m, redesigned to minimize memory consumption, provide  a
       3-D  look  to  window frames, and provide a simple virtual
       desktop.  Memory consumption is estimated  at  about  one-
       half  to one-third the memory consumption of _t_w_m, due pri-
       marily to a redesign of _t_w_m's inefficient method to  stor-
       ing  mouse bindings. In addition, many of the configurable
       options of Twm have been removed.

       The name  "Feeble(?)  Virtual  Window  Manager"  was  used
       because  "Small Window Manager" would have the same abbre-
       viation as  the  "Saber  Window  Manager",  which  already
       exists.  In  any case, _f_v_w_m is small, and anything that is
       small must be feeble!


SSPPEECCIIAALL NNOOTTEE FFOORR XXFFRREEEE8866 UUSSEERRSS
       Xfree86 provides a virtual screen whose operation  can  be
       confusing  when used in conjunction with this virtual win-
       dow manager. With Xfree86, windows  which  appear  on  the
       virtual  screen  actually  get drawn into video memory, so
       the virtual screen size is limited by available video mem-
       ory.

       With  _f_v_w_m's  virtual desktop, windows which do not appear
       on the screen do not actually get drawn  into  video  RAM.
       The size of the virtual desktop is limited to about 32,000
       by 32,000 pixels. It is probably impractical to use a vir-
       tual desktop more than about 5 times the visible screen in
       each direction.  Note that memory usage with  the  virtual
       desktop  is  a  function  of  the  number of windows which
       exist. The size of the desktop makes no difference.

       When becoming familiar with _f_v_w_m, it is  recommended  that
       you  disable Xfree86's virtial screen, by setting the vir-
       tual screen size to the physical screen size. When  famil-
       iar with _f_v_w_m, you may want to re-enable Xfree86's virtual
       screen.


CCOOPPYYRRIIGGHHTTSS
       Since _f_v_w_m is derived from _t_w_m code it shares _t_w_m's  copy-
       rights.

       _f_v_w_m  is  copyright  1988 by Evans and Sutherland Computer
       Corporation, Salt Lake City, Utah, and 1989  by  the  Mas-
       sachusetts    Institute    of    Technology,    Cambridge,



                          6 August 1993                         1





FVWM(0.93)                                             FVWM(0.93)


       Massachusetts, All rights reserved. It is  also  copyright
       1993 by Robert Nation.

       Permission to use, copy, modify, and distribute this soft-
       ware and its documentation  for  any  purpose  and   with-
       out   fee is hereby granted, provided that the above copy-
       right notice appear  in  all copies and  that  both   that
       copyright   notice  and  this  permission notice appear in
       supporting  documentation,  and  that  the names of  Evans
       & Sutherland and M.I.T. not be used in advertising in pub-
       licity pertaining to distribution of the  software   with-
       out specific, written prior permission.

       ROBERT NATION, EVANS & SUTHERLAND, AND M.I.T. DISCLAIM ALL
       WARRANTIES WITH REGARD TO  THIS  SOFTWARE,  INCLUDING  ALL
       IMPLIED  WARRANTIES   OF  MERCHANT- ABILITY  AND  FITNESS,
       IN  NO  EVENT SHALL EVANS & SUTHERLAND OR M.I.T. BE LIABLE
       FOR  ANY  SPECIAL, INDIRECT OR CONSEQUENTIAL  DAM- AGES OR
       ANY DAMAGES WHATSOEVER  RESULTING FROM LOSS OF  USE,  DATA
       OR  PROFITS,  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
       OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN  CONNECTION
       WITH  THE  USE OR PERFORMANCE OF THIS SOFTWARE.


AANNAATTOOMMYY OOFF AA WWIINNDDOOWW
       _F_v_w_m  puts  a  decorative border around most windows. This
       border consists of a bar on each side,  and  a  small  "L"
       shaped  section  on  each  corner.  There is an additional
       top bar is called the title bar, and is  used  to  display
       the name of the window.  The side and bottom bars are col-
       lectively known as the side-bars. The  corner  pieces  are
       called the frame.

       Unless  the standard defaults files are modified, pressing
       mouse button 1 in the title or side-bars will begin a move
       operation  on  the window. Pressing button 1 in the corner
       frame pieces will begin a resize operation. Pressing  but-
       ton  2  anywhere in the border brings up an extensive list
       of window operations.

       Two title-bar buttons exist. The one on the left pops up a
       menu  of basic window operations, and the one on the right
       iconifies the window.  Normally, the left title bar button
       is  used  to  pop-up  a list of window operations, and the
       right button is used to iconify the window.


TTHHEE VVIIRRTTUUAALL DDEESSKKTTOOPP
       _F_v_w_m is a virtual window manager,  which  means  that  the
       user  can  scroll around on a desktop whose size is larger
       than the visible screen. The virtual desktop size is user-
       configurable,  but  is  3 times the visible screen size in
       each direction, by default.




                          6 August 1993                         2





FVWM(0.93)                                             FVWM(0.93)


       Window geometries are specified relative  to  the  current
       viewport. That is xterm -geometry +0+0 will always show up
       in the upper-left hand corner of the  visible  portion  of
       the  screen. It is permissible to specify geometries which
       place windows on the virtual desktop, but off the  screen.
       For example, if the visible screen is 1000 by 1000 pixels,
       and the desktop size is 3x3, and the current  viewport  is
       at  the upper left hand corner of the desktop, then invok-
       ing xterm -geometry +1000+1000 will place the window  just
       off  of  the lower right hand corner of the screen. It can
       be found by moving the mouse to the lower right hand  cor-
       ner of the screen, and waiting for it to scroll into view.

       A geometry specified as  something  like  xterm  -geometry
       -5-5  will  generally  place  the windows lower right hand
       corner 5 pixels from the lower right hand  corner  of  the
       visible  portion  of the screen. Not all applications sup-
       port window geometries with negative offsets.


IINNIITTIIAALLIIZZAATTIIOONN
       Unlike some other window managers, _f_v_w_m does  not  attempt
       to  manage  all  local  screens.  Only  screen zero of the
       default or specified display will be managed. This dramat-
       ically simplifies the _f_v_w_m code.

       During  initialization,  _f_v_w_m will search for a configura-
       tion file which describes key and button bindings,  and  a
       few  other  things.  The  format  of  these  files will be
       described later. First, _f_v_w_m will search for a file  named
       .fvwmrc in the users home directory. Failing that, it will
       look for /usr/lib/X11/fvwm/system.fvwmrc  for  system-wide
       defaults. If that file is not found, fvwm will exit.


SSHHAAPPEEDD WWIINNDDOOWWSS
       If  you  typically  use  shaped  windows  such as xeyes or
       oclock you have several options. You  can  make  them  all
       undecorated  (NoTitle oclock, for example), or you can use
       the default configuration, and leave  them  decorated,  in
       which  case a decorative border and a solid-color backdrop
       are shown. Alternately,  you  can  compile  in  the  SHAPE
       extensions,  by  changing a flag in the Makefile, in which
       case you get the shaped window with  no  backdrop,  and  a
       title  bar  floats  above  the  window.  The shaped window
       extensions increase the window manager's  memory  consump-
       tion by about 60Kbytes when no shaped windows are present,
       but have little effect when shaped windows are present.

OOPPTTIIOONNSS
       Only two command line options are supported by _f_v_w_m:

       --dd _d_i_s_p_l_a_y_n_a_m_e
              Manage the display called,  "displayname",  instead



                          6 August 1993                         3





FVWM(0.93)                                             FVWM(0.93)


              of  the name obtained from the environment variable
              $DISPLAY.

       --ddeebbuugg Puts X transactions in synchronous mode, which dra-
              matically  slows  things  down, but guarantees that
              _f_v_w_m's internal error messages are correct.


CCOONNFFIIGGUURRAATTIIOONN FFIILLEESS
       The configuration file is used to describe mouse and  but-
       ton  bindings,  colors,  the  virtual  display  size,  and
       related items. This section  describes  the  configuration
       options.


       StdForeColor _c_o_l_o_r_n_a_m_e
              Sets the foreground color for menus, the pager win-
              dow, and non-selected window titles  to  _c_o_l_o_r_n_a_m_e.
              When  using  a  monochrome  screen,  this option is
              ignored, and black is used.


       StdBackColor _c_o_l_o_r_n_a_m_e
              Sets the background color for menus, the pager win-
              dow,  and  non-selected  windows to _c_o_l_o_r_n_a_m_e. When
              using a monochrome screen, this option is  ignored,
              and white is used.


       HiForeColor _c_o_l_o_r_n_a_m_e
              Sets  the color for selected window's title to _c_o_l_-
              _o_r_n_a_m_e. When using a monochrome screen, this option
              is ignored, and black is used.


       HiBackColor _c_o_l_o_r_n_a_m_e
              Sets  the  background color for the selected window
              to _c_o_l_o_r_n_a_m_e. When using a monochrome screen,  this
              option is ignored, and white is used.


       Font _f_o_n_t_n_a_m_e
              Makes _f_v_w_m use font _f_o_n_t_n_a_m_e instead of "fixed."


       NoTitle _w_i_n_d_o_w_n_a_m_e
              Keeps  _f_v_w_m  from  decorating windows named _w_i_n_d_o_w_-
              _n_a_m_e. This is handy for clocks and similar  gadgets
              that you don't want to take up too much space. _w_i_n_-
              _d_o_w_n_a_m_e can be a window's name or its class.


       Sticky _w_i_n_d_o_w_n_a_m_e
              Sticky windows "stick to the screen's glass."  That



                          6 August 1993                         4





FVWM(0.93)                                             FVWM(0.93)


              is,  they don't move the the viewport into the vir-
              tual desktop changes.  _w_i_n_d_o_w_n_a_m_e can be a window's
              name or its class.


       StaysOnTop _w_i_n_d_o_w_n_a_m_e
              These   windows  always  try  to stay on top of the
              other windows. This might mbe handy for  clocks  or
              mailboxes that you would always like to be visible.
              If the window is explicitly lowered,  it  will  not
              try  to  force  its way back to the top until it is
              explicitly raised. _w_i_n_d_o_w_n_a_m_e  can  be  a  window's
              name or its class.


       CirculateSkip _w_i_n_d_o_w_n_a_m_e
              Causes  windows  with  the  indicated  name  to  be
              skipped over when the  circulate-up  or  circulate-
              down functions are invoked.
               _w_i_n_d_o_w_n_a_m_e can be a window's name or its class.


       CenterOnCirculate
              When  circulating,  the desktop page containing the
              window which the pointer is moving to is  automati-
              cally  selected.  If CenterOnCirculate is selected,
              then fvwm will do its best  to  center  the  target
              window  in  the  desktop viewport, rather than just
              lining up to the closest page.


       DeskTopSize _H_o_r_i_z_o_n_t_a_lx_V_e_r_t_i_c_a_l
              Defines the virtual desktop size in  units  of  the
              physical screen size.


       DeskTopScale _S_c_a_l_e
              Defines  the  virtual desktop scale with respect to
              the screen.


       BoundaryWidth _W_i_d_t_h
              Changes the boundary width on decorated windows  to
              the specified value.  The default is 6.


       EdgeScroll _h_o_r_i_z_o_n_t_a_l _v_e_r_t_i_c_a_l
              Specifies  the  percentage of a page to scroll when
              the cursor hits the edge of a  page.  This  command
              replaces  NoEdgeScroll  and  EdgePage from previous
              releases.   If  you  don't  want  any   paging   or
              scrolling  when you hit the edge of a page, include
              EdgeScroll 0 0 in your .fvwmrc file.  If  you  want
              whole   pages,   use   EdgeScroll   100  100.  Both



                          6 August 1993                         5





FVWM(0.93)                                             FVWM(0.93)


              horizontal and vertical should be positive numbers.


       ClickToFocus
              Normally  keyboard  input  goes  to  the window the
              mouse pointer is in. If this  option  is  set,  the
              keyboard  input  stays  with one window until a new
              window is clicked on.


       DontMoveOff
              Prevents windows from being moved off or  initially
              placed  off of the screen.  A few programs will not
              work correctly if you use this option.


       Pager  _X___L_o_c_a_t_i_o_n _Y___L_o_c_a_t_i_o_n
              Enables a paging style of moving across  the  desk-
              top.  A  Pager  window  will appear at (X_Location,
              Y_Location) (not a pop-up). In  the  Pager  window,
              pressing mouse button 1 will move the desktop view-
              port to the selected page, pressing button  2  will
              move to the page after the current page, and press-
              ing button 3 will move the top-left corner  of  the
              viewport  to the location of the button press, even
              if it does not line up with a page.  Dragging  but-
              ton 3 will cause the selected viewport to scroll as
              you move the pointer. The  Pager  is  automatically
              sticky, but does not automatically StayOnTop.


       Mouse _B_u_t_t_o_n _C_o_n_t_e_x_t _M_o_d_i_f_i_e_r_s _F_u_n_c_t_i_o_n
              Defines a mouse binding. _B_u_t_t_o_n is the mouse button
              number.  _C_o_n_t_e_x_t  describes  in  what  context  the
              binding  applies. Valid contexts are R for the root
              window, W for an application window, T for a window
              title bar, S for a window side-bar or bottom-bar, F
              for a window frame (the corners),  I  for  an  Icon
              window,  1  for  title-bar  button  number 1, 2 for
              title-bar button number 2, A for  any  context,  or
              any  combination of these letters.  For instance, a
              context of FST will apply when the  mouse  is  any-
              where in a window's border. _M_o_d_i_f_i_e_r_s is any combi-
              nation of N for no modifiers, C for control, S  for
              shift,  M  for  Meta. For example, a modifier of CM
              will apply when both the Meta and  shift  keys  are
              down. Function is one of _f_v_w_m's built in functions.


       Key _k_e_y_n_a_m_e _C_o_n_t_e_x_t _M_o_d_i_f_i_e_r_s _F_u_n_c_t_i_o_n
              Binds a keyboard key to a specified _f_v_w_m  built  in
              function.   Definition  is  the same as for a mouse
              binding, except that the  mouse  button  number  is
              replaced with a key name. The _k_e_y_n_a_m_e is one of the



                          6 August 1993                         6





FVWM(0.93)                                             FVWM(0.93)


              entries from /usr/include/X11/keysymdef.h, with the
              leading  XK_  omitted.  The  _C_o_n_t_e_x_t  and _M_o_d_i_f_i_e_r_s
              fields are defined as in the mouse binding.


       AutoPlaceIcons
              Causes icons to be placed along the right  side  or
              bottom  of  the  screen, if possible, when they are
              first created. Icons will not be placed over  loca-
              tions  taken  by icons which have already been cre-
              ated or over currently open windows.


       Icon _w_i_n_d_o_w_n_a_m_e _b_i_t_m_a_p_-_f_i_l_e
              Specifies the bitmap to be used for a  window  when
              it is iconified.  The _w_i_n_d_o_w_n_a_m_e can be an applica-
              tions window  name  or  class  name,  and  must  be
              enclosed  in  qoutes.  The  _b_i_t_m_a_p_-_f_i_l_e is the full
              path name to a standard X11 bitmap file. If a  win-
              dow  supplies  its own icon bitmap, or icon window,
              that will be used in preference to anything  speci-
              fied with this command.

              If  fvwm  is  compiled  with  Xpm support for color
              icons, then _b_i_t_m_a_p can be an Xpm pixmap file.


       DecorateTransients
              Causes transient windows, which are  normally  left
              undecorated,  to  be  given  the usual _f_v_w_m decora-
              tions. Note that some pop-up windows, such  as  the
              xterm menus, are not managed by the window manager,
              and still do not receive decorations.


       RandomPlacement
              Causes windows which would normally  require  user-
              placement  to  be  automatically placed in ever-so-
              slightly random locations.


       Popup _n_a_m_e
              Starts the definition of a pop-up menu  which  will
              later  be bound to a mouse button or key. _n_a_m_e must
              be enclosed in quotes. Menu entries are included on
              lines following the Popup keyword. The menu defini-
              tion ends with the key word EndPopup. Menu  entries
              are  specified  as  shown in the following example.
              The first word on each line is the  built-in  func-
              tion  which will be performed, followed by the cap-
              tion (enclosed in qoutes) which will  be  shown  in
              the  menu,  followed  by  any  additional arguments
              needed by the built-in function. Sub-menus  can  be
              specified  by  using the Popup built-in, as long as



                          6 August 1993                         7





FVWM(0.93)                                             FVWM(0.93)


              the sub-menu was defined earlier in the  configura-
              tion file.

              Popup "Window Ops"
                Title     "Window Ops"
                Move    "Move"
                Resize  "Resize"
                Raise   "Raise"
                Lower   "Lower"
                Iconify "(De)Iconify"
                Nop       " "
                Destroy "Destroy"
                Title   "HARDCOPY"
                Exec    "Hardcopy"  xdpr
                Exec    "Hardcopy RV"  xdpr -rv
              EndMenu




BBUUIILLTT IINN FFUUNNCCTTIIOONNSS
       _F_v_w_m  supports a small set of built in functions which can
       be bound to keyboard or mouse buttons.

       Nop    Does nothing. This is used to insert a  blank  line
              or separator in a menu. If the menu item specifica-
              tion is Nop " ", then a blank line is inserted.  If
              it  looks  like  Nop  "",  then a separator line is
              inserted.

       Title  Does nothing. This is used to insert a  title  line
              in a popup or menu.

       Beep   Makes the computer beep.

       Quit   Exits _f_v_w_m, generally causing X to exit too.

       Restart
              Causes _f_v_w_m to re-read its config file.

       Refresh
              Causes  all  windows on the screen to re-draw them-
              selves.

       Move   Allows the user to move a window.  If  called  from
              somewhere in a window or its border, then that win-
              dow will be moved. If called from the root  window,
              then  the user will be allowed to select the target
              window

       Resize Allows the user to resize a window.

       Raise  Allows the user to raise a window.




                          6 August 1993                         8





FVWM(0.93)                                             FVWM(0.93)


       Lower  Allows the user to lower a window.

       RaiseLower
              Alternately raises and lowers a window.

       Delete Sends a message to a window asking that  it  remove
              itself, frequently causing the application to exit.

       Destroy
              Destroys a window. Guaranteed to  get  rid  of  the
              window, but is a fairly violent way to terminate an
              application.

       Iconify
              Iconfies a window if it is not  already  iconified,
              or de-iconifies it if it is already iconified.

       Stick  Makes  a window sticky if it is not already sticky,
              or non-sticky if it is already sticky.

       Scroll _h_o_r_i_z_o_n_a_l _v_e_r_t_i_c_a_l
              Scrolls the virtual desktop's viewport by  _h_o_r_i_z_o_n_-
              _t_a_l pages in the x-direction, and _v_e_r_t_i_c_a_l pages in
              the y-direction. Either or both entries may be neg-
              ative.  Both  horizontal  and  vertical  values are
              expressed in percent of pages, so  Scroll  100  100
              means  to  scroll  down  and left by one full page.
              Scroll 50 25 means to scroll left half a  page  and
              down a quarter of a page.

       CirculateUp
              Causes  the  pointer to move to the previous window
              in the list of windows for which CirculateSkip  has
              not not been specified as CirculateSkip.

       CirculateDown
              Causes  the  pointer  to move to the next window in
              the list of windows for which CirculateSkip has not
              not been specified as CirculateSkip.

       GotoPage  x y
              Moves the desktop viewport to page (x,y). The upper
              left page is (0,0), the upper right is (N,0), where
              N is one less than the current number of horizontal
              pages specified in  the  DeskTopSize  command.  The
              lower  left page is (0,M), and the lower right page
              is (N,M), where M is the desktop's vertical size as
              specified in the DeskTopSize command.

       NextPage
              Moves  the  desktop  viewport  to  the next logical
              page.





                          6 August 1993                         9





FVWM(0.93)                                             FVWM(0.93)


       PrevPage
              Moves the desktop viewport to the previous page.

       Exec _n_a_m_e _c_o_m_m_a_n_d
              Executes _c_o_m_m_a_n_d. _c_o_m_m_a_n_d is not quoted,  but  _n_a_m_e
              is.   _n_a_m_e  is  the name that appears in a menu, if
              that is where the function is called from. _n_a_m_e  is
              required  even if the function is not called from a
              menu, for ease of parsing.

              The following example binds function key F1 in  the
              root  window,  with no modifiers, to the exec func-
              tion. The program rxvt will  be  started,  with  an
              assortment of options.

              Key F1 R N Exec "rxvt" exec rxvt -fg yellow -bg blue -e /bin/tcsh &



       Popup  Used Bind a previously defined pop-up menu to a key
              or mouse button.

              The following example binds mouse buttons 2  and  3
              to  a  popup  called "Window Ops", whose definition
              was provided as an  example  earlier  in  this  man
              page.   The  menu will pop-up if the buttons 2 or 3
              are pressed  in  the  window  frame,  side-bar,  or
              title-bar,  with  no modifiers (none of shift, con-
              trol, or meta).

              Mouse 2        FST  N    Popup "Window Ops"
              Mouse 3        FST  N    Popup "Window Ops"

              Popups can be bound to keys through the use of  the
              key  modiifer. Popups can be operated without using
              the mouse by binding to keys, and operating via the
              upp arrow, down arrow, and enter keys.


KKEEYYBBOOAARRDD SSHHOORRTTCCUUTTSS
       All  (I  think) winodw-manager operations can be performed
       from the keyboard, so mouse-less operation should  not  be
       difficult.  In  addition  to  scrolling around the virtual
       desktop by binding the Scroll builtin to appropriate keys,
       Popups,  move, resize and most other builtins can be bound
       to keys. Once a built-in function is started, the  pointer
       is  moved  by  using the up, down, left, and right arrows,
       and the action is terminated by pressing return.   Holding
       down  the  shift key will cause the pointer movement to go
       in larger steps, and holding down  the  control  key  will
       cause the cursor movement to go in smaller steps.






                          6 August 1993                        10





FVWM(0.93)                                             FVWM(0.93)


SSUUPPPPLLIIEEDD CCOONNFFIIGGUURRAATTIIOONN
       A sample system.fvwmrc  is supplied. It has some nice col-
       ors defined, followed by  the  selection  of  the  "fixed"
       font.  Next  a list of common clock and mailbox gadgets is
       listed as "NoTitle", so that they won't be decorated. They
       are also set to by sticky, and to stay on top.

       Next the desktop size is set to 3 times the phyical screen
       size in each direction, and the Pager windows are given  a
       reduction factor of 32.

       A  pager  is placed 5 pixels away from the the lower right
       hand corner of the physical screen, and is set to StaysOn-
       Top.

       Scrolling  when  the cursor hits the edge of the screen is
       set to go by full  pages.  Automatic  placement  of  icons
       around the edge of the screen is enabled.

       Certain  common gadgets are given properties of StayOnTop,
       Sticky.  Icon bitmaps are specified  for  rxvt  and  xterm
       virtual terminals.

       Next some Popup Menus are defined.

       A  menu is bound to mouse buttons 1 and 3 in the root win-
       dow.  This menu provides all  common  window  manipulation
       functions.  A  menu listing some common utility gadgets is
       bound to button 2 in the root window.

       The left title-bar buttons are bound to the window  opera-
       tions  menus,  and  the  right title-bar button is made to
       iconify the window. All mouse buttons are given  the  same
       use in the title-bar buttons.

       Mouse  Button 1 in the window frame (the corner pieces) is
       bound to resize the window, and is bound to move the  win-
       dow  in  the title, side-bars, or icon windows.  A list of
       common window options is bound to mouse button  2  in  the
       title-bar,  side-bar, or frame (anywhere in the decorative
       border) of any decorated window. Mouse button 2  is  bound
       to  Iconify  (or  De-Iconify)  when  pressed  in  an icon.
       Finally, button 3 is bound to the RaiseLower operation  in
       almost any context.

       Next,  some keyboard buttons are given definitions. Inter-
       pretation of these bindings is left as an exercise for the
       reader.

       See  file alternate.fvwmrc for another sample set-up file.







                          6 August 1993                        11





FVWM(0.93)                                             FVWM(0.93)


BBUUGGSS
       _f_v_w_m has not been tested on a  screen  other  than  screen
       zero  of  any  display.   That  is, in the standard naming
       covention of name:display.screen, cases  with  screen  not
       equal  to  zero  are  untested, and will probably not work
       correctly.


AAUUTTHHOORR
       Robert Nation  (nation@rocket.sanders.lockheed.com),  with
       help  from  Piercarlo  Grandi, and Doug Muir, based on _t_w_m
       code, which was written by Thomas LaStrange.













































                          6 August 1993                        12


