Private
Server IP : 195.201.23.43  /  Your IP : 18.217.163.75
Web Server : Apache
System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64
User : kdecoratie ( 1041)
PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/share/doc/groff/html/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /usr/share/doc/groff/html/pic-21.html
<!-- Creator     : groff version 1.22.4 -->
<!-- CreationDate: Sat Mar 21 12:27:30 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }
       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }
       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }
       h1      { text-align: center }
</style>
<title>pic-21.html</title>

</head>
<hr>
[ <a href="pic-20.html">prev</a> | <a href="pic-22.html">next</a> | <a href="pic.html">top</a> ]
<hr>


<h2>21. PIC Reference
<a name="21. PIC Reference"></a>
</h2>


<p style="margin-top: 1em"><font color="#000000">This is an
annotated grammar of <b>pic</b>.</font></p>

<h3>21.1. Lexical Items
<a name="21.1. Lexical Items"></a>
</h3>


<p style="margin-top: 1em"><font color="#000000">In
general, <b>pic</b> is a free-format, token-oriented
language that ignores whitespace outside strings. But
certain lines and contructs are specially interpreted at the
lexical level:</font></p>

<p style="margin-top: 1em"><font color="#000000">A comment
begins with <b>#</b> and continues to <b>\n</b> (comments
may also follow text in a line). A line beginning with a
period or backslash may be interpreted as text to be passed
through to the post-processor, depending on command-line
options. An end-of-line backslash is interpreted as a
request to continue the line; the backslash and following
newline are ignored.</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">Here
are the grammar terminals:</font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="10%"></td>
<td width="6%">



<p style="margin-top: 1em"><font color="#000000"><small>INT</small></font></p> </td>
<td width="4%"></td>
<td width="38%">


<p style="margin-top: 1em"><font color="#000000">A positive
integer.</font></p> </td>
<td width="42%">
</td></tr>
</table>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000"><small>NUMBER</small></font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="10%"></td>
<td width="8%"></td>
<td width="2%"></td>
<td width="80%">


<p><font color="#000000">A floating point numeric constant.
May contain a decimal point or be expressed in scientific
notation in the style of <i>printf</i>(3)&rsquo;s %e escape.
A trailing &lsquo;i&rsquo; or &lsquo;I&rsquo; (indicating
the unit &lsquo;inch&rsquo;) is ignored.</font></p></td></tr>
<tr valign="top" align="left">
<td width="10%"></td>
<td width="8%">



<p style="margin-top: 1em"><font color="#000000"><small>TEXT</small></font></p> </td>
<td width="2%"></td>
<td width="80%">


<p style="margin-top: 1em"><font color="#000000">A string
enclosed in double quotes. A double quote within
<small>TEXT</small> must be preceded by a backslash. Instead
of <small>TEXT</small> you can use</font></p></td></tr>
</table>


<p style="margin-left:30%; margin-top: 1em"><font color="#000000">sprintf
( TEXT [, &lt;expr&gt; ...] )</font></p>


<p style="margin-left:20%; margin-top: 1em"><font color="#000000">except
after the &lsquo;until&rsquo; and &lsquo;last&rsquo;
keywords, and after all ordinal keywords (&lsquo;th&rsquo;
and friends).</font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="10%"></td>
<td width="16%">



<p style="margin-top: 1em"><font color="#000000"><small>VARIABLE</small></font></p> </td>
<td width="74%">
</td></tr>
</table>

<p style="margin-left:20%;"><font color="#000000">A string
starting with a character from the set [a-z], optionally
followed by one or more characters of the set [a-zA-Z0-9_].
(Values of variables are preserved across
pictures.)</font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="10%"></td>
<td width="10%">



<p style="margin-top: 1em"><font color="#000000"><small>LABEL</small></font></p> </td>
<td width="80%">


<p style="margin-top: 1em"><font color="#000000">A string
starting with a character from the set [A-Z], optionally
followed by one or more characters of the set
[a-zA-Z0-9_].</font></p> </td></tr>
</table>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000"><small>COMMAND-LINE</small></font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="20%"></td>
<td width="80%">


<p><font color="#000000">A line starting with a command
character (&lsquo;.&rsquo; in groff mode, &lsquo;\&rsquo; in
TeX mode).</font></p></td></tr>
</table>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000"><small>BALANCED-TEXT</small></font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="20%"></td>
<td width="80%">


