Provided by: tgif_4.2.5-1.3build2_amd64 bug

NAME

       tgif  -  Xlib  based  interactive  2-D  drawing facility under X11.  Supports hierarchical
       construction of drawings and easy navigation between sets of drawings.  It's also a hyper-
       graphics (or hyper-structured-graphics) browser on the World-Wide-Web.

SYNOPSIS

       tgif  [-display  displayname]  [-fg <color>] [-bg <color>] [-bd <color>] [-rv] [-nv] [-bw]
       [-reqcolor]       [-cwo[+sbwarp]]       [-hyper]       [-exec        <file>]        [-dbim
       {xcin|chinput|xim|kinput2|tgtwb5[,font]}]    [-sbim    xim]   [-usexlib]   [{-a4|-letter}]
       [-listdontreencode]  [-version]  [-pdfspd  |  -pdfspd=true  |  -pdfspd=false  ]  [-pssetup
       "<string>"  ]  [-tgwb2  [-rmcastlibdir  <directory>  |  -rmcastlibpath  <path>]] [-nomode]
       [-geometry <geom>] [=<geom>] [{file[.obj]|-merge file1[.obj] file2[.obj] ...}]

       or

       tgif -print [-eps] [-p] [-ps] [-f]  [-text]  [-epsi]  [-tiffepsi]  [-gif]  [-png]  [-jpeg]
       [-ppm]  [-pbm]  [-xpm]  [-xbm]  [-html]  [-pdf]  [-netlist]  [-svg] [-display displayname]
       [-stdout] [-raw[+h[eaderonly]]] [-dosepsfilter [-previewonly]] [-status] [-gray] [-color |
       -reqcolor]  [-adobe  | -adobe=<number>/<number> | -adobe=false ] [-dontreencode=<string> |
       -listdontreencode]  [-version  |  -justversion]  [-producedby=<string>]  [-page  <number>]
       [-print_cmd   "<command>"]   [-one_file_per_page]   [-pepsc]  [-pdfspd  |  -pdfspd=true  |
       -pdfspd=false  ]  [-pssetup  "<string>"  ]  [-j2p6_cmd  "<command>"  ]  [-dontcondense   |
       -condensed]  [{-a4|-letter}] [-noshowpageineps] [-quiet] [-bop_hook "<string>"] [-eop_hook
       "<string>"] [-tmp_file_mode "<octal number>"] [-patterndir  "<xbm  directory>"]  [-o<dir>]
       [-exec <file>] [file1[.obj] file2[.obj] ...]

DESCRIPTION

       Tgif is an interactive drawing tool that allows the user to draw and manipulate objects in
       the X Window System.  Tgif runs interactively in the first form.  In the second form shown
       in  the SYNOPSIS section, tgif just prints file1.obj, file2.obj, etc.  (generated by tgif)
       into PostScript(TM) page description files (without opening windows or  fonts)  and  pipes
       them  to  lpr(1) if none of the -eps, -p, -epsi, -tiffepsi, -gif, -png, -jpeg, -ppm, -pbm,
       -xpm, -xbm, -html, -pdf, -ps, -f, -text, -netlist, or -svg options  are  specified.   This
       form  of printing is tgif's way of exporting a tgif file to another format.  In this case,
       any other unrecognized command line options are sent to lpr(1).  In  this  mode,  tgif  is
       compatible  with the obsoleted prtgif.  A symbol file (see descriptions below) can also be
       printed by specifying the .sym extension explicitly.

       The command line argument file specifies a file or an Uniform Resource  Locator  (URL)  of
       objects  to  be  initially  edited by tgif.  Only HTTP or FTP URL's are supported.  (For a
       more detailed description of URL and the World-Wide-Web, the reader is referred to [1].)

       Tgif is purely based on Xlib.  It is tested under X11R6, and it requires a 3 button mouse.

OPTIONS

       In the first form shown in the SYNOPSIS section, the command line arguments can be:

       -fg    Foreground color specified in <color>.

       -bg    Background color specified in <color>.

       -bd    Border color specified in <color>.

       -rv    Start tgif in reversed-video mode.

       -nv    Start tgif in normal-video mode.

       -bw    Start tgif in black and white mode.

       -reqcolor
              Same effect as setting the Tgif.PrintUsingRequestedColor X default to true (see the
              X DEFAULTS section below).

       -cwo   Canvas  Window  Only.   Only  the canvas window (see TGIF SUBWINDOWS section below)
              will be displayed.  This has the same effect as setting the Tgif.CanvasWindowOnly X
              default to true.

       -cwo+sbwarp
              If -cwo+sbwarp is used, single-button-warp (clicking the left mouse button to warp)
              is used to activate teleporting (see TELEPORT/HYPERJUMP section below).

       -hyper Start tgif in the hyperspace mode (see HYPERSPACE section below).

       -exec <file>
              After tgif starts, execute the internal command in <file>  (see  INTERNAL  COMMANDS
              section  below).  If <file> is the string "-", tgif executes internal commands from
              the standard input.

       -dbim method
              Use method as the input method for double-byte fonts (see SQUARE DOUBLE BYTE  FONTS
              section below).  This cannot be used in conjunction with -sbim.

       -sbim method
              Use  method  as  the  input  method for single-byte fonts.  This is useful if the X
              Keyboard Extension is used in inputing international characters (with  dead  keys).
              This cannot be used in conjunction with -dbim.

       -usexlib
              If  tgif  is  compiled  with -DUSE_XT_INITIALIZE, X Toolkit initialization routines
              will be used to setup tgif.  Using this command line  option  will  force  tgif  to
              ignore  the  -DUSE_XT_INITIALIZE compiler option and use Xlib only.  This is useful
              when the system resource file for tgif is not installed properly or messed  up  and
              needs to be bypassed.

       -a4    Using  this  option has the same effect as setting the Tgif.PSA4PaperSize X default
              to true.

       -letter
              Using this option has the  same  effect  as  setting  the  Tgif.InitialPaperSize  X
              default to "letter"

       -noshowpageineps
              Using  this  option has the same effect as setting the Tgif.ShowPageInEPS X default
              to false.

       -quiet If this option is used, tgif will suppress standard messages.

       -listdontreencode=<string>
              If this option is used, tgif will print out  the  list  of  PostScript  font  names
              specified in the -D_DONT_REENCODE compiler option used in compiling tgif.

       In the second form shown in the SYNOPSIS section, the command line arguments can be:

       -version
              If this option is used, tgif will print out its version number and copyright on the
              command line.

       -justversion
              If this option is used, tgif will print out its version number and copyright on the
              command line and exits immediately.

       -nomode
              Using this option has the same effect as setting the Tgif.NoModeWindow X default to
              true.

       -eps (or -p)
              Generates an Encapsulated  PostScript(TM)  file  in  file.eps;  this  file  can  be
              included  in  a LaTeX file through the \psfig, \epsf, or \psfile construct (see the
              LATEX FIGURE FORMATS section below).

       -ps (or -f)
              Generates a PostScript file in file.ps; this file can be printed  to  a  PostScript
              printer with lpr(1).

       -text  Generates  a text file in file.txt; the text file contains all visible text and can
              be fed to a spell checker.

       -epsi  Generates an Encapsulated PostScript (EPS) file with a preview bitmap in  file.eps.
              Tgif aborts if a valid display is not accessible.

       -tiffepsi
              Generates  an  EPS file with a DOS EPS Binary File Header and a trailing TIFF image
              in file.eps.  See the GENERATING MICROSOFT WINDOWS  EPSI  FILES  section  for  more
              details.  Tgif aborts if a valid display is not accessible.

       -gif   Generates  a GIF file in file.gif.  Please see the notes for Tgif.GifToXpm in the X
              DEFAULTS section below.  Tgif aborts if a valid display is not accessible.

       -png   Generates a PNG  file  in  file.png.   Tgif  aborts  if  a  valid  display  is  not
              accessible.

       -jpeg  Generates  a  JPEG  file  in  file.jpg.   Tgif  aborts  if  a  valid display is not
              accessible.

       -ppm   Generates a PPM  file  in  file.ppm.   Tgif  aborts  if  a  valid  display  is  not
              accessible.

       -pbm   Generates  a  PBM  file  in  file.pbm.   Tgif  aborts  if  a  valid  display is not
              accessible.

       -xpm   Generates an X11 pixmap (XPM) file in file.xpm.  Tgif aborts if a valid display  is
              not accessible.

       -xbm   Generates  an X11 bitmap (XBM) file in file.xbm.  Tgif aborts if a valid display is
              not accessible.

       -html  Generates a GIF file in file.gif and an HTML file in file.html.  Tgif aborts  if  a
              valid display is not accessible.

       -pdf   Generates  a  PDF file in file.pdf.  Please see the notes for Tgif.PsToPdf in the X
              DEFAULTS section below.

       -netlist
              Generates a text file in file.net and a text file in file.cmp.   file.net  contains
              netlist  information stored in a table.  The first line in it contains column names
              and each line in it is a port name (surrounded by  double-quotes),  followed  by  a
              comma  and a <TAB> character, followed by a signal name (also surrounded by double-
              quotes).  file.cmp  contains  information  about  components  in  the  file.   Each
              component begins with its name followed by its type.  The attributes of a component
              are printed afterwards (indented by <TAB> characters).

       -svg   Generates an SVG file in file.svg.  Please see the notes for  Tgif.EpsToTmpSvg  and
              Tgif.TmpSvgToSvg in the X DEFAULTS section below.

       -stdout
              Sends the output to the standard output instead of generating the output in a file.

       -raw   Causes the content of the files to be dumped to stdout.

       -raw+h If -raw+h is used and if the file is an HTTP URL, the HTTP header is also dumped to
              stdout.

       -raw+headeronly
              If -raw+headeronly is used and if the file is an  HTTP  URL,  the  HTTP  header  is
              dumped to stdout.

       -dosepsfilter
              Makes  tgif  act  as a filter for getting rid of the DOS EPS Binary File Header and
              the trailing TIFF image in a DOS/Windows EPS file.

       -previewonly
              If -dosepsfilter is  specified,  -previewonly  makes  tgif  act  as  a  filter  for
              extracting  the  preview  bitmap  from the trailing TIFF image in a DOS/Windows EPS
              file.

       -status
              If this option is used in conjunction with either -raw, -raw+h, or  -raw+headeronly
              causes a status line to be displayed in stderr.

       -gray  Using this option has the same effect as setting the Tgif.UseGrayScale X default to
              true (see the X DEFAULTS section below).

       -color (or -reqcolor)
              To print in color, one can use either the -color or the -reqcolor option.  The only
              difference  between  the two is that using -reqcolor has the same effect as setting
              the Tgif.PrintUsingRequestedColor X default to true (see  the  X  DEFAULTS  section
              below).

       -adobe (or -adobe=<number>/<number> -adobe=false)
              Using  this  option  has  the same effect as specifying the Tgif.UsePsAdobeString X
              default.

       -dontreencode=<string>
              Using this option has  the  same  effect  as  specifying  the  Tgif.DontReencode  X
              default.

       -producedby=<string>
              Using this option has the same effect as specifying the Tgif.ProducedBy X default.

       -page  Causes a specified page (specified by <number>) to be printed.

       -print_cmd
              Using  this  option  has  the  same  effect  as  specifying the Tgif.PrintCommand X
              default.

       -one_file_per_page
              Causes each page to be printed into a separate file.

       -pepsc Preserve EPS Comment.  This command line option became obsolete since EPS  comments
              are always preserved starting from tgif-4.0.11.

       -nolandpdfspd
              This  commandline  option  became  obsolete  in  tgif-4.1.42.  It is interpreted as
              -nopdfspd.

       -pdfspd (or -pdfspd=true -pdfspd=false)
              If -pdfspd or -pdfspd=true  is  specified,  "setpagedevice"  is  generated  in  the
              interim  PostScript  file  when exporting PDF files or in the final PostScript file
              when exporting PS files.  If -pdfspd=false is specified, no "setpagedevice" will be
              generated  in  the interim PostScript file when exporting PDF files or in the final
              PostScript  file  when   exporting   PS   files.    This   option   overrides   the
              Tgif.PdfSetPageDevice X default.

       -pssetup
              Using these options have the same effect as specifying the Tgif.AdditionalPSSetup X
              default.

       -tgwb2 This commandline option  enables  the  Tangram  Whiteboard  feature  in  tgif.   It
              requires  librmcast.so (Reliable IP-multicast library).  The location of the rmcast
              library can be  specified  by  the  optional  commandline  argument  -rmcastlibdir.
              Alternatively,  the  full  path to the rmcast library can be specified by using the
              optional commandline argument -rmcastlibpath.  (Please note that the rmcast library
              has only been extensively tested on Linux machines.)

       -j2p6_cmd
              Using this option has the same effect as specifying the Tgif.JpegToPpm6 X default.

       -dontcondense
              Using  this  option  has  the  same effect as setting the Tgif.DontCondensePSFile X
              default to true.

       -condensed
              Using this option has the same effect  as  setting  the  Tgif.DontCondensePSFile  X
              default to false.

       -bop_hook and -eop_hook
              Using  these  options  have  the  same  effect as specifying the Tgif.PSBopHook and
              Tgif.PSEpsHook X defaults.

       -tmp_file_mode
              Using this option have  the  same  effect  as  specifying  the  Tgif.TmpFileMode  X
              defaults.

       -patterndir
              Using  this  option  have the same effect as specifying the Tgif.CustomPatternDir X
              defaults.

       -o     If this option is not specified, the output file (eps, ps,  etc.)   goes  into  the
              same  directory  as  the input file.  If -o<dir> is specified, the output file goes
              into the directory specified by <dir>.

       -merge file1 file2 ...
              Using this option merges file1.obj, file2.obj, etc.  into a multipage file.

