# grn(1) - man - phpMan

[GRN(1)](https://www.chedong.com/phpMan.php/man/GRN/1/markdown)                                 General Commands Manual                                [GRN(1)](https://www.chedong.com/phpMan.php/man/GRN/1/markdown)



## NAME
       grn - groff preprocessor for gremlin files

## SYNOPSIS
       **grn** [**-Cv**] [**-T** _dev_] [**-M** _dir_] [**-F** _dir_] [_file_ ...]

## DESCRIPTION
       _grn_  is a preprocessor for including _gremlin_ pictures in _groff_ input.  _grn_ writes to standard
       output, processing only input lines between two that start with **.GS**  and  **.GE**.   Those  lines
       must  contain  _grn_ commands (see below).  These commands request a _gremlin_ file, and the pic‐
       ture in that file is converted and placed in the _troff_ input stream.  The **.GS** request may  be
       followed by a C, L, or R to center, left, or right justify the whole _gremlin_ picture (default
       justification is center).  If no _file_ is mentioned, the standard input is read.  At  the  end
       of  the  picture,  the position on the page is the bottom of the _gremlin_ picture.  If the _grn_
       entry is ended with **.GF** instead of **.GE**, the position is left at the top of the picture.

       Please note that currently only the -me macro package has support for **.GS**, **.GE**, and **.GF**.

## OPTIONS
       Whitespace is permitted between a command-line option and its argument.

### -T
              able devices.

### -M
              that order) the current directory, the home directory, _/usr/lib/groff/site-tmac_, _/usr/_
              _share/groff/site-tmac_, and _/usr/share/groff/1.22.4/tmac_.

### -F
              file before the default font directories _/usr/share/groff/site-font_, _/usr/share/groff/_
              _1.22.4/font_, and _/usr/lib/font_.

### -C
              newline.

### -v