<p><font color="#000000">A string either enclosed by
&lsquo;{&rsquo; and &lsquo;}&rsquo; or with <i>X</i> and
<i>X</i>, where <i>X</i> doesn&rsquo;t occur in the
string.</font></p> </td></tr>
</table>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000"><small>BALANCED-BODY</small></font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="20%"></td>
<td width="80%">


<p><font color="#000000">Delimiters as in
<small>BALANCED-TEXT</small> ; the body is interpreted as
&lsquo;<b>&lang; command&rang; ...</b>&rsquo;.</font></p></td></tr>
</table>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000"><small>FILENAME</small></font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="20%"></td>
<td width="80%">


<p><font color="#000000">The name of a file. This has the
same semantics as <small>TEXT</small> .</font></p></td></tr>
</table>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000"><small>MACRONAME</small></font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="20%"></td>
<td width="50%">


<p><font color="#000000">Either <small>VARIABLE</small> or
<small>LABEL</small> .</font></p></td>
<td width="30%">
</td></tr>
</table>

<h3>21.2. Semi-Formal Grammar
<a name="21.2. Semi-Formal Grammar"></a>
</h3>


<p style="margin-top: 1em"><font color="#000000">Tokens not
enclosed in &lang; &rang; are literals, except:</font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="4%">



<p style="margin-top: 1em"><font color="#000000">1.</font></p> </td>
<td width="6%"></td>
<td width="90%">


<p style="margin-top: 1em"><font color="#000000"><b>\n</b>
is a newline.</font></p></td></tr>
<tr valign="top" align="left">
<td width="4%">



<p style="margin-top: 1em"><font color="#000000">2.</font></p> </td>
<td width="6%"></td>
<td width="90%">


<p style="margin-top: 1em"><font color="#000000">Three dots
is a suffix meaning &lsquo;replace with 0 or more
repetitions of the preceding element(s).</font></p></td></tr>
<tr valign="top" align="left">
<td width="4%">



<p style="margin-top: 1em"><font color="#000000">3.</font></p> </td>
<td width="6%"></td>
<td width="90%">


<p style="margin-top: 1em"><font color="#000000">An
enclosure in square brackets has its usual meaning of
&lsquo;this clause is optional&rsquo;.</font></p></td></tr>
<tr valign="top" align="left">
<td width="4%">



<p style="margin-top: 1em"><font color="#000000">4.</font></p> </td>
<td width="6%"></td>
<td width="90%">



<p style="margin-top: 1em"><font color="#000000">Square-bracket-enclosed
portions within tokens are optional. Thus,
&lsquo;h[eigh]t&rsquo; matches either &lsquo;height&rsquo;
or &lsquo;ht&rsquo;.</font></p></td></tr>
</table>

<p style="margin-top: 1em"><font color="#000000">If one of
these special tokens has to be referred to literally, it is
surrounded with single quotes.</font></p>

<p style="margin-top: 1em"><font color="#000000">The
top-level <b>pic</b> object is a picture.</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;picture&gt;
::= <br>
.PS [NUMBER [NUMBER]]\n <br>
&lt;statement&gt; ... <br>
.PE \n</font></p>

<p style="margin-top: 1em"><font color="#000000">The
arguments, if present, represent the width and height of the
picture, causing <b>pic</b> to attempt to scale it to the
given dimensions in inches. In no case, however, the X and
Y&nbsp;dimensions of the picture exceed the values of the
style variables <b>maxpswid</b> and <b>maxpsheight</b>
(which default to the normal 8.5i by 11i page
size).</font></p>

<p style="margin-top: 1em"><font color="#000000">If the
ending &lsquo;.PE&rsquo; is replaced by &lsquo;.PF&rsquo;,
the page vertical position is restored to its value at the
time &lsquo;.PS&rsquo; was encountered. Another alternate
form of invocation is &lsquo;.PS&nbsp;&lt;
<small>FILENAME</small> &rsquo;, which replaces the
&lsquo;.PS&rsquo; line with a file to be interpreted by
<b>pic</b> (but this feature is deprecated).</font></p>

<p style="margin-top: 1em"><font color="#000000">The
&lsquo;.PS&rsquo;, &lsquo;.PE&rsquo;, and &lsquo;.PF&rsquo;
macros to perform centering and scaling are normally
supplied by the post-processor.</font></p>