BASIC FUNCTIONALITIES

       Primitive objects supported by tgif  are  rectangles,  ovals,  rounded-corner  rectangles,
       arcs,  polylines, polygons, open-splines, closed-splines, text, X11 bitmaps, some specific
       forms of X11 pixmaps, and Encapsulated PostScript.  (Please note  that  the  splines  tgif
       draw are not Bezier curves.)  Objects can be grouped together to form a grouped object.  A
       primitive or a grouped object can be made into an icon object or a symbol  object  through
       user commands.

       Tgif  objects are stored in two types of files.  A file with a .obj extension (referred to
       as an object file) is a file of objects, and a file with a .sym extension (referred to  as
       a symbol file) specifies a ``building-block'' object.  A teleport mechanism is provided to
       travel (or hyperjump) among the .obj files.   A  building-block  object  consists  of  the
       representation  part  and  the  definition  part (which can be empty) of the object.  Tgif
       supports  the  ``bottom-up''  construction  of  hierarchical  drawings  by  providing  the
       capability  to  ``instantiate''  a building-block object in a drawing.  Tgif also supports
       the ``top-down'' specification of drawings by allowing the  user  to  make  any  object  a
       representation  of  an un-specified subsystem.  Both types of files are stored in the form
       of Prolog facts.  Prolog code can be written to interpret the drawings!  (It  is  left  to
       the  user  to  produce  the  code.   See the PROLOG/C TESTDRIVE section for more details.)
       Prolog engines are referred to as drivers in the sections  to  follow.   (Other  types  of
       drivers are also allowed, e.g., written in C.)

       Text based attributes can be attached to any non-text object.  Attributes specified in the
       representation part of a building-block object are non-detachable when such an  object  is
       instantiated.  See the ATTRIBUTES section for details.

       Tgif  can  generate  output  in a few different formats.  By default, the output is in the
       PostScript format (color PostScript is supported), and it is generated into a  file  named
       /tmp/Tgifa*  (produced  by  mktemp()  calls)  where  *  is a number; this file is piped to
       lpr(1).  This takes place when the laser-printer icon is displayed in  the  Choice  Window
       (see  the  TGIF  SUBWINDOWS  section  for the naming of tgif windows).  This output can be
       redirected to a file with a .ps extension.  This takes place when the PS icon is displayed
       in  the Choice Window.  When the PDF icon is displayed in the Choice Window, the output is
       generated into a file with a .pdf extension.  By default, tgif calls  ps2pdf(1)  from  the
       ghostscript(1)  package to convert a PS file to a PDF file.  When the LaTeX (or EPSI) icon
       is displayed in the Choice Window, the output  is  generated  into  a  file  with  a  .eps
       extension.   This  file  is  in  the  Encapsulated  PostScript (or Encapsulated PostScript
       Interchange) format; it can be included in a LaTeX document with the \psfig or  the  \epsf
       construct;  this  will  be  discussed later.  The only difference between the EPS and EPSI
       formats is that an EPSI file contains  a  preview  bitmap.   However,  it  takes  time  to
       generate  the  preview  bitmap.  If the EPS/EPSI file is to be incorporated into some tool
       that does not know how to use the preview bitmap, time can be saved by not using the  EPSI
       format.  When the T icon is displayed in the Choice Window, the output is generated into a
       file with a .txt extension.  This is a text file containing all visible text;  it  can  be
       fed  to  a  spell  checker.   When  the x11bm (X11 bitmap) icon is displayed in the Choice
       Window and color output  is  not  selected,  tgif  generates  the  output  with  the  .xbm
       extension;  the  output  is  in  the  X11  bitmap  format.   However, if the x11bm icon is
       displayed in the Choice Window and color output is  selected  (through  the  ^#k  keyboard
       command  --  ^  denotes  the  <Control>  and # denotes the <Meta> or <Alt> key), then tgif
       generates the output with the .xpm extension, and the output is in the X11  pixmap  format
       (the  version  of  this  XPM format depends on the settings of the Tgif.XPmOutputVersion X
       default).  When the GIF icon is displayed in the Choice Window, the  output  is  generated
       into  a file with a .gif extension.  By default, tgif calls xpmtoppm and ppmtogif from the
       netpbm(1) package to convert an XPM file to a GIF file.

       X11 bitmap files, certain forms of X11 pixmap files (such as the one  generated  by  tgif;
       see  the  section on X11 PIXMAP for details), GIF files, and Encapsulated PostScript (EPS)
       files can be imported into tgif and be represented as tgif primitive  objects.   Files  in
       other  raster  formats  (e.g, JPEG, TIFF, etc.) can also be imported into tgif if external
       tools can be used to convert them into X11 pixmap files.  Please  see  the  IMPORT  RASTER
       GRAPHICS section for details.

       Tgif  drawings  are  supposed  to  be  printed on letter size paper (8.5in by 11in).  Both
       landscape and portrait page styles are supported by tgif.   Reduction  (or  magnification)
       can  be  controlled by the #% keyboard command to set the reduction/magnification.  If the
       compiler flag -DA4PAPER is defined (in Imakefile or Makefile.noimake), then the output  is
       supposed  to  be  printed  on  A4  papers  (which  has approximate dimensions of 8.25in by
       11.7in).

GRAPHICAL OBJECTS

       An object in an object (.obj) file can be a primitive object, a grouped object, or an icon
       object.  A symbol (.sym) file can have any number of objects allowed in an object file and
       exactly one symbol object.  (Recall that a symbol file specifies a building-block object.)
       The  symbol  object  in  a  symbol  file  is the representation part of the building-block
       object, and the rest of the symbol file is  the  definition  part  of  the  building-block
       object.  The symbol object is highlighted with a dashed outline to distinguish it from the
       rest of the objects.  When a building-block object is instantiated, the symbol part of the
       file  is  copied  into the graphics editor, and it becomes the icon for the building-block
       object.

       All objects in tgif can be moved, duplicated,  deleted,  rotated,  flipped,  and  sheared.
       However, in the non-stretchable text mode, text objects can not be stretched.  For an text
       object, if it has not been stretched, rotated, or sheared, flipping it  horizontally  will
       cause the text justification to change and flipping it vertically has no effect.

       Tgif  supports  32  fill  patterns,  32 pen patterns, 7 default line widths, 4 line styles
       (plain, head arrow, tail arrow, double arrows) for  polylines  and  open-splines,  9  dash
       patterns,  3  types  of  text  justifications,  4  text styles (roman, italic, bold, bold-
       italic), 11 default text sizes (8, 10, 12, 14, 18, and 24 for the 75dpi fonts and 11,  14,
       17, 20, 25, and 34 for the 100dpi fonts), 5 default fonts (Times, Courier, Helvetica, New-
       Century-Schoolbook, Symbol), and 11 default colors (magenta,  red,  green,  blue,  yellow,
       pink,  cyan,  cadet-blue,  white,  black, dark-slate-gray).  Additional line widths can be
       added through  the  use  of  Tgif.MaxLineWidths,  Tgif.LineWidth#,  Tgif.ArrowWidth#,  and
       Tgif.ArrowHeight#  X  defaults.   Additional  text  sizes  can be added through the use of
       Tgif.FontSizes  X  default.   Additional  fonts  can  be  added   through   the   use   of
       Tgif.AdditionalFonts   X  default.   If  the  defaults  fonts  are  not  available,  their
       replacement  fonts  can  be  specified  by  Tgif.HasAlternateDefaultFonts  and  related  X
       defaults.   Additional  colors  can  be  added  through  the  use  of  Tgif.MaxColors, and
       Tgif.Color# X defaults.   One  can  also  select  AddColor()  or  ChooseColor()  from  the
       Properties  Menu to add a color.  Alternate startup colors can be selected through the use
       of     the     Tgif.ColorFromXPixmap,      Tgif.UseStdPalette8,      Tgif.UseStdPalette27,
       Tgif.UseStdPalette64,         Tgif.UseStdPalette216,         Tgif.UseMobileWebSafePalette,
       Tgif.UseOpenOfficeGalaxyPalette,           Tgif.UseOpenOfficeGooglePalette,            and
       Tgif.AdditionalColors X defaults.

       Most  commands in tgif can either be activated by a popup menu or by typing an appropriate
       non-alphanumeric key.  All operations that change  any  object  can  be  undone  and  then
       redone.   Commands  such as zoom, scroll, change fonts while no text objects are selected,
       etc. are  not  undoable.   The  undo/redo  history  buffer  size  can  be  set  using  the
       Tgif.HistoryDepth X default.

TGIF SUBWINDOWS

       The tgif windows are described in this section.

       Top Window
              Displays  the  current  domain  and the name of the file tgif is looking at.  Mouse
              clicks and key presses have no effect.

       Menubar Window
              This window is right under the Top Window.  Pull-down menus can be  activated  from
              it  with  any  mouse  buttons.   Key  presses  have no effect.  If HideMenubar() is
              selected from the Layout Menu, this window becomes invisible.  If ShowMenubar()  is
              selected  from  the  Layout  Menu  (which  can  be activated from the Canvas Window
              below), this window becomes visible.

              The View, Text, and Graphics pull-down menus are cascading menus  and  can  not  be
              pinned (see the Popup Menus subsection below for a description).

       Message Window
              This  is right under the Menubar Window and to the right It displays tgif messages.
              Clicking the left mouse button in this window  scrolls  the  messages  towards  the
              bottom,  clicking  the  right mouse button scrolls towards the top, and clicking or
              dragging the middle mouse button scrolls to the location  in  the  message  history
              depending on where the mouse is clicked.  If the <Shift> (or <Control>) key is held
              down when clicking the left/right mouse button, it scrolls right/left.

       Panel (Choice) Window
              This is the window to the left of the Message Window, and it contains a  collection
              of  icons  (not  to  be confused with the tgif icon objects) reflecting the current
              state of tgif.  In top/bottom, left/right order, it displays  the  current  drawing
              mode,  the page style (portrait or landscape), edit (see below), print/export mode,
              zoom factor, move and stretch  mode  (constrained  or  unconstrained),  radius  for
              rounded-corner  rectangles,  text  rotation, page number or row/column, page layout
              mode (stacked or tiled), horizontal alignment (L C R S -), vertical alignment (T  M
              B  S  -),  font,  text size, vertical spacing between lines of text within the same
              text object, text justification, shape (see below), stretchable or  non-stretchable
              text mode, dash pattern, line style, polyline, spline, or interpolated spline, line
              width, fill pattern, pen pattern, color, and special (see below).  Key presses have
              no effect in this window.

              In addition to displaying the current state of tgif, the icons in the Choice Window
              can also be used to change the current state.   Each  icon  is  associated  with  a
              particular  state  variable  of  tgif.  Clicking the left mouse button on top of an
              icon cycles the state variable associated with the icon forward; clicking the right
              mouse button cycles the state variable backwards.  Dragging the middle mouse button
              on top of an icon usually generates a popup menu which corresponds to an  entry  in
              the  Main  Menu  for  the  Canvas  Window  below.   (The  ``edit'', ``shape'',  and
              ``special'' icons  mentioned  above  are  dummy  icons  that  allow  the  ``edit'',
              ``shape'',  and ``special'' menus to be accessed in the Choice Window.  They do not
              respond to left and right mouse clicks.)  The  response  to  the  dragging  of  the
              middle  mouse button is different for the zoom, radius, and vertical spacing icons.
              Dragging the mouse left or up  increases  the  zoom  or  decreases  the  radius  or
              vertical spacing; dragging the mouse right or down has the opposite effect.

              If  there  are  objects selected in the canvas window, then the action of the mouse
              will cause the selected objects to change to the newly selected mode; note that  in
              this  case,  the  current  choice  won't  change if the middle mouse button is used
              (unless the Tgif.StickyMenuSelection X default is set to true).

              The settings of the horizontal and vertical alignments determine  how  objects  (or
              vertices)  align  with  each other when the ^l keyboard command is issued, how each
              individual object (or vertex) aligns with the grids when the ^t keyboard command is
              issued,  how  objects  or  vertices distribute spatially with respect to each other
              when the #l keyboard command is issued, and how each icon  replaces  the  old  icon
              when  the  ^#u keyboard command is issued.  The horizontal alignments are left (L),
              center (C), right (R), space (S), and ignore (-).  The vertical alignments are  top
              (T),  middle  (M),  bottom (B), space (S), and ignore (-).  In aligning operations,
              the space (S) and the ignore (-) settings have the same effect.  The space settings
              are  used  to  distribute  objects  such  that the gaps between any two neighboring
              objects are equal.  In vertex mode, any non-ignore setting will cause the  selected
              vertices  to  be spaced out evenly.  The best way to understand them is to try them
              out.

              The text vertical spacing determines  the  vertical  distance  to  advance  when  a
              carriage return is pressed during text editing.  If the user tries to set the value
              too negative, such that the next line is  exactly  at  the  same  position  as  the
              current  line,  such  a  setting  will not be allowed (this distance depends on the
              current font and font size).

       Canvas Window
              This is the drawing area.  The effects of the actions of the mouse  are  determined
              by the current drawing mode.  Before tgif-4.x, dragging the right mouse button will
              generate the Mode Menu.  This is disabled by default in tgif-4.x, but you can  turn
              it on using the Tgif.Btn3PopupModeMenu X default.

              The  drawing  modes  are  (in order, as they appear in the Mode Menu) select, text,
              rectangle, corner oval, center oval, edge circle, polyline  (open-spline),  polygon
              (closed-spline),   arc   (center  first),  arc  (endpoints  first),  rounded-corner
              rectangle, freehand polyline  (open-spline),  select  vertices,  and  rotate/shear.
              When  drawing  a  rectangle, an oval, or a rounded-corner rectangle, if the <Shift>
              key is held down, a  square,  a  circle,  or  a  rounded-corner  square  is  drawn.
              Dragging the middle mouse button will generate the Main Menu.

              In  the  select  mode,  left  mouse  button selects, moves, stretches, and reshapes
              objects (double-click will ``de-select'' all  selected  objects  in  vertex  mode).
              When  an  object  is  selected,  it  is  highlighted by little squares (referred as
              handles here) at the corners/vertices (using the  Tgif.HandleSize  X  default,  the
              sizes   of   the   handles  can  be  customized).   Dragging  one  of  the  handles
              stretches/reshapes the selected object.  If one wants to move  a  selected  object,
              one  should  not  drag  the  handles.   Instead, one should drag other parts of the
              object.  For example, if the object is a hollow rectangle (the fill is NONE and the
              pen is not NONE), in order to select the rectangle, one should click on the outline
              of the rectangle with the left mouse  button.   If  one  would  like  to  move  the
              rectangle, one should drag the outline of the rectangle with the left mouse button.
              If the object is a filled rectangle (fill is not NONE), one can  click  inside  the
              rectangle to select it and drag anywhere inside the rectangle to move it.

              Holding  down the <Shift> key and clicking the left mouse on an object which is not
              currently selected will add the object to the list  of  already  selected  objects.
              The  same action applied to an object which is already selected will cause it to be
              de-selected.  When stretching objects (not reshaping  poly-type  objects),  holding
              down   the  <Shift>  key  after  stretching  is  initiated  activates  proportional
              stretching (basically, a scale operation is being performed).   In  non-stretchable
              text mode, text objects can not be stretched or scaled.

              Double-clicking  or  clicking the middle mouse button while the <Shift> key is held
              down will activate the teleport (or travel), the launch, or  the  execute  internal
              command  mechanism.   See  the sections on TELEPORT/HYPERJUMP, LAUNCH APPLICATIONS,
              and INTERNAL COMMANDS for details.   Teleporting  has  precedence  over  launching,
              which has precedence over executing an internal command.  In the text drawing mode,
              dragging the middle mouse button while the <Cntrl> key is held down inside the edit
              text area will move the edit text area.

              The  arrow  keys can also be used to move selected objects.  However, if no objects
              are selected, using the arrow keys will scroll the drawing area by a small  amount,
              and using the arrow keys when <Control> key is held down will scroll a screen full.

              In  the  select  vertices mode, left mouse button selects and moves vertices.  Only
              the top-level polyline/open-spline  and  polygon/closed-spline  objects  which  are
              selected  when the vertex mode is activated are eligible for vertex operations.  In
              this mode, all eligible objects have their vertices highlighted with squares.  When
              a  vertex  is  selected  (using  similar  mechanism  as selecting objects described
              above), it is doubly highlighted with a '+' sign.  Operations  available  to  these
              doubly  highlighted  vertices are move, delete, align (with each other), distribute
              (space them equally), and align to grid.  The arrow keys can also be used  to  move
              selected vertices.

              Objects  can  be locked (through the #< keyboard command).  Locked object are shown
              with gray handles, and they can not  be  moved,  stretched,  flipped,  rotated,  or
              sheared.   When  objects  are  grouped,  the  resulting grouped object will also be
              locked if any one of it's constituents is locked.  Locked objects  can  have  their
              properties,  such  as  color,  font,  pen,  etc., changed; furthermore, they can be
              deleted.

              If the current  move/stretch  mode  is  of  the  constrained  type  (activated  and
              deactivated  by  the  #@  keyboard  command),  top-level  polylines  will  have the
              following behavior.  In a move operation, if  both  endpoints  of  a  polyline  lie
              inside  the  objects  being  moved, then the whole polyline is moved; otherwise, if
              only one endpoint falls inside the objects  being  moved,  then  that  endpoint  is
              moved.   The  vertex  that  is the neighbor of the moved endpoint may also be moved
              either horizontally or vertically.  If the  last  line  segment  is  horizontal  or
              vertical,  then  the neighbor vertex may be moved so that the direction of the last
              line segment is maintained.  In a stretch (not reshape) operation, if  an  endpoint
              of  a  polyline  lies  inside the objects being moved, that endpoint will be moved.
              The vertex that is the neighbor of the moved endpoint will also  be  moved  in  the
              same manner as described above.

              When the drawing mode is set to text (a vertical-bar cursor is shown), clicking the
              left mouse button causes selected text to go into edit  mode.   Dragging  the  left
              mouse  button  or clicking the left mouse button while the <Shift> key is held down
              highlights substrings of the text.  Double-clicking causes a word to  be  selected.
              In edit mode, key presses are treated as text strings being inputed, and arrow keys
              are used to move the current input position.  If a key  press  is  preceded  by  an
              <ESC>  key,  then  the  character's  bit  7  is  turned  on.  This allows non-ASCII
              (international) characters to be entered.  One can  use  xfd(1)  to  see  what  the
              corresponding  international  character  is for an ASCII character.  For the Symbol
              font, symbols such as the integral, partial derivative, and copyright  symbols  can
              all  be  found  in this range.  There are some characters that are supported by X11
              but not by PostScript; these characters are not accepted  by  tgif.   If  the  text
              being  edited  is an attribute of a object, <Meta><Tab> will move the cursor to the
              next visible attribute and <Shift><Tab>  will  move  the  cursor  to  the  previous
              visible attribute.

              If the drawing mode is set to draw polygons (not closed-splines) and if the <Shift>
              key is held down, the rubber-banded polygon will be self-closing.

              The freehand drawing mode can be used to draw  polylines  and  open  splines.   All
              intermediate  points  are specified by moving the mouse (as opposed to clicking the
              mouse buttons as in the polyline  mode).   The  second  endpoint  is  specified  by
              releasing the mouse button.

              In all drawing modes (other than the text mode), pressing the <ESC> key cancels the
              drawing (creation) of the current object.

              Middle mouse button always generates the main tgif popup menu.   Holding  down  the
              <Shift>  key  and  clicking  the right mouse button will change the drawing mode to
              select.  Key presses with the <Control> or <Meta> key held  down  (referred  to  as
              non-alphanumeric  key  presses since they can also generate control characters) are
              treated as commands, and their bindings are summarized in the next section.   Users
              can  also  define  single  key  commands  to  emulate  the  functions  of  the non-
              alphanumeric key commands.  The SHORTCUTS section will describe the details.

       Scrollbars
              Clicking the left mouse button in  the  vertical/horizontal  scrollbar  causes  the
              canvas  window  to  scroll down/right by a small distance; clicking the right mouse
              button has the reverse effect.  (The scrollbars in the popup windows for  selecting
              file  names and domain names behave similarly.)  Clicking with the <Shift> key held
              down will scroll a window full.  Clicking or dragging the middle button will  cause
              the  page  to  scroll  to  the  location  which corresponds to the gray area in the
              scrollbars.  (Tgif insists that the left-top corner of the Canvas Window  is  at  a
              distance  that  is  a nonnegative multiple of some internal units from the left-top
              corner of the actual page.)

       Rulers
              They track the mouse location.  Mouse clicks and key presses have no effect.   When
              the  page  reduction/magnification  is  set  at  100%,  the  markings in the rulers
              correspond to centimeters when the metric grid system is used, and they  correspond
              to   inches   when   the   English   grid   system   is   used.    When   the  page
              reduction/magnification is not set at 100%, the markings do not correspond  to  the
              above mentioned units any more (this is considered as a known bug).

       Interrupt/Hyperspace Window
              This  window  is  right  below the Message Window and to the left of the horizontal
              ruler.  When  the  Tgif.IntrCheckInterval  X  default  has  a  positive  value,  an
              interrupt  icon  is  visible  when the Canvas Window is being redrawn.  If the user
              clicks on this  window  when  the  interrupt  icon  is  visible,  tgif  aborts  the
              repainting  of  the  objects.   If this is done when a file is being opened (either
              through Open() or Push()), the drawing of objects is stopped, but  the  reading  of
              the file continues (reading of the file is not aborted).

              If  tgif  is  currently  in  the hyperspace mode (please see the HYPERSPACE section
              below for more details), a space ship icon will be  displayed  when  the  interrupt
              icon  is  not being displayed.  Clicking any button in this window will switch tgif
              in and out of the hyperspace mode.

       Page Control Window
              The Page Control Window is to the left of the horizontal scrollbar.  This window is
              empty  if the current page mode is set to the tiled page mode.  If the current page
              mode is set to the stacked page mode, each page has a tab in tabs subwindow of this
              window.   Clicking  the  left mouse button on a tab goes to the corresponding page.
              Clicking the middle mouse button brings up the Page Menu.  When there are too  many
              pages  in a drawing so that one can not see the tabs for all the pages, one can use
              the icons to the left side of the Page Control Window to scroll the tabs subwindow.
              Clicking  on  the  first icon scrolls the tabs subwindow such that the first tab is
              visible.  Clicking on the 4th icon scrolls the tabs subwindow such  that  the  last
              tab  is  visible.   Clicking on the 2nd icon scrolls the tabs subwindow towards the
              first tab by one tab and clicking on  the  3rd  icon  scrolls  the  tabs  subwindow
              towards the last tab by one tab.

       Status Window
              This  window is below the horizontal scrollbar.  It shows what action will be taken
              if a mouse button is depressed.  When a menu is pulled  down  or  popped  up,  this
              window  shows  what  action  will  be  taken  if  a menu item is selected.  It also
              displays miscellaneous status information.  Mouse clicks and key  presses  have  no
              effect.   If  HideStatus()  is  selected  from the Layout Menu, this window becomes
              invisible.  If ShowStatus() is selected from the Layout Menu, this  window  becomes
              visible.

              By  default, when this window is displaying mouse button status, right-handed mouse
              is assumed.  Setting the Tgif.ReverseMouseStatusButtons  X  default  to  true  will
              reverse the status (as if a left-handed mouse is used).

       Popup Menus
              When  a  menu is popped up by a mouse drag, the menu can be pinned if it is dragged
              far enough  horizontally  (the  distance  is  determined  by  the  setting  of  the
              Tgif.MainMenuPinDistance  X  default).  Clicking the right mouse button in a pinned
              menu will cause it to disappear.  Dragging the left mouse button in a  pinned  menu
              will reposition the menu (except when the Tgif.TitledPinnedMenu X default is set to
              true in which case the left mouse button performs the same function as  the  middle
              mouse button).  Clicking the middle mouse button in it will activate the item right
              below the mouse.

NON-ALPHANUMERIC KEY BINDINGS

       Most operations that can be performed in tgif can be  activated  through  non-alphanumeric
       keys  (some  operations can only be activated through popup menus or shortcut keys).  This
       section summarizes the operations that can be activated by a key stroke with the <Control>
       and/or  the  <Meta>  key held down.  ``^'' denotes the <Control> key and ``#'' denotes the
       <Meta> key in the following description.  (The ``keys.obj'' file, distributed  with  tgif,
       also  summarizes  the same information, but it is organized differently.  This file can be
       viewed with tgif, and if installed properly, it can be found in the same directory as  the
       ``tgificon.obj'' file, mentioned in the FILES section of this document.)

         ^a select all
         ^b send selected objects to the back
         ^c copy selected objects into the cut buffer
         ^d duplicate selected objects
         ^e save/restore drawing mode
         ^f send selected objects to the front
         ^g group selected objects (the grouped object will be brought to the front)
         ^i instantiate a building-block object
         ^k pop back to (or return to) a higher level and close the symbol file (reverse of ^v)
         ^l align selected objects according to the current alignment settings
         ^n open a new un-named object file
         ^o open an object file to edit
         ^p print the current page (or export in XBM, XPM, GIF, HTML, PDF, EPS, or PS formats)
         ^q quit tgif
         ^r redraw the page
         ^s save the current object/symbol file
         ^t align selected objects to the grid according to the current alignment
         ^u ungroup selected objects
         ^v paste from the cut buffer
         ^w change the drawing mode to text
         ^x delete all selected objects
         ^y change domain
         ^z escape to driver
         ^, scroll left
         ^. scroll right
         ^- print the current page with a specified command

         #a attach selected text objects to a selected non-text object as attributes
         #b escape to driver
         #c rotate selected objects counter-clockwise
         #d decrement the grid size
         #e send a token on a selected polyline
         #f flash a selected polyline
         #g show/un-show grid points
         #h flip the selected objects horizontally
         #i increment the grid size
         #j hide the attribute names of the selected objects
         #k change the drawing mode to select
         #l distribute selected objects according to the current alignment
         #m move/justify an attribute of a selected object
         #n show all the attribute names of the selected objects
         #o zoom out
         #p import a .obj or a .sym file into the current file
         #q change the drawing mode to polyline/open-spline
         #r change the drawing mode to rectangle
         #s escape to driver
         #t detach all the attributes of the selected objects
         #u undo
         #v flip the selected objects vertically
         #w rotate the selected objects clockwise
         #x escape to driver
         #y escape to driver
         #z zoom in
         #9 create a user-specified arc (12 o'clock position is 0 degree)
         #0 update the selected objects according to current settings
         #, scroll up
         #. scroll down
         #- show all the attributes of the selected objects
         #[ align the left sides of objects
         #= align the horizontal centers of objects
         #] align the right sides of objects
         #{ align the top sides of objects
         #+ align the vertical centers of objects
         #} align the bottom sides of objects
         #" make the selected polygon regular (fit the original bounding box)
         #% set the percent print reduction (if < 100%) or magnification (if > 100%)
         #: go to default zoom
         #` zoom out all the way so that the whole page is visible
         #~ save selected objects in a new file
         #; cut and/or magnify a selected bitmap/pixmap object
         #_ abut selected objects horizontally
         #| abut selected objects vertically
         ## break up text objects into single character text objects
         #^ scroll to the origin set by SaveOrigin()
         #@ toggle between constrained and unconstrained move (stretch) modes
         #$ change the drawing mode to select vertices
         #& align selected objects to the paper according to the current alignment
         #* redo
         #( import an Encapsulated PostScript file
         #) scale selected objects by specifying X and Y scaling factors
         #< lock the selected objects (can't be moved, stretched, flipped, or rotated)
         #> unlock the selected objects

        ^#a add points to the selected poly or spline
        ^#b change the text style to bold
        ^#c change to center justified text
        ^#d delete points from the selected poly or spline
        ^#e change the drawing mode to rounded-corner rectangles
        ^#f reverse-video the selected bitmap objects
        ^#g toggle snapping to the grid points
        ^#h hide all attributes of the selected objects
        ^#i make the selected object iconic
        ^#j make the selected icon object a grouped object
        ^#k select color or black-and-white output
        ^#l change to left justified text
        ^#m make the selected object symbolic
        ^#n make the selected symbol object a grouped object
        ^#o change the text style to roman
        ^#p change the text style to bold-italic
        ^#q change the drawing mode to polygon/closed-spline
        ^#r change to right justified text
        ^#s save the file under a new name
        ^#t change the text style to italic
        ^#u update iconic representations of selected objects
        ^#v change the drawing mode to oval
        ^#w toggle between poly and spline
        ^#x cycle among the various output file formats
        ^#y push into (or edit) the definition part of a building-block (icon) object
        ^#z change the drawing mode to arcs
        ^#. import an X11 bitmap file
        ^#, import an X11 pixmap file
        ^#- toggle between English and Metric grid systems
        ^#= repeat the last Find command

SHORTCUTS

       The  user  can  define  single character shortcut keys to emulate the function of the non-
       alphanumeric key presses to activate commands.  This  is  done  through  the  use  of  the
       Tgif.ShortCuts  X default.  (Please note that these shortcut keys are only active when the
       drawing mode is not set to the text mode.)  The  Tgif.ShortCuts  consists  of  a  list  of
       items,  each  of  which specifies the bindings between a key (may be case sensitive) and a
       command.  The items are separated by blanks, and each item is interpreted as follows.   It
       consists  of  two  parts,  KEY  and  COMMAND,  which  are concatenated together with a ':'
       character.  The format of the KEY part is one of :<Key>x, !<Key>x,  or  <Key>x  (here  the
       character  'x'  is  used  as  an example; furthermore, the substring <Key> must be spelled
       exactly the way it appears here).  The first 2 formats are equivalent,  they  specify  the
       lower  case x; the 3rd format specifies both the characters 'x' and 'X'.  The COMMAND part
       is a string that matches strings in tgif's  popup  menus  with  space  characters  removed
       (exceptions  are noted below).  This is illustrated by the following example.  In the Edit
       menu, two of the entries are,

          "Delete     ^x"
          "SelectAll  ^a"

       which means that <Control>x activates and Delete() command, and <Control>a  activates  the
       SelectAll()  command.   Therefore,  both  Delete() and SelectAll() are valid names for the
       COMMAND part of a shortcut specification.  To complete the example, the following line can
       be used to bind the lower case 'x' to Delete() and 'a' or 'A' to SelectAll():

          Tgif.ShortCuts:  !<Key>x:Delete() \n\
                      <Key>a:SelectAll()

       For  more examples, please see the sample X defaults file, tgif.Xdefaults, included in the
       tgif distribution.

       Here is a list of exceptions where the COMMAND does not match a command  name  in  a  menu
       entry.  The left entry is a proper COMMAND name, and the right is a list of strings that's
       shown in popup menus which the COMMAND would correspond to.

          CyclePrintFormat()    Printer, LaTeXFig, RawPSFile, XBitmap, TextFile, EPSI, GIF/ISMAP,
       TiffEPSI, NetList
          ToggleBW/ColorPS()    BlkWhtPS, ColorPS
          ToggleGridSystem()    EnglishGrid, MetricGrid
          ToggleMapShown() ShowBit/Pixmap, HideBit/Pixmap
          ToggleUseGrayScale()  UseGrayScale, NoGrayScale
          ToggleMoveMode() ConstMove, UnConstMove
          ToggleShowMeasurement()    ShowMeasurement, HideMeasurement

          ToggleLineType() (advances between different curved shapes)
          ScrollPageUp()   (scroll up a window full)
          ScrollPageDown() (scroll down a window full)
          ScrollPageLeft() (scroll left a window full)
          ScrollPageRight()     (scroll right a window full)
          FreeHandMode()   (change the drawing mode to freehand poly/open-spline)
          CenterAnEndPoint()    (move  an  endpoint of a polyline object to the center of another
       object)
          ToggleNamedAttrShown(<x>=) (toggle name shown for the attribute <x>)
          ToggleSmoothHinge()   (convert smooth to hinge and hinge to smooth points)
          ToggleShowMenubar()   ShowMenubar, HideMenubar
          ToggleShowStatus()    ShowStatus, HideStatus
          ToggleShowMode() ShowMode, HideMode
          ToggleOneMotionSelMove()   OneMotionSelMove, ClickSelClickMove
          ToggleHyperSpace()    GoHyperSpace, LeaveHyperSpace
          ImportOtherFileType(<x>)   (import using a filter named <x>)
          BrowseOtherType(<x>)  (browse using a filter named <x>)
          PrintSelectedObjs()   (print selected objects)

       In addition to the above list, the following are also  valid  COMMAND  names  (having  the
       obvious  meaning):  ScrollLeft(),  ScrollRight(),  ScrollUp(), ScrollDown(), SelectMode(),
       DrawText(), DrawBox(), DrawOval(), DrawPoly(), DrawPolygon(), DrawRCBox(), DrawArc(),  and
       SelectVertexMode().

COLORS AND COLORMAPS

       In  most  X environments, only 256 colors can be displayed at once.  In these environment,
       if an application needs 128 colors and another application needs a totally  different  129
       colors,  both  applications can not be displayed at once with all the colors they want.  X
       solves the problem by allowing applications to use their own colormaps (known  as  private
       colormaps).   Each  private  colormap can have at most 256 colors.  There is also a shared
       colormap available for applications that do not wish to use private colormaps.   The  main
       problem  with  using private colormaps is that a user will see the the well-known colormap
       flashing phenomenon when he/she switches in and  out  of  applications  that  use  private
       colormaps.

       Tgif  uses the shared colormap initially.  When it needs more color than what is available
       in the shared colormap, it will use a private colormap automatically.  When tgif no longer
       needs  the  extra  colors,  it  does not automatically revert to using the shared colormap
       because it needs to be able to undo operations that use the extra colors.  If one does  no
       longer  needs  the  objects  in the undo buffer, one can select FlushUndoBuffer() from the
       Edit Menu to flush the undo buffer.  At this point, tgif will attempt to  use  the  shared
       colormap  to  avoid the colormap flashing problem.  If one often uses XPM and GIF objects,
       one can bind the <Shift>f key to the FlushUndoBuffer() operation by setting the  following
       X  default  and  uses  the  <Shift>f key to regain entries in the colormap when an XPM/GIF
       object is deleted:

              Tgif.ShortCuts: !<Key>F:FlushUndoBuffer()

       Even when a private colormap is used, only 256 colors can be used at once.  Therefore,  it
       is not possible to import two 256-colors GIF files into the same drawing unless the colors
       are somehow reduced to fit in the 256-colors colormap.  This can be done through dithering
       which is described in the IMPORT RASTER GRAPHICS section below.

IMPORT RASTER GRAPHICS

       The  native  raster  graphics  formats that tgif supports are the XBM and XPM formats.  In
       order to import color raster graphics file of another format, tgif can work with  external
       tools  that  can  convert  non-XPM  format files to an XPM files.  A popular raster format
       conversion toolkit is the pbmplus(1) (also  known  as  the  netpbm(1))  toolkit.   It  can
       convert  a  GIF file (e.g., "foo.gif") to an XPM file (e.g., "foo.xpm") with the following
       command (giftopnm is in netpbm; an  earlier  version  of  it  called  giftoppm  exists  in
       pbmplus):

              giftopnm foo.gif | ppmtoxpm > foo.xpm

       When  working  with  tgif,  a  GIF  file  name  will be supplied by tgif and the output of
       ppmtoxpm will be directly read by tgif through a pipe; therefore, the previous sequence is
       replaced  by  an  X default containing the following form (which happens to be the default
       setting for the Tgif.GifToXpm X default):

              giftopnm %s | ppmtoxpm

       The "%s" is to be replaced by a GIF file name.  The above is referred to as a filter.

       To  be  able  to  import  other  types   of   raster   graphics   files,   one   can   use
       Tgif.MaxImportFilters  and  Tgif.ImportFilter#  X  defaults to specify additional filters.
       The following example adds a JPEG filter:

              Tgif.MaxImportFilters: 1
              Tgif.ImportFilter0: \n\
                      JPEG-222 jpg;jpeg \n\
                      djpeg -gif -colors 222 %s | \n\
                      giftopnm | ppmtoxpm

       The "JPEG-222" above is the  name  given  to  the  filter  (must  not  contain  any  space
       character).   The  "jpg;jpeg"  are  possible file extensions separated by semicolons.  The
       rest  is  the  filter  specification.   The  djpeg(1)  program  is  part  of  the  libjpeg
       distribution.   It  can convert a JPEG file to a GIF file.  The above filter also restrict
       the output to have a maximum of 222 colors.  (The 222 is  chosen  arbitrarily.   Many  XPM
       files use some ``standard'' 32 colors, so one may want to leave room form them.)

       To  invoke  a  filter, one can select ImportOtherFile() or BrowseOther() commands from the
       File Menu.  This will bring up a dialogbox listing the available filters  by  their  names
       (e.g.,  "JPEG-222").  After selecting a filter, tgif continues in a similar manner as with
       invoking ImportXPixmap() or BrowseXPixmap() commands from the File Menu.

       The above example is not suitable for the BrowseOther() command because  only  256  colors
       can  be  used  in  a drawing (as explained in the COLORS AND COLORMAPS section above).  In
       order for BrowseOther() to work well, one can use dithering to represent an image  with  a
       dithered  image that only uses a set of standard colors.  The example below uses ppmdither
       from the pbmplus/netpbm toolkit:

              Tgif.MaxImportFilters: 2
              Tgif.ImportFilter0: \n\
                      JPEG-222 jpg;jpeg \n\
                      djpeg -gif -colors 222 %s | \n\
                      giftopnm | ppmtoxpm
              Tgif.ImportFilter1: \n\
                      JPEG-dithered jpg;jpeg \n\
                      djpeg -gif %s | \n\
                      giftopnm | ppmdither | ppmtoxpm

       If one is working with one JPEG  image,  one  can  select  ImportOtherFile()  then  select
       "JPEG-222"  to  get  as  many  as 222 colors.  If one is browsing for JPEG images, one can
       select BrowseOther() then select "JPEG-dithered".

OBJECT NAMES

       If an object contains an attribute (please see the ATTRIBUTES sections below for  details)
       whose  name  is the string "name" (case-sensitive), the value part of the attribute is the
       name of the object.  Subobject of a composite object can be  named  using  a  path,  e.g.,
       <t>!<s1>!<s2>!...,  where  <t>  is  the name of a top-level object which directly contains
       <s1> which directly contains <s2>, etc.  !* refers to the currently  selected  object  (if
       more  than  one  object  is  selected, the top-most object in the stacking order is used).
       !*<s1>!<s2> names the <s2> subobject of the  <s1>  subobject  of  the  currently  selected
       object.

       The  following  is  not  fully  supported, yet (only the #<page> form is supported at this
       time).   Every  object  in  a  tgif  file  can  be  uniquely  named  using  the   notation
       #<page>!<path>,  where  <page>  can  be  a  string  that  specifies  the name of a page or
       #<number> which specifies a  page  number.   The  <path>  is  described  in  the  previous
       paragraph.   If  an  object o1 is referenced by another object o2 within the same file (no
       file name or URL is specified before #) and <page> is omitted, then o1 must be on the same
       page  as  o2.   If a file name or URL is specified before # and <page> is omitted, then o1
       must be on the first page.

ATTRIBUTES

       Attributes are text strings of the form name=value or value which are attached  to  either
       the current drawing or any non-text objects.  An attribute attached to the current drawing
       is called a file attribute; otherwise, it is  a  regular  attribute.   Attributes  can  be
       attached and detached from these objects except in the following case:

              Attributes  appearing  in the symbol object in a building-block object file can not
              be detached when the building-block object is instantiated.  These  attributes  are
              considered to be the ``inherited'' attributes of the icon object.  (If it is really
              necessary to detach inherited attributes of an icon object, the icon object can  be
              ``de-iconified''  by  using UnMakeIconic() in the Special Menu to make it a grouped
              object; then the attributes can be detached.)

       A file attribute is always invisible.  For a regular attribute, the user has control  over
       which  part  of the attribute is displayed.  An entire attribute can be made invisible, or
       only its name can be made invisible (accomplished through the commands under  the  special
       menu, such as #m, #n, #j, #-, and ^#h).

TELEPORT/HYPERJUMP

       Tgif  provides  the  mechanism to travel between .obj and .sym files.  If the middle mouse
       button is clicked on an object with the <Shift> key held down (or double-clicking such  an
       object),  tgif  looks  for an attribute named warp_to (by default) or href of that object.
       The only difference between warp_to and href is that ".obj" is automatically  appended  to
       the  value  of  a  warp_to  attribute  while the value of a href attribute is taken as is.
       (Please note that warp_to is obsolete  now.   It  is  still  supported  for  the  sake  of
       compatibility.)   If  such  an  attribute  is  found,  the  value part of the attribute is
       interpreted as the name of a .obj file to travel to.  (If tgif is in the hyperspace  mode,
       then  clicking  the  left  mouse  button has the same effect.)  If there are multiple href
       attributes on the object, but are in different colors, tgif will use the one that has  the
       same  color  as  the current color appearing in the Choice Window.  If the current file is
       modified, the user is prompted to save the file before traveling to the next file.  If the
       value part of the href attribute starts with the '/' character, the value is treated as an
       absolute file name; otherwise, it is treated as a relative file name.

HYPERSPACE

       Tgif provides  a  hyperspace  mode  to  facilitate  traveling  between  .obj  files.   The
       hyperspace  mode  is  entered  when GoHyperSpace() is selected from the Navigate Menu.  In
       hyperspace mode, the little window below the Message Window will show a little space ship.
       The  hyperspace mode is also automatically entered when a remote URL is opened (unless the
       Tgif.AutoHyperSpaceOnRemote X default is set to false).

       In the hyperspace mode, certain objects are considered  hot-links.   When  the  cursor  is
       placed  on  top  of these object, it will change from a pointer to a hand to indicate that
       clicking on the left mouse button will invoke some actions.  An object is a hot-link if it
       contains  an attribute described in either the TELEPORT/HYPERJUMP, LAUNCH APPLICATIONS, or
       INTERNAL COMMANDS section.

       The hyperspace mode is exited when the drawing mode is changed or the LeaveHyperSpace() is
       selected from the Navigate Menu.

LAUNCH APPLICATIONS

       Tgif provides the mechanism to launch applications.  If the middle mouse button is clicked
       on an object with the <Shift> key held down (or  double-clicking  such  an  object),  tgif
       looks  for an attribute named launch (by default) of that object.  If such an attribute is
       found, the value part of the attribute is interpreted as a sh(1) command to execute.  Same
       color  rule  applies as described in the TELEPORT/HYPERJUMP section above.  If the command
       ends with the '&' character, tgif forks itself (what actual happens depends on whether the
       _BACKGROUND_DONT_FORK  compiler flag is defined or not at compile time) and the command is
       executed by the child process; otherwise, popen() is used to execute the command (in  this
       case,  if  the  command hangs, there is no way provided to terminate the command, and tgif
       will not be able to recover from it).  Within the command, values of other  attributes  of
       the  same  object can be used.  The syntax is:  $(attr), where attr is the name of another
       attribute.

       For example, if one wants to perform a man(1) function, one can draw a box; enter  a  line
       of  text  "title=tgif";  enter  another  line  of text "launch=xterm -rw -e man $(title)";
       select all three objects using ^a keyboard command; attach the text  strings  to  the  box
       using  #a  keyboard  command;  and  launch the man(1) command by clicking the middle mouse
       button on the box (or the text strings) with the <Shift> key held down.  If one  wants  to
       be more fancy, the box can be replaced by an X11 pixmap object; the 'launch' attribute can
       be made invisible; and the 'title' attribute can be center justified  and  with  its  name
       hidden using the #m keyboard command.

       By  default,  launching  of an application is disabled in the hyperspace mode for security
       considerations (this can be  overridden  by  the  Tgif.AllowLaunchInHyperSpace  X  default
       setting).   If  a  lunch  command  is  encountered  in the hyperspace mode, the command is
       displayed and the user is prompted to see if he/she wants to execute the command.

INTERNAL COMMANDS

       Tgif provides the mechanism to execute internal commands.  If the middle mouse  button  is
       clicked  on  an object with the <Shift> key held down (or double-clicking such an object),
       tgif looks for an attribute named exec (by default) of that object.  If such an  attribute
       is  found,  the  value part of the attribute is interpreted as a list of internal commands
       (separated by semicolon) to  execute.   Same  color  rule  applies  as  described  in  the
       TELEPORT/HYPERJUMP section above.  A command usually takes the form:

              <cmd_name> ( <arg1>, <arg2>, ..., <argN> )

       An  argument  of  a  command  can  be  a  string argument or a numeric argument.  A string
       argument must be enclosed in double-quotes.  A numeric argument can be a  numerical  value
       or  a  string  of  the form "$(x)", where x is the name of another attribute (this form is
       referred as the substitution form).  A string argument can also contain substitution form.
       Please  note  that  only  one-level substitution are performed (the collection of internal
       commands should be viewed as a simple scripting language and not a declaration language).

       When an attribute is referenced in an internal command, the attribute name can be  in  the
       form,  <obj_name>.<string>,  where  <obj_name> must be in the form specified in the OBJECT
       NAMES section above and <string> contains only alphanumeric characters and the  underscore
       ('_')  character.  If the first 2 characters of an attribute name is "!.", the rest of the
       attribute name names a file attribute.  If the first 2 characters of an attribute name  is
       "!*",  the  rest of the attribute name names an attribute of the currently selected object
       (if more than one object is selected, the top-most object in the stacking order is used).

       Please note that lines that begin with "//" are treated as comments.

       The following internal commands are supported:

       launch(<attr_name>)
              The value of the attribute specified by  <attr_name>  is  interpreted  as  a  sh(1)
              command  to  execute.   Please  see  the LAUNCH APPLICATIONS section above for more
              details.

       exec(<attr_name>)
              The value of the attribute specified by <attr_name> is interpreted as  an  internal
              command  to  execute.   This is similar to a subroutine call.  Please note that the
              internal command is executed in the context of  the  top-level  which  contain  the
              attribute.

       mktemp(<str>,<attr_name>)
              This  command  makes  a unique file name.  The <str> argument is a template string,
              e.g., "/tmp/TgifXXXXXX", and it requires at least two "/" in  it.   The  result  of
              mktemp()  is stored as the value of the attribute specified by <attr_name>.  Please
              see the man pages of the C library function on mktemp(3C) for  more  details.   (If
              tgif  is compiled with the -D_USE_TMPFILE compiler option, then tempnam(3S) is used
              instead.)

       create_file_using_simple_template(<template>,<output>,<str>,<attr_name>)
              The file specified by <template> is scanned for a line that  matches  <str>.   When
              such a line is found, that line is replaced by the value of the attribute specified
              by <attr_name>.  The result is put into the file specified as <output>.

       update_eps_child(<eps_file_name>)
              This only works if the object being executed is a composite object.  If the  object
              has  a  component  which is an imported EPS (Encapsulated PostScript) object, it is
              replaced by the EPS file specified by <eps_file_name>.   If  the  object  does  not
              contain an EPS subobject, an EPS subobject is created.

       update_xbm_child(<xbm_file_name>)
              This  only works if the object being executed is a composite object.  If the object
              has a component which is an imported XBM (X11 bitmap) object, it is replaced by the
              XBM  file  specified  by  <xbm_file_name>.   If  the object does not contain an XBM
              subobject, an XBM subobject is created.

       update_xpm_child(<xpm_file_name>)
              This only works if the object being executed is a composite object.  If the  object
              has a component which is an imported XPM (X11 pixmap) object, it is replaced by the
              XPM file specified by <xpm_file_name>.  If the  object  does  not  contain  an  XPM
              subobject, an XPM subobject is created.

       delete_eps_child(<obj_name>)
              This  only  works  if  the  object  named <obj_name> is a composite object.  If the
              object has a component which is an EPS  (Encapsulated  PostScript)  object,  it  is
              deleted.   If  the  object  does  not  contain  an  EPS  subobject, no operation is
              performed.

       delete_xpm_child(<obj_name>)
              This only works if the object named <obj_name>  is  a  composite  object.   If  the
              object  has a component which is an XPM (X11 pixmap) object, it is deleted.  If the
              object does not contain an XPM subobject, no operation is performed.

       delete_xbm_child(<obj_name>)
              This only works if the object named <obj_name>  is  a  composite  object.   If  the
              object  has a component which is an XBM (X11 bitmap) object, it is deleted.  If the
              object does not contain an XBM subobject, no operation is performed.

       flip_deck(<times>,<frames_per_second>,<style>)
              This only works if the  object  being  executed  is  a  composite  object  and  all
              subobjects  of  the  composite object are X11 bitmap or X11 pixmap objects and have
              identical positions and sizes.  The <times> argument specifies the number of  times
              the  deck  is  flipped.   It  can  be  a  number  or  the  string  "infinite".  The
              <frames_per_second> argument must be a  number  between  1  and  60.   The  <style>
              argument  can  be  either  "linear"  or  "ping_pong".   When  this command is being
              executed, any mouse button click or key click aborts command execution.

       read_file_into_attr(<file_name>,<attr_name>)
              This command reads a file into an attribute.   The  <file_name>  argument  names  a
              file,  e.g.,  "/tmp/foo".   The  content  of  the  file is read as the value of the
              attribute specified by <attr_name>.  If the file can not be opened  for  read,  the
              attribute's value is set to an empty string.

       write_attr_into_file(<attr_name>,<file_name>)
              This  command  writes  the  value  of  an  attribute  into a file.  The <file_name>
              argument names a file, e.g., "/tmp/foo".  The value of the attribute  specified  by
              <attr_name> is written into <file_name>.

       append_attr_into_file(<attr_name>,<file_name>)
              This  command  appends  the  value  of  an  attribute into a file.  The <file_name>
              argument names a file, e.g., "/tmp/foo".  The value of the attribute  specified  by
              <attr_name> is appended into <file_name>.

       select_obj_by_name(<obj_name>)
              This command silently (no highlighting handles) selects an object named <obj_name>.
              Please see the OBJECT NAMES section above for the specification of object names.

       select_top_obj()
              This command silently (no highlighting  handles)  selects  the  top  object.   This
              command fails if there is no object in the current page.

       delete_selected_obj()
              This  command  deletes  all  selected  objects.  This command fails if no object is
              selected.

       unselect_all_obj()
              This command de-selects all selected objects.  If the select_obj_by_name()  command
              is used, this command must be used eventually.

       move_selected_obj_relative(<dx>,<dy>)
              This  command  moves  the selected object by <dx> absolute units in the x direction
              and <dy> absolute units in the y direction.

       repeat(<cmd_attr_name>,<times>)
              This command executes the internal command in the <cmd_attr_name> attribute <times>
              times.

       hyperjump(<attr_name>)
              This  command  teleports  to  the  file  name  or URL name found in the <attr_name>
              attribute.

       make_cgi_query(<dest_attr_name>,<url_name>,<list_attr_name>)
              This command constructs an URL in the Common Gateway Interface (CGI) format in  the
              <dest_attr_name>   attribute.    <url_name>   names   the  CGI  server  script  and
              <list_attr_name> names an  attribute  whose  value  are  comma-separated  attribute
              names.  For example, if an object has the following attributes:

                     attr_list=last_name,first_name
                     last_name=Cheng
                     first_name=Bill
                     final_url=
                     exec=make_cgi_query(final_url,
                         http://bourbon.usc.edu:8001/cgi-bin/test-cgi,
                         attr_list)

              Executing this object will construct the following string in final_url:

                     http://bourbon.usc.edu:8001/cgi-bin/test-cgi?last_name=Cheng&first_name=Bill

              An   subsequent   hyperjump(final_url)  command  can  be  invoked  to  execute  the
              corresponding "test-cgi" CGI  server  script  with  the  last_name  and  first_name
              arguments.

              For a detailed description of CGI scripts, the reader is referred to [2].

       wait_click(<cursor_name>,<grab>,<attr_name>)
              This  command  displays  the <cursor_name> cursor and waits for the user to click a
              mouse button.  If <cursor_name> is the string  NULL  (case-sensitive),  the  cursor
              will  not  change.  If <Btn1> is clicked, the command terminates and 1 is placed in
              <attr_name>.  If <Btn2> is clicked, 2 is placed in <attr_name>, etc.  If <grab> set
              to  TRUE  (case-sensitive), then the mouse is grabbed by tgif.  Valid <cursor_name>
              can be found in <X11/cursorfont.h> (without the XC_ prefix).

       sleep(<cursor_name>,<ms_interval>)
              This  command  displays  the  <cursor_name>  cursor  and  waits  for  <ms_interval>
              milliseconds  to elapse.  If <cursor_name> is the string NULL (case-sensitive), the
              cursor will not change.  This command can be interrupted (and aborted) by any mouse
              clicks  or  key  strokes.   Valid  <cursor_name> can be found in <X11/cursorfont.h>
              (without the XC_ prefix).

       begin_animate()
              This command is used to  start  an  animation  sequence  (using  double-buffering).
              Please  note  that,  by default, tgif prepares for undo/redo.  For a long animation
              sequence, the undo/redo records may take  up  a  lot  of  memory.   In  this  case,
              disable_undo() (described below) should be used before this command.

       end_animate()
              This command is used to terminate an animation sequence.

       set_redraw(<true_or_false>)
              This  command  is  used  to  temporarily disable redraw if <true_or_false> is FALSE
              (case-sensitive) when tgif is in the animation mode (turned on by begin_animate()).
              If  a  shuffle_obj_to_top()  or  a shuffle_obj_to_bottom() command is used before a
              move command, set_redraw(FALSE) and set_redraw(TRUE)  should  be  used  immediately
              before   and   immediately   after,   respectively,   the  shuffle_obj_to_top()  or
              shuffle_obj_to_bottom() command.

       set_selected_obj_color(<color_str>)
              This command changes the color of the selected object to <color_str>.  If no object
              is selected, the current color will be changed to <color_str>.

       set_selected_obj_fill(<fill_index>)
              This command changes the fill pattern of the selected object to <fill_index>, which
              must be between 0 (for no fill) and 31.  If no object is selected, the current fill
              pattern will be changed to <fill_index>.

       set_selected_obj_pen(<pen_index>)
              This  command  changes the pen of the selected object to <pen_index>, which must be
              between 0 (for no pen) and 31.  If no object is selected, the current pen  will  be
              changed to <pen_index>.

       set_selected_obj_line_width(<width>,<arrow_w>,<arrow_h>)
              This  command changes the line width, arrow width, and arrow height of the selected
              object to  <width>,  <arrow_w>,  and  <arrow_h>,  respectively.   If  <arrow_w>  or
              <arrow_h> is -1, the arrow width or arrow height, respectively, is not changed.  If
              no object is selected, the current line width will  be  changed  to  the  one  that
              matches  <width>,  <arrow_w>,  and  <arrow_h> most closely.  (Closeness is measured
              such that the difference in width is counted 10 times the difference in arrow width
              and arrow height.)

       set_selected_obj_spline(<spline_type>)
              This command changes the spline type of the selected object to <spline_type>, which
              can be straight, spline, interpolated, or structured.  If no  object  is  selected,
              the current spline type will be changed to <spline_type>.

       set_selected_obj_arrow(<arrow_type>)
              This  command  changes the arrow type of the selected object to <arrow_type>, which
              can be none, right, left, or double.  If no object is selected, the  current  arrow
              type will be changed to <arrow_type>.

       set_selected_obj_dash(<dash_index>)
              This  command  changes  the dash type of the selected object to <dash_index>, which
              must be between 0 (solid) and 8.  If no object is selected, the current  dash  type
              will be changed to <dash_index>.

       set_selected_obj_trans_pat(<trans_pat>)
              This command changes selected object to have opaque pattern if <trans_pat> is 0; it
              changes selected object to have transparent pattern if  <trans_pat>  is  any  other
              numeric  value.  If no object is selected, the current fill and pen pattern will be
              opaque if <trans_pat> is 0 and will be transparent  if  <trans_pat>  is  any  other
              numeric value.

       set_selected_obj_rcb_radius(<rcb_radius>)
              This command changes the rcbox radius of the selected object to <rcb_radius>, which
              must be greater or equal to 4.  If no object is selected, the current rcbox  radius
              will be changed to <rcb_radius>.

       set_selected_text_vspace(<vspace>)
              This  command  changes  the  text vspace of the selected object to <vspace>.  If no
              object is selected, the current text vspace will be changed to <vspace>.

       set_selected_text_just(<justification>)
              This  command  changes  the  text  justification  of   the   selected   object   to
              <justification>,  which  can  be left, center, or right.  If no object is selected,
              the current text justification will be changed to <justification>.

       set_selected_text_font(<ps_font_name>)
              This command changes the font and text  style  of  the  selected  object  to  match
              <ps_font_name>.   Examples  of  valid  <ps_font_name> can be found when one selects
              CopyProperties() from the Properties Menu.  The item listed under text  font  is  a
              valid  <ps_font_name>.   If  no object is selected, the current font and text style
              will be changed to match <ps_font_name>.  This command fails if  no  match  can  be
              found.

       set_selected_text_style(<textstyle>)
              This  command  changes  the text style of the selected object to <textstyle>, which
              can be r (for roman), b (for bold), i (for italic), or bi (for bold-italic).  If no
              object is selected, the current text style will be changed to <textstyle>.

       set_selected_text_size(<size>)
              This  command  changes  the  text size of the selected object to <size>.  If <size>
              ends with the substring "pt", then point size is used instead  of  text  size.   If
              such  as  size  cannot be found in the Size Menu, the closest size in the Size Menu
              will be used.  If no object is selected, the current text size will be  changed  to
              <size> or the closest size.

       set_selected_text_underline(<underline>)
              This  command  removes text underline from the selected object if <underline> is 0;
              it underlines text in the selected object  if  <underline>  is  any  other  numeric
              value.   If  no  object  is  selected,  the  current text underline will be changed
              accordingly.

       set_selected_text_overline(<overline>)
              This command removes text overline from the selected object if <overline> is 0;  it
              overlines text in the selected object if <overline> is any other numeric value.  If
              no object is selected, the current text overline will be changed accordingly.

       inc(<attr_name>,<expr>)
              This command increment <attr_name> by the expression <expr>.   Both  the  value  of
              <attr_name>  and  <expr>  must  be integers.  Please see the ARITHMETIC EXPRESSIONS
              section below for details about expressions.

       dec(<attr_name>,<expr>)
              This command decrement <attr_name> by <expr>.  Both the value  of  <attr_name>  and
              <expr> must be integers.

       shuffle_obj_to_top(<obj_name>)
              This  command  move  <obj_name>  to  the  top.  If <obj_name> is a subobject, it is
              raised to the top, relative to its siblings.  This command is useful  in  animation
              where a selected frame (subobject) can be raised to the top.

       shuffle_obj_to_bottom(<obj_name>)
              This  command  move  <obj_name> to the bottom.  If <obj_name> is a subobject, it is
              dropped to the bottom, relative  to  its  siblings.   This  command  is  useful  in
              animation where a selected frame (subobject) can be dropped to the bottom.

       disable_undo()
              This  command  cleans up the undo/redo records and disable undo (and stop recording
              undo/redo information).  The original history depth is saved  away.   This  command
              should be used before a long animation sequence.

       enable_undo()
              This  command  restores  the history depth saved away by the disable_undo() command
              and enables undo/redo.  This command should be eventually used after disable_undo()
              is called.

       get_drawing_area(<ltx_attr>,<lty_attr>,<rbx_attr>,<rby_attr>)
              This  command  stores  the  absolute  coordinate of the current drawing area in the
              specified attributes.  <ltx_attr> stores  the  left-top  X  coordinate,  <lty_attr>
              stores  the left-top Y coordinate, <rbx_attr> stores the right-bottom X coordinate,
              and <rby_attr> stores the right-bottom Y coordinate.

       get_selected_obj_bbox(<ltx_attr>,<lty_attr>,<rbx_attr>,<rby_attr>)
              This command stores the absolute coordinate of the bounding  box  of  the  selected
              object  in  the specified attributes.  <ltx_attr> stores the left-top X coordinate,
              <lty_attr> stores the left-top Y coordinate, <rbx_attr> stores the  right-bottom  X
              coordinate,  and <rby_attr> stores the right-bottom Y coordinate.  The bounding box
              is computed assuming that all lines are of width 0.

       get_named_obj_bbox(<obj_name>,<ltx_attr>,<lty_attr>,<rbx_attr>,<rby_attr>)
              This command stores the absolute coordinate of the bounding box of the object named
              <obj_name>   in  the  specified  attributes.   <ltx_attr>  stores  the  left-top  X
              coordinate, <lty_attr> stores the left-top  Y  coordinate,  <rbx_attr>  stores  the
              right-bottom  X  coordinate,  and  <rby_attr> stores the right-bottom Y coordinate.
              The bounding box is computed assuming that all lines are of width 0.

       move_selected_obj_absolute(<ltx>,<lty>)
              This command moves left-top corner of the selected object to (<ltx>,<lty>).

       assign(<attr_name>,<expr>)
              This command assigns <expr> to the attribute specified by <attr_name>.  <expr> must
              be evaluated to a numeric value.

       strcpy(<attr_name>,<string>)
              This command copies <string> into the attribute specified by <attr_name>.

       copy_string_to_cut_buffer(<string>)
              This command copies <string> into the cut buffer.

       strcat(<attr_name>,<string>)
              This command appends <string> to the attribute specified by <attr_name>.

       while(<expr>,<cmd_attr_name>)
              This  command  keeps executing the internal command in <cmd_attr_name> until <expr>
              evaluates to 0.

       if(<expr>,<then_cmd_attr_name>,<else_cmd_attr_name>)
              If <expr> evaluates to 0, the internal command in <else_cmd_attr_name> is executed;
              otherwise,    the   internal   command   in   <then_cmd_attr_name>   is   executed.
              <then_cmd_attr_name>  or  <else_cmd_attr_name>  can  be  the  string  NULL   (case-
              sensitive); in this case, no corresponding action is taken.

       get_current_file(<attr_name>)
              This command stores the full path name of the current file in <attr_name>.

       get_current_export_file(<attr_name>)
              This  command  stores  the  full  path  name  of  the output (print/export) file in
              <attr_name>.

       get_current_dir(<attr_name>)
              This command stores the current directory in <attr_name>.

       getenv(<attr_name>,<env_var_name>)
              This command stores the environment variable named <env_var_name> in <attr_name>.

       strlen(<attr_name>,<string>)
              This command assigns the number of characters in <string> to <attr_name>.

       substr(<attr_name>,<string>,<start_index>,<length>)
              This  command  copies  <length>  characters,  starting  from  the  character  index
              <start_index>, of <string> into <attr_name>.  The <start_index> is zero-based.

       strstr(<attr_name>,<string>,<sub_string>)
              This  command  finds  the  first  occurrence of <sub_string> in <string> and copies
              <sub_string> and the rest of the string into <attr_name>.

       strrstr(<attr_name>,<string>,<sub_string>)
              This command finds the last occurrence  of  <sub_string>  in  <string>  and  copies
              <sub_string> and the rest of the string into <attr_name>.

       unmake_selected_obj_iconic()
              This  command has the same effect as selecting UnMakeIconic() from the Special Menu
              except that at least one object must be selected already.

       hyperjump_then_exec(<attr_name>,<attr_name_to_exec>)
              This command teleports to the file name  or  URL  name  found  in  the  <attr_name>
              attribute  then  executes the internal command specified by the <attr_name_to_exec>
              attribute in the new file.

       show_attr(<attr_name>)
              This command makes the <attr_name> attribute visible.

       hide_attr(<attr_name>)
              This command makes the <attr_name> attribute invisible.

       show_attr_name(<attr_name>)
              This command makes the name part of the <attr_name> attribute visible.

       hide_attr_name(<attr_name>)
              This command makes the name part of the <attr_name> attribute invisible.

       show_value(<attr_value>)
              This  command  makes  the  attribute  whose  name  is  empty  and  whose  value  is
              <attr_value> visible.

       hide_value(<attr_value>)
              This  command  makes  the  attribute  whose  name  is  empty  and  whose  value  is
              <attr_value> invisible.

       get_attr_bbox(<ltx_attr>,<lty_attr>,<rbx_attr>,<rby_attr>,<attr_name>)
              This command stores the absolute coordinate of the bounding box of the  <attr_name>
              attribute   in   the  specified  attributes.   <ltx_attr>  stores  the  left-top  X
              coordinate, <lty_attr> stores the left-top  Y  coordinate,  <rbx_attr>  stores  the
              right-bottom  X  coordinate,  and  <rby_attr> stores the right-bottom Y coordinate.
              The bounding box is computed assuming that all lines are of width 0.

       size_selected_obj_absolute(<abs_w>,<abs_h>)
              This command stretches the right-bottom corner of the selected object so  that  its
              width becomes <abs_w> and height becomes <abs_h>.

       size_named_obj_absolute(<obj_name>,<abs_w>,<abs_h>)
              This  command  stretches  the right-bottom corner of the object named <obj_name> so
              that its width becomes <abs_w> and height becomes <abs_h>.

       message_box(<attr_name>,<msg>,<title>,<style>)
              This command displays a messagebox with <title> as  the  title  and  <msg>  as  the
              message.  <style> can be the string "info", "ync", "yn", or "stop".  The messagebox
              display an OK button for the "info" or "stop" styles, YES/NO/CANCEL buttons for the
              "ync"  style,  YES/NO  buttons for the "yn" style.  When the user click a button in
              the messagebox, the name of the button will be placed in <attr_name>.  If the  user
              cancels  the  messagebox  by  typing  the <ESC> key, <attr_name> will be set to the
              string  "CANCEL".   If  <attr_name>  is  the  string  NULL  (case-sensitive),   the
              information  about  which button is clicked is not written anywhere.  If <title> is
              the string NULL, Tgif will be the title for the messagebox.

       get_user_input(<attr_name>,<msg1>,<msg2>)
              This command displays a dialogbox with <msg1> in the first line and <msg2>  in  the
              second  line.   If <msg2> is the string "USE_CURRENT_DIR", the second line displays
              the current directory.  The user can type in a line  in  the  dialogbox  which  get
              placed  in  <attr_name>.   If  the user cancels the dialog by typing the <ESC> key,
              <attr_name> will be set to the empty string.

       add_attr_to_selected_obj(<attr_name>,<attr_value>,<abs_x>,<abs_y>)
              This command adds <attr_name>=<attr_value> to  a  selected  object  and  place  the
              attribute   at  (<abs_x>,<abs_y>).   If  <attr_name>  is  the  string  NULL  (case-
              sensitive), the attribute's name will be the empty string.  If <abs_x> and  <abs_y>
              are  both  NULL (case-sensitive), the attribute will be placed below the lower left
              corner of the object.  If <attr_name> starts with "!.", a file  attribute  will  be
              added.

       delete_attr_from_selected_obj(<attr_name>)
              This  command  deletes  an  attribute named <attr_name> from a selected object.  If
              <attr_name> starts with "!.", a file attribute will be deleted.

       user_end_an_edge(<attr_name>,<abs_x>,<abs_y>)
              This command starts  a  polyline/open-spline  at  (<abs_x>,<abs_y>),  switches  the
              drawing  mode  to  the  draw  polyline/open-spline,  and  lets  the user finish the
              polyline/open-spline.  If the endpoint falls  in  an  object  having  an  attribute
              type=port,  that object's name will be placed in <attr_name>, if <attr_name> is not
              the string NULL (case-sensitive).

       user_draw_an_edge(<start_attr_name>,<end_attr_name>)
              This command switches the drawing mode to the draw  polyline/open-spline  and  lets
              the  user  draw  a  polyline/open-spline.  If the first endpoint falls in an object
              having  an  attribute  type=port,  that   object's   name   will   be   placed   in
              <start_attr_name>,  if <end_attr_name> is not the string NULL (case-sensitive).  If
              the last endpoint falls in an object having an attribute type=port,  that  object's
              name  will  be  placed  in  <end_attr_name>,  if <attr_name> is not the string NULL
              (case-sensitive).

       get_a_poly_vertex_absolute(<x_attr_name>,<y_attr_name>,<obj_name>,<index>)
              This command stores the absolute coordinate of the <index>th vertex  of  <obj_name>
              in  attributes  specified by <x_attr_name> and <y_attr_name>.  The object specified
              by <obj_name> must be either a poly/open-spline or a polygon/closed-spline object.

       move_a_poly_vertex_absolute(<obj_name>,<index>,<abs_x>,<abs_y>)
              This command moves the <index>th vertex of <obj_name> to  the  absolute  coordinate
              (<abs_x>,<abs_y>).   The object specified by <obj_name> must be either a poly/open-
              spline or a polygon/closed-spline object.

       post_attr_and_get_cgi_result(<url_attr>,<query_attr>,<result_attr>)
              This command makes an HTTP request using the POST  method.   <url_attr>  names  the
              attribute  that  contains  the  URL  (which  usually  names  a  CGI server script).
              <query_attr>  names  the  attribute  whose  value  is  the  data  to   be   posted.
              <result_attr>  names  the  attribute for receiving the results.  For example, if an
              object has the following attributes:

                     url=http://bourbon.usc.edu:8001/cgi-bin/echo-post
                     query=Hello World!
                     result=
                     exec=post_attr_and_get_cgi_result(url,query,result)

              executing this object will post "Hello World!" to the  specified  CGI  script.   In
              this  case,  the  result  of  executing  the script just echoes "Hello World!" back
              (along with some other bookkeeping information).

       navigate_back()
              This command performs the same operation as if the NavigateBack() is selected  from
              the Navigate Menu.

       stop() This command stops the execution of all internal commands.

       sqrt(<attr_name>,<expr>)
              This  command  assigns  the  square-root  of <expr> to <attr_name>.  <expr> must be
              evaluated to a non-negative numeric value.

       random(<attr_name>)
              This command assigns a random integer to <attr_name> using the C  library  function
              rand().  0 is used as a seed for the random number generator.

       srand48(<use_cur_time_as_seed>)
              This  command  seeds the random generator used by the C library function drand48().
              If <use_cur_time_as_seed> is 0, 0 will be used as a seed.  Otherwise,  the  current
              time will be used as a seed.

       drand48(<attr_name>)
              This  command  assigns a floating pointer number between 0.0 and 1.0 to <attr_name>
              using the C library function drand48().

       round(<attr_name>,<expr>)
              This command assigns the round of <expr> to <attr_name>.

       redraw_obj(<obj_name>)
              This command redraws the area occupied by <obj_name>.

       redraw_drawing_area()
              This command redraws the whole drawing area (visible through the Canvas Window).

       itox(<attr_name>,<digits>,<expr>)
              This command assigns <attr_name> to be the hex value of  <expr>.   <digits>  (which
              must be between 1 and 8, inclusive) is the final width of the hex value (zeroes are
              added on the left).

       for_i(<attr_name>,<min_val>,<max_val>,<increment>,<cmd_attr_name>)
              This command is the same as the following sequence of commands:

                     assign(<attr_name>,<min_val>);
                     while($(<attr_name>) <= <max_val>,loop)

              where loop has the following value:

                     exec(<cmd_attr_name>);
                     inc(<attr_name>,<increment>)

              Please note that <min_val>, <max_val>, and  <increment>  are  only  evaluated  once
              prior the execution of this command.

       set_file_not_modified()
              This command sets the file modified flag to false.

       new_id(<attr_name>)
              This  command  generates  an object ID, which is unique in the current drawing, and
              stores it in <attr_name>.

       rotate_selected_obj(<angle>)
              This command rotates the selected object by <angle>  degrees.   Positive  angle  is
              clockwise.

       call_simple_shortcut(<shortcut_name>)
              This  command  calls  a  shortcut  named  <shortcut_name> which takes no arguments.
              Please see the SHORTCUTS section for a description of shortcuts.

       call_one_arg_shortcut(<shortcut_name>,<arg>)
              This command calls a shortcut named <shortcut_name> that  takes  one  argument  and
              passes  <arg>  to  it.   Please  see  the  SHORTCUTS  section  for a description of
              shortcuts.

       substitute_attr(<attr_name>,<src_attr_name>,<replace_attr_name>,<pattern_str>)
              This command replaces occurrences  of  <pattern_str>  in  the  value  part  of  the
              attribute  specified  by <src_attr_name> by the value of the attribute specified by
              <replace_attr_name>  and  write  the  result  into  the  attribute   specified   by
              <attr_name>.

       get_file_size(<attr_name>,<file_name>)
              This  command  puts  the  size  of  file  specified by <file_name> in the attribute
              specified by <attr_name>.

       is_file(<attr_name>,<file_name>)
              This command puts a "1" in the attribute  specified  by  <attr_name>  if  the  file
              specified by <file_name> exists.  It puts a "0" otherwise.

       index(<attr_name>,<string>,<sub_string>)
              This  command finds the first occurrence of <sub_string> in <string> and copies the
              zero-based index into <attr_name>.

       rindex(<attr_name>,<string>,<sub_string>)
              This command finds the last occurrence of <sub_string> in <string> and  copies  the
              zero-based index into <attr_name>.

       get_number_of_lines_in_attr(<result_attr>,<attr_name>)
              This  command  counts the number of lines in the attribute specified by <attr_name>
              and writes the count into <result_attr>.

       get_line_in_attr(<result_attr>,<attr_name>,<line_number>)
              This command copies the nth line of the attribute  specified  by  <attr_name>  into
              <result_attr>, where n is a zero-based index specified by <line_number>.

       trim(<attr_name>)
              This  command  removes  leading  and  trailing  blank characters from the attribute
              specified by <attr_name>.

       is_attr(<result_attr>,<attr_name>)
              This command writes  a  "1"  into  <result_attr>  if  the  attribute  specified  by
              <attr_name> exists.  It writes a "0" into <result_attr> otherwise.

       find_obj_names(<result_attr>,<obj_name>,<attr_name_value>)
              This  command finds all objects that are direct sub-objects of the object specified
              by <obj_name> and writes their names into <result_attr>.  If <obj_name> is an empty
              string, all top-level objects are scanned.

              <attr_name_value>  specifies a filter for the objects.  If <attr_name_value> is the
              empty string, all qualifying objects are selected.  If <attr_name_value> is of  the
              form "<string>=*", an object is selected if it has an attribute named <string>.  If
              <attr_name_value> is of the form "<string>=<value>", an object is  selected  if  it
              has  an  attribute  named  <string>  and  its  corresponding  value is <value>.  If
              <attr_name_value> does not contain the '=' character, an object is selected  if  it
              has  an  attribute  whose name is empty and the corresponding value is identical to
              <attr_name_value>.

              If n objects are matched, the attribute specified by <result_attr> is updated  with
              n+1  lines.   The  value  of the zeroth line becomes n and the object names becomes
              lines 1 through n of <result_attr>.  The get_line_in_attr() internal command can be
              used to retrieve the object names.

       find_obj_names_on_all_pages(<result_attr>,<attr_name_value>)
              This  command  is similar to find_obj_names() above, except that it only finds top-
              level objects on all pages.  The result  is  written  into  <result_attr>.   For  a
              multi-page  file, a top-level object name <name> will be written into <result_attr>
              as ##<page_num>!<name>.  For a single-page file, this command behaves  exactly  the
              same as find_obj_names(<result_attr,"",<attr_name_value>).

       tg2_find_obj_names_on_all_pages(<result_attr>,<attr_name_value>)
              This command is identical to find_obj_names_on_all_pages() above, except that for a
              multi-page file, a top-level object name <name> will be written into  <result_attr>
              as <name>_Page<page_num>.

       tokenize(<result_attr>,<string>,<separator>)
              This  command  breaks  <string>  into tokens which are separated by the <separator>
              character and writes the tokens (in the same fashion  as  in  the  find_obj_names()
              internal command above) into <result_attr>.  <separator> must be a string of length
              of 1 and it must not be the space character, the  single-quote  character,  or  the
              double-quote character.  If a token contains the separator character, the token can
              be surrounded by a pair of single-quotes or double-quotes which  are  automatically
              removed when this command is executed.

              If n tokens are found, the attribute specified by <result_attr> is updated with n+1
              lines.  The value of the zeroth line becomes n  and  the  tokens  becomes  lines  1
              through n of <result_attr>.  The get_line_in_attr() internal command can be used to
              retrieve the tokens.

       move_attr_relative(<attr_name>,<dx>,<dy>)
              This command moves the attribute whose name is <attr_name> by <dx>  absolute  units
              in the x direction and <dy> absolute units in the y direction.

       get_number_of_vertices(<result_attr>,<obj_name>)
              This  command  copies  the number of vertices of the object specified by <obj_name>
              into <result_attr>.  The specified object must be a  polyline  (open-spline)  or  a
              polygon (closed-spline).

       is_obj_transformed(<result_attr>,<obj_name>)
              This  command writes a "1" into <result_attr> if the object specified by <obj_name>
              is transformed (rotated or sheared).  It writes a "0" into <result_attr> otherwise.

       make_selected_obj_iconic(<sym_path>)
              This command works like the MakeIconic() command from the Special Menu, except that
              the  user is not prompted for the name of the icon.  Instead, <sym_path> is used to
              specify the full path name of the icon.

       get_tgif_version(<major_attr,minor_attr,patchlevel_attr,build_attr>)
              This command writes tgif's major version number, minor version number,  patchlevel,
              and  build  information  into  <major_attr>,  <minor_attr>,  <patchlevel_attr>  and
              <build_attr>, respectively.  If an argument is the  string  NULL  (case-sensitive),
              that information is skipped.

       get_tgif_dir(<result_attr>)
              This  command  writes  "$HOME/.Tgif"  into  <result_attr>  where  $HOME is the home
              directory of the user.

       get_profile_string(<result_attr>,<section>,<key>,<def_value>,<ini_path>)
              This command gets the value associated with the key specified  by  <key>  from  the
              section  specified  by  <section> in the file specified by the full path <ini_path>
              and stores it into the attribute specified by <result_attr>.  If there is not value
              associated  with  the  specified key, <def_value> is stored into <result_attr>.  If
              <key> is an empty string, all the key names in  <section>  of  <ini_path>  will  be
              written  (in  the  same  fashion as in the find_obj_names() internal command above)
              into <result_attr>.  If <section> is an empty string,  all  the  section  names  in
              <ini_path> will be written (in the same fashion as in the find_obj_names() internal
              command above) into <result_attr>.

       write_profile_string(<section>,<key>,<value>,<ini_path>)
              This command sets the value associated with the  key  specified  by  <key>  of  the
              section specified by <section> in the file specified by the full path <ini_path> to
              be <value>.  If <key> is an empty string,  all  key/value  pairs  in  <section>  of
              <ini_path> will be cleared.  <section> should not be an empty string.

       select_additional_obj(<obj_name>)
              This  command silently (no highlighting handles) selects an additional object named
              <obj_name>.  Please see the OBJECT NAMES section above  for  the  specification  of
              object names.

       open_file(<file_number>,<file_name>,<file_mode>)
              This  command  opens  the  file  specified  by <file_name> in the mode specified by
              <file_mode> and assigns the opened file a file reference number  of  <file_number>.
              <file_number>  must  be 0 or between 3 and 15.  Opening file 0 rewinds the standard
              input.  Examples of modes are "r"  for  reading,  "w"  for  writing,  and  "a"  for
              appending.  A file is always opened in text (non-binary) mode.

       close_file(<file_number>)
              This  command  closes the file associated with file reference number <file_number>.
              <file_number> must be 0 or between 3 and 15.

       read_file(<file_number>,<result_attr>)
              This command reads a line from the  file  associated  with  file  reference  number
              <file_number>  and  put  the  line  in  the  attribute  specified by <result_attr>.
              <file_number> must be between 0 (for standard input) or between 3 and 15.

       write_file(<file_number>,<string>)
              This command writes <string> to the file  associated  with  file  reference  number
              <file_number>.   <file_number>  must  be between 1 and 15.  Numbers 1 and 2 are for
              standard output and standard error files.

       flush_file(<file_number>)
              This command flushes the file associated with file reference number  <file_number>.
              <file_number>  must  be  between 1 and 15.  Numbers 1 and 2 are for standard output
              and standard error files.

       append_file(<dest_file_name>,<src_file_name>)
              This command appends the file specified by <src_file_name> to the file specified by
              <dest_file_name>.

       set_output_format(<format>,<color_output>)
              This command sets the output format to <format>.  If <color_output> is 0, black and
              white output (printing) mode will be used; otherwise, color output (printing)  mode
              will  be  used.   Please see the Tgif.WhereToPrint X default for a list of possible
              formats.

       set_export_clip_rect(<ltx>,<lty>,<rbx>,<rby>)
              This command sets the export clipping rectangle to be  a  rectangular  region  with
              left-top  corner  at (<ltx>,<lty>) and right-bottom corner at (<rbx>,<rby>).  <ltx>
              must be strictly less than <rbx> and <lty> must be strictly less than <rby>.

       import_file(<file_name>,<format>,<ltx>,<lty>)
              This  command  imports  the  file  specified  by  <file_name>  and  places  it   at
              (<ltx>,<lty>).   The  file  is  expected to be in the format specified by <format>,
              which can be "XBM", "XPM", "GIF", "PNG", "JPEG", "PBM",  "PGM",  "PPM",  and  names
              specified  by  the  Tgif.ImportFilter# X defaults.  If <format> is "TGIF", the file
              should either be a tgif file.

       set_xpm_output_version(<version_number>)
              This command sets the XPM version number when outputting in the X11  pixmap  format
              to be <version_number>.  <version_number> can take on values 1 or 3.

       edit_ini_section(<attr_name>,<title>,<section>,<ini_path>)
              This  command  brings  up a dialogbox to edit the section specified by <section> in
              the file specified by the full path <ini_path>.  If the user press the OK button in
              the  dialogbox,  the section is cleared and the content of the dialogbox is written
              back into the file, and "OK" is placed in the attribute specified  by  <attr_name>.
              If  the  user press the CANCEL button in the dialogbox, the file is unmodified, and
              "CANCEL" is placed in the attribute specified by <attr_name>.

       select_from_ini_section(<attr_name>,<title>,<section>,<ini_path>)
              This command brings up a list to select an entry  from  the  section  specified  by
              <section>  in  the  file  specified  by  the  full  path <ini_path>.  If nothing is
              selected, the attribute specified by <attr_name> will be cleared.   Otherwise,  the
              selected entry will be written into the attribute specified by <attr_name>.

       append_line_into_attr(<attr_name>,<string>)
              This  command  appends the line specified by <string> to the attribute specified by
              <attr_name>.

       insert_line_into_attr(<attr_name>,<string>,<line_number>)
              This command inserts the line  specified  by  <string>  as  the  nth  line  of  the
              attribute  specified  by  <attr_name>,  where  n is a zero-based index specified by
              <line_number>.  n must be at least 1.  If n is larger than the number of  lines  in
              the attribute, blank lines are automatically inserted.

       clear_attr(<attr_name>)
              This  command  clears the attribute value of the attribute specified by <attr_name>
              and deletes all other lines of the attribute if  the  attribute  contains  multiple
              lines.

       create_text_obj(<abs_x>,<abs_baseline_y>,<string>)
              This  command creates a text object at the location (<abs_x>,<abs_baseline_y>) with
              the text specified by <string>.

       create_box_obj(<abs_ltx>,<abs_lty>,<abs_rbx>,<abs_rby>)
              This  command  creates   a   rectangle   defined   by   (<abs_ltx>,<abs_lty>)   and
              (<abs_rbx>,<abs_rby>).

       create_corner_oval_obj(<abs_ltx>,<abs_lty>,<abs_rbx>,<abs_rby>)
              This   command   creates   a  corner  oval  defined  by  (<abs_ltx>,<abs_lty>)  and
              (<abs_rbx>,<abs_rby>).

       create_center_oval_obj(<abs_x>,<abs_y>,<radius>)
              This command creates a  center  oval  centered  at  (<abs_x>,<abs_y>)  with  radius
              specified by <radius>.

       create_edge_oval_obj(<abs_ltx>,<abs_lty>,<abs_rbx>,<abs_rby>)
              This   command   creates  an  edge  circle  defined  by  (<abs_ltx>,<abs_lty>)  and
              (<abs_rbx>,<abs_rby>).

       create_rcbox_obj(<abs_ltx>,<abs_lty>,<abs_rbx>,<abs_rby>)
              This command creates a rounded-corner rectangle  defined  by  (<abs_ltx>,<abs_lty>)
              and (<abs_rbx>,<abs_rby>).

       create_arc_obj(<abs_x>,<abs_y>,<radius>,<dir>,<angle1>,<angle2>)
              This  command  creates an arc centered at (<abs_x>,<abs_y>) with radius, direction,
              start angle, and end angle specified by <radius>, <dir>,  <angle1>,  and  <angle2>,
              respectively.   The  <radius>,  <dir>,  <angle1>, and <angle2> are specified in the
              same way as they are specified in the SpecifyAnArc() command under the CreateObject
              submenu  of  the  Edit  Menu.   <dir>  can  be  "+"  or "-" where "+" is clockwise.
              <angle1> and <angle2> are in degrees with 0 degree at the 12 o'clock position.

       create_first_vertex(<abs_x>,<abs_y>)
              This  command  is  used  in   conjunction   with   the   create_next_vertex()   and
              create_poly_obj() commands to create a polyline/open-spline object.  It can also be
              used in conjunction with the create_next_vertex() and create_polygon_obj() commands
              to  create a polygon/closed-spline object.  This command sets the starting point of
              the polyline/open-spline object  or  the  polygon/closed-spline  object  to  be  at
              (<abs_x>,<abs_y>).

       create_next_vertex(<abs_x>,<abs_y>)
              This   command   is   used   in  conjunction  with  the  create_first_vertex()  and
              create_poly_obj() commands to create a polyline/open-spline object.  It can also be
              used   in  conjunction  with  the  create_first_vertex()  and  create_polygon_obj()
              commands to create a polygon/closed-spline object.   This  command  sets  the  next
              vertex of the polyline/open-spline object or the polygon/closed-spline object to be
              at (<abs_x>,<abs_y>).

       create_poly_obj()
              This  command  is  used  in  conjunction   with   the   create_first_vertex()   and
              create_next_vertex() commands to create a polyline/open-spline object.

       create_polygon_obj()
              This   command   is   used   in  conjunction  with  the  create_first_vertex()  and
              create_next_vertex() commands to create a polygon/closed-spline object.

       start_create_group_obj()
              This command is used in conjunction with the create_group_obj() command to create a
              grouped object.  This command marks the beginning of the group.

       create_group_obj()
              This  command  is  used in conjunction with the start_create_group_obj() command to
              create a grouped object.  This command groups all objects created  since  the  last
              start_create_group_obj() call into a grouped object.

       set_allow_interrupt(<true_or_false>)
              If  <true_or_false>  is FALSE (case-sensitive), this command is used to temporarily
              disable an user interrupt when tgif is executing  internal  commands.   If  a  user
              interrupt  is  received  when  interrupt  is  disabled,  it will be queued and will
              interrupt the execution of internal commands when set_allow_interrupt()  is  called
              again with <true_or_false> being TRUE (case-sensitive).

       select_each_obj_and_exec(<attr_name_to_exec>)
              This  command  first  unselects  any object that is selected.  It then selects each
              object in the current drawing in turn and executes the internal  command  specified
              by the <attr_name_to_exec> attribute.  If this command is executed as a result of a
              mouse click over an object, only objects in the current page will  be  scanned  for
              execution.   If  this command is executed from a script file, objects in every page
              will be scanned for execution.

       edit_attr_in_text_mode(<attr_name>)
              When this command is executed, tgif enters the text  drawing  mode  and  edits  the
              attribute specified by <attr_name>.

       set_file_unsavable()
              This command is used to make the current file unsavable.

       pstoepsi(<target_eps_path>,<src_ps_path>,<scale>)
              This  command  generates  a preview bitmap for the PostScript file in <src_ps_path>
              and  prepends  it  to  <src_ps_path>  and  save  the  output  in  <target_eps_path>
              (<src_ps_path>  is unmodified).  The only accepted values of <scale> is 1 or 2.  If
              the Tgif.ExternalPsToEpsi X default is set to true, this command will simply invoke
              "pstoepsi  <src_ps_path>  <target_eps_path>"  externally  if  <scale> is 1 and will
              invoke "pstoepsi -2x  <src_ps_path>  <target_eps_path>"  if  <scale>  is  2.   This
              command only works if tgif is running in the interactive (non-batch) mode.

       objs_bbox_intersect(<obj1_name>,<obj2_name>,<result_attr>)
              This  command  sets the value of the attribute specified by <result_attr> to "1" if
              the boundingboxes of objects named <obj1_name> and <obj2_name> intersect.  It  sets
              the value of the attribute specified by <result_attr> to "0" otherwise.

       delete_all_attr_from_selected_objs()
              This  command  deletes  all attributes from selected objects.  Please only use this
              command when commands are taken from an external file!

       random_permute_lines_in_attr(<attr_name>)
              This command randomly permutes lines of an attribute specified by <attr_name>.

ARITHMETIC EXPRESSIONS

       Certain internal commands allow arithmetic expressions as arguments.   Infix  notation  is
       used.  Supported operators (and their precedences) are listed below.

        ?   1    if-then-else, e.g. <rel> ? <iftrue> : <else>
        :   2    if-then-else, e.g. <rel> ? <iftrue> : <else>
        ||  3    logical OR
        &&  4    logical AND
        |   5    bit-wise OR
        ^   5    bit-wise XOR
        &   5    bit-wise AND
        ==  6    equal
        !=  6    not-equal
        >   7    greater than
        <   7    less than
        >=  7    greater than or equal to
        <=  7    less than or equal to
        <<  8    shift left
        >>  8    shift right
        +   9    add
        -   9    subtract
        *  10    multiple
        /  10    divide
        // 10    integer divide
        %  10    mod
        !  11    logical NOT
        ~  11    bit-wise invert/NOT
        )  12    closed parenthesis
        (  13    open parenthesis

GENERATING IMAGEMAP FILES

       This  section describes how to generate NCSA imagemap and CERN clickable image files.  The
       Tgif.ImageMapFileFormat X default decides whether to generate a NCSA imagemap  or  a  CERN
       clickable image file.  Since the two formats are very similar, we will only discuss how to
       generate NCSA imagemap files.  For more information about NCSA imagemap, please  see  [3].
       For more information about CERN clickable image, please see [4].

       The  Tgif.GenerateImageMap  X  default  should  be  set to ``true'' to enable the imagemap
       generation.  When printing in the GIF format (see the BASIC FUNCTIONALITIES section  about
       printing),  an  XPM  file  (which will be removed at the end of this process) is generated
       first.  (The value specified by the Tgif.InitExportPixelTrim X default  is  used  to  trim
       extra  pixels.   Using  these values forms an escape mechanism to fix an idiosyncrasy that
       tgif can not figure out exactly how big the whole image is.)

       The  XPM  version  is  specified  by  the  Tgif.XPmOutputVersion  X  default  unless   the
       Tgif.UseXPmVersion1ForImageMap X default is set to ``true'', which forces the XPM1 format.
       Then the command specified by the Tgif.XpmToGif X default is executed to convert  the  XPM
       file  into  a  GIF (Generic Interchange Format) file which can be used by software such as
       NCSA's  Mosaic(1).   The  file  extension  for  the  GIF  file   is   specified   by   the
       Tgif.GifFileExtension  X  default.  Together with the GIF file, an imagemap file with file
       extension specified by the Tgif.ImageMapFileExtension X default is generated.  The content
       of the imagemap is generated as follows.

       Tgif  first  looks  for  a  file  attribute  with  attribute  name href.  The value of the
       attribute is written as the default URL.  If such a  file  attribute  can  not  be  found,
       imagemap generation is aborted.  If it is found, then all objects in the file are scanned.
       For an object having an attribute named href, the value of the attribute is written as the
       URL  for  a  method  line  in  the  imagemap.   If  the  object  is neither a circle nor a
       poly/polygon, the rectangle method is used.

       Similar mechanism is used when printing in the HTML format, except  that  a  generic  HTML
       file  is generated with an imagemap in the Spy Glass Client-side Imagemap format.  You can
       generate  a  custom  HTML  file  if  you   specify   an   HTML   export   template   using
       SetHTMLExportTemplate()  from the File Menu.  Details about the template file is described
       below.

HTML EXPORT TEMPLATE

       If an HTML export template file is specified with  the  SetHTMLExportTemplate()  from  the
       File  Menu,  custom  HTML  files  can  be generated when printing in the HTML format.  The
       customization is done through the use of variables embedded in the  HTML  export  template
       file.   These variables have the syntax of an HTML character entity.  They all starts with
       "&tgv" and ends with ";".  They are:

       &tgvfilename;
              This variable will be replaced by the name of the file (without file extension).

       &tgvcurnum;
              This variable will be replaced by current page number.

       &tgvfirstnum;
              This variable will be replaced by the first page number (usually 1).

       &tgvlastnum;
              This variable will be replaced by last page number.

       &tgvprevnum;
              This variable will be replaced by the previous page number (with wrap around).

       &tgvprevnumnowrap;
              This variable will be replaced by the previous page number (with no wrap around).

       &tgvnextnum;
              This variable will be replaced by the next page number (with wrap around).

       &tgvnextnumnowrap;
              This variable will be replaced by the next page number (with no wrap around).

       &tgvtitle;
              This variable will be replaced by the title the page or of the file.

       &tgvmapobjs;
              This variable will be replaced by the objects  (specified  as  <AREA>  tabs)  in  a
              client-side image map.

       For example, if a template specifies:

              <IMG SRC="&tgvfilename;-&tgvcurnum;.gif"
                     USEMAP="#p0">
              <MAP NAME="p0">
              &tgvmapobjs;
              <AREA SHAPE="RECT"
                     COORDS="0,0,&tgvmapwidth;,&tgvmapheight;"
                     HREF="&tgvfilename;-&tgvnextnum;.html">
              </MAP>

       Exporting  using  PrintOneFilePerPage()  with  this template may get (for page 2 of a file
       name "foo.obj" with 5 pages):

              <IMG SRC="foo-2.gif"
                     USEMAP="#p0">
              <MAP NAME="p0">
              <AREA SHAPE="RECT" ...>
               ...
              <AREA SHAPE="RECT" ...>
              <AREA SHAPE="RECT"
                     COORDS="0,0,145,97"
                     HREF="foo-3.html">
              </MAP>

GENERATING MICROSOFT WINDOWS EPSI FILES

       Some  Microsoft  Windows  (TM)  applications  do  not   understand   standard   PostScript
       %%BeginPreview,  %%EndImage,  and  %%EndPreview  comments.   This section describes how to
       generate an EPSI file which is understood by them.   This  feature  is  invoked  when  the
       current  print  format is TiffEPSI.  In this case, the generated EPSI file will contain 30
       bytes of binary information in the beginning of the file and a TIFF image (also binary) at
       the  end of the file.  This file also will not contain the %%BeginPreview, %%EndImage, and
       %%EndPreview comments.  A file  in  this  format  is  normally  not  considered  to  be  a
       PostScript file except under Windows.

       When  this  feature  is  enabled,  tgif  generates a normal EPSI file first, then dump the
       current content  of  the  file  into  an  X11  bitmap  file.   The  command  specified  in
       Tgif.XbmToTiff is executed to generate a TIFF image which is then append at the end of the
       EPSI file.

LOCKING OBJECTS

       Objects can be locked and unlocked using #< and #> keyboard  commands.   When  a  selected
       object  is  locked,  it  is  shown  with  gray  handles.  A locked object cannot be moved,
       stretched, flipped, or rotated; however, its properties,  such  as  fill  pattern,  width,
       etc.,  can  be  changed.   Locked  objects  can  also be deleted.  When a locked object is
       grouped with other objects, the resulting grouped object is also locked.  A locked  object
       can  be  used  as an anchor to align other objects; however, DistributeObjs() command will
       fail if any objects are locked.  Locked objects do not participate in  any  operations  in
       the select vertex mode.

UNDO/REDO

       Most  operations  can  be undone and redone.  The Tgif.HistoryDepth X default controls the
       size of the undo buffer.  If it is set to -1, then the undo  buffer's  size  is  infinite.
       The  undo  buffer is flushed when the New() or Open() commands are executed (from the File
       Menu), when the FlushUndoBuffer() command is executed from the Edit Menu, or when Pop() is
       executed  from  a  .sym  file.  If a private colormap is used (automatically done when new
       colors can not be allocated from the default colormap), executing  FlushUndoBuffer()  will
       attempt to reset the colormap (if the -DDONT_FREE_COLORMAP compile option is not used).

DOMAINS

       A  domain  is  a  collection of library symbols suitable for instantiations.  A library is
       implemented as a directory of .sym files, and therefore, a  domain  is  implemented  as  a
       search  path.   If  there  are  symbols  with the same file name which reside in different
       directories specified in the search path, then the one closer to the front of  the  search
       path will be made available for the user to instantiate.

       The  number  of  domains  is  specified  by the MaxDomains X default, and the names of the
       domains are specified by  the  DomainPath#  X  default.   The  library  search  paths  are
       specified by csh environment variables.  See the section on X DEFAULTS for more details.

       Domain  information  can  also  be  loaded  into  the  ~/.Tgif/domain.ini  file by setting
       Tgif.DomainInIni to true and selecting Reload Domain Info From X from the  Domain  submenu
       of the File Menu.

SELECTING A NAME FROM A POPUP WINDOW

       When  selecting  a  file name, a symbol name, or a domain name, tgif pops up a window with
       appropriate names for the user to choose from.  The user can use mouse clicks to select an
       entry.   Key  strokes can also be used to specify the desired name; however, tgif attempts
       to match the key strokes with names in the selection on the fly.  If a match  can  not  be
       found,  the  key strokes are ignored.  ^n, ^j, or the DownArrow key advances the selection
       down by 1 entry; ^p, ^k, or the UpArrow key advances the selection up by 1 entry.  ^f, ^d,
       or  the  DownArrow  key  with  <Control>  key  held down advances the selection down by 10
       entries; ^b, ^u, or the UpArrow key with <Control> key held down advances the selection up
       by 10 entries.  '$' will select the last entry, while '^' will select the first entry.  ^w
       or ^y un-select the selected entry.  If the selected entry is a  directory,  hitting  <CR>
       will  change  directory;  if  not,  hitting  <CR>  finishes  the selection process and the
       selected entry is returned.

       In selecting file names to open or import, typing '/' is interpreted as going to the  root
       directory  or  specifying an URL.  At this point, the automatic matching of key strokes is
       temporarily disabled until either a <TAB> or a <CR> is pressed.  Also, clicking the middle
       mouse button in the file name area pastes from the clipboard.

       The  automatic appending of index.obj or .obj (introduced in version 2.16) became obsolete
       and an URL is never modified.

       The current selection is displayed near the top of the popup window.  Back-space should be
       used with caution because it might change the current directory to the parent directory.

IMPORTING EPS FILES

       Encapsulated PostScript (EPS) files can be imported using the #( keyboard command.  If the
       EPS file has a preview bitmap (can be  generated  using  the  pstoepsi  tool),  tgif  will
       display it (HideBit/Pixmap() from the Layout Menu can be used to disable the displaying of
       bitmap/pixmaps).  When the EPS object is saved in a .obj or .sym file, neither the preview
       bitmap,  nor  the  PostScript  content of the EPS file is saved.  Therefore, when printing
       such a file (either from tgif or using prtgif), the EPS file must be present at  the  same
       place from which it was originally imported.

IMPORTING LATEX

   Short Version
       You  can import a LaTeX equation into a tgif object.  When you select Instantiate from the
       Special Menu (or press <Cntrl>i), you should see eq4.sym.  Double-click it and  tgif  will
       ask  you  to  click  on  the drawing area to place it.  After you have placed it, you have
       instantiated an eq4 symbol and the instantiation is called an eq4  object  (or  the  LaTeX
       equation  object).   Now  you  can  go into edit text mode (e.g. press <Cntrl>w) and click
       anywhere inside the eq= attribute (i.e. the text of the equation) to  edit  the  equation.
       Return  to  select  mode (e.g. press <meta>k) and double click on the eq= attribute to run
       latex on it and import the resulting EPSI file.

       If you have a large equation, you can right-click on  the  equation  object,  select  Edit
       Attribute  in  Editor,  and  select eq= and edit the equation in an editor of your choice.
       You can use the Tgif.Editor X default to select your editor, for example:
           Tgif.Editor:     xemacs -title '%s' '%s'

       To declutter your screen, you may select the eq4 object and use the shortcut key T to hide
       the eq= attribute.  Type T again to make it visible.

       Once  you  import  the EPSI file, you may use the left mouse button to drag either the eq=
       attribute or the imported graphic, and the other will follow.  If you hold the control key
       down, you can drag the eq= attribute separately.

   Details
       Since  version  4.1.16,  the  standard distribution of tgif comes with four LaTeX equation
       symbol files:
           eq4.sym
           eq4-2x.sym
           eq4-ps2epsi.sym
           eq4-epstool.sym

       The Debian package installs these files in  /usr/share/tgif/latex,  and  initializes  tgif
       with  one  domain (number 0) called LaTeX.  When tgif starts, the default domain should be
       domain number 0, and tgif should look for *.sym files first in the current directory, then
       in ~/.tgif/latex, then in /usr/share/tgif/latex.

       In order to use eq4.sym, in addition to latex and dvips, you need:

       pstoepsi to convert a PS (PostScript) file generated by
              dvips to an EPSI (encapsulated PostScript file with a preview bitmap) file

       netpbm used by pstoepsi to convert a PBM file to a preview bitmap for the final EPSI file

       ghostscript
              used by pstoepsi to render a PS file into a PBM file

       Once  you  have  these  tools  properly  installed, you can simply instantiate eq4.sym and
       change the value of the eq= attribute.

       Just double-click the equation object and tgif will run the following commands:
           latex tmpfile
           dvips -N -n 1 -o tmpfile.ps tmpfile
           pstoepsi tmpfile.ps tmpfile.eps
       where tmpfile is a temporary file generated by tgif (usually in /tmp) and  the  file  name
       starts with Tgif.

       This  should work if everything is installed properly.  In case it does not work, you will
       get an error messagebox.  Do not close the box.  Change directory into /tmp and  look  for
       the  latest  file  that starts with Tgif and ends in .tex and copy it.  Then run the above
       commands manually to debug the problem.  For example, you can do:
           cd /tmp
           ls -lrt Tgif*

           -rw-r--r--   1 william     230 Mar 22 11:27 TgifmTaOdC.tex
           -rw-r--r--   1 william    4636 Mar 22 11:27 TgifmTaOdC.log
           -rw-r--r--   1 william     324 Mar 22 11:27 TgifmTaOdC.dvi
           -rw-r--r--   1 william       8 Mar 22 11:27 TgifmTaOdC.aux
           -rw-r--r--   1 william   18561 Mar 22 11:27 TgifmTaOdC.ps
           -rw-r--r--   1 william   18561 Mar 22 11:27 TgifmTaOdC.eps
       (Please note that in the above listing, TgifmTaOdC.ps and  TgifmTaOdC.eps  have  the  same
       file size, this means that pstoepsi did not work.)
           cp TgifmTaOdC.tex foo.tex
           latex foo
           dvips -N -n 1 -o foo.ps foo
           pstoepsi foo.ps foo.eps
           more foo.eps
       At this point, you should see that the first few lines of foo.eps look like:
           %!PS-Adobe-2.0 EPSF-1.2
           %%BoundingBox: 258 634 354 653
           %%BeginPreview: 97 20 1 20
           % 00000000000000000000000e00
           % ...
           % 00000000000000000003c00000
           %%EndImage
           %%EndPreview
           ...
       These  lines are added by pstoepsi.  The numbers in the %%BoundingBox: and %%BeginPreview:
       depends on your equation and the PS-Adobe and EPSF versions in the  first  line  may  vary
       depending on your setup.

       If  you  get  errors  when  you run latex, dvips, or pstoepsi manually, there is something
       wrong with the setup of these tools.  If they all do the right thing but tgif still  shows
       errors, please send e-mail to me!

       eq4-2x.sym  can  produce  a  higher  (2x) resolution preview bitmap, but you will need the
       special netpbm-20may1999 version of netpbm.  It may not  work  with  a  newer  version  of
       netpbm.   eq4-ps2epsi.sym  is  not  recommended.  eq4-epstool.sym is like eq4.sym but uses
       epstool instead.

ADDITIONAL FONTS

       In addition to the Times, Courier, Helvetica, NewCentury,  and  Symbol  fonts,  additional
       fonts  can  be  specified  using  the Tgif.AdditionalFonts X default.  (The default screen
       fonts can also be replaced, please see Tgif.HasAlternateDefaultFonts  in  the  X  DEFAULTS
       section for more details.)  Each additional font requires 4 parts, one for each font style
       (in the order of Roman, Bold, Italic, and BoldItalic).  Each part contains 3 strings.  The
       first  string  specifies  the family, weight, slant, and width of the font (please see the
       man pages for xfontsel(1) for more details; also there is a second form which is described
       below).   The  second  string  specifies  the  registry  and  encoding  of  the  font (see
       xfontsel(1) again).  (One can use xlsfonts(1) to see what fonts are available and pick out
       the  just  mentioned  two  strings  from  the  output.)   The  third  string specifies the
       PostScript font name.

       For example, if  one  wants  to  use  the  X  Lucida  font  to  represent  the  PostScript
       ZapfChancery-MediumItalic font, one can set Tgif.AdditionalFonts as follows:

       Tgif.AdditionalFonts: \n\
               lucida-medium-r-normal \n\
               iso8859-1 \n\
               ZapfChancery-MediumItalic \n\
               \n\
               lucida-demibold-r-normal \n\
               iso8859-1 \n\
               ZapfChancery-MediumItalic \n\
               \n\
               lucida-medium-i-normal \n\
               iso8859-1 \n\
               ZapfChancery-MediumItalic \n\
               \n\
               lucida-demibold-i-normal \n\
               iso8859-1 \n\
               ZapfChancery-MediumItalic

       The  above  maps  all four font styles of the Lucida font to the ZapfChancery-MediumItalic
       font (similar to how Symbol font is handled).

       The first string can also be specified in a second form which is identified by having "%d"
       as  part of the string.  For example, one can use "lucidasans-%d" as the first string.  In
       this case, the actual X font used will be the specified string with "%d" replaced  by  the
       font  size.   The  encoding  string (second string) is ignored (but must be present).  The
       font name prefix (please see Tgif.FontNamePrefix entry in the X DEFAULTS section) is  also
       ignored.

POSTSCRIPT CHARACTER ENCODING FOR INTERNATINOAL CHARACTERS

       Sometimes,  different  encodings of the same PostScript font is needed for characters with
       character codes between 161 and 255 (inclusive).  This can be accomplished  in  two  ways.
       One  way is to use Tgif.AdditionalDontReencode (and Tgif.DontReencode).  Another way is to
       use Tgif.PSFontNeedCharSubs.  The difference is that with  Tgif.AdditionalDontReencode,  a
       PostScript  font's  encoding  is  skipped.   With Tgif.PSFontNeedCharSubs, characters in a
       PostScript font can be given specific encoding.

       In both cases, there is a need to introduce fake font names (place holders).  For example,

              Tgif.AdditionalFonts: \n\
                      utopia-medium-r-normal \n\
                      adobe-fontspecific \n\
                      UtopiaTmp-Regular \n\
                      \n\
                      utopia-bold-r-normal \n\
                      adobe-fontspecific \n\
                      UtopiaTmp-Bold \n\
                      \n\
                      utopia-medium-i-normal \n\
                      adobe-fontspecific \n\
                      UtopiaTmp-Italic \n\
                      \n\
                      utopia-bold-i-normal \n\
                      adobe-fontspecific \n\
                      UtopiaTmp-BoldItalic
              Tgif.PSFontAliases: \n\
                      UtopiaTmp-Regular=Utopia-Regular \n\
                      UtopiaTmp-Bold=Utopia-Bold \n\
                      UtopiaTmp-Italic=Utopia-Italic \n\
                      UtopiaTmp-BoldItalic=Utopia-BoldItalic

       In the above example, 4 fake  PostScript  font  names  are  created  (all  have  a  common
       "UtopiaTmp"  prefix).   The  encoding for these fonts is adobe-fontspecific, according the
       X11 fonts being used.  Tgif.PSFontAliases maps the  fake  PostScript  font  names  to  the
       corresponding real PostScript font names.  (If Tgif.PSFontAliases is missing, non-existent
       PostScript font names such as UtopiaTmp-Regular will appear in a PostScript file.)

       To skip a PostScript font's  encoding,  one  can  use  the  Tgif.AdditionalDontReencode  X
       default.  For example, if one specifies:

              Tgif.AdditionalDontReencode: UtopiaTmp

       characters  with  character codes between 161 and 255 (inclusive) will not be encoded with
       ISO-Latin-1 character names.  For a list of characters names that are ISO-Latin-1 encoded,
       please see
       <URL:http://bourbon.usc.edu/tgif/faq/charencode.html#iso8859-1>.

       To  substitute  characters  in  a  PostScript font with specific encoding, one can use the
       Tgif.PSFontNeedCharSubs   and   Tgif.PSCharSubs_*   X   defaults.    (You    still    need
       Tgif.AdditionalFonts and Tgif.PSFontAliases setup as above.)  Here is an example:

              Tgif.PSFontNeedCharSubs: \n\
                      Utopia-Regular=Foo \n\
                      Utopia-Bold=Foo \n\
                      Utopia-Italic=Foo \n\
                      Utopia-BoldItalic=Foo
              Tgif.PSCharSubs_Foo: \n\
                      exclamdown/Aogonek \n\
                      AE/Cacute \n\
                      ecircumflex/eogonek

       In  the  above  example,  Tgif.PSFontNeedCharSubs specified a list of fake PostScript font
       names that requires character substitutions and their corresponding TOKEN  names.   For  a
       fake  PostScript font name that maps to TOKEN, the list of characters to be substituted is
       specified in the Tgif.PSCharSubs_TOKEN X default.  The format for Tgif.PSCharSubs_TOKEN is
       a list of OLDCHARCODE/NEWCHARNAME strings where OLDCHARCODE is a character code in decimal
       or octal format and NEWCHARNAME must be the name of a PostScript character.  In the  above
       example,  Foo  was  used  as the TOKEN name.  In real use, something like iso8895-2 may be
       more appropriate for a TOKEN  name.   Since  decimal  or  octal  codes  are  allowed,  the
       following is equivalent to the above:

              Tgif.PSFontNeedCharSubs: \n\
                      Utopia-Regular=iso8859-2 \n\
                      Utopia-Bold=iso8859-2 \n\
                      Utopia-Italic=iso8859-2 \n\
                      Utopia-BoldItalic=iso8859-2
              Tgif.PSCharSubs_iso8859-2: \n\
                      161/Aogonek \n\
                      8#306/Cacute \n\
                      8#312/eogonek

       Please  note that substitution only occurs for characters with character codes between 161
       and 255 (inclusive).

       For more information, please see
       <URL:http://bourbon.usc.edu/tgif/faq/charencode.html#charsubs>.

SQUARE DOUBLE BYTE FONTS

       Starting with version 4.0 of tgif, double-byte fonts are supported.  But only double-fonts
       where  every  character has the same width and height are supported.  Double-byte fonts is
       specified using the Tgif.SquareDoubleByteFonts X default.  The format of this X default is
       similar  to  that  of the Tgif.AdditionalFonts X default described in the ADDITIONAL FONTS
       section above with differences described here.  Each double-byte font  requires  4  parts,
       one  for each font style (in the order of Roman, Bold, Italic, and BoldItalic).  Each part
       contains 3 strings.  The first string specifies the name of the font.  It must  contain  a
       "%d" as part of the string.  The actual X font used will be the specified string with "%d"
       replaced by the font size.  The second string can be either "*", "H", or "V".  When it  is
       the  "V"  string,  each character is rotated 90 degrees counter-clockwise.  Otherwise, the
       characters are not rotated.  The third string specifies the PostScript font name.

       Using input methods (specified by the Tgif.DoubleByteInputMethod X default)  one  can  mix
       english  (single-byte)  substrings  within  a double-byte string.  The font to use for the
       english substring is specified by the Tgif.DefaultSingleByteFont X default.

       For example, if one wants to use the X Song  Ti  font  to  represent  PostScript  GB-Song-
       Regular font, one can set Tgif.SquareDoubleByteFonts as follows:

       Tgif.DefaultSingleByteFont: Helvetica
       Tgif.GBShowFontChar:    271372    Tgif.GBConvFromUTF8:    iconv    -f   utf8   -t   gb2312
       Tgif.GBUConvToUTF8: iconv -f gb2312 -t utf8
       Tgif.SquareDoubleByteFonts: \n\
              -isas-song ti-*-*-*--%d-*-*-*-*-*-gb2312.1980-0 \n\
                      * \n\
                      GB-Song-Regular \n\
              \n\
              -isas-song ti-*-*-*--%d-*-*-*-*-*-gb2312.1980-0 \n\
                      * \n\
                      GB-Song-Regular \n\
              \n\
              -isas-song ti-*-*-*--%d-*-*-*-*-*-gb2312.1980-0 \n\
                      * \n\
                      GB-Song-Regular \n\
              \n\
              -isas-song ti-*-*-*--%d-*-*-*-*-*-gb2312.1980-0 \n\
                      * \n\
                      GB-Song-Regular

       In the above example, the Song Ti font doesn't have styles such as italic and bold, so all
       four parts are identical.  The Tgif.GBShowFontChar X default specifies a double-byte octal
       character to be used to represent this font  in  the  Choice  Window  when  this  font  is
       selected.   The  Tgif.GBUConvFromUTF8  X  default  specifies  a  command  to  run  when an
       UTF8-encoded  string  is  to  be  pasted  into  a  text  object  in  the  GB  font.    The
       Tgif.GBUConvToUTF8  X  default specifies a command to run in a copy operation to convert a
       selected string (in GB font) to the UTF8 format then copied to the clipboard.

       Below is another example of using the X JIS fonts to  represent  PostScript  Ryumin-Light-
       EUC-H and Ryumin-Light-EUC-V fonts as follows:

       Tgif.RyuminShowFontChar: 244242
       Tgif.SquareDoubleByteFonts: \n\
              -jis-fixed-*-*-*--%d-*-*-*-*-*-jisx0208.1983-* \n\
                      H \n\
                      Ryumin-Light-EUC-H \n\
              -jis-fixed-*-*-*--%d-*-*-*-*-*-jisx0208.1983-* \n\
                      H \n\
                      Ryumin-Light-EUC-H \n\
              -jis-fixed-*-*-*--%d-*-*-*-*-*-jisx0208.1983-* \n\
                      H \n\
                      Ryumin-Light-EUC-H \n\
              -jis-fixed-*-*-*--%d-*-*-*-*-*-jisx0208.1983-* \n\
                      H \n\
                      Ryumin-Light-EUC-H \n\
              \n\
              -jis-fixed-*-*-*--%d-*-*-*-*-*-jisx0208.1983-* \n\
                      V \n\
                      Ryumin-Light-EUC-V \n\
              -jis-fixed-*-*-*--%d-*-*-*-*-*-jisx0208.1983-* \n\
                      V \n\
                      Ryumin-Light-EUC-V \n\
              -jis-fixed-*-*-*--%d-*-*-*-*-*-jisx0208.1983-* \n\
                      V \n\
                      Ryumin-Light-EUC-V \n\
              -jis-fixed-*-*-*--%d-*-*-*-*-*-jisx0208.1983-* \n\
                      V \n\
                      Ryumin-Light-EUC-V

MULTIPAGE DRAWING

       An  object  file  can  contain multiple pages.  Two layout modes, stacked and tiled, for a
       multipage drawing are supported.  In stacked layout  mode,  pages  are  considered  to  be
       stacked  on  top  of each other, and therefore, an object can only appear on one page.  In
       tiled layout mode, pages are tiled to form a large logical page; in this case,  an  object
       can  exist  on  several physical pages simultaneously.  Swiching between the two modes are
       considered rare events and can not be undone.  Tgif does  not  allow  switching  from  the
       tiled layout mode to the stacked mode when there exists an object that spans physical page
       boundaries because it can not decide which physical page the object belongs.

       Page numbers are supported through the use of  page  numbering  objects.   A  page  number
       objecting  is  an  object  that contains an attribute whose name is !PAGE_NUM (the name is
       case-sensitive) and the name part of that attribute is not shown (hiding an attribute name
       can be achieved by using the Move/JustifyAttr() command under the Attribute submenu of the
       Special Menu).  The value of the attribute determines how the page number is printed.   If
       the  value  of  the  attribute  contains a !(STACKED_PAGE_NUM) substring, that part of the
       substring will be replaced by the page number if the page layout mode is stacked.  If  the
       page  layout  mode  is  tiled,  the string will be printed out as is.  If the value of the
       attribute contains a !(STACKED_NUM_PAGES) substring, that part of the  substring  will  be
       replaced  by  the number of pages if the page layout mode is stacked.  If the value of the
       attribute contains a !(TILED_PAGE_ROW) or !(TILED_PAGE_COL) substring, that  part  of  the
       substring  will be replaced by the row number or the column number of the physical page if
       the page layout mode is tiled.

SPECIAL ATTRIBUTES

       There are a few special attributes that tgif recognized.   There  are  described  in  this
       section.  They are all case-sensitive.

       !PAGE_NUM=<page_number>
              This  specifies  the page numbers in a multipage drawing.  Please see the MULTIPAGE
              DRAWING section for details.

       auto_center_attr
              If an attribute's name is empty and the value is  auto_center_attr,  then  all  the
              visible  attributes  of the owner object will automatically be centered relative to
              the bounding box of the owner  object.   It  doesn't  really  make  sense  to  have
              multiple  visible  attributes  because they will overlap.  This attribute is useful
              for making simple flowchart elements.

       unmakeiconic_on_instantiate
              If a symbol object's attribute has  an  empty  attribute  name  and  the  value  is
              unmakeiconic_on_instantiate,  then  when  the symbol is instantiated, the following
              commands are performed on the  just-instantiated  icon  object:  1)  UnMakeIconic()
              command  from  the Special Menu, 2) UnGroup() command from the Arrange Menu, and 3)
              the "unmakeiconic_on_instantiate" text object is removed.  This attribute is useful
              for making simple flowchart segments.

       unmakeiconic_on_instantiate_delete_attrs
              If  a  symbol  object's  attribute  has  an  empty  attribute name and the value is
              unmakeiconic_on_instantiate_delete_attrs, then when the symbol is instantiated, the
              following   commands  are  performed  on  the  just-instantiated  icon  object:  1)
              UnMakeIconic() command from the Special Menu, 2) delete all  attributes  from  this
              object,  and  3) UnGroup() command from the Arrange Menu.  This attribute is useful
              for putting a group of "useful" objects into a symbol object.

       retracted_arrows
              If an attribute's name is empty and the value is retracted_arrows for a polyline or
              open-spline  object with more than 2 vertices, then the arrows of the spline object
              is retracted by one vertex.

       auto_retracted_arrows
              This is very similar to the retracted_arrows above except that the object  must  be
              an  interpolated open-spline with only one arrow head.  The spline object is forced
              to have 3 vertices and the middle vertex of  the  spline  object  is  automatically
              adjusted when an endpoint is moved.

       auto_exec=<internal_command>
              If  such  a  file  attribute  exists, the value is executed when the file is opened
              (unless the file is opened as  a  result  of  executing  the  hyperjump_then_exec()
              internal command).

       edit_attrs_in_context_menu=...
              If  an  object  has  an  attribute  named  edit_attrs_in_context_menu,  the  values
              (starting from the 2nd line and separated by  linebreaks)  of  this  attribute  are
              treated  as  attribute  names.   The  named  attributes will be visible in the Edit
              Attribute In Editor submenu of the Context Menu.  For example, if an object has the
              following attributes:

                     edit_attrs_in_context_menu=
                            x
                            y
                            z
                     w=greetings
                     x=hello
                     y=world
                     z=how are you
                     good-bye

              the  Edit Attribute In Editor submenu of the Context Menu will only show "x=hello",
              "y=world", and "z=how are you".