## GRN COMMANDS
       Each input line between **.GS** and **.GE** may have one _grn_ command.  Commands consist of one or two
       strings separated by white space, the first string being the command and the second its oper‐
       and.  Commands may be upper or lower case and abbreviated down to one character.

       Commands that affect a picture's environment (those listed before  **default**,  see  below)  are
       only  in  effect for the current picture: The environment is reinitialized to the defaults at
       the start of the next picture.  The commands are as follows:

       **1** _N_
       **2** _N_
       **3** _N_
       **4** _N_    Set _gremlin_'s text size number 1 (2, 3, or 4) to _N_ points.  The default is 12 (16, 24,
              and 36, respectively).

       **roman** _f_
       **italics** _f_
       **bold** _f_
       **special** _f_
              Set  the  roman  (italics,  bold, or special) font to _troff_'s font _f_ (either a name or
              number).  The default is R (I, B, and S, respectively).

       **l** _f_
       **stipple** _f_
              Set the stipple font to _troff_'s stipple font _f_ (name or number).  The command  **stipple**
              may be abbreviated down as far as ‘st’ (to avoid confusion with **special**).  There is _no_
              default for stipples (unless one is set by the default command), and it is invalid  to
              include a _gremlin_ picture with polygons without specifying a stipple font.

       **x** _N_
       **scale** _N_
              Magnify  the picture (in addition to any default magnification) by _N_, a floating point
              number larger than zero.  The command **scale** may be abbreviated down to ‘sc’.

       **narrow** _N_
       **medium** _N_
       **thick** _N_
              Set the thickness of _gremlin_'s narrow (medium and  thick,  respectively)  lines  to  _N_
              times 0.15pt (this value can be changed at compile time).  The default is 1.0 (3.0 and
              5.0, respectively), which corresponds to 0.15pt (0.45pt and 0.75pt, respectively).   A
              thickness  value of zero selects the smallest available line thickness.  Negative val‐
              ues cause the line thickness to be proportional to the current point size.

       **pointscale** _<off/on>_
              Scale text to match the picture.  Gremlin text is usually printed in  the  point  size
              specified  with  the  commands **1**, **2**, **3**, or **4**, regardless of any scaling factors in the
              picture.  Setting **pointscale** will cause the point sizes  to  scale  with  the  picture
              (within  _troff_'s  limitations,  of  course).  An operand of anything but _off_ will turn
              text scaling on.

### default
              Reset the picture environment defaults to the settings in the current  picture.   This
              is  meant  to  be used as a global parameter setting mechanism at the beginning of the
              _troff_ input file, but can be used at any time to reset the default settings.

       **width** _N_
              Forces the picture to be _N_ inches wide.  This overrides any scaling factors present in
              the same picture.  ‘**width** _0_’ is ignored.

       **height** _N_
              Forces picture to be _N_ inches high, overriding other scaling factors.  If both ‘width’
              and ‘height’ are specified the tighter constraint will determine the scale of the pic‐
              ture.   **Height**  and  **width**  commands are not saved with a **default** command.  They will,
              however, affect point size scaling if that option is set.

       **file** _name_
              Get picture from _gremlin_ file _name_ located the current directory (or  in  the  library
              directory;  see  the **-M** option above).  If two **file** commands are given, the second one
              overrides the first.  If _name_ doesn't exist, an error message is reported and process‐
              ing continues from the **.GE** line.

## NOTES ABOUT GROFF
       Since  _grn_  is  a  preprocessor, it doesn't know about current indents, point sizes, margins,
       number registers, etc.  Consequently, no _troff_ input can be placed between the  **.GS**  and  **.GE**
       requests.   However,  _gremlin_  text  is now processed by _troff_, so anything valid in a single
       line of _troff_ input is valid in a line of _gremlin_ text (barring ‘.’ directives at the  begin‐
       ning of a line).  Thus, it is possible to have equations within a _gremlin_ figure by including
       in the _gremlin_ file _eqn_ expressions enclosed by previously defined delimiters (e.g. _$$_).

       When using _grn_ along with other preprocessors, it is best to run _tbl_ before _grn_, _pic_,  and/or
       _ideal_ to avoid overworking _tbl_.  _Eqn_ should always be run last.

       A  picture is considered an entity, but that doesn't stop _troff_ from trying to break it up if
       it falls off the end of a page.  Placing the picture between ‘keeps’ in -me macros  will  en‐
       sure proper placement.

       _grn_ uses _troff_'s number registers **g1** through **g9** and sets registers **g1** and **g2** to the width and
       height of the _gremlin_ figure (in device units) before entering the **.GS** request (this  is  for
       those who want to rewrite these macros).

## GREMLIN FILE FORMAT
       There  exist two distinct _gremlin_ file formats, the original format from the _AED_ graphic ter‐
       minal version, and the _SUN_ or _X11_ version.  An extension to the _SUN_/_X11_ version allowing ref‐
       erence points with negative coordinates is **not** compatible with the _AED_ version.  As long as a
       _gremlin_ file does not contain negative coordinates, either format will be read  correctly  by
       either  version  of  _gremlin_  or _grn_.  The other difference from _SUN_/_X11_ format is the use of
       names for picture objects (e.g., POLYGON, CURVE) instead of numbers.  Files representing  the
       same picture are shown in Table 1 in each format.


                                   sungremlinfile        gremlinfile
                                   0 240.00 128.00       0 240.00 128.00
                                   CENTCENT              2
                                   240.00 128.00         240.00 128.00
                                   185.00 120.00         185.00 120.00
                                   240.00 120.00         240.00 120.00
                                   296.00 120.00         296.00 120.00
                                   *                     -1.00 -1.00
                                   2 3                   2 3
                                   10 A Triangle         10 A Triangle
                                   POLYGON               6
                                   224.00 416.00         224.00 416.00
                                   96.00 160.00          96.00 160.00
                                   384.00 160.00         384.00 160.00
                                   *                     -1.00 -1.00
                                   5 1                   5 1
                                   0                     0
                                   -1                    -1

                                          Table 1.  File examples


       •      The  first  line of each _gremlin_ file contains either the string **gremlinfile** (_AED_ ver‐
              sion) or **sungremlinfile** (_SUN_/_X11_)

       •      The second line of the file contains an orientation, and **x** and **y** values  for  a  posi‐
              tioning point, separated by spaces.  The orientation, either **0** or **1**, is ignored by the
              _SUN_/_X11_ version.  **0** means that _gremlin_ will display things in horizontal format (draw‐
              ing area wider than it is tall, with menu across top).  **1** means that _gremlin_ will dis‐
              play things in vertical format (drawing area taller than it is wide, with menu on left
              side).   **x**  and **y** are floating point values giving a positioning point to be used when
              this file is read into another file.  The stuff on this line really isn't all that im‐
              portant; a value of “1 0.00 0.00” is suggested.

       •      The  rest of the file consists of zero or more element specifications.  After the last
              element specification is a line containing the string “-1”.

       •      Lines longer than 127 characters are chopped to this limit.

## ELEMENT SPECIFICATIONS
       •      The first line of each element contains a single decimal number giving the type of the
              element (_AED_ version) or its ASCII name (_SUN_/_X11_ version).  See Table 2.


                                 _gremlin_ File Format − Object Type Specification

                             _AED_ Number   _SUN_/_X11_ Name           Description
                                  0       BOTLEFT        bottom-left-justified text
                                  1       BOTRIGHT       bottom-right-justified text
                                  2       CENTCENT       center-justified text
                                  3       VECTOR         vector
                                  4       ARC            arc
                                  5       CURVE          curve
                                  6       POLYGON        polygon
                                  7       BSPLINE        b-spline
                                  8       BEZIER         Bézier
                                 10       TOPLEFT        top-left-justified text
                                 11       TOPCENT        top-center-justified text
                                 12       TOPRIGHT       top-right-justified text

                                 13       CENTLEFT       left-center-justified text
                                 14       CENTRIGHT      right-center-justified text
                                 15       BOTCENT        bottom-center-justified text

                                                     Table 2.
                                       Type Specifications in _gremlin_ Files


       •      After  the  object type comes a variable number of lines, each specifying a point used
              to display the element.  Each line contains an  x-coordinate  and  a  y-coordinate  in
              floating  point  format,  separated  by spaces.  The list of points is terminated by a
              line containing the string “-1.0  -1.0”  (_AED_  version)  or  a  single  asterisk,  “*”
              (_SUN_/_X11_ version).

       •      After the points comes a line containing two decimal values, giving the brush and size
              for the element.  The brush determines the style in which things are drawn.  For  vec‐
              tors, arcs, and curves there are six valid brush values:


                                         1 −       thin dotted lines
                                         2 −       thin dot-dashed lines
                                         3 −       thick solid lines
                                         4 −       thin dashed lines
                                         5 −       thin solid lines
                                         6 −       medium solid lines

              For  polygons,  one more value, 0, is valid.  It specifies a polygon with an invisible
              border.  For text, the brush selects a font as follows:


                                       1 −       roman (R font in groff)
                                       2 −       italics (I font in groff)
                                       3 −       bold (B font in groff)
                                       4 −       special (S font in groff)

              If you're using _grn_ to run your pictures through _groff_, the  font  is  really  just  a
              starting  font:  The  text  string can contain formatting sequences like “\fI” or “\d”
              which may change the font (as well as do many other things).  For text, the size field
              is a decimal value between 1 and 4.  It selects the size of the font in which the text
              will be drawn.  For polygons, this size field is interpreted as a  stipple  number  to
              fill the polygon with.  The number is used to index into a stipple font at print time.

       •      The  last  line  of each element contains a decimal number and a string of characters,
              separated by a single space.  The number is a count of the number of characters in the
              string.   This  information  is  only  used  for  text elements, and contains the text
              string.  There can be spaces inside the text.  For arcs,  curves,  and  vectors,  this
              line of the element contains the string “0”.

## NOTES ON COORDINATES
       _gremlin_  was  designed  for  _AED_s, and its coordinates reflect the _AED_ coordinate space.  For
       vertical pictures, x-values range 116 to 511, and y-values from 0  to  483.   For  horizontal
       pictures,  x-values  range  from  0  to  511  and y-values range from 0 to 367.  Although you
       needn't absolutely stick to this range, you'll get best results if you at least stay in  this
       vicinity.  Also, point lists are terminated by a point of (-1, -1), so you shouldn't ever use
       negative coordinates.  _gremlin_ writes out coordinates using format “%f1.2”; it's  probably  a
       good idea to use the same format if you want to modify the _grn_ code.

## NOTES ON SUN/X11 COORDINATES
       There  is  no  longer a restriction on the range of coordinates used to create objects in the
       _SUN_/_X11_ version of _gremlin_.  However, files with negative coordinates **will** cause problems  if
       displayed on the _AED_.

## FILES
       _/usr/share/groff/1.22.4/font/dev_name_/DESC_
              Device description file for device _name_.

## AUTHORS
       David Slattengren and Barry Roitblat wrote the original Berkeley _grn_.  Daniel Senderowicz and
       Werner Lemberg modified it for _groff_.

## SEE ALSO
       [**gremlin**(1)](https://www.chedong.com/phpMan.php/man/gremlin/1/markdown), [**groff**(1)](https://www.chedong.com/phpMan.php/man/groff/1/markdown), [**pic**(1)](https://www.chedong.com/phpMan.php/man/pic/1/markdown), [**ideal**(1)](https://www.chedong.com/phpMan.php/man/ideal/1/markdown)



groff 1.22.4                                23 March 2022                                     [GRN(1)](https://www.chedong.com/phpMan.php/man/GRN/1/markdown)