<p style="margin-top: 1em"><font color="#000000">In the
following, either &lsquo;|&rsquo; or a new line starts an
alternative.</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;statement&gt;
::= <br>
&lt;command&gt; ; <br>
&lt;command&gt; \n</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;command&gt;
::= <br>
&lt;primitive&gt; [&lt;attribute&gt;] <br>
LABEL : [;] &lt;command&gt; <br>
LABEL : [;] &lt;command&gt; [&lt;position&gt;] <br>
{ &lt;command&gt; ... } <br>
VARIABLE [:] = &lt;any-expr&gt; <br>
figname = MACRONAME <br>
up | down | left | right <br>
COMMAND-LINE <br>
command &lt;print-arg&gt; ... <br>
print &lt;print-arg&gt; ... <br>
sh BALANCED-TEXT <br>
copy FILENAME <br>
copy [FILENAME] thru MACRONAME [until TEXT] <br>
copy [FILENAME] thru BALANCED-BODY [until TEXT] <br>
for VARIABLE = &lt;expr&gt; to &lt;expr&gt; [by [*]
&lt;expr&gt;] do BALANCED-BODY <br>
if &lt;any-expr&gt; then BALANCED-BODY [else BALANCED-BODY]
<br>
reset [VARIABLE [[,] VARIABLE ...]]</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;print-arg&gt;
::= <br>
TEXT <br>
&lt;expr&gt; <br>
&lt;position&gt;</font></p>

<p style="margin-top: 1em"><font color="#000000">The
current position and direction are saved on entry to a
&lsquo;{&nbsp;...&nbsp;}&rsquo; construction and restored on
exit from it.</font></p>

<p style="margin-top: 1em"><font color="#000000">Note that
in &lsquo;if&rsquo; constructions, newlines can only occur
in <small>BALANCED-BODY</small> . This means that</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">if
<br>
{ ... } <br>
else <br>
{ ... }</font></p>

<p style="margin-top: 1em"><font color="#000000">fails. You
have to use the braces on the same line as the
keywords:</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">if
{ <br>
... <br>
} else { <br>
... <br>
}</font></p>

<p style="margin-top: 1em"><font color="#000000">This
restriction doesn&rsquo;t hold for the body after the
&lsquo;do&rsquo; in a &lsquo;for&rsquo;
construction.</font></p>

<p style="margin-top: 1em"><font color="#000000">At the
beginning of each picture, &lsquo;figname&rsquo; is reset to
the vbox name &lsquo;graph&rsquo;; this command has only a
meaning in TeX mode. While the grammar rules allow digits
and the underscore in the value of &lsquo;figname&rsquo;,
TeX normally accepts uppercase and lowercase letters only as
box names (you have to use &lsquo;\csname&rsquo; if you
really need to circumvent this limitation).</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;any-expr&gt;
::= <br>
&lt;expr&gt; <br>
&lt;text-expr&gt; <br>
&lt;any-expr&gt; &lt;logical-op&gt; &lt;any-expr&gt; <br>
! &lt;any-expr&gt;</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;logical-op&gt;
::= <br>
== | != | &amp;&amp; | &rsquo;||&rsquo;</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;text-expr&gt;
::= <br>
TEXT == TEXT <br>
TEXT != TEXT</font></p>

<p style="margin-top: 1em"><font color="#000000">Logical
operators are handled specially by <b>pic</b> since they can
deal with text strings also. <b>pic</b> uses
<i>strcmp</i>(3) to test for equality of strings; an empty
string is considered as &lsquo;false&rsquo; for
&lsquo;&amp;&amp;&rsquo; and &lsquo;||&rsquo;.</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;primitive&gt;
::= <br>
box # closed object &mdash; rectangle <br>
circle # closed object &mdash; circle <br>
ellipse # closed object &mdash; ellipse <br>
arc # open object &mdash; quarter-circle <br>
line # open object &mdash; line <br>
arrow # open object &mdash; line with arrowhead <br>
spline # open object &mdash; spline curve <br>
move <br>
TEXT TEXT ... # text within invisible box <br>
plot &lt;expr&gt; TEXT # formatted text <br>
&rsquo;[&rsquo; &lt;command&gt; ...
&rsquo;]&rsquo;</font></p>