EXPORT TO TABLE

       When the ExportToTable() command is selected from the Table submenu of the  Special  Menu,
       certain  attributes of selected objects are written into a user-specified output file in a
       format which can be easily imported by  a  spreadsheet  program  or  to  be  used  by  the
       MergeWithTable()  command  described in the next section.  An output file contains columns
       of strings.  Two columns are separated by a single <TAB> character.  The first  row  of  a
       output file contains the column names and all other rows contain values.

       The  names  of  the  attributes  to  be  written are specified by the file attribute named
       TABLE_ATTRS (which is denoted by !.TABLE_ATTRS here).  The value of the  TABLE_ATTRS  file
       attribute  is  a list of comma-separated attribute names.  When ExportToTable() command is
       executed, the attribute names specified by !.TABLE_ATTRS are written to  the  output  file
       first.   Then,  for  each selected object, every one of its attribute which appears in the
       list specified by !.TABLE_ATTRS are written to the output file in one line.  If an  object
       has no attributes that match the specification, no corresponding line is generated.

MERGE WITH TABLE

       When  the MergeWithTable() command is selected from the Table submenu of the Special Menu,
       a selected object is merged (also known as mail-merged on PCs) with a  table  (data)  file
       (in  the  same  format as the output file described in the previous section) to generate a
       new multipage drawing having the stacked page layout mode.

       The selected object contains formating information, and it is also used as a  template  to
       be replicated for each data row in the table file.  If an attribute of the replica matches
       the column name of the table, the attribute value is set to the value in the  table  file.
       The replicas are tiled horizontally first.

       Eight  attributes  must be specified in the template object.  They are all case-sensitive.
       The ones that measure distances can be specified in inches ("in"), centi-meters ("cm"), or
       pixels (if no units are specified).

              PAPER_WIDTH
                     This specifies the width of the paper.

              PAPER_HEIGHT
                     This specifies the height of the paper.

              LEFT_MARGIN
                     This specifies the distance to the left edge of the paper.

              TOP_MARGIN
                     This specifies the distance to the top edge of the paper.

              H_PITCH
                     This specifies the distance between the left edges of the replicas.

              V_PITCH
                     This specifies the distance between the top edges of the replicas.

              NUM_COLS
                     This  specifies  the  number  of replicas to tile horizontally before moving
                     down to the next row.

              NUM_ROWS
                     This specifies the number of replicas to tile vertically  before  moving  to
                     the next page.

       After each replica is generated, filled with the data from the table file, and placed, its
       attribute named exec is executed (unless an attribute named EXEC_AFTER_MERGE is specified,
       in which case, the attribute named by the EXEC_AFTER_MERGE attribute is executed instead).
       If there is no attribute named by the EXEC_AFTER_MERGE  attribute,  nothing  is  executed.
       (Please  see the INTERNAL COMMANDS section for details on command execution.)  One can use
       the exec command to construct other attributes from the  attributes  associated  with  the
       data table.

       If an attribute whose name is empty and whose value is the string USER_PLACEMENT, the user
       will be asked to place the replica (object name will be displayed  in  the  Status  Window
       when  the  object  is being placed).  In this case, the 8 placement related attributes are
       ignored.

       If an attribute whose name is empty and whose value  is  the  string  STRIP_DOUBLE_QUOTES,
       data fields surrounded by double-quotes are stripped.

MIME TYPES AND MAILCAPS

       When  an URL names an HTTP server, the HTTP server sends the Content-type of the URL along
       with the remote file referenced by the URL to tgif.  The Content-type contains information
       such as the type/subtype of the file plus some optional fields.  If the file is not a tgif
       file, the following mechanism is used to view the file.

       First, the X defaults are looked up to see if there is an external  viewer  specified  for
       the  file.   Please  see  Tgif.@@@Viewer  in the X DEFAULTS section below for details.  If
       there's no match, the type/subtype is matched against entries in the MIME-types file.  The
       default   MIME-types   file   is   .mime.types  in  user's  home  directory.   Please  see
       Tgif.MimeTypesFile in the X DEFAULTS section on how to  override  the  default  MIME-types
       file.   The  first  field  in  each  line  of  the  MIME-types file specifies type/subtype
       information.  If there is a type/subtype match in the MIME-types files, the MailCap  files
       are consulted as follows.

       A  line  in  a  MailCap file consists of fields separated by semi-colons.  The first field
       specifies the type/subtype and the second field specifies a view  command  for  viewing  a
       file  that matches the type/subtype.  For tgif, the view command must contains a single %s
       substring to be replaced by local copy of the URL.  Only  the  %t  and  the  %{}  optional
       fields are supported by tgif.  The multipart MIME-type is not supported.  The type/subtype
       information of the remote file is matches against the MailCap files.  If a match is found,
       the  corresponding  view  command  is executed.  If no match is found, but the type of the
       remote file is either application, audio, image, or  video,  the  file  is  saved  and  no
       external  viewer  is  launched.  Otherwise, the remote file is assumed to be pure text and
       tgif will create a text object to view the text.

       The MailCap files are the (colon-separated) files specified  by  the  MAILCAP  environment
       variable  (if  defined).   If MAILCAP is not defined, the .mailcap file in the user's home
       directory is used.

       MIME is the Multipurpose Internet Mail Extensions specified in  RFC1521,  and  MAILCAP  is
       specified in RFC1524.

HOW TO MAKE A BUILDING-BLOCK OBJECT (SYMBOL FILE)

       Here  are  the  steps  for  defining a building-block object, to be used in a hierarchical
       design.

       1)     Draw the representation  part  of  the  building-block  object.   Group  everything
              together.  Select this grouped object.

       2)     Popup  the  main  menu  with  the  middle mouse button; select ``Special''.  Select
              ``MakeSymbolic'' from the next popup menu.  The selected object  becomes  a  symbol
              and gets a dashed boundary.

       3)     Type  in  attributes  as individual text strings.  Select the symbol object and all
              the text strings to be attached to the symbol.  Type  #a  (for  Attach)  to  attach
              attributes to the symbol.

       4)     (This  step  is optional.)  Build the definition part of the building-block object.
              Look at the ``flip-flop.sym'' file for an example.  To look at  that  file,  first,
              instantiate  a  ``flip-flop'' by typing ^i (for Instantiate).  Select the flip-flop
              from the popup window; place the flip-flop; select the flip-flop and type  #v  (for
              Push) to see the symbol file.

       5)     Save and name the file.  If the current library path contains the current directory
              (or '.'), the symbol just built should be instantiatable by typing ^i.

X11 PIXMAP (XPM) FORMATS

       Tgif can only import X11 pixmaps that satisfy the constraints described here.  The  format
       of  the  X11 pixmap must be either 1 (XPM1) or 3 (XPM3).  Only a subset of the XPM3 format
       is supported, namely, the key field for the color specification must  be  'c'  (for  color
       visuals).   Tools  that  generate  XPM1 format files are (they might have been upgraded to
       support XPM3), pbmplus (or netpbm), which  is  a  set  of  bitmap  and  pixmap  conversion
       freeware  (together  with  xv,  the  colors  for  pixmap  objects can be manipulated), and
       xgrabsc, another freeware; also, xloadimage  can  display  XPM1  files.   Tools  that  can
       generate  XPM3  format  files  are,  for  example,  xsnap(1)  and sxpm(1).  For each color
       specified in the color string, a color cell is allocated.  If the  allocation  fails,  the
       current color will be used for that color string.  If the first color character is a back-
       quote (`) or a space, then the corresponding color  is  substituted  with  the  background
       color  of the tgif window if the Tgif.GuessXPmBgColor X default is set to ``true''.  (This
       design choice is made because the pixmap will then look  ``right''  on  both  regular  and
       reverse video.)  The following is an example of a very small pixmap file (in XPM1 format).

              #define arrow_format 1
              #define arrow_width 5
              #define arrow_height 3
              #define arrow_ncolors 3
              #define arrow_chars_per_pixel 1
              static char *arrow_colors[] = {
                 "`", "Black",
                 "a", "red",
                 "b", "yellow"
              };
              static char *arrow_pixels[] = {
              "`a```",
              "aabbb",
              "`a```"
              };

LATEX FIGURE FORMATS

       Here  we  show  how  to  make  a figure for a LaTeX file, first with the \psfig (or \epsf)
       special construct, then with the psfile special construct.  (The author does not recommend
       the  psfile  construct.)   An  example  of  both  can be found in ``example.tex'' which is
       included with the tgif distribution.

       To print a tgif file to be included in a LaTeX document with the \psfig or  \epsf  special
       construct  (files  generated  will be in the Encapsulated PostScript format), first select
       LaTeX format in the panel window (click the left mouse button on the laser printer  icon),
       then  type  ^p to generate the Encapsulated PostScript file.  If the file name is ``an-sr-
       flip-flop.obj'', then  the  LaTeX  figure  file  generated  will  be  named  ``an-sr-flip-
       flop.eps''.  This file can be included in a LaTeX document as follows,

              \input{psfig}
              \begin{figure*}[htb]
              \centerline{\psfig{figure=an-sr-flip-flop.eps}}
              \caption{An SR flip-flop.  \label{fig:an-sr-flip-flop}}
              \end{figure*}

       An alternative way is to use the \epsf construct as follows,

              \input{epsf}
              \begin{figure*}[htb]
              \centerline{\epsffile{an-sr-flip-flop.eps}}
              \caption{An SR flip-flop.  \label{fig:an-sr-flip-flop}}
              \end{figure*}

       The  \centerline  command  above centers the picture.  If one has multiple tgif figures in
       one's LaTeX document,  one  only  have  to  include  the  psfig  macro  (\input{psfig}  or
       \input{epsf}) once, right after the \begin{document} statement.

       If  Encapsulated  PostScript is not available, the psfile special construct can be used as
       described here.  In this case, since LaTeX doesn't not know where the bounding box of  the
       drawing  is,  it takes some practice to get this just right.  Here is something that seems
       to work.  First, center the picture on the page (e.g., the width of a portrait style  page
       is  8.5 inch, so the center of the page is at the 4.25 inch mark), and make the top object
       in the picture about 1/4 inch away from the top of the page.  Select the LaTeX  format  in
       the  panel  window,  then  print in the LaTeX format.  As with the psfig construct, a file
       with the .eps extension will be generated.  This file can be included in a LaTeX  document
       as follows,

              \begin{figure*}[htb]
              \special{psfile="an-sr-flip-flop.eps" hoffset=-40}
              \rule{0in}{1.1in}
              \caption{An SR flip-flop.  \label{fig:an-sr-flip-flop}}
              \end{figure*}

       The  \rule{0in}{1.1in}  above  specifies an invisible box of 1.1 inches high, which is the
       total height of the picture in an-sr-flip-flop.

CONNECTING OBJECTS

       In the world of E-CAD, an icon object can represent an electronic  component  and  a  line
       object  can  represent  a  connection between a pair of pins of two electronic components.
       When a component moves, the endpoint of a wire connecting to the component will also  move
       with the component.  Tgif simulates these functionalities in a limited fashion.

       In  tgif,  a  connection  is represented by matching signal names.  A wire is defined as a
       polyline object having a type=tgWire attribute and an attribute  named  signal_name.   The
       definition  of  a pin is more complicated.  It is described in the next paragraph.  If two
       pins have identical values for the  signal_name  attribute,  they  are  considered  to  be
       connected (they do not have to be visually connected by a wire).

       A  pin  object  must have a type=port attribute and attributes named signal_name and name.
       But not all objects having such attributes are pins.  In addition, a pin  object  must  be
       either:

       (1)    a top-level symbol or an icon object

       or:

       (2)    an immediate subobject of a owner symbol or icon object.  or:

       (3)    an  immediate  subobject of a owner grouped object which has a type=tgBroadcastWire
              attribute.

       In (2) above, the owner object must also have an attribute named name and must  not  be  a
       subobject  of  another  symbol  or  icon  object.  If the owner object is a subobject of a
       grouped object, the name attributes of the grouped object will be ignored.

       In (3) above, that grouped object can be created using  the  ConnectPortsToBroadcastWire()
       command in the PortsAndSignals submenu of the Special Menu when a polyline object and some
       floating port objects are selected.

       A pin object can have a connected view and a disconnected view.  A  connected  view  is  a
       subobject  with a view=conn,FILL,PEN attribute and a disconnected view is a subobject with
       a view=disconn,FILL,PEN attribute; FILL and PEN  are  numeric  values  between  0  and  31
       (inclusive).   The  value  corresponds  to  patterns  in  the  Fill Menu and the Pen Menu.
       Normally, only 0 or 1 should be used.  When the signal_name attribute of a pin  object  is
       changed from an empty string to a non-empty string, the pen and fill of the subobject that
       corresponds to the disconnected view will be set to 0 (meaning NONE) and the pen and  fill
       of  the  subobject  that  corresponds  to  the  connected  view  will be set to the values
       specified in the view attribute of the connected view.  When the signal_name attribute  of
       a  pin  object  is changed from a non-empty string to an empty string, the pen and fill of
       the subobject that corresponds to the connected view will be set to 0 and the pen and fill
       of  the  subobject  that  corresponds  to  the disconnected view will be set to the values
       specified in the view attribute of the disconnected view.

       A  connection  can  be  created  using  the  ConnectTwoPortsByAWire()  command  from   the
       PortsAndSignals submenu of the Special Menu.  Please note that if a pin is part of another
       object, that object must also have a name attribute with a non-empty value.  When two pins
       are connected using this command, the signal_name attributes of the pins and the wire will
       be set to have the same value.

       The moving of  endpoints  when  a  component  moves  is  implemented  in  tgif  using  the
       constrained  move  mode  from  the MoveMode Menu (please see Tgif.ConstrainedMove in the X
       DEFAULTS section for additional information).  Please note that a connected wire  that  is
       not  visually  connected  will  not  automatically  extends  itself  to follow a connected
       component even in the constrained move mode.  Also, when a wire  object  is  deleted,  the
       signal_name  attributes  of  connected  pins  do  not  change  (since  they are not really
       "connected").

X DEFAULTS

       Tgif.Geometry: WIDTHxHEIGHT+X+Y

       Tgif.IconGeometry: +X+Y

       Tgif.Foreground: COLORSTRING
              The default foreground color is Black.

       Tgif.Background: COLORSTRING
              The default background color is White.

       Tgif.BorderColor: COLORSTRING
              If not specified, the foreground color will be used.

       Tgif.ReverseVideo: [on,off]
              For black and white terminal, reverse video ``on'' means the background  is  black.
              For  color  terminal, reverse video ``on'' means the background is specified by the
              Tgif.Foreground color.  The default is off.

       Tgif.InitialFont: [Times,Courier,Helvetica,NewCentury,Symbol]
              This specifies the initial font.  The default is Courier.

       Tgif.InitialFontStyle: [Roman,Bold,Italic,BoldItalic]
              This specifies the initial font style.  The default is Roman.

       Tgif.InitialFontJust: [Left,Center,Right]
              This specifies the initial font justification.  The default is Left.

       Tgif.InitialFontDPI: [75,100]
              Obsoleted.

       Tgif.InitialFontSizeIndex: [0,1,2,3,4,5]
              Obsoleted.

       Tgif.InitialFontSize: NUMBER
              This specifies the size of the start-up font.  The default is 14.   An  alternative
              form  allows  "pt"  to be specified immediately after NUMBER (with no space between
              "pt" and the NUMBER).

       Tgif.MsgFontSizeIndex: [0,1,2,3,4,5]
              Obsoleted.

       Tgif.MsgFontSize: NUMBER
              This specifies the size of the font used for messages, menues, and  popup  windows.
              The default is 14.

       Tgif.RulerFontSize: NUMBER
              This specifies the size of the font used for ruler windows.  The default is 10.

       Tgif.DefaultFontSize: NUMBER
              This specifies the size of the font to be used when a requested for a font size can
              not satisfied.  This size must exist for all fonts used in tgif.   The  default  is
              14.

       Tgif.FontSizes: NUMBER1 NUMBER2, ...
              This specified the font sizes.  The default is 8 10 11 12 14 17 18 20 24 25 34.  An
              alternative form allows "pt" to be specified immediately after a  NUMBER  (with  no
              space  between  "pt"  the  the  NUMBER).   Please  also use Tgif.InitialFontSize to
              specify the initial font size to use if 14 is not in the specified font sizes.

       Tgif.AdditionalFonts: FONT_SPEC1 FONT_SPEC2 ...
              In addition to  the  Times,  Courier,  Helvetica,  NewCentury,  and  Symbol  fonts,
              additional  fonts  can  be specified here.  Please see the ADDITIONAL FONTS section
              for details.

       Tgif.FontNamePrefix: [-*, *]
              This specified the prefix to be used when tgif makes a request  to  the  X  server.
              The  default  is  -*.   Certain fonts have obscure font names (e.g., does not start
              with the - character).  In order to use these fonts, this X default can be  set  to
              *.

       Tgif.DefaultLatin1FontCharEncoding: STRING
              Tgif  uses  4  default  fonts,  "times",  "courier",  "helvetica", and "new century
              schoolbook".  By default, the character encoding  for  these  fonts  is  iso8859-1.
              These  fonts  are  usually  scalable  and pre-installed in older Linux systems.  In
              newer Linux system, this is no longer the case.  Only a small number of font  sizes
              are  pre-installed.   The  pre-installed  scalable  versions  of  these  fonts  are
              iso10646-1 (Universal Character Set) encoded.   This  X  default  can  be  used  to
              specify  a  different  character  encoding  (such  as iso10646-1) for the 4 default
              fonts.  This X default does not apply to alternate default fonts or fonts specified
              by the Tgif.AdditionalFonts X default.  The default is iso8859-1.

       Tgif.HasAlternateDefaultFonts: [true,false]
              The default value of this X default is false.  If it is set to ``false'', tgif uses
              the iso8859 registry with ASN1 encoded screen fonts (unless it's overridden by  the
              Tgif.DefaultFontCharEncoding  X  default),  and  it  looks  for "times", "courier",
              "helvetica", "new century schoolbook", and "symbol" as  part  of  the  screen  font
              names.   Some  X  servers do not support these fonts.  In this case, this X default
              can be used to make tgif use user specified screen and PostScript fonts.  If this X
              default  is  set  to ``true'', tgif will look for additional X defaults of the form
              Tgif.<ps_font_name>, where <ps_font_name> can be one of the following strings:

                     Times-Roman
                     Times-Bold
                     Times-Italic
                     Times-BoldItalic
                     Courier
                     Courier-Bold
                     Courier-Oblique
                     Courier-BoldOblique
                     Helvetica
                     Helvetica-Bold
                     Helvetica-Oblique
                     Helvetica-BoldOblique
                     NewCenturySchlbk-Roman
                     NewCenturySchlbk-Bold
                     NewCenturySchlbk-Italic
                     NewCenturySchlbk-BoldItalic
                     Symbol

              The corresponding value of the X default must contain "%d" as part of  the  string,
              and  the  "%d" string will be replaced by the font size when the font is requested.
              For example, The following lines will use the Times New Roman screen  font  instead
              of  the  Times screen font and use the Bookman PostScript font instead of the Times
              PostScript font, if Tgif.HasAlternateDefaultFonts is ``true'':

              Tgif.Times-Roman: *-times new roman-medium-r-*--%d-*,Bookman-Light
              Tgif.Times-Bold: *-times new roman-bold-r-*--%d-*,Bookman-Demi
              Tgif.Times-Italic: *-times new roman-medium-i-*--%d-*,Bookman-LightItalic
              Tgif.Times-BoldItalic: *-times new roman-bold-i-*--%d-*,Bookman-DemiItalic

              Please note that certain X servers require the right-hand-side font  specifications
              to have all the dashes in place.

       Tgif.DefaultCursor: [x_cursor,arrow,...]
              This  specifies  the select cursor.  Entries in <X11/cursorfont.h> (without the XC_
              prefix) are valid names of the cursor.  The default is arrow.

       Tgif.DrawCursor: [x_cursor,arrow,...]
              This specifies the cursor used when drawing objects.  Entries in <X11/cursorfont.h>
              (without the XC_ prefix) are valid names of the cursor.  The default is the same as
              Tgif.DefaultCursor.

       Tgif.DragCursor: [x_cursor,arrow,...]
              This specifies the  cursor  used  when  dragging.   Entries  in  <X11/cursorfont.h>
              (without the XC_ prefix) are valid names of the cursor.  The default is hand2.

       Tgif.VertexCursor: [x_cursor,arrow,...]
              This   specifies  the  cursor  used  in  the  select  vertices  mode.   Entries  in
              <X11/cursorfont.h> (without the XC_ prefix) are valid names  of  the  cursor.   The
              default is plus.

       Tgif.FreeHandCursor: [x_cursor,arrow,...]
              This   specifies   the   cursor   used   in  freehand  drawing  mode.   Entries  in
              <X11/cursorfont.h> (without the XC_ prefix) are valid names  of  the  cursor.   The
              default is pencil.

       Tgif.RubberBandColor: COLORSTRING
              This specifies the color to be used for rubber-banding (XORing).  The default color
              is the same as the foreground color.

       Tgif.MaxColors: NUMBER
              This specifies the maximum number of colors.  Color0 through ColorMax, where Max is
              NUMBER-1,  in X defaults are queried.  If NUMBER is greater than the default of 11,
              Color11 through ColorMax must all exist in X defaults.  Please  see  the  GRAPHICAL
              OBJECTS section for a list of the default colors.

       Tgif.Color#: COLORSTRING
              This specifies the correspondence between a color number and a color.

       Tgif.DefaultColorIndex: NUMBER
              This  specifies  the  default color index if a certain color can not be found.  The
              default is 0.  Please note Tgif.DefaultColor takes precedence over this X default.

       Tgif.ShortCuts: ITEM1 ITEM2 ...
              The ITEM specifies the correspondence between a key (may be case sensitive)  and  a
              non-alphanumeric key command.  Please see the SHORTCUTS section for details.

       Tgif.MaxLineWidths: NUMBER
              This specifies the maximum number of line widths.  LineWidth0 through LineWidthMax,
              ArrowWidth0 through ArrowWidthMax, and ArrowHeight0 through  ArrowHeightMax,  where
              Max  is NUMBER-1, in X defaults are queried.  If NUMBER is greater than the default
              value of 7, LineWidth7 through LineWidthMax, ArrowWidth7 through ArrowWidthMax, and
              ArrowHeight7  through  ArrowHeightMax  must  all exist in X defaults.  Some default
              values will be used for those that are not specified in the X defaults.

       Tgif.DefaultLineWidth: NUMBER
              This specifies the initial line width index.  The default is 0.

       Tgif.LineWidth#: NUMBER
              This specifies a line width.  The default line widths are 1, 2, 3, 4, 5, 6, and 7.

       Tgif.ArrowWidth#: NUMBER
              This specifies the width (when the arrow is pointing  horizontally)  of  the  arrow
              head  for arc and open-spline objects.  The default arrow widths are 8, 10, 12, 14,
              18, 20, and 22.

       Tgif.ArrowHeight#: NUMBER
              This specifies half the height (when the arrow is also  pointing  horizontally)  of
              the  arrow  head for arc and open-spline objects.  The default arrow heights are 3,
              4, 5, 6, 7, 8, and 9.

       Tgif.MaxDomains: NUMBER
              This    specifies     that     NUMBER     is     the     number     of     domains.
              DomainPath0,DomainPath1,...,DomainPathM   all  must  exist  in  X  defaults.   Here
              M=NUMBER-1.

       Tgif.DomainPath#: DOMAINSTRING
              This specifies the correspondence between a domain number, a domain name,  and  the
              path  associated  with  a  domain.  Hence one DomainPath# X default is required for
              each domain defined.  Here the # should be replaced  with  a  domain  number.   The
              domain  numbers  should  be  0,1,...,MAXDOMAINS-1,  where  MAXDOMAINS is set in the
              MaxDomain X default above.   The  MaxDomain  X  default  in  combination  with  the
              DomainPath# X default are required to use domains.

              DOMAINSTRING  contains  strings  which  are separated by the ':' symbol.  The first
              string is the name of the domain.  Each of the rest  of  the  strings  specifies  a
              directory  where  symbol  files  are to be searched when the Instantiate command is
              executed (please see the HOW TO MAKE A BUILDING-BLOCK OBJECT section for  details).
              Another  way  to  look at the DOMAINSTRING specification is that removing the first
              string (which specifies the domain name) and the first ':' symbol,  a  DOMAINSTRING
              has  the form of the PATH csh(1) environment variable.  For example, to specify the
              symbol path for domain DEFAULT to look for  symbol  files,  first  in  the  library
              directory  /tmp/tgif/symbols, then in the current directory, DOMAINSTRING should be
              set to the following value:

                     DEFAULT:/tmp/tgif/symbols:.

       Tgif.DefaultDomain: NUMBER
              This specifies the default domain when tgif starts up.  The default is 0.

       Tgif.PrintCommand: COMMAND
              This specifies the print command  used  for  printing  the  PostScript  file.   The
              default  is lpr(1).  An example would be lpr -h -Pprintername.  If COMMAND contains
              a %s substring, the %s will be replaced by the full path  name  of  the  PostScript
              file  which is normally sent to the print command.  Therefore, COMMAND without a %s
              substring behaves identically to COMMAND %s.  Please note that this only works when
              running  tgif  without  the -print command line option.  This can be used to send a
              font file to the printer before  the  tgif  PostScript  file  is  sent  as  in  the
              following example:

                     cat /somewhere/sansfex.pfa %s | lpr -Pmyprinter

       Tgif.WhereToPrint: STRING
              This specifies the initial print/export destination/format.  STRING can be Printer,
              EPS, PS, Bitmap, Text, EPSI, GIF, HTML, PDF, WinEPSI, PNG, JPEG, PPM,  or  NetList.
              The default is EPS.

       Tgif.PrintDirectory: PATH
              This  specifies the print directory when the output destination is not the printer.
              The default is a null string, which means that the output goes into  the  directory
              in which the current file resides.

       Tgif.NoTgifIcon: [true,false]
              If  set  to  ``true'',  tgif  will  not use its own icon window.  In this case, one
              should also set  Tgif.UseWMIconPixmap  described  below  to  true.   Modern  window
              managers usually do not allow an application to draw its own icon window, so this X
              default would have no effect when tgif is running under these window managers.  The
              default is false.

       Tgif.UseWMIconPixmap: [true,false]
              If  set to ``true'', tgif will use the standard icon pixmap.  Also, Tgif.NoTgifIcon
              will be ignored.  The default is true.

       Tgif.DontShowVersion: [true,false]
              If set to ``true'', the tgif version will not be  displayed  on  top  of  the  tgif
              window.  The default is true.

       Tgif.XBmReverseVideo: [true,false]
              If  set to ``true'', an invert bitmap operation will be performed when importing an
              X11 bitmap file.  The default is false.

       Tgif.AskForXBmSpec: [true,false]
              If set to ``true'', the user will be asked to specify  magnification  and  geometry
              for an X11 bitmap file being imported.  Format of the specification is MAG=WxH+X+Y,
              where MAG is the magnification, W and H specifies the width  and  height,  and  the
              location  specification can be +X+Y, +X-Y, -X+Y, and -X-Y.  The '=' is mandatory if
              any of the geometry information is specified.  The default is false.

       Tgif.AskForXPmSpec: [true,false]
              If set to ``true'', the user will be asked to specify  magnification  and  geometry
              for an X11 pixmap file being imported.  The format of the specification is the same
              as for AskForXBmSpec.  The default is false.

       Tgif.StripEPSComments: (obsolete)
              This X default became obsolete in tgif-4.0.11 because it turns out  that  it's  not
              always okay to strip PS comments (it should always be set to false).

       Tgif.GuessXPmBgColor: [true,false]
              If  set to ``true'', then when tgif imports an X11 pixmap file with the first color
              string being ' ' (the space character) or '`' (the back quote character),  it  will
              treat  the  first color as a background color.  This means that the specified color
              in the X11 pixmap file will be  changed  to  the  current  background  color.   The
              default  is  false.   (Please  note  that  this  default was true before patch 2 of
              tgif-2.7.  This X  default  is  there  for  compatibility  reasons;  it  should  be
              considered obsolete.)

       Tgif.XPmOutputVersion: NUMBER
              This  specifies  the  XPM  version number when outputting in the X11 pixmap format.
              NUMBER can take on values 1 or 3.  The default is 1.

       Tgif.XPmInXGrabSCFormat: [true,false]
              If Tgif.XpmOutputVersion is set to 1, setting this to ``true'' will force  the  X11
              pixmap  output  to  resemble  what xgrabsc generates (i.e., color names will not be
              used).  The default is false.

       Tgif.UseGrayScale: [true,false]
              If set to ``true'', gray scales will be  used  for  tiling  patterns  to  speed  up
              printing.  The default is false.

       Tgif.AutoPanInEditText: [true,false]
              If  set  to ``true'', auto panning will be used such that the text cursor is always
              visible in text edit mode (except when the cursor is to the left or on top  of  the
              paper).  This should probably be turned off on slow servers.  The default is true.

       Tgif.PercentPrintReduction: NUMBER
              This  specifies  the initial percent print reduction/magnification.  The default is
              100.

       Tgif.ConstrainedMove: [true,false]
              This specifies the initial move mode.  When set to ``true'', moving  or  stretching
              an  object  will  cause  the  endpoints  of  all  polylines  or open-splines, whose
              endpoints fall within the object, and may be the neighboring vertices, to be moved.
              Please  see  the  IDIOSYNCRASIES  section  for  more details.  The default value is
              false.

       Tgif.DoubleQuoteDoubleQuote: [true,false]
              When set to ``true'', output of the double-quote character will be  preceded  by  a
              double-quote  character;  when  set  to false, output of the double-quote character
              will be preceded by a back-slash character.  The default value is false.

       Tgif.GridSystem: [English,Metric]
              This sets the initial grid system.  The default is English.

       Tgif.InitialGrid: NUMBER
              This specifies the initial grid size.  For the English grid system, NUMBER  can  be
              -2, -1, 0, +1, or +2 for grid sizes of 1/32, 1/16, 1/8, 1/4, and 1/2 inch.  For the
              Metric grid system, NUMBER can be -1, 0, +1, or +2 for grid sizes of 1mm, 2mm, 5mm,
              and 1cm.  The default value is 0.

       Tgif.DropObsIconAttrWhenUpdate: [true,false]
              If  set  to ``true'', obsolete icon attributes will be dropped without confirmation
              when the UpdateSymbols command is executed.  If set to ``false'',  a  popup  window
              will prompt the user to specify what to do with the obsoleted icon attributes.  The
              default is false.

       Tgif.UseRecentDupDistance: [true,false]
              If set to ``true'', the most recent change in position produced by a combination of
              a  duplicate  and  a  move  command  will  be  used  for the new duplicate command.
              Otherwise, some default distance will be  used  to  position  the  duplicate.   The
              default is true.

       Tgif.SplineTolerance: NUMBER
              This  specifies  the  tolerance  of  spline  drawing.   The smaller the number, the
              smoother the spline.  The default is 9 (min is 3 and max is 13).

       Tgif.SplineRubberband: (obsolete)
              If set to ``true'', spline rubber-bands  will  be  used  in  drawing,  moving,  and
              stretching  open  and  closed  splines.  (This might not be desirable if the spline
              contains too many vertices.)  The default is true.  This X default became  obsolete
              since tgif-4.2 due to the addition of structured spline objects.

       Tgif.Synchronize: [on,off]
              XSynchronize is called if this X default is set to ``on''.  The default is off.

       Tgif.DoubleClickUnIconify: [true,false]
              If  set to ``true'', double mouse clicks are used to de-iconify the icon window (in
              this mode, the icon window ignores single mouse clicks and drags).  The default  is
              false.

       Tgif.MainMenuPinDistance: NUMBER
              This  specifies  the horizontal distance (in pixels) the user needs to drag a popup
              menu before the popup menu is to be pinned down.  The default is  80.   (If  pinned
              popup  menus  are  not desired, then this should be set to a value greater than the
              screen width.)  Dragging the left mouse button can be used to move the pinned popup
              menu; clicking the right button in the popup menu will remove it.

       Tgif.DoubleClickInterval: NUMBER
              This  specifies the maximum interval (in milliseconds) between two mouse clicked to
              be recognized as one double-click.  The default is 300.

       Tgif.HandleSize: NUMBER
              This specifies (half) the size of  the  handle  used  to  highlight  objects.   Its
              allowable value is between 2 and 6.  The default is 3.

       Tgif.HistoryDepth: NUMBER
              This  specifies  the  size  of  the undo/redo buffer; negative values mean that the
              buffer is unbounded.  The default is -1.

       Tgif.SaveTmpOnReturn: [true,false]
              If set to ``true'', a tmpmodel file will be saved automatically before returning to
              the driver.  Otherwise, no files will be saved automatically.  The default is true.

       Tgif.ImportFromLibrary: [true,false]
              If  set  to  ``true'',  the library directories specified by the current domain are
              searched for .obj, .sym, xbitmap/xpixmap, and EPS files to import.  Otherwise,  the
              current directory will be used as the starting point.  The default is false.

       Tgif.WarpToWinCenter: [true,false]
              If set to ``true'', the mouse is warped to the center of popup windows.  Otherwise,
              the mouse is not warped.  The default is true.

       Tgif.SaveCommentsInSaveNew: [true,false]
              If set to ``true'', "%%" type comments in the file will  be  stored  in  the  newly
              created file.  The default is true.

       Tgif.CanvasWindowOnly: [true,false]
              If set to ``true'', only the canvas window will be displayed (this is a kind of the
              ``demo'' mode).  The default is false.

       Tgif.UsePsAdobeString: [true,false,NUMBER_1/NUMBER_2]
              If set to ``true'', the first line in the PS or EPS file  will  be  "%!PS-Adobe-2.0
              EPSF-1.2".   If set to ``false'', it is just "%!".  If the PS-Adobe string confuses
              the document manager (such as Transcript) on  your  site,  you  should  set  it  to
              ``false''.   If the third form is used, the first line will be "%!PS-Adobe-NUMBER_1
              EPSF-NUMBER_2".  The default is false.

       Tgif.HalfToneBitmap: [true,false]
              If set to ``true'', the Floyd-Steinberg half-tone method will be used when printing
              in  the  X11  bitmap  format.   This is useful when the drawing contains X11 pixmap
              objects.  The default is false.

       Tgif.ThresholdBitmap: [true,false]
              If set to ``true'', a simple thresholding method will be used to decide  whether  a
              bit   is   turned   on  or  off  when  printing  in  the  X11  bitmap  format.   If
              Tgif.HalfToneBitmap is set to true, this X default  is  ignored.   The  default  is
              false.

       Tgif.BitmapThreshold: NUMBER
              This  specifies  the  threshold  value used in either the Floyd-Steinberg half-tone
              algorithm or the simple thresholding algorithm.  NUMBER must be between  0  and  1.
              This  X  default  is  only  active  when  either  the  Tgif.HalfToneBitmap  or  the
              Tgif.ThresholdBitmap X default is set  to  true.   The  default  value  is  0.5  if
              Tgif.HalfToneBitmap is true, and is 1.0 if Tgif.ThresholdBitmap is true (basically,
              anything that is not white will be black).

       Tgif.EPSIThresholdPreviewBitmap: [true,false]
              If set to ``true'', a simple thresholding method will be used to decide  whether  a
              bit  is  turned  on  or off in the preview bitmap when printing in the EPSI format.
              The default is false.

       Tgif.EPSIPreviewBitmapThreshold: NUMBER
              This specifies the threshold value used in the  simple  thresholding  algorithm  to
              decide whether a bit is turned on or off in the preview bitmap when printing in the
              EPSI format.  NUMBER must be between  0  and  1.   The  default  value  is  0.5  if
              Tgif.EPSIThresholdPreviewBitmap      is      true,      and      is      1.0     if
              Tgif.EPSIThresholdPreviewBitmap is false (basically, anything  that  is  not  white
              will be black).

       Tgif.GroupedTextEditable: [true,false]
              If  set  to  ``false'',  only  top  level  text objects and attributes of top level
              objects can be edited when the drawing mode is set to the text  mode.   If  set  to
              ``true'',  text  objects  and  attributes everywhere can be edited.  The default is
              false.

       Tgif.DefaultEPSScaling: NUMBER
              This specifies the scaling factor applied to an  imported  PS  or  EPS  image.   As
              mentioned  in  the  IDIOSYNCRASIES section below, tgif treats 128 pixels as an inch
              and PostScript treats 72 points as an inch.  In order to have real-size  PostScript
              images,  this  parameter  should  be  set to 1.7778 (which is 128/72).  The default
              value is 1.

       Tgif.IntrCheckInterval: NUMBER
              This specifies the number of objects drawn before tgif checks for  interrupts.   If
              this is set to be 0 or less, interrupt is not allowed.  The default value is 10.

       Tgif.TiledPageScaling: NUMBER
              This  specifies  the scaling value used when a multipage drawing in tiled page mode
              is printed.  Since most PostScript printers do not use the full page as the drawing
              area, setting this number to 1 may get truncated output.  The default value is 0.9.

       Tgif.TGIFPATH: STRING
              This specifies the directory where the files, mentioned in the FILES section below,
              can be found.  The TGIFPATH environment variable may  override  this  option.   The
              default value is specified by the compiler option TGIF_PATH.

       Tgif.TGIFICON: STRING
              This  specifies the name of the object file to be displayed when tgif is iconified.
              If it starts with a / character, absolute path is used; otherwise, the actual  path
              of  the  icon file is $TGIFPATH/STRING where TGIFPATH is either defined using the X
              defaults or an environment variable.  The default value is ``tgificon.obj''.

       Tgif.StickyMenuSelection: [true,false]
              If set to ``true'', when patterns/linewidths/linestyles/... of objects are  changed
              using  a menu action, the corresponding pattern/linewidth/linestyle/... becomes the
              current selection.  The default is true.

       Tgif.PSBopHook: STRING
              If specified, the following PostScript line is added at the beginning of each  page
              when printing to the printer or to a PS file,

                     userdict /STRING known { STRING } if

              This  option should only be used if one is very familiar with PostScript.  (Setting
              STRING to "tgif-bop-hook" is recommended since it would not have  a  name  conflict
              with existing software, such as dvips(1).)

       Tgif.PSEopHook: STRING
              If  specified,  the following PostScript line is added at the end of each page when
              printing to the printer or to a PS file,

                     userdict /STRING known { STRING } if

              This option should only be used if one is very familiar with PostScript.   (Setting
              STRING  to  "tgif-eop-hook"  is recommended since it would not have a name conflict
              with existing software, such as dvips(1).)

       Tgif.MinimalEPS: [true,false]
              If set to ``false'', comments  such  as  %%Pages,  %%DocumentFonts,  %%EndComments,
              %%BeginProlog,  %%EndProlog,  %%Page,  %%Trailer, and %%EOF will be generated in an
              EPS output.  These comments may confuse certain ``document managers''.   Therefore,
              the  default  is true if Tgif.UsePsAdobeString is not specified (and the default is
              false if Tgif.UsePsAdobeString is specified).

       Tgif.InitialPrintInColor: [true,false]
              If set to ``true'', color output (printing) mode is  enabled  on  startup.   Please
              note  that  in  black  and white PS/EPS/EPSI printing mode, the white color will be
              printed as black (only background will be printed as white).  The default  is  true
              (except when the -print command line option is used).

       Tgif.InitialShowGrid: [true,false]
              If set to ``false'', showing grid is disabled on startup.  The default is true.

       Tgif.InitialSnapOn: [true,false]
              If  set  to  ``false'',  snapping  to  the grid points is disabled on startup.  The
              default is true.

       Tgif.NoMenubar: [true,false]
              If set to ``true'', no menubar will be shown initially.  The default is false.

       Tgif.NoStatusWindow: [true,false]
              If set to ``true'', no Status Window will  be  shown  initially.   The  default  is
              false.

       Tgif.ReverseMouseStatusButtons: [true,false]
              If  set  to ``true'', the left mouse status and the right mouse status are swapped.
              This should be used when a ``left-handed mouse'' is used.  The default is false.

       Tgif.MinimalMenubar: [true,false]
              If set to ``false'', the menu items in the Menubar Window will be the same  as  the
              main  popup  menu.   This  would  take up much more space.  If set to ``true'', the
              Page, PageLayout, HoriAlign, VertAlign, and MoveMode menus are collapsed  into  the
              View cascading menu; the Font, TextStyle, and TextSize menus are collapsed into the
              Text cascading menu; and the LineDash, LineStyle, LineType,  LineWidth,  Fill,  and
              Pen menus are collapsed into the Graphics cascading menu.  The default is true.

       Tgif.ColorBgInPrintingColorPS: [true,false]
              If  set  to  ``true'',  the window background color is used as the background color
              when generating color PostScript output.  If set to ``false'', no background  color
              is used.  The default is false.

       Tgif.ScrollBarWidth: NUMBER
              This  specifies  the  width of a scroll bar.  NUMBER must be between 2 and 16.  The
              default is 16.

       Tgif.InitialPaperSize: STRING
              The STRING specifies the initial width and height of the paper.  STRING is  in  the
              "<width>  x  <height>"  form.   <width> and <height> is a numeric value immediately
              followed by either "in" (inch) or "cm" (centi-meter).  The " x " that separate  the
              <width>  and  <height>  is  mandatory.   If A4PAPER is defined in the Makefile, the
              default value is "21cm x 29.7cm".  If A4PAPER is not defined in the  Makefile,  the
              default value is "8.5in x 11in".

       Tgif.UpdateChildUsingAlignment: [true,false,no_overlap]
              If set to ``true'' or 'no_overlap', when update_eps_child(), update_xbm_child(), or
              update_xpm_child()  internal  command  is  executed,  the  current  horizontal  and
              vertical alignments are used to place the EPS/XBM/XPM subobject.  If the horizontal
              alignment is L, C, R, S, or -, the subobject is aligned to the left, center, right,
              center,  or left, respectively, to the parent object.  If the vertical alignment is
              T, M, B, S, or -, the subobject is placed above, middle, below,  middle,  or  below
              the  parent  object  if  this  X  default  is set to 'no_overlap'; the subobject is
              aligned to the top, middle, bottom, middle, or below the parent object  if  this  X
              default  is  set to ``true''.  If this X default is set to ``false'', the subobject
              is placed left aligned and below the parent object.  The default is false.

       Tgif.GenerateImageMap: [true,false]
              If set to ``true'', NCSA imagemap or CERN Clickable Image files will  be  generated
              when print in GIF format.  In this case, Tgif.XpmToGif, Tgif.ImageMapFileExtension,
              Tgif.GifFileExtension, Tgif.ImageMapFileFormat, and  Tgif.UseXPmVersion1ForImageMap
              X  defaults,  described  below,  will  be interpreted; otherwise, they are ignored.
              Please see the section on GENERATING IMAGEMAP FILES for details.   The  default  is
              false.

       Tgif.XpmToGif: STRING
              The  STRING  specifies  a  command  used to convert an XPM file to a GIF file.  The
              STRING must contain a %s substring to be replaced by the full path name of the  XPM
              file.  The default is "xpmtoppm %s | ppmtogif".

       Tgif.ImageMapFileExtension: STRING
              The STRING specifies the file extension for a imagemap file.  The default is "map".

       Tgif.GifFileExtension: STRING
              The  STRING  specifies  the  file  extension  for a GIF file.  The default is "gif"
              (lower case).

       Tgif.ImageMapFileFormat: [NCSA,CERN]
              The STRING specifies either the NCSA imagemap or the CERN clickable  image  format.
              The default is NCSA for the NCSA imagemap format.

       Tgif.UseXPmVersion1ForImageMap: [true,false]
              The  setting  of this X default should depend on the setting of the Tgif.XpmToGif X
              default above.  If set to ``true'',  XPM1  file  is  generated  regardless  of  the
              setting of the Tgif.XPmOutputVersion X default.  The default is true.

       Tgif.UsePaperSizeStoredInFile: [true,false]
              If  set  to  ``true'',  the  paper size information stored in a just opened file is
              used.  The default is true.

       Tgif.OneMotionSelMove: [true,false]
              If set to ``true'', one can select and move an object in one motion.   The  default
              is false.

       Tgif.TiffEPSI: (obsolete)
              This  X  default  became obsolete because TiffEPSI became a supported export format
              since tgif-4.0.

       Tgif.XbmToTiff: STRING
              The STRING specifies a command used to convert an XBM file to  a  TIFF  file.   The
              STRING  must  contain either one or two %s substring.  The first %s substring is to
              be replaced by the full path  name  of  the  XBM  file.   The  optional  second  %s
              substring is to be replaced by the full path name of the generated TIFF image.  The
              default is "xbmtopbm %s | pnmtotiff -none > %s".

       Tgif.EPSIExportExtension: STRING
              STRING specifies the file extension used for exporting EPSI files.  The default  is
              "eps".

       Tgif.HotListFileName: STRING
              STRING  specifies  a  full path name of a file used to store the hot file list.  By
              default, this file is .Tgif_hotlist in the user's home directory.

       Tgif.@@@Viewer: STRING
              STRING specifies an external viewer for an remote URL with a file extension of @@@.
              STRING can be in 3 forms.  It can be the string "NONE" to indicate that when such a
              remote file is encountered, tgif should retrieve the file  into  a  user  specified
              directory.  For example, if one wishes to retrieve .gz files, one can use:

                     Tgif.gzViewer: NONE

              STRING can also contain the string %S (S is capitalized), this indicates that %S is
              to be replaced by the URL.  For example, if one wishes to view  .html  files  using
              xmosaic, one can use:

                     Tgif.htmlViewer: xmosaic %S

              Another  form  of  STRING  contains the string %s (S is lower-case), this indicates
              that the remote file is to be retrieved into a user specified directory and view by
              a tool.  For example, if one wishes to view .gif files using xv, one can use:

                     Tgif.gifViewer: xv %s

              Please  note that this mechanism has precedence over the mechanism described in the
              MIME TYPES AND MAILCAPS section above.

       Tgif.AutoHyperSpaceOnRemote: [true,false]
              If set to ``false'', tgif will not go into the hyperspace mode when a remote URL is
              visited.  The default is true.

       Tgif.AllowLaunchInHyperSpace: [true,false]
              If  set  to  ``true'',  launching of applications is enabled in the hyperspace mode
              when a remote URL is visited.  This  is  potentially  very  dangerous  because  the
              application  may  do  catastrophic  damages.  Therefore, it is strongly recommended
              that it is set to false.  The default is false.

       Tgif.CanChangeAttrColor: [true,false]
              If set to ``true'', color of an attribute can be changed when it is attached to  an
              object.  The default is false.

       Tgif.MimeTypesFile: STRING
              STRING  specifies  a  full  path  name  of the MIME-types file.  Tgif only uses the
              type/subtype field in the MIME-types  file  and  ignores  all  other  fields.   The
              default MIME-types file is .mime.types in user's home directory.

       Tgif.LocalRGBTxt: STRING
              If  one would like to override certain system colors, one can use STRING to specify
              a full path name of a file to be consulted first before looking up the color in the
              server.   The  file  must  be in the same format as the rgb.txt file.  Namely, each
              line contains 4 fields, the first 3 fields correspond to the red, green,  and  blue
              components  of  the  color,  and  the  4th field is the name of the color.  A color
              component must have a value between 0 and 255 (inclusive).

       Tgif.PrintUsingRequestedColor: [true,false]
              If set to ``true'', the color PostScript file being printed will use the  requested
              color instead of the color returned by the X server.  The default is false.

       Tgif.ShowMeasurement: [true,false]
              If  set  to  ``true'',  the  location of the cursor and the width and height of the
              object being drawn/dragged/stretched will be shown.  The default is false.

       Tgif.ShowMeasurementUnit: STRING
              The STRING specifies the unit used to display the measurement cursor.  There are  2
              basic  formats.   One  is  just  the word "pixel", "inch", or "cm".  There are also
              known as basic units.  Another format is NUM BASIC-UNIT/NEW-UNIT, where  NUM  is  a
              numeric  value,  BASIC-UNIT  is one of the basic units, and NEW-UNIT is any string.
              For example, "0.1 cm/mm" means that the new display unit is "mm" and 1 "mm" is  0.1
              cm.   "50  pixel/cm" is identical to "1 cm/cm" and "128 pixel/inch" is identical to
              "1 inch/inch".  The default is pixel.

       Tgif.PageStyleLandscape: [true,false]
              If set to ``true'', tgif comes up in landscape mode.  The default is false.

       Tgif.QueryZoomInPoint: [true,false] or [always,no_select,no_query,never]
              If set to ``true'' (or ``always''), the user will be asked to select a center point
              when  zooming  in.   If  set  to  ``no_select'', the user will be asked to select a
              center point when zooming in if no objects are selected.  If set  to  ``no_query'',
              the  position of the mouse is the zoom-in point.  In this case, it is not desirable
              to zooms in using a menu selection.  The default is false (or never).

       Tgif.GZipCmd: STRING
              The STRING specifies a command used to gzip a .obj file.  The command must  produce
              output  into  its  stdout.   If the command contains a %s substring, the %s will be
              replace by the full path name of a temporary copy of the .obj file.  The default is
              "gzip -c".

       Tgif.GUnZipCmd: STRING
              The  STRING  specifies  a  command used to unzip a zipped tgif file (with extension
              .obj.gz or .sym.gz) into a tgif file.  The command must  produce  output  into  its
              stdout.  If the command contains a %s substring, the %s will be replace by the full
              path name of a temporary copy of the zipped file.  The default is "gunzip -c".

       Tgif.HttpProxy: STRING
              The STRING specifies a host name and a port number of an HTTP proxy server.  Format
              of  the  specification  is <host>:<port>.  If :<port> is omitted, 80 is used as the
              default port number.  The environment variable http_proxy has precedence over  this
              X default.  The default is not to use an HTTP proxy server.

       Tgif.FtpProxy: STRING
              The  STRING specifies a host name and a port number of an FTP proxy server.  Format
              of the specification is <host>:<port>.  If :<port> is omitted, 21 is  used  as  the
              default port number.  The environment variable ftp_proxy has precedence over this X
              default.  The default is not to use an FTP proxy server.

       Tgif.InitialArrowStyle: [NONE,RIGHT,LEFT,DOUBLE]
              This specifies the initial arrow style for polyline/open-splines/arcs.  The default
              is RIGHT.

       Tgif.ShowPageInEPS: [true,false]
              If  set  to ``true'', a showpage PostScript command will be generated for an EPS or
              EPSI file.  The default is true.

       Tgif.MaxNavigateCacheBuffers: NUMBER
              This specifies the number of cache buffers allocated  to  cache  remote  files  (to
              minimize communication).  NUMBER must be non-negative.  The default is 40.

       Tgif.NumberFileInPrintOnePage: [true,false]
              If set to ``true'', when PrintOnePage from the Print Menu is selected for a stacked
              multipage drawing (e.g., file.obj), file_N with the proper file extension  will  be
              generated, where N corresponds to the selected page number.  The default is false.

       Tgif.OneMotionTimeout: NUMBER
              When  Tgif.OneMotionSelMove  is  set  to true, moving an object is considered to be
              making a selection if the elapse time between mouse-down and  mouse-up  is  smaller
              than  the timeout value specified by this X default (in milliseconds).  The default
              is 200.

       Tgif.MinMoveInterval: NUMBER
              When Tgif.OneMotionSelMove is set to false, moving an object is  considered  to  be
              making  a  selection  if the elapse time between mouse-down and mouse-up is smaller
              than the interval specified by this X default (in milliseconds).  The default is 0.

       Tgif.GifToXpm: STRING
              The STRING specifies a command used to convert a GIF file  to  an  XPM  file.   The
              STRING  must contain a %s substring to be replaced by the full path name of the GIF
              file.  The default is "giftopnm %s | ppmtoxpm".

       Tgif.InitExportPixelTrim: LEFT_NUMBER,TOP_NUMBER,RIGHT_NUMBER,BOTTOM_NUMBER
              The numbers specify the number of pixels to trim when printing or exporting in  the
              XBM,  XPM, or GIF format.  The use of these values forms an escape mechanism to fix
              an idiosyncrasy that tgif can not figure out exactly how big the  whole  image  is.
              The default values are all 0's.

       Tgif.QuantizingLevels: NUMBER
              Some  image  functions such as Sharpen() uses convolution and may generate an image
              that uses more than 256 colors which tgif can not handle.  The NUMBER specifies the
              number  of colors to quantize down to when such a situation occurs.  The default is
              222.

       Tgif.RotateCursor: [x_cursor,arrow,...]
              This specifies the cursor used in the rotate mode.  Entries  in  <X11/cursorfont.h>
              (without the XC_ prefix) are valid names of the cursor.  The default is crosshair.

       Tgif.ColorLayers: [true,false]
              If  set  to ``true'', each color is considered to be a different layer which can be
              individually turned on and off.  If a color layer is turned off, primitive  objects
              in  that  layer  will not be visible.  A grouped object only becomes invisible when
              all its constituent objects are invisible.  The default is false.

       Tgif.TiffToXbm: STRING
              The STRING specifies a command used to convert a TIFF file to an  XBM  file.   This
              command  is  used  when  importing an EPSI file generated by a Windows application.
              The STRING must contain a %s substring to be replaced by the full path name of  the
              TIFF file.  The default is "tifftopnm %s | pgmtopbm | pbmtoxbm".

       Tgif.DefFixedWidthFont: STRING
              The  STRING  specifies a font to be used as the default font for the Status Window,
              menus,    dialogboxes,    etc.     The     default     is     "-*-courier-medium-r-
              normal-*-14-*-*-*-*-*-iso8859-1".

       Tgif.DefFixedWidthRulerFont: STRING
              The  STRING  specifies  a  font  to  be  used  in the horizontal and vertical ruler
              windows.  The default is "-*-courier-medium-r-normal-*-10-*-*-*-*-*-iso8859-1".

       Tgif.MenuFont: STRING
              The STRING specifies a font to be  used  in  menus.   If  this  X  default  is  not
              specified, the default font is used in menus.

       Tgif.BoldMsgFont: STRING
              The  STRING specifies a bold font to be used in buttons and dialogboxes.  If this X
              default is not specified but Tgif.MenuFont is specified,  this  will  take  on  the
              value of Tgif.MenuFont.  If this X default and Tgif.MenuFont are not specified, the
              default font is used in bold messages.

       Tgif.MsgFont: STRING
              The STRING specifies a thin font to be used in the Status Window  and  dialogboxes.
              If this X default is not specified, the default font is used in messages.

       Tgif.BggenToXpm: STRING
              The  STRING  specifies  a  command for generating an X11 pixmap file to be executed
              when RunBggen() is selected from the ImageProc Menu.  The STRING must  contain  two
              %s  substrings.   The  first  %s is to be replaced by a user specified string.  The
              second %s is to be replaced by the geometry of the image.  The default is "bggen %s
              -g  %s  |  ppmquant 64 | ppmtoxpm".  Please note that bggen(1) is part of the xv(1)
              package.

       Tgif.BggenToPpm6: STRING
              The STRING specifies a command for generating  a  PPM  file  to  be  executed  when
              RunBggen()  is  selected  from  the ImageProc Menu.  The STRING must contain two %s
              substrings.  The first %s is to be replaced by a user specified string.  The second
              %s  is  to  be  replaced by the geometry of the image.  The default is "bggen %s -g
              %s".  Please note that bggen(1) is part of the xv(1) package.

       Tgif.LittleEndianPpm6: [true,false]
              If set to ``true'', when reading a PPM (or PGM) file that uses a maxval  of  65535,
              little  endian format will be assumed (the standard for such a format calls for the
              big endian format).  The default is false.

       Tgif.DefaultErrorDiffuseLevels: R_NUMBER G_NUMBER B_NUMBER
              The NUMBERs specify the number of bits of red, green, and  blue  to  be  used  when
              ReduceToDefaultColors()  or  DefaultErrorDiffuse()  are selected from the ImageProc
              Menu.  These values determine a  set  of  default  colors  to  be  used  for  color
              quantization  for  the  ReduceToDefaultColors()  and DefaultErrorDiffuse() methods.
              R_NUMBER+G_NUMBER+B_NUMBER must be less than or equal to 8, and each number must be
              greater than 0.  The default is 2 2 2.

       Tgif.MaxImportFilters: NUMBER
              This  specifies  the  maximum  number  of  import  filters.   ImportFilter0 through
              ImportFilterMax, where Max is NUMBER-1, in X defaults are queried.  The default  is
              0.

       Tgif.ImportFilter#: FILTERSTRING
              This  specifies  an  import  filter.   FILTERSTRING has 3 parts (separated by space
              characters).  The first part is the name of the filter.   It  must  not  contain  a
              space  character.   The  second  part contains semicolon-separated file extensions.
              The third part is the actual filter command for converting the named external  file
              type  to  an  X11  pixmap  file.  Please see the IMPORT RASTER GRAPHICS section for
              details.

       Tgif.ShowFileNameOnBrowse: [true,false]
              If set to ``true'', file names will be shown when BrowseXBitmap(), BrowseXPixmap(),
              or BrowseOther() are selected from the File Menu.  The default is true.

       Tgif.HtmlFileExtension: STRING
              The STRING specifies the file extension used when printing in the HTML format.  The
              default is "html".

       Tgif.GenerateHtmlHref: [true,false]
              If set to ``true'' and when printing in the HTML  format,  the  value  of  an  href
              attribute  is  parsed.  If the value references a .obj file, it's changed to have a
              HTML file extension.  If it is set to ``false'', no conversion will  be  performed.
              The default is true.

       Tgif.RotationIncrement: NUMBER
              This specifies the initial rotation increment in degrees.  The default is 45.

       Tgif.PSA4PaperSize: [true,false]
              If set to ``true'' and A4 size paper is specified, the following line is added to a
              PS/EPS/EPSI file (before "%%EndComments"):

                     %%DocumentPaperSizes: a4

              The default is false.

       Tgif.ShapeShadowSpec: STRING
              The STRING specifies the initial horizontal and vertical offsets of a shape shadow.
              If  both  values  are zeroes, a shape is created without a shadow.  When creating a
              shape with a shadow, background fill pattern (3rd pattern in the  first  column  of
              the Fill Menu) usually gives the best result.  The default is "0,0".

       Tgif.StretchableText: [true,false]
              If  set  to  ``true'',  stretchable  text mode is the initial mode.  The default is
              true.

       Tgif.EditTextSize: NUMBER
              This specifies the text size to be used in editing existing text  objects.   NUMBER
              should  either  be  0 or a value between 4 and 34 (inclusive).  If NUMBER is 0, the
              actual text size is used in editing existing text objects.  The value of  the  edit
              text  size  can later be changed by selecting SetEditTextSize() from the Properties
              Menu.  The default is 0.

       Tgif.IconPixmap: (obsolete)
              This X default became obsolete in tgif-4.2 because it clashes  with  the  Xtoolket.
              It's renamed to Tgif.WMIconPixmap.

       Tgif.WMIconPixmap: STRING
              STRING  specifies the path of an XBM or XPM file to be used as tgif's desktop icon.
              If STRING starts with a / character, absolute path is used; otherwise,  the  actual
              path  of  the  icon file is $TGIFPATH/STRING where TGIFPATH is either defined using
              the X defaults or an environment variable.  This  X  default  is  only  enabled  if
              Tgif.UseWMIcon  is  set  to  true.  The default value is ``tgificon.xbm'' (which is
              compiled into tgif).

       Tgif.TmpFileMode: NUMBER (OCTAL)
              This specifies file mode for temporary and exported files.  NUMBER must be an octal
              number.  If NUMBER is 0, no attempt is made to change the file mode.  If this value
              is specified (even if it's 0), it overrides the PSFILE_MOD compile  option.   There
              is no default value.

       Tgif.TitledPinnedMenu: [true,false]
              If  set  to ``true'', pinned menu will have a title bar and left button is used for
              selecting menu items in a pinned menu.  The default is true.

       Tgif.ColorFromXPixmap: STRING
              STRING specifies the path of an XPM file to be used to load the initial colors.  If
              this   X  default  is  specified,  the  Tgif.Color#  X  defaults  are  ignored  but
              Tgif.AdditionalColors X default can be used to specify additional colors when  tgif
              starts up.

       Tgif.VectorWarpSoftness: NUMBER
              This  specifies  the  softness  value  used  when VectorWarp() is selected from the
              ImageProc Menu.  VectorWarp() lets the user warp pixels in an X11 pixmap object  by
              specifying  a  vector.   The size of the affected area is controlled by this value,
              which must lie between 1.0 and 4.0.  The larger the value, the larger the  affected
              area.  The default value is 2.0.

       Tgif.ChangePropertiesOfAttrs: [true,false]
              If  set to ``true'', changing a property (such as font, font size, color, etc.)  of
              an object will change the property of the attributes attached to the object in  the
              same way.  The default is false.

       Tgif.ShiftForDiagMouseMove: [true,false]
              If  set  to  ``true'',  certain  mouse  movements  are restricted to multiple of 45
              degrees.  The default is true.

       Tgif.UseRecentForDiagMouseMove: [true,false]
              If set to ``true'', the object that is used as  anchor  for  measuring  the  moving
              distance   is   used   as   an   anchor   when   objects.    This   only  works  if
              Tgif.UseRecentDupDistance and Tgif.ShiftForDiagMouseMove are both set to true,  The
              default is false.

       Tgif.FlushColormapOnOpen: [true,false]
              If  set  to  ``true'', colormap is flushed and the initial tgif colors are reloaded
              when a new file is opened.  The default is false.

       Tgif.TransparentPattern: [true,false]
              If set to ``true'', fill and pen patterns are transparent initially.   The  default
              is false.

       Tgif.DontReencode: STRING
              For fonts that are not iso8859-1 encoded, non-ASCII portion of the font (characters
              with bit 7 on) is by default reencoded as if it were iso8859-1 encoded.  If this is
              not desirable for a font, reencoding can be bypassed by including the first part of
              the PostScript font name of the font  in  STRING.   Fields  in  STRING  are  colon-
              separated.   For  example, if STRING is "Times:Courier:Helvetica", PostScript fonts
              that begins with "Times", "Courier", or "Helvetica" will not be reencoded.  (Please
              note  that  this  X  default  overwrite  the fonts specified by -D_DONT_REENCODE at
              compile time.)  Please also see the POSTSCRIPT CHARACTER ENCODING FOR INTERNATINOAL
              CHARACTERS section for an example.

       Tgif.AdditionalDontReencode: STRING
              Use  this  X  default  to  augment  Tgif.DontReencode  (or  the  fonts specified by
              -D_DONT_REENCODE at compile time).  STRING here is basically  concatenated  to  the
              STRING  specified  by Tgif.DontReencode (or the fonts specified by -D_DONT_REENCODE
              at compile time).

       Tgif.UnsignedInXBmExport: [true,false]
              If set to ``true'', unsigned char will be used instead  of  char  in  exported  XBM
              files.  The default is false.

       Tgif.CommentInBitmapExport: [true,false]
              If  set  to  ``true'', a blank RCS Header comment will be prepended to exported XBM
              and XPM files.  The default is false.

       Tgif.ShowFontSizeInPoints: [true,false]
              If set to ``true'', font sizes are displayed in  the  unit  of  point  sizes.   The
              default is false.

       Tgif.DontCondensePSFile: [true,false]
              By default, PS/EPS files generated by tgif are not condensed.  If this X default is
              set to ``false'', tgif will generate condensed PS/EPS files.  The default is true.

       Tgif.StripCondensedPSComments: (obsolete)
              This X default became obsolete in tgif-4.0.11 because it turns out  that  it's  not
              always okay to strip PS comments (it should always be set to false).

       Tgif.PdfFileExtension: STRING
              The  STRING specifies the file extension used when printing in the PDF format.  The
              default is "pdf".

       Tgif.PsToPdf: STRING
              The STRING specifies a command used to convert a PS file to a PDF file.  The STRING
              must  contain  2  %s substrings to be replaced by the full path name of the PS file
              and the full path name of the PDF file.  The default is:

                     ps2pdf "%s" "%s"

              (If you like  to  use  "epstopdf",  you  can  try  setting  this  to  "epstopdf  %s
              --outfile=%s".)

       Tgif.EpsToTmpSvg: STRING
              Converting  an EPS file to an SVG file is done in two steps.  First the EPS file is
              converted to a temporary file and then the temporary file is converted  to  an  SVG
              file.   By default, the uniconvertor(1) format is used for the temporary file.  The
              STRING here specifies a command for the  first  part  and  it  must  contain  2  %s
              substrings  to  be replaced by the full path name of the EPS file and the full path
              name of the temporary file.  The default is:

                     pstoedit -dt -f sk "%s" "%s"

       Tgif.TmpSvgToSvg: STRING
              This X default is to be used  in  conjunction  with  Tgif.EpsToTmpSvg  above.   The
              STRING  here  specifies a command for the second part of the conversion and it must
              contain 2 %s substrings to be replaced by the full path name of the temporary  file
              and the full path name of the SVG file.  The default is:

                     uniconvertor "%s" "%s"

       Tgif.TmpSvgFileExtension: STRING
              The  STRING  specifies  the  file  extension  used  for  the intermediary file when
              converting an EPS to an SVG file.  The default is "sk".

       Tgif.3DLook: [true,false]
              If set to ``false'', no 3D decoration of windows and buttons  will  be  used.   The
              default is true.

       Tgif.XpmDeckToGifAnim: STRING
              The  STRING  specifies  a  command  used  to  convert  a  list of GIF file to a GIF
              animation file.  The STRING must not contain any  %s  substring.   The  default  is
              "gifsicle     -lforever     --delay     10".      Gifsicle's     home    page    is
              <URL:http://www.lcdf.org/gifsicle/>.  One can also set this X default to  "whirlgif
              -loop        -time        10".         Whirlgif's        home        page        is
              <URL:http://www.msg.net/utility/whirlgif/>.

       Tgif.GifAnimExplode: STRING
              The STRING specifies a command used to  explode  an  animated  GIF  file  into  its
              constituent  GIF  files.   The  STRING  must  not  contain  any  %s substring.  The
              constituent GIF files must have the following file names.  If the animated GIF file
              is   named  "foo.gif",  the  constituent  GIF  files  must  be  named  "foo.gif.0",
              "foo.gif.1", etc.   The  default  is  "gifsicle  -eU".   Gifsicle's  home  page  is
              <URL:http://www.lcdf.org/gifsicle/>.

       Tgif.Btn3PopupModeMenu: [true,false]
              If  set  to  ``true'',  pressing  the  right mouse button in the canvas window will
              generate the Mode Menu.  The default is false.

       Tgif.ScriptFraction: NUMBER
              This specifies the size of the super/subscript relative to the size of  the  normal
              text.  The value must be between 0.2 and 0.8.  The default value is 0.6.

       Tgif.DeleteNextCharWithDelKey: [true,false]
              If  set  to  ``true'',  pressing  the  Delete  key  on the keyboard will delete the
              character to the right of the cursor in text mode.  The default is true.

       Tgif.SquareDoubleByteFonts: FONT_SPEC1 FONT_SPEC2 ...
              Starting with version 4.0 of tgif,  double-byte  fonts  are  supported.   But  only
              double-fonts  where  every  character  has the same width and height are supported.
              Please see the SQUARE DOUBLE FONTS section for details.

       Tgif.DefaultSingleByteFont: STRING
              Using input methods (specified by the Tgif.DoubleByteInputMethod X default  below),
              one can mix english (single-byte) substrings within a double-byte string.  The font
              to use for the english substring is specified by this X default.   The  default  is
              Times.

       Tgif.@@@ShowFontChar: OCTAL STRING
              OCTAL  STRING  specifies  a  double-byte  octal character to be used to represent a
              double-byte font in the Choice Window when the font is  selected.   @@@  should  be
              replaced  by  the name of the double-byte font.  Please see the SQUARE DOUBLE FONTS
              section for examples.

       Tgif.@@@ConvFromUTF8: STRING
              The STRING specifies a command to be used to convert an UTF8 encoded  string  to  a
              string  to be pasted into a text object when the current font is a double-byte font
              whose name matches @@@.  Please see the SQUARE DOUBLE FONTS section for examples.

       Tgif.@@@ConvToUTF8: STRING
              The STRING specifies a command to be used to convert a selected string (whose  font
              name  matches  @@@  and  is  a double-byte font) to be copied to the clipboard to a
              string in the UTF8  format.   Please  see  the  SQUARE  DOUBLE  FONTS  section  for
              examples.

       Tgif.DoubleByteInputMethod: STRING
              This  specifies  the  input method for double-byte fonts.  Currently, the following
              values are supported: "xcin", "chinput", "kinput2", "xim", and  "tgtwb5".   If  you
              are  using  xcin-2.5  or  above,  please use "xim" instead of "xcin".  The "tgtwb5"
              input method is built into tgif and can take an optional  parameter  (by  appending
              ",FONTNAME" after "tgtwb5") specifying a Big5 X font name to be used in selecting a
              character.    If    FONTNAME    is    not    specified,    "-taipei-fixed-medium-r-
              normal--16-150-75-75-c-160-big5-0" will be used.  Please see the SQUARE DOUBLE BYTE
              FONTS section for details.

       Tgif.UseNKF: [true,false]
              If set to ``true'', Network Kanji Filter (NKF) will be used.  The default is false.

       Tgif.CopyAndPasteJIS: [true,false]
              If set to ``true'', copying and pasting text strings will go through additional JIS
              to EUC conversion.  The default is false.

       Tgif.PreeditType: [overthespot,root]
              If  set  to ``overthespot'', over-the-spot preediting will be used.  The default is
              root.

       Tgif.Lang: STRING
              This specifies the locale.   The  environment  variables  LANG  can  override  this
              setting.

       Tgif.Modifiers: STRING
              This  specifies  the  locale  modifiers.   The environment variables XMODIFIERS can
              override this setting.

       Tgif.ConvSelection: STRING
              This specifies the name of the selection used in converting kinput2  strings.   The
              default value is _JAPANESE_CONVERSION.

       Tgif.VisibleGridInSlideShow: STRING
              If set to ``true'', grids will be visible in slideshow mode.  The default is false.

       Tgif.SmoothScrollingCanvas: [off,jump,smooth]
              If  set  to  ``smooth'', scrolling the main canvas window will be smooth.  However,
              there may be a delay when scrolling starts to cache the image.  If set to ``jump'',
              scrolling  the  main canvas window will be jumpy.  If set to ``off'', scrolling the
              main canvas window will not change the canvas until the mouse button  is  released.
              The default is jump.

       Tgif.LightGrayColor: COLORSTRING
              This specifies the color to be used for the background of buttons, menus, etc.  The
              default is gray75.

       Tgif.DarkGrayColor: COLORSTRING
              This specifies the color to be used for the shadow of  buttons,  menus,  etc.   The
              default is gray50.

       Tgif.DefaultObjectBackground: COLORSTRING
              This specifies the color to be used for the background of objects.  By default, the
              default background color is used.

       Tgif.UseImagePixelsForTrueColorExport: [true,false]
              If set to ``true'', the color table of an exported XPM/GIF file  will  be  obtained
              from the actual image pixels for a TrueColor visual.  The default is false.

       Tgif.DialogboxUse3DBorder: [true,false]
              If  set  to  ``false'',  dialogboxes will not have 3D borders.  This should be used
              with X servers such as X-Win32 because dialogboxes already have  3D  borders.   The
              default is true.

       Tgif.MenuFontSet: STRING
              This  X  default  is  only  used  if  tgif is compiled with the ENABLE_NLS compiler
              option.  The STRING specifies a list of fonts to be used in menus.  STRING  can  be
              ``none''  to  indicate  not  to  use  menu font set.  The default is "-*-helvetica-
              medium-r-normal--12-*-*-*-*-*-*-*,-*-*-medium-r-*--12-*-*-*-*-*-*-*".

       Tgif.MsgFontSet: STRING
              This X default is only used if  tgif  is  compiled  with  the  ENABLE_NLS  compiler
              option.   The  STRING  specifies  a  list  of  fonts to be used in status messages.
              STRING can be ``none'' to indicate not to use message font  set.   The  default  is
              "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,-*-*-medium-r-*--12-*-*-*-*-*-*-*".

       Tgif.BoldMsgFontSet: STRING
              This  X  default  is  only  used  if  tgif is compiled with the ENABLE_NLS compiler
              option.  The STRING specifies a list of fonts to be used in  messageboxes.   STRING
              can  be  ``none''  to  indicate  not  to use bold message font set.  The default is
              "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*,-*-*-medium-r-*--12-*-*-*-*-*-*-*".

       Tgif.BoldMsgFontDoubleByte: [true,false]
              This X default is only used if  tgif  is  compiled  with  the  ENABLE_NLS  compiler
              option.   This  X  default  should  be  set  to  ``true''  if  the  strings used in
              messageboxes may contain double-byte characters.  The default is false.

       Tgif.LocaleDir: STRING
              This X default is only used if  tgif  is  compiled  with  the  ENABLE_NLS  compiler
              option.  The STRING specifies a full path name of a locale directory.

       Tgif.PsRegMarksInTiledPageMode: [true,false]
              If  set  to  ``true'',  small  crosshairs will be drawn at the corners defining the
              clipping regions when printing/exporting PS/EPS files in the tiled page mode.   The
              greyness  of  the  cross  hairs  will  be  determined  by the Tgif.PsRegMarksGray X
              default.  The default is false.

       Tgif.PsRegMarksGray: NUMBER
              This    specifies    the    greyness    of     the     crosshairs     used     when
              Tgif.PsRegMarksInTiledPageMode is set to true.  The default value is 0.95

       Tgif.PSFontAliases: PSFONTALIAS_SPEC1 PSFONTALIAS_SPEC2 ...
              Font  aliases  can  be  used  to represent different encoding, etc.  Please see the
              POSTSCRIPT CHARACTER ENCODING FOR INTERNATINOAL CHARACTERS section for details.

       Tgif.DomainInIni: [true,false]
              If set to ``true'', domain information will be loaded from  the  ~/.Tgif/domain.ini
              file and all the menu items in the Domain submenu of the File Menu will be enabled.
              The default is false.

       Tgif.UndoRedoRestoreDrawingMode: [true,false]
              If set to ``true'', the drawing mode just before an  undo/redo  operation  will  be
              restored after undo/redo.  The default is true.

       Tgif.MenuRowsBeforeScroll: NUMBER
              This  specifies the maximum number of rows in a user-specifiable text menu (such as
              the Font Menu and the FontSize Menu) before a vertical scrollbar  is  automatically
              used.  The default value is 20.

       Tgif.MenuColsBeforeScroll: NUMBER
              This  specifies  the maximum number of rows in a user-specifiable bitmap menu (such
              as the Color Menu) before  a  horizontal  scrollbar  is  automatically  used.   The
              default value is 26.

       Tgif.PngToXpm: STRING
              The  STRING  specifies  a  command  used to convert a PNG file to an XPM file.  The
              STRING must contain a %s substring to be replaced by the full path name of the  PNG
              file.  The default is "pngtopnm %s | pnmdepth 255 | ppmquant 222 | ppmtoxpm".

       Tgif.JpegToXpm: STRING
              The  STRING  specifies  a  command used to convert a JPEG file to an XPM file.  The
              STRING must contain a %s substring to be replaced by the full path name of the JPEG
              file.  The default is "djpeg -gif -color 222 %s | giftopnm | ppmtoxpm".

       Tgif.PbmToXbm: STRING
              The  STRING  specifies  a  command  used to convert a PBM file to an XBM file.  The
              STRING must contain a %s substring to be replaced by the full path name of the  PBM
              file.  The default is "pbmtoxbm %s".

       Tgif.PgmToXpm: STRING
              The  STRING  specifies  a  command  used to convert a PGM file to an XPM file.  The
              STRING must contain a %s substring to be replaced by the full path name of the  PGM
              file.  The default is "ppmtoxpm %s".

       Tgif.PpmToXpm: STRING
              The  STRING  specifies  a  command  used to convert a PPM file to an XPM file.  The
              STRING must contain a %s substring to be replaced by the full path name of the  PPM
              file.  The default is "ppmquant 222 %s | ppmtoxpm".

       Tgif.XpmToPng: STRING
              The  STRING  specifies  a  command  used to convert an XPM file to a PNG file.  The
              STRING must contain a %s substring to be replaced by the full path name of the  XPM
              file.  The default is "xpmtoppm %s | pnmtopng".

       Tgif.PngFileExtension: STRING
              The  STRING  specifies  the  file  extension  for a PNG file.  The default is "png"
              (lower case).

       Tgif.XpmToJpeg: STRING
              The STRING specifies a command used to convert an XPM file to  a  JPEG  file.   The
              STRING  must contain a %s substring to be replaced by the full path name of the XPM
              file.  The default is "xpmtoppm %s | cjpeg".

       Tgif.PpmToGif: STRING
              The STRING specifies a command used to convert a PPM  file  to  a  GIF  file.   The
              STRING  must contain a %s substring to be replaced by the full path name of the PPM
              file.  The default is "ppmquant 222 %s | ppmtogif".

       Tgif.PpmToPng: STRING
              The STRING specifies a command used to convert a PPM  file  to  a  PNG  file.   The
              STRING  must contain a %s substring to be replaced by the full path name of the PPM
              file.  The default is "pnmtopng %s".

       Tgif.PpmToJpeg: STRING
              The STRING specifies a command used to convert a PPM file  to  a  JPEG  file.   The
              STRING  must contain a %s substring to be replaced by the full path name of the PPM
              file.  The default is "cjpeg %s".

       Tgif.Ppm6ToXpm3: STRING
              The STRING specifies a command used to convert a PPM (P6) file to a version  3  XPM
              file.   The STRING must contain a %s substring to be replaced by the full path name
              of the PPM file.  The default is "ppmtoxpm %s".

       Tgif.PpmQuantize: STRING
              The STRING specifies a command used to quantize the colors of a PPM file down to  a
              specified number.  The STRING must contain (1) a %d substring to be replaced by the
              number of colors to reduce to and (2) a %s substring to be  replaced  by  the  full
              path name of the PPM file.  The default is "pnmquant %d %s".

       Tgif.PpmFSQuantize: STRING
              The  STRING specifies a command used to quantize the colors of a PPM file down to a
              specified number using the Floyd-Steinberg half-tone algorithm.   The  STRING  must
              contain  (1) a %d substring to be replaced by the number of colors to reduce to and
              (2) a %s substring to be replaced by the full path  name  of  the  PPM  file.   The
              default is "pnmquant -fs %d %s".

       Tgif.JpegFileExtension: STRING
              The  STRING  specifies  the  file  extension for a JPEG file.  The default is "jpg"
              (lower case).

       Tgif.ProducedBy: STRING
              When printing/exporting PS/EPS files, STRING will appear in a %%ProducedBy line  in
              a  exported  PS/EPS  file.   Please include your name and e-mail address in STRING.
              The default is "(unknown)".

       Tgif.Editor: STRING
              STRING specifies a text editor to use for  editing  attributes.   The  STRING  must
              contain two %s substrings to be replaced by the window title and the full path name
              of the text file.  For example, you can use "xemacs -title '%s' '%s'".  The default
              is "xterm -title '%s' -e vi '%s'".

       Tgif.GoHyperSpaceInSlideShow: [true,false]
              If  set to ``true'', hyperspace mode will be entered when tgif enters the slideshow
              mode.  The default is false.

       Tgif.LineWidthIndexInSlideShow: NUMBER
              This specifies the line width index to use when tgif is in the slideshow mode.  The
              default value is 4.

       Tgif.MaxRecentFiles: NUMBER
              This  specifies  the  maximum number of files to remember in the recently used file
              list.  The default value is 10.

       Tgif.ResetOriginOnAdvancePage: [true,false]
              If set to ``true'', tgif will scroll to the left-top corner of the page when  pages
              are advanced.  The default is false.

       Tgif.UseMeasureTooltip: [true,false]
              If  set  to  ``true'',  the  location of the cursor and the width and height of the
              object being drawn/dragged/stretched will be shown in a  tooltip  window.   This  X
              default only takes effect if Tgif.ShowMeasurement is true.  The default is false.

       Tgif.MeasureTooltipXFollowMouse: [true,false]
              If  set  to  ``true'',  the  X  position of the measurement tooptip will follow the
              mouse.  The default is false.

       Tgif.MeasureTooltipYFollowMouse: [true,false]
              If set to ``true'', the Y position of  the  measurement  tooptip  will  follow  the
              mouse.  The default is false.

       Tgif.MeasureTooltipHorizontalPosition: [left,center,right]
              Fix  the X position of the measurement tooltip to the left, center, or right.  This
              X default only takes  effect  if  Tgif.MeasureTooltipXFollowMouse  is  false.   The
              default is left.

       Tgif.MeasureTooltipVerticalPosition: [top,middle,bottom]
              Fix  the Y position of the measurement tooltip to the top, middle, or bottom.  This
              X default only takes  effect  if  Tgif.MeasureTooltipYFollowMouse  is  false.   The
              default is top.

       Tgif.MeasureTooltipVerbose: [true,false]
              If set to ``true'', additional information about the positions and sizes of objects
              will be displayed in the tooltip window.  The default is false.

       Tgif.NoMinWinSize: [true,false]
              If set to ``false'', tgif will have a minimum window size so that the  whole  panel
              window  is  always  visible.   The  problem  with  this setting is that some window
              manager will show the wrong window size when you resize the window.   This  setting
              is  left  for compatibility reasons.  If set to ``true'', a side effect is that the
              menubar will no longer automatically wraps around when Tgif.MinimalMenubar  is  set
              to true.  The default is true.

       Tgif.AutoWrapMenubar: [true,false]
              If   set   to   ``true'',   the   menubar   will  automatically  wrap  around.   If
              Tgif.MinimalMenubar is set to false, menubar will always wrap around automatically.
              The default is false.

       Tgif.AutoEPSPreviewBitmap: [true,false]
              If  set to ``true'', when importing a PS/EPS file, tgif will automatically generate
              a preview bitmap if the file does not already contain one.  The default is false.

       Tgif.PsToXbm: STRING
              STRING specifies a command used to convert a PS file to a  XBM  file.   The  STRING
              must  contain a single %s substrings to be replaced by the full path name of the PS
              file.  Please note that the above command usually generates a  bitmap  that's  much
              larger  than  image  in  the  file.   Tgif  automatically trims out the blank space
              similar to the way pbmtoepsi works.  The default is "gs -q  -dNOPAUSE  -sDEVICE=pbm
              -sOutputFile=- -- "%s" | pbmtoxbm".

       Tgif.TmpDirInHomeDir: [true,false]
              If  set  to  ``true'',  tgif  will  use  the $HOME/.Tgif directory as the temporary
              directory (unless the Tgif.TmpDir X default below is used) and the compiler  option
              -DTMP_DIR  is ignored.  The default is false if the -D_TMP_DIR_IN_HOME_DIR compiler
              option is used.  The default is true if the -D_TMP_DIR_IN_HOME_DIR compiler  option
              is not used.

       Tgif.TmpDir: STRING
              STRING  specifies  a  directory  to be used as the temporary directory.  The use of
              this  X  default  is   discouraged,   especially   if   tgif   is   compiled   with
              -DUSE_XT_INITIALIZE  and  a  X  resource  file  found  in the directory search path
              specified by the environment variable $XAPPLRESDIR is used.  By default, tgif  uses
              /tmp as the temporary directory.

       Tgif.ThumbnailGeometry: WIDTHxHEIGHT
              This X default specifies the geometry of thumbnails.  The default is 160x120.

       Tgif.ThumbnailPadding: NUMBER
              This  specifies the padding (in pixels) for thumbnail images.  The default value is
              8.

       Tgif.ThumbnailXGap: NUMBER
              This specifies the horizontal gap (in pixels) for thumbnail  images.   The  default
              value is 16.

       Tgif.ThumbnailYGap: NUMBER
              This  specifies  the  vertical  gap  (in pixels) for thumbnail images.  The default
              value is 0.

       Tgif.ThumbnailX: NUMBER
              This specifies the starting x location  (in  pixels)  for  thumbnail  images.   The
              default value is 32.

       Tgif.ThumbnailY: NUMBER
              This  specifies  the  starting  y  location  (in pixels) for thumbnail images.  The
              default value is 32.

       Tgif.ShowWireSignalName: [true,false]
              If set to ``false'', when connecting  ports,  tgif  will  automatically  place  the
              signal  name and hide it.  Otherwise, the user will be prompted to place the signal
              name and it will be visible.  The default is true.

       Tgif.LandscapePdfSetPageDevice: (obsolete)
              This X default became obsolete in  tgif-4.1.42  because  the  name  is  misleading.
              Please see Tgif.PdfSetPageDevice below.

       Tgif.PdfSetPageDevice: [true,false]
              If  set  to  ``true'',  when  exporting PDF (or PS) files, tgif will use PostScript
              "setpagedevice" command to specify the paper size in the generated PostScript  file
              before  calling  ps2pdf(1)  (if  exporting  in  PDF  format).   This  should not be
              necessary (and is considered a bug in ps2pdf).  In the future, this X  default  can
              be  used  to turn off the generation of the "setpagedevice" command when ps2pdf can
              handle landscape PostScript files correctly.

       Tgif.DeleteCmdAsCut: (obsolete)
              This X default became obsolete in  tgif-4.2.3.   Now  <Cntrl>x  binds  to  the  Cut
              command.   Tgif.EnableMouseWheel:  [true,false]  If  set  to ``false'', Button4 and
              Button5 mouse wheel scrolling  events  will  be  ignored.   The  default  is  true.
              Tgif.Btn2PopupMainMenu:  [true,false]  If set to ``false'', Button2 events will not
              bring up the Main Menu in the canvas window.  The default is true.

       Tgif.NoChoiceWindow: [true,false]
              If set to ``true'', no Choice and Message Windows will  be  shown  initially.   The
              default is false.

       Tgif.UseXPmVersion1ForXPmDeck: [true,false]
              The   setting   of   this   X   default   should  depend  on  the  setting  of  the
              Tgif.XpmDeckToGifAnim X default above.  If set to ``true'', XPM1 file is  generated
              when  a  deck  of  X11  pixmap  objects  is being converted to a GIF animation file
              regardless of the setting of the Tgif.XPmOutputVersion X default.  The  default  is
              true.

       Tgif.SlideShowWindowOffsets: X_OFFSET,Y_OFFSET
              The numbers specify the number of pixels to adjust for the slideshow mode.  If only
              one value is given, both X and Y offsets are set to the same  value.   The  default
              values are all 0's.

       Tgif.SlideShowBorderColor: COLORSTRING
              This  specifies  the color to be used for the area outside of the paper boundary in
              slideshow mode.  By default, the color of the border is the same as the  background
              color.

       Tgif.ConvertToBezierSegments: NUMBER
              This  specifies  the number of segments used in converting a polyline/spline object
              to a Bezier curve.  The default value is 50.

       Tgif.TickMarkSize: NUMBER
              This specifies the size of a tick mark to be used when tick marks are  added  at  a
              vertex of a polyline/polygon/spline.  The default value is 8.

       Tgif.NoModeWindow: [true,false]
              If set to ``true'', no Mode Window will be shown initially.  The default is false.

       Tgif.MakeUnsavableInSlideShow: [true,false]
              If  set to ``true'', the current file will be made unsavable when slideshow mode is
              entered.  (If the current file contains auto page numbering objects, the file  will
              be  made  unsavable  regardless  of the setting of this X default.)  The default is
              false.

       Tgif.SingleByteInputMethod: STRING
              This specifies the input method for single-byte fonts.  Currently,  only  "xim"  is
              supported.

       Tgif.IgnoreSlideShowOffsetsInFile: [true,false]
              If  set  to  ``false'',  the  slideshow  offsets stored in a file will override the
              Tgif.SlideShowWindowOffsets setting.  The default is true.

       Tgif.ItalicMsgFont: STRING
              The STRING specifies a italic font to be used in some buttons.  If this  X  default
              is  not  specified  but  Tgif.MenuFont is specified, this will take on the value of
              Tgif.MenuFont.  If this X default and Tgif.MenuFont are not specified, the  default
              font is used in italic messages.

       Tgif.ItalicMsgFontSet: STRING
              This  X  default  is  only  used  if  tgif is compiled with the ENABLE_NLS compiler
              option.  The STRING specifies a list of fonts to be used in  messageboxes.   STRING
              can  be  ``none''  to  indicate not to use italic message font set.  The default is
              "-*-helvetica-medium-o-normal--12-*-*-*-*-*-*-*,-*-*-medium-r-*--12-*-*-*-*-*-*-*".

       Tgif.BoldItalicMsgFont: STRING
              The STRING specifies a bold italic font to be used in some text.  If this X default
              is  not  specified  but  Tgif.MenuFont is specified, this will take on the value of
              Tgif.MenuFont.  If this X default and Tgif.MenuFont are not specified, the  default
              font is used in bold italic messages.

       Tgif.BoldItalicMsgFontSet: STRING
              This  X  default  is  only  used  if  tgif is compiled with the ENABLE_NLS compiler
              option.  The STRING specifies a list of fonts to be used in some text.  STRING  can
              be  ``none''  to  indicate not to use bold italic message font set.  The default is
              "-*-helvetica-bold-o-normal--12-*-*-*-*-*-*-*,-*-*-medium-r-*--12-*-*-*-*-*-*-*".

       Tgif.ExternalPsToEpsi: [true,false]
              If set to ``true'', the execution of the pstoepsi() internal  command  will  simply
              invoke pstoepsi externally.  The default is false.

       Tgif.GsPath: STRING
              The STRING specifies a full path name of the gs (ghostscript) program.  The default
              is "gs" (which implies that the "gs" excutable is in your PATH).

       Tgif.CompoundObjWithTextStretchableForPSE: [true,false]
              If set to ``false'',  when  executing  the  Precise  Scale  Everything  command,  a
              compound  object  will  not  be  stretched if it contains a text subobject.  This X
              default only has effect if tgif is in the non-stretchable text mode.  (If  tgif  is
              in the stretchable text mode, this X default is ignored.)  The default is false.

       Tgif.HideWindowsInSlideShow: [true,false]
              If  set  to  ``false'',  tgif  will  keep  all  windows  visible in slideshow mode.
              Otherwise, only the canvas window will be visible in slideshow mode.   The  default
              is true.

       Tgif.PSDistillerNoImageCompress: [true,false]
              If  set  to  ``true'',  tgif  will  generate  PostScript  code  so that images in a
              generated PostScript file will not be compressed by a  distiller  program  such  as
              ps2pdf.  The default is false.

       Tgif.AdditionalPSSetup: STRING
              If  specified,  the  PostScript  line specified by STRING is inserted at the end of
              PostScript file setup (right before %%EndSetup).  This option should only  be  used
              if  one  is  very  familiar  with  PostScript.  Here is an example to ask distiller
              programs not to compress bitmap images:

                     Tgif.AdditionalPSSetup: \n\
                         systemdict /setdistillerparams known \n\
                         { << /AutoFilterGrayImages false \n\
                         /AutoFilterColorImages false \n\
                         /ColorImageFilter /FlateEncode \n\
                         /GrayImageFilter /FlateEncode \n\
                         >> setdistillerparams } if

       Tgif.PSFontNeedCharSubs: FONTSUB_SPEC1 FONTSUB_SPEC2 ...
              The format of FONTSUB_SPEC is FONTNAME=TOKENNAME where FONTNAME is the  name  of  a
              PostScript   font   and   TOKENNAME   is   the   name  of  the  extension  for  the
              Tgif.PSCharSubs_TOKENNAME X default.  For PostScript font names that begins with  a
              string  that  matches  a  FONTNAME  part  of  a  FONTSUB_SPEC,  tgif  will read the
              Tgif.PSCharSubs_TOKENNAME  X  default  to  determine  which  characters   will   be
              substituted.

              For fonts that are not iso8859-1 encoded, non-ASCII portion of the font (characters
              with bit 7 on) is by default reencoded as if it  were  iso8859-1  encoded  when  PS
              output  is generated.  If this is not desired, different named PS characters can be
              substituted for characters with bit 7 on.  Please also see the POSTSCRIPT CHARACTER
              ENCODING FOR INTERNATINOAL CHARACTERS section for an example.

       Tgif.PSCharSubs_TOKENNAME: PSCHARSUBS_SPEC1 PSCHARSUBS_SPEC2 ...
              TOKENNAME  must match a FONTSUB_SPEC in the Tgif.PSFontNeedCharSubs X default.  The
              format for  PSCHARSUBS_SPEC  is  OLDCHARCODE/NEWCHARNAME  where  OLDCHARCODE  is  a
              character  code  in  octal format and NEWCHARNAME is a PostScript character name to
              use.  For more information,  please  see  the  POSTSCRIPT  CHARACTER  ENCODING  FOR
              INTERNATINOAL CHARACTERS section.

       Tgif.DrawTextFuncKey_F#: INTERNAL COMMAND LIST
              This  specifies  the  correspondence  between a function key and a list of internal
              commands.  When function key F# is pressed when tgif is in the text  drawing  mode,
              the  corresponding  list  of  internal  commands is executed.  Tgif only recognizes
              function keys F1 through F12.

       Tgif.PasteFromXSelectionOnly: [true,false]
              If set to ``false'', if tgif has failed to perform a paste  via  the  X  Selections
              mechanism,  it  will  attempt  the old style paste (directly fetch bytes from the X
              server).  This is mainly used with an older X servers.  The default is true.

       Tgif.PasteFromSelectionTimeout: NUMBER
              This specifies the number of seconds for a paste operation to timeout.  The default
              value is 10.

       Tgif.LengthLimit256InInsertChar: [true,false]
              If  set  to  ``true'',  the maximum number of characters per line of text is set at
              256.  Additional characters are ignored.  The default is false.

       Tgif.JpegToPpm6: STRING
              The STRING specifies a command used to convert a JPEG file to a PPM file in the  P6
              format.   The  STRING  must  contain a %s substring to be replaced by the full path
              name of the JPEG file.  The default is:

                     djpeg -ppm "%s"

       Tgif.PngToPpm6: STRING
              The STRING specifies a command used to convert a PNG file to a PPM file in  the  P6
              format.   The  STRING  must  contain a %s substring to be replaced by the full path
              name of the PNG file.  The default is:

                     pngtopnm "%s"

       Tgif.ObjectShadowOffsets: X_OFFSET,Y_OFFSET
              The numbers specify the number of pixels to be offseted  when  creating  a  generic
              object  shadow.   If  only  one value is given, both X and Y offsets are set to the
              same value.  The default values are all 2's.

       Tgif.ObjectShadowColor: COLORSTRING
              This specifies the color to be used for generic object shadow.  The  default  value
              is "#c0c0c0".

       Tgif.IgnoreObjectShadowInfoInFile: [true,false]
              If  set  to  ``false'', the generic object shadow information stored in a file will
              override the Tgif.ObjectShadowOffsets  and  Tgif.ObjectShadowColor  settings.   The
              default is true.

       Tgif.ReportMissingFonts: [true,false]
              If  set  to  ``true'',  when  tgif  starts,  missing X fonts will be printed to the
              terminal.  The default is false.

       Tgif.CustomPatternDir: STRING
              STRING specifies a directory that contains custom fill and pen patterns.  Any valid
              XBM file, encoding a bitmap of arbitrary dimensions, name pat#.xbm (for 3<=<=31) in
              this directory will replace the corresponding default pattern .

       Tgif.EnableTrueColorImages: [true,false]
              If set to ``true'', on a TrueColor display, PPM and JPEG objects  will  use  24-bit
              color.   Tgif  must  be  compiled with zlib support to enable this.  The default is
              true.

       Tgif.AutoRotatePivot: [true,false]
              If set to ``true'', user-specified rotation pivot will be disabled.  The default is
              false.

       Tgif.RightMargin: STRING
              The  STRING  specifies the right margin.  The right margin must be specified with a
              unit (the choices  are  "pixel",  "in",  or  "cm").   The  default  is  "1  in"  if
              Tgif.GridSystem is "English" and "2.5 cm" if Tgif.GridSystem is "Metric".

       Tgif.EnableRightMargin: [true,false]
              If set to ``true'', a simple right-margin will be used when entering text.  This is
              not a full-featured  right-margin.   It  is  only  activated  under  the  following
              conditions:  text object is not transformed, text is left-justified, text cursor is
              not inside a superscript or a subscript, no zoome,  and  Tgif.EditTextSize  is  not
              used.  The default is false.

       Tgif.NoOrientationIfPdfSetPageDevice: [true,false]
              If  set  to  ``true'', the "%%Orientation:" line is not generated in the PostScript
              file if "setpagedevice" is active when exporting a  PS/EPS/PDF  file.   Please  see
              Tgif.PdfSetPageDevice above.  The default is false.

       Tgif.PNGExportHasTransparentColor: [true,false]
              If  set  to  ``true'',  the color specified by the Tgif.PNGExportTransparentColor X
              default will be made transparent when printing in the PNG format.  The  default  is
              false.

       Tgif.PNGExportTransparentColor: COLORSTRING
              This  specifies  the  color to be made transparent when printing in the PNG format.
              By default, the default background color is used.

       Tgif.PpmToPngWithTransparentColor: STRING
              The STRING specifies a command used to convert a PPM file to  a  PNG  file  with  a
              transparent color.  The STRING must contain exactly two %s substring to be replaced
              by the transparent color and full  path  name  of  a  PPM  file.   The  default  is
              "pnmtopng -transparent '%s' '%s'".

       Tgif.EnableThresholdFloodReplaceColor: [true,false]
              If set to ``true'', threshold-based Flood Fill and Replace Color will be used.  The
              default is false.

       Tgif.FloodReplaceColorThreshold: RED_THRESH,GREEN_THRESH,BLUE_THRESH
              In threshold-based Flood Fill and Replace Color, after a pixel is selected,  pixels
              that  have  colors  similar  to  the  selected  pixel  will also change color.  The
              similarity is defined by these 3 threshold values.  Each value must  be  between  0
              and 255, inclusive.  The default values are all 15's.

       Tgif.UseStdPalette8: [true,false]
              If set to ``true'', a standard 8 palette will be used as the startup colors.  These
              colors correspond to all 8 combination of 0x00 and 0xff in  red,  green,  and  blue
              color  components.   If this X default is used, the Tgif.AdditionalColors X default
              can be used to specify additional colors when  tgif  starts  up.   The  default  is
              false.

       Tgif.UseStdPalette27: [true,false]
              If set to ``true'', a standard 27-color palette will be used as the startup colors.
              These colors correspond to all 27 combination of  0x00,  0x80,  and  0xff  in  red,
              green,   and   blue   color   components.    If   this   X  default  is  used,  the
              Tgif.AdditionalColors X default can be used to specify additional colors when  tgif
              starts up.  The default is false.

       Tgif.UseStdPalette64: [true,false]
              If set to ``true'', a standard 64-color palette will be used as the startup colors.
              These colors correspond to all 64 combination of 0x00, 0x55, 0xaa, and 0xff in red,
              green,   and   blue   color   components.    If   this   X  default  is  used,  the
              Tgif.AdditionalColors X default can be used to specify additional colors when  tgif
              starts up.  The default is false.

       Tgif.UseStdPalette216: [true,false]
              If  set  to  ``true'',  a  standard 216 palette will be used as the startup colors.
              These colors are known as Mobile Web-safe colors and they  correspond  to  all  216
              combination of 0x00, 0x33, 0x66, 0x99, 0xcc, and 0xff in red, green, and blue color
              components.  If this X default is used, the Tgif.AdditionalColors X default can  be
              used to specify additional colors when tgif starts up.  The default is false.

       Tgif.UseMobileWebSafePalette: [true,false]
              This is identical to Tgif.UseStdPalette216.

       Tgif.UseOpenOfficeGalaxyPalette: [true,false]
              If  set  to  ``true'', the OpenOffice Galaxy (53-color) palette will be used as the
              startup colors.  If this X default is used, the Tgif.AdditionalColors X default can
              be used to specify additional colors when tgif starts up.  The default is false.

       Tgif.UseOpenOfficeGooglePalette: [true,false]
              If  set  to  ``true'', the OpenOffice Google (80-color) palette will be used as the
              startup colors.  If this X default is used, the Tgif.AdditionalColors X default can
              be used to specify additional colors when tgif starts up.  The default is false.

       Tgif.AdditionalColors: COLOR1, COLOR2 ...
              If  any  of  the  Tgif.ColorFromXPixmap, Tgif.UseStdPalette8, Tgif.UseStdPalette27,
              Tgif.UseStdPalette64,     Tgif.UseStdPalette216,      Tgif.UseMobileWebSafePalette,
              Tgif.UseOpenOfficeGalaxyPalette,  or  Tgif.UseOpenOfficeGooglePalette X defaults is
              used, additional startup colors can be specified using this X default.  Since color
              names can contain space characters, the colors must be separated by commas.

       Tgif.DefaultColor: COLORSTRING
              This  specifies  the  default  color  if  a certain color can not be found.  It has
              precedence over the Tgif.DefaultColorIndex X default.  If this  X  default  is  not
              specified,    Tgif.DefaultColorIndex    will    determine    the   default   color.
              Tgif.GifToPpm6: STRING The STRING specifies a command used to convert a GIF file to
              a PPM file in the P6 format.  The STRING must contain a %s substring to be replaced
              by the full path name of the GIF file.  The default is:

                     giftopnm "%s"

       ENVIRONMENT VARIABLE

       TGIFPATH
              This environment variable should be set such that the files, mentioned in the FILES
              section below, can be found.

       TGIFICON
              This  environment  variable  should  be  set  to  the name of the object file to be
              displayed when tgif is iconified.  By default, it is set to  ``tgificon''.   If  it
              starts  with  a  /  character,  absolute  path is used; otherwise, the icon file is
              assumed to be $TGIFPATH/$TGIFICON.

       TGIF_[Domain]
              Obsoleted.

FILES

       $TGIFPATH/tgificon.obj contains the default tgif icon.

       $TGIFPATH/keys.obj contains a summary of the non-alphanumeric key bindings.

PROLOG/C TESTDRIVE

       In the tgif distribution, there are three Prolog files which illustrate  a  simple  Prolog
       driver.   tgif.pl  contains  predicates  for  parsing  tgif  files  (both  .obj and .sym).
       frontend.pl contains predicates for talking to Prolog engines, such as that of Quintus and
       SISCtus,  through  the foreign function interface.  To use frontend.pl, frontend11.o needs
       to be built (which requires the frontend11.o entry to be uncommented from the  makefiles).
       Finally,  testdrive.pl contains a program which will print out the ID files of all objects
       in the current drawing, if tgif is escaped with the Solve() (or #s) command.  This is also
       a  good  way of finding out the structure of a tgif file (especially because the structure
       is not documented due to the complexity introduced to  keep  tgif  compatible  with  files
       created by older versions).

       A  very  simple  C  driver, testdrive.c, is also provided with the tgif distribution which
       perform the same function as the Prolog driver.  The extra code present in this file  (and
       not  present in tgif.c) is used to illustrate how the in-memory objects and attributes can
       be traversed and how new objects can be created and manipulated.

SEE ALSO

       latex(1L), lpr(1), ghostscript(1), env(1), X(1), dvips(1), csh(1), pbmplus(1),  netpbm(1),
       djpeg(1),    bitmap(1),   XPM(1),   netpbm(1),   xfontsel(1),   xlsfonts(1),   xgrabsc(1),
       xloadimage(1), xsnap(1),  sxpm(1),  xv(1),  pstoepsi(1),  Mosaic(1),  bggen(1),  rand(3C),
       ps2pdf(1)

IDIOSYNCRASIES

       When  any  of  the  ``escape to driver'' commands are (accidentally) executed, the current
       content of the drawing is saved into ``tmpmodel.obj'' if the drawing indicates that it  is
       a  .obj  file;  then  tgif  escapes  to the driver and returns right away.  If the drawing
       indicates that it is a .sym file, then the content is  saved  into  ``tmpmodel.sym'',  but
       tgif does not return to the driver.

       The  paste operation works on a cut buffer generated by tgif or by non-tgif tools (such as
       xterm).  If the cut buffer is  not  generated  by  tgif,  its  content  is  treated  as  a
       collection  of  ASCII  character  strings, which is inserted into the current drawing as a
       text object (current settings for text objects are used to create the  text  object).   If
       the cut buffer is generated by tgif, then all the current settings are ignored.

       The font sizes are the screen font sizes (which correspond to the X fonts that are used to
       draw the text on the screen).  They appear smaller on the printout.  When a 24 point  text
       is  printed,  it  would correspond to about a 13.5 point PostScript text.  This is because
       tgif treats 128 pixels as an inch, and PostScript treats 72 points as an inch.

       Because characters supported by X11 and PostScript are different, not all the  characters,
       especially  in the range 128 to 255 (or \200 to \377), which are supported by X11, but are
       not accepted by tgif.  Furthermore, in order  to  print  the  supported  subset  of  these
       characters, character codes must be re-encoded.  Therefore, if one would like to hack tgif
       to support  other  personalized  fonts,  one  should  be  careful  about  the  re-encoding
       mechanism.

       The  grids  are not absolute; they are specified as screen pixels, and they scale with the
       current zoom.  For example, if the grid is set at 16 pixels at maximum zoom,  and  if  the
       user  zooms  out  once,  objects  can  be  drawn,  moved,  or stretched at 16 screen pixel
       increments, but this corresponds to 32 pixels in the real coordinate system.

       If the vertical text spacing is set to negative  values,  highlighted  text  will  look  a
       little  strange  due to XOR operations.  If the vertical text spacing is set to be greater
       than 100 or less than -100, the panel window will not be cleared properly;  to  clear  the
       panel window, the user may have to close the tgif window and then open it again.

       As  described  in the TGIF SUBWINDOWS section, in constrained move mode, if both endpoints
       of a not-selected polyline lie inside the object being moved, then the whole  polyline  is
       moved.   This  may  look strange sometimes because, for example, if one starts with a line
       segment pointing to an object, just moving the object will cause the line  segment  to  be
       ``stretched'';  however,  if one eventually moves the object so that the other endpoint is
       also inside the object, any future movement of  the  object  will  cause  the  whole  line
       segment  to move (instead of just moving the original endpoint).  The moving of the vertex
       which is the neighbor of a moved endpoint may also look strange at times.  At this  point,
       one should switch to the unconstrained move mode.

       Another  idiosyncrasy with respect to the constrained move is that right after duplicating
       an object, the constrained move is disabled temporarily because it is assumed that at this
       point  the  user would want to move the new object to a desirable position, and only after
       this new object is ``settled down'', the constrained move will  be  re-enabled.   Settling
       down is signified by doing something other than moving the new object.

       Locked objects can be deleted.

       Under  the  Edit Menu, PasteFromFile() reads a file into the drawing.  Pasting from a file
       is different from the normal pasting operation where copying  is  performed  in  something
       like  xterm  because  tabs  are  automatically converted to spaces.  Tabs are ignored when
       pasting from a file.

       When printing a multipage drawing, all pages (even the ones that contains no objects) will
       be  printed.   Using  the  PrintOnePage()  command  under  the Page Menu one can print the
       selected page (in stacked page layout mode, this is the current page; in tiled page layout
       mode, the user is prompted to select a visible page).

       Tgif   can   be   setup   to  use  its  own  icon  window  (the  Tgif.NoTgifIcon  and  the
       Tgif.UseWMIconPixmap X defaults must both be set  to  false).   However,  it  may  confuse
       certain   window   managers.    So,  if  the  effect  is  undesirable,  one  can  set  the
       Tgif.UseWMIconPixmap X defaults to true.

BUGS

       There seems to be a problem with printing Courier fonts with a non-solid pen on the  Apple
       LaserWriter.   (Printing  single character does seem to work fine.)  As pointed out by the
       PostScript  reference  manual,  Courier  is  a  ``stroked  font'',  and  it   is   usually
       ``difficult''  to  construct  character  paths  for such types of fonts.  However, Courier
       fonts work fine with ghostscript(1) and dxpsview.  It's not clear how this problem can  be
       fixed.  The author recommends avoiding Courier fonts when printing in color if a non-solid
       pen is desired.

       Arcs with arrow tips don't look very sharp (the tip is not pointed as in open-splines with
       arrow tips).

       At  high  magnifications,  stretching  arcs  may cause anomalous behavior due to round off
       errors.

       When page reduction/magnification is not set at 100%, the markings in the Ruler Windows do
       not correspond to real measurements.

       Copying/pasting  large  objects might not work because tgif does not use the ``selection''
       mechanism (yet).

       If and when tgif crashes, it will try to save the current content of the drawing in a file
       called  ``EmergencySave.obj'' (or ``EmergencySave.sym'' if the current drawing specifies a
       symbol object).  Often, the drawing can be restored by loading  the  ``EmergencySave.obj''
       file.   Nevertheless, if the cause of the crash is that some objects are corrupted (due to
       programming bugs), then the ``EmergencySave.obj'' file may also be corrupted.

       When launching an application, if the command does not end with the '&' character and  the
       command does not terminate, tgif also hangs.  In this case, kill(1) should be used to send
       HUP  signal  to  the  tgif  process  if  one  wants  to  save  the  content  of  tgif   in
       ``EmergencySave.obj''.

       The file exec.c may not compile properly on AIX machines.  One might have to add -D_BSD to
       the DEFINES in either the Imakefile or Makefile.noimake.

COPYRIGHT

       Please see the ``Copyright'' file for details on the copyrights.

       PostScript is a trademark of Adobe Systems Incorporated.

STATUS

       The current status of tgif can  be  obtained  from  tgif's  World-Wide-Web  home  page  at
       <URL:http://bourbon.usc.edu/tgif/>.

AUTHOR

       William Chia-Wei Cheng (bill.cheng@acm.org)
       <URL:http://merlot.usc.edu/william/usc/>

REFERENCES

       [1]    ``A              Beginner's              Guild              to              HTML'',
              <URL:http://www.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimer.html>.

       [2]    ``CGI - Common Gateway Interface'', <URL:http://www.w3.org/CGI/overview.html>.

       [3]    ``NCSA                                                                  Imagemap'',
              <URL:http://hoohoo.ncsa.uiuc.edu/docs/tutorials/imagemapping.html>.

       [4]    ``CERN                              Clickable                              Image'',
              <URL:http://www.w3.org/hypertext/WWW/Daemon/User/CGI/HTImageDoc.html>.