Content-type: text/html
Manpage of tgif
tgif
Section: Misc. Reference Manual Pages (n)
Updated: Version 4.1 Patchlevel 45 and Above
Index
Return to Main Contents
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]
[-listdontreencode]
[-version]
[-pdfspd | -pdfspd=true | -pdfspd=false ]
[-pssetup "<string>" ]
[-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]
[-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]
[-noshowpageineps]
[-quiet]
[-bop_hook "<string>"]
[-eop_hook "<string>"]
[-tmp_file_mode "<octal number>"]
[-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, or
-netlist 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.
- -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 surpress 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 GIF file in file.gif and an 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).
- -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 <page>) 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 is obsoleted 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.
- -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.
- -o
-
If this option is not specified, the output file (eps, ps, etc.)
goes into the same directory as the input file. If -odir
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 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,
rotated, 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() from the Edit Menu to add a color.
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 left.
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 right 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 to 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 tijled
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
#~ saved 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> subject of the <s1> subject
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) withe 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 by default 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 semicolor) 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_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 XPM (X11 pixmap) object,
it is deleted. If the object does not contain an XPM 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 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 is width is counted
10 times the diffference 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, or
interpolated.
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.
- 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 raised to the bottom, relative to its siblings.
This command is useful in animation where a selected frame (subobject)
can be raised 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 or 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 finishes 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 <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 pass <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.
- 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 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 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 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 place 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", "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 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!
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/poly