<p style="margin-top: 1em"><font color="#000000">Drawn
objects within &lsquo;[&nbsp;...&nbsp;]&rsquo; are treated
as a single composite object with a rectangular shape (that
of the bounding box of all the elements). Variable and label
assignments within a block are local to the block. Current
direction of motion is restored to the value at start of
block upon exit. Position is <i>not</i> restored (unlike
&lsquo;{&nbsp;}&rsquo;); instead, the current position
becomes the exit position for the current direction on the
block&rsquo;s bounding box.</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;attribute&gt;
::= <br>
h[eigh]t &lt;expr&gt; # set height of closed figure <br>
wid[th] &lt;expr&gt; # set width of closed figure <br>
rad[ius] &lt;expr&gt; # set radius of circle/arc <br>
diam[eter] &lt;expr&gt; # set diameter of circle/arc <br>
up [&lt;expr&gt;] # move up <br>
down [&lt;expr&gt;] # move down <br>
left [&lt;expr&gt;] # move left <br>
right [&lt;expr&gt;] # move right <br>
from &lt;position&gt; # set from position of open figure
<br>
to &lt;position&gt; # set to position of open figure <br>
at &lt;position&gt; # set center of open figure <br>
with &lt;path&gt; # fix corner/named point at specified
location <br>
with &lt;position&gt; # fix position of object at specified
location <br>
by &lt;expr-pair&gt; # set object&rsquo;s attachment point
<br>
then # sequential segment composition <br>
dotted [&lt;expr&gt;] # set dotted line style <br>
dashed [&lt;expr&gt;] # set dashed line style <br>
thick[ness] &lt;expr&gt; # set thickness of lines <br>
chop [&lt;expr&gt;] # chop end(s) of segment <br>
&rsquo;-&gt;&rsquo; | &rsquo;&lt;-&rsquo; |
&rsquo;&lt;-&gt;&rsquo; # decorate with arrows <br>
invis[ible] # make primitive invisible <br>
solid # make closed figure solid <br>
fill[ed] [&lt;expr&gt;] # set fill density for figure <br>
xscaled &lt;expr&gt; # slant box into x direction <br>
yscaled &lt;expr&gt; # slant box into y direction <br>
colo[u]r[ed] TEXT # set fill and outline color for figure
<br>
outline[d] TEXT # set outline color for figure <br>
shaded TEXT # set fill color for figure <br>
same # copy size of previous object <br>
cw | ccw # set orientation of curves <br>
ljust | rjust # adjust text horizontally <br>
above | below # adjust text vertically <br>
aligned # align parallel to object <br>
TEXT TEXT ... # text within object <br>
&lt;expr&gt; # motion in the current direction</font></p>

<p style="margin-top: 1em"><font color="#000000">Missing
attributes are supplied from defaults; inappropriate ones
are silently ignored. For lines, splines, and arcs, height
and width refer to arrowhead size.</font></p>

<p style="margin-top: 1em"><font color="#000000">The
&lsquo;at&rsquo; primitive sets the center of the current
object. The &lsquo;with&rsquo; attribute fixes the specified
feature of the given object to a specified location. (Note
that &lsquo;with&rsquo; is incorrectly described in the
Kernighan paper.)</font></p>

<p style="margin-top: 1em"><font color="#000000">The
&lsquo;by&rsquo; primitive is not documented in the tutorial
portion of the Kernighan paper, and should probably be
considered unreliable.</font></p>

<p style="margin-top: 1em"><font color="#000000">The
primitive &lsquo;arrow&rsquo; is a synonym for
&lsquo;line&nbsp;-&gt;&rsquo;.</font></p>

<p style="margin-top: 1em"><font color="#000000">Text is
normally an attribute of some object, in which case
successive strings are vertically stacked and centered on
the object&rsquo;s center by default. Standalone text is
treated as though placed in an invisible box.</font></p>

<p style="margin-top: 1em"><font color="#000000">A text
item consists of a string or sprintf-expression, optionally
followed by positioning information. Text (or strings
specified with &lsquo;sprintf&rsquo;) may contain font
changes, size changes, and local motions, provided those
changes are undone before the end of the current item. Text
may also contain \-escapes denoting special characters. The
base font and specific set of escapes supported is
implementation dependent, but supported escapes always
include the following:</font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="16%">


<p style="margin-top: 1em"><font color="#000000">\fR,
\f1</font></p> </td>
<td width="84%">
</td></tr>
</table>

<p style="margin-left:10%;"><font color="#000000">Set Roman
style (the default)</font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="16%">


<p style="margin-top: 1em"><font color="#000000">\fI,
\f2</font></p> </td>
<td width="84%">
</td></tr>
</table>

<p style="margin-left:10%;"><font color="#000000">Set
Italic style</font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="16%">


<p style="margin-top: 1em"><font color="#000000">\fB,
\f3</font></p> </td>
<td width="84%">
</td></tr>
</table>

<p style="margin-left:10%;"><font color="#000000">Set Bold
style</font></p>

<table width="100%" border="0" rules="none" frame="void"
       cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%">



<p style="margin-top: 1em"><font color="#000000">\fP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></p> </td>
<td width="82%">
</td></tr>
</table>

<p style="margin-left:10%;"><font color="#000000">Revert to
previous style; only works one level deep, does not
stack.</font></p>

<p style="margin-top: 1em"><font color="#000000">Color
names are dependent on the pic implementation, but in all
modern versions color names recognized by the X&nbsp;window
system are supported.</font></p>

<p style="margin-top: 1em"><font color="#000000">A position
is an (x,y) coordinate pair. There are lots of different
ways to specify positions:</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;position&gt;
::= <br>
&lt;position-not-place&gt; <br>
&lt;place&gt; <br>
( &lt;position&gt; )</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;position-not-place&gt;
::= <br>
&lt;expr-pair&gt; <br>
&lt;position&gt; + &lt;expr-pair&gt; <br>
&lt;position&gt; - &lt;expr-pair&gt; <br>
( &lt;position&gt; , &lt;position&gt; ) <br>
&lt;expr&gt; [of the way] between &lt;position&gt; and
&lt;position&gt; <br>
&lt;expr&gt; &rsquo;&lt;&rsquo; &lt;position&gt; ,
&lt;position&gt; &rsquo;&gt;&rsquo;</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;expr-pair&gt;
::= <br>
&lt;expr&gt; , &lt;expr&gt; <br>
( expr-pair )</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;place&gt;
::= <br>
&lt;label&gt; <br>
&lt;label&gt; &lt;corner&gt; <br>
&lt;corner&gt; [of] &lt;label&gt; <br>
Here</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;label&gt;
::= <br>
LABEL [. LABEL ...] <br>
&lt;nth-primitive&gt;</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;corner&gt;
::= <br>
.n | .e | .w | .s <br>
.ne | .se | .nw | .sw <br>
.c[enter] | .start | .end <br>
.t[op] | .b[ot[tom]] | .l[eft] | .r[ight] <br>
left | right | &lt;top-of&gt; | &lt;bottom-of&gt; <br>
&lt;north-of&gt; | &lt;south-of&gt; | &lt;east-of&gt; |
&lt;west-of&gt; <br>
&lt;center-of&gt; | &lt;start-of&gt; | &lt;end-of&gt; <br>
upper left | lower left | upper right | lower
right</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;<i>xxx</i>-of&gt;
::= <i><br>
xxx</i> # followed by &lsquo;of&rsquo;</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;nth-primitive&gt;
::= <br>
&lt;ordinal&gt; &lt;object-type&gt; <br>
[&lt;ordinal&gt;] last &lt;object-type&gt;</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;ordinal&gt;
::= <br>
INT th <br>
INT st | INT nd | INT rd <br>
&lsquo; &lt;any-expr&gt; &rsquo;th</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;object-type&gt;
::= <br>
box <br>
circle <br>
ellipse <br>
arc <br>
line <br>
arrow <br>
spline <br>
&rsquo;[]&rsquo; <br>
TEXT</font></p>

<p style="margin-top: 1em"><font color="#000000">As
Kernighan notes, &ldquo;since barbarisms like <b>1th</b> and
<b>3th</b> are barbaric, synonyms like <b>1st</b> and
<b>3rd</b> are accepted as well.&rdquo; Objects of a given
type are numbered from 1 upwards in order of declaration;
the <b>last</b> modifier counts backwards.</font></p>

<p style="margin-top: 1em"><font color="#000000">The
&ldquo;&rsquo;th&rdquo; form (which allows you to select a
previous object with an expression, as opposed to a numeric
literal) is not documented in DWB&rsquo;s
<i>pic</i>(1).</font></p>

<p style="margin-top: 1em"><font color="#000000">The &lang;
<i>xxx</i>-of&rang; rule is special: The lexical parser
checks whether <i>xxx</i> is followed by the token
&lsquo;of&rsquo; without eliminating it so that the grammar
parser can still see &lsquo;of&rsquo;. Valid examples of
specifying a place with corner and label are thus</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">A
.n <br>
.n of A <br>
.n A <br>
north of A</font></p>


<p style="margin-top: 1em"><font color="#000000">while</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">north
A <br>
A north</font></p>

<p style="margin-top: 1em"><font color="#000000">both cause
a syntax error. (DWB <b>pic</b> also allows the weird form
&lsquo;A&nbsp;north&nbsp;of&rsquo;.)</font></p>

<p style="margin-top: 1em"><font color="#000000">Here the
special rules for the &lsquo;with&rsquo; keyword using a
path:</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;path&gt;
::= <br>
&lt;relative-path&gt; <br>
( &lt;relative-path&gt; , &lt;relative-path&gt; )</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;relative-path&gt;
::= <br>
&lt;corner&gt; <br>
. LABEL [. LABEL ...] [&lt;corner&gt;]</font></p>

<p style="margin-top: 1em"><font color="#000000">The
following style variables control output:</font></p>


<p align="center"><font color="#000000"><img src="img/pic51.png" alt="Image img/pic51.png"></font></p>

<p><font color="#000000">Any of these can be set by
assignment, or reset using the <b>reset</b> statement. Style
variables assigned within &lsquo;[&nbsp;]&rsquo; blocks are
restored to their beginning-of-block value on exit;
top-level assignments persist across pictures. Dimensions
are divided by <b>scale</b> on output.</font></p>

<p style="margin-top: 1em"><font color="#000000">All
<b>pic</b> expressions are evaluated in floating point;
units are always inches (a trailing &lsquo;i&rsquo; or
&lsquo;I&rsquo; is ignored). Expressions have the following
simple grammar, with semantics very similar to
C&nbsp;expressions:</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;expr&gt;
::= <br>
VARIABLE <br>
NUMBER <br>
&lt;place&gt; &lt;place-attribute&gt; <br>
&lt;expr&gt; &lt;op&gt; &lt;expr&gt; <br>
- &lt;expr&gt; <br>
( &lt;any-expr&gt; ) <br>
! &lt;expr&gt; <br>
&lt;func1&gt; ( &lt;any-expr&gt; ) <br>
&lt;func2&gt; ( &lt;any-expr&gt; , &lt;any-expr&gt; ) <br>
rand ( )</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;place-attribute&gt;
<br>
.x | .y | .h[eigh]t | .wid[th] | .rad</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;op&gt;
::= <br>
+ | - | * | / | % | ^ | &rsquo;&lt;&rsquo; |
&rsquo;&gt;&rsquo; | &rsquo;&lt;=&rsquo; |
&rsquo;&gt;=&rsquo;</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;func1&gt;
::= <br>
sin | cos | log | exp | sqrt | int | rand | srand</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000">&lt;func2&gt;
::= <br>
atan2 | max | min</font></p>

<p style="margin-top: 1em"><font color="#000000">Both
<b>exp</b> and <b>log</b> are base 10; <b>int</b> does
integer truncation; and <b>rand()</b> returns a random
number in [0-1).</font></p>

<p style="margin-top: 1em"><font color="#000000">There are
<b>define</b> and <b>undef</b> statements which are not part
of the grammar (they behave as pre-processor macros to the
language). These may be used to define
pseudo-functions.</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000"><b>define</b>
<i>name</i> <b>{</b> <i>replacement-text</i>
<b>}</b></font></p>

<p style="margin-top: 1em"><font color="#000000">This
defines <i>name</i> as a macro to be replaced by the
replacement text (not including the braces). The macro may
be called as</font></p>


<p style="margin-left:10%; margin-top: 1em"><font color="#000000"><i>name</i><b>(</b><i>arg1,
arg2, ..., argn</i><b>)</b></font></p>

<p style="margin-top: 1em"><font color="#000000">The
arguments (if any) are substituted for tokens $1, $2 ... $n
appearing in the replacement text. To undefine a macro, say
<b>undef</b> <i>name</i>, specifying the name to be
undefined.</font></p>
<hr>
[ <a href="pic-20.html">prev</a> | <a href="pic-22.html">next</a> | <a href="pic.html">top</a> ]
<hr>
Private