Npic command-line tools

Copyright (C) 2003 by Edouard Thiel <Edouard.Thiel@lif.univ-mrs.fr>


This page describes the set of command-line tools that comes along with the Npic library.

Some of these tools are available in a plugin menu for QVox. Run qvox, go to "Plugins" / "Manage plugins" / "Add plugin menu", select npic-qvox-plugins.qpx, "Rebuild menu". You should now have the "Plugins" / "Npic tools" menu.


Back to main page.

tools/

npic-new Create an image, with all pixels set to 0.
npic-info Print info on image or mask file.
npic-conv Convert image file in other file format from its extension.
npic-slice Extract a slice from a volume or hypervolume.
npic-draw Draw in images by changing pixel values.
npic-val Change pixel values.
npic-sum Sum up pixel values.
npic-diff Compare two images, pixel per pixel.
npic-sedt Compute Square Euclidean Distance Transforms.
npic-mask Create a mask, set vectors and properties.
npic-wdt Compute Weighted Distance Transforms (a.k.a. chamfer DT).
npic-wd-norm Test if a weighted (= chamfer) distance induces a norm.
npic-mlut Compute Medial Axis, LUT and Mlut for Distance Transforms.
npic-dtma Compute Distance Transform and extract Medial Axis from it.
npic-ball.sh Generate a Distance Ball.
npic-bissec Compute bissector of two points for two distances.
npic-metbases Compute metric bases and dimension.
npic-print Print image as text in console.
npic-xfig Convert an 2-d image file to an Xfig file.
npic-geomv Convert a 3-d image file to a geomview file.
npic-anim4d.sh Show a hyper-volume slice by slice with geomview.

templa/

npic-templa expand Npic @macros in C files.


Syntax and usage:

tools/npic-new.c

npic-new - Create an image, with all pixels set to 0.
Usage:
  npic-new  -h | -help | --help                 : print help
  npic-new  out1  -2c|-2l|-2d|-2q          y:x  : create         y*x 2D image
  npic-new  out1  -3c|-3l|-3d|-3q        z:y:x  : create       z*y*x 3D image
  npic-new  out1  -4c|-4l|-4d|-4q      t:z:y:x  : create     t*z*y*x 4D image
  npic-new  out1  -5c|-5l|-5d|-5q    s:t:z:y:x  : create   s*t*z*y*x 5D image
  npic-new  out1  -6c|-6l|-6d|-6q  r:s:t:z:y:x  : create r*s*t*z*y*x 6D image

out1 : image file in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

r, s, t, z, y, x : positive integers.

pixel types : c = unsigned char, d = double,
  q = 4 unsigned shorts, l = signed long.

tools/npic-info.c

npic-info - Print info on image or mask file.
Usage:
  npic-info  -h | -help | --help       : print help
  npic-info  in1                       : print infos on in1

in1 : image or mask file

Succeed if in1 can be read.

tools/npic-conv.c

npic-conv - Convert image file in other file format from its extension.
Usage:
  npic-conv  -h | -help | --help       : print help
  npic-conv  in1 out1 [-c|-l|-d]       : convert in1 to out1

-c|-l|-d  : convert pixel type to char, long, double
in1, out1 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

tools/npic-slice.c

npic-slice - Extract a slice from a volume or hypervolume.
Usage:
  npic-slice  -h | -help | --help   : print help
  npic-slice  in1 out1 [options]    : cut in1 to out1

Options:
  -c|-l|-d               : convert pixel type to char, long, double
  -x|-y|-z|-t|-s|-r  k   : cut slice k for given coordinate.
     different slices can be achieved at the same time. Each slice decreases
     the dimension; the result must have at least dimension 2.

in1, out1 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

Example: SEDT on a volume, shown slice by slice (please open a wide terminal!)
  ./npic-sedt -dt -hirata ../images/klette_3c.pan.gz tmp1.npz
  for ((i = 24; i < 46 ; i++)); do
    echo "Slice x=$i"
    if ./npic-slice tmp1.npz tmp2.npz -x $i
    then ./npic-print tmp2.npz | sed -e 's/ 0/ ./g'
    else break ; fi ; sleep 1
  done

tools/npic-draw.c

npic-draw - Draw in images by changing pixel values.
Usage:
  npic-draw  -h | -help | --help     : print help
  npic-draw in1 out1 actions ...

in1, out1 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

actions:
  -point p c      : draw point p in color c
  -rect  p q c    : draw rectangle bounded by p and q in color c
  -ellip p q c    : draw ellipse   bounded by p and q in color c
  -line  a b c d  : draw bresenham segment [a, b] in colors c to d

p, q: coordinates y:x or z:y:x or t:z:y:x or s:t:z:y:x or r:s:t:z:y:x
      depending on dimension;
      they can leave outside the image (the drawing is cut).
a, b: idem but coordinates lying inside image.
c, d: integer or double or r:g:b:a, depending on image type.

Example: create a 4D image:
  ./npic-new tmp2.npz -4l 24:28:25:30
  ./npic-draw tmp2.npz tmp2.npz \
        -rect  12:3:10:21  19:11:14:29 100 \
        -ellip  5:2:21:0    9:2:25:29  200 \
        -rect  20:12:20:11 22:14:24:29 300 \
        -ellip 17:20:2:8   21:24:20:22 400

tools/npic-val.c

npic-val - Change pixel values.
Usage:
  npic-val  -h | -help | --help     : print help
  npic-val in1 out1 actions ...

in1, out1 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

actions:
  -fill     a    : set all pixels -> a
  -change   a b  : a -> b
  -exchange a b  : a <-> b
  -thr-lt   a b  : pixels <  a -> b
  -thr-gt   a b  : pixels >  a -> b
  -thr-le   a b  : pixels <= a -> b
  -thr-ge   a b  : pixels >= a -> b

a, b: integer or double or r:g:b:a, depending on image type.

tools/npic-sum.c

npic-sum - Sum up pixel values.
Usage:
  npic-sum  -h | -help | --help              : print help
  npic-sum  -linear a b in1 out1             : out1 := in1*a + b
  npic-sum  -bilin  a b c in1 in2 out1       : out1 := in1*a + in2*b + c
  npic-sum  -trilin a b c d in1 in2 in3 out1 : out1 := in1*a + in2*b + in3*c + d
  npic-sum  -quad   a b c in1 out1           : out1 := in1^2*a + in1*b + c
  npic-sum  -biquad a b c d e in1 in2 out1   : out1 := in1^2*a + in1*b +
                                                       in2^2*c + in2*d + e
in1, out1 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format
a, b, c, d, e : float.

tools/npic-diff.c

npic-diff - Compare two images, pixel per pixel.
Usage:
  npic-diff  -h | -help | --help : print help
  npic-diff in1 in2 options      : compare pixels

Options:
  -c|-l|-d  : convert pixel type to char, long, double for both images
  -b        : binary comparison (pixel == 0 or != 0)
  -p  x     : max number of printed differences, default is 20

in1, in2 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

tools/npic-sedt.c

npic-sedt - Compute Square Euclidean Distance Transforms.
Usage:
  npic-sedt  -h | -help | --help   : print help
  npic-sedt what how in1 out1      : compute distance transforms

what:  -dt  : compute SEDT
      -idt  : idem with infinite borders
      -rdt  : compute reverse SEDT

how:  -hirata  : with Hirata's algorithm (fastest)
      -saito   : with Saito's et al algorithm
      -quadra  : with quadratic algorithm (slowest)
      -verify  : compare the three algorithms; save hirata

in1, out1 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

tools/npic-mask.c

npic-mask - Create a mask, set vectors and properties.
Usage:
  npic-mask  -h | -help | --help : print help
  npic-mask m1 actions ...

m1 : mask file in .nmask[.gz|bz2|7z] format

actions:
  -create -2l|-2d|-3l|-3d|-4l|-4d|-5l|-5d|-6l|-6d  : create a new empty mask
        2,3,4,5,6 = dimension ; l = signed int32 ; d = double.
  -dist|-med|-conv : add property Nature: Distance or MedialAxis
        or Convolution.
  -wd|-sed|-fed|-ced : add property DistanceType: Weighted or
        SquaredEuclidean or FloorEuclidean or CeilEuclidean.
  -vec r:s:t:z:y:x:h | s:t:z:y:x:h | t:z:y:x:h | z:y:x:h | y:x:h  : 
        insert vector and value h depending of the mask dimension.
  -ghalf      : add property AddSym: GSymToHalfMask
        keep small file, symmetries will be added after reading.
  -comphalf   : compute half mask by G-symmetries
        insert all symmetries in the file, give large file.
  -print      : print mask to stdout

tools/npic-wdt.c

npic-wdt - Compute Weighted Distance Transforms (a.k.a. chamfer DT).
Usage:
  npic-wdt  -h | -help | --help   : print help
  npic-wdt what mask in1 out1     : compute distance transforms

what:  -dt  : compute WDT
      -idt  : idem with infinite borders
      -rdt  : compute reverse WDT

mask      : mask file in .nmask[.gz|bz2|7z] format (see npic-mask -h)
in1, out1 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

tools/npic-wd-norm.c

npic-wd-norm - Test if a weighted (= chamfer) distance induces a norm.
Usage:
  npic-wd-norm  -h | -help | --help   : print help
  npic-wd-norm  mask r [-o out1] [-p j] : 
      compute a DT_inf on a (2r+1)^dim centred image, then scan for
      homogeneity and positive definiteness with a sieve on visible vectors.

  -o out1 : save DT_inf  (default is don't save). Wrong vectors
            are marked as negative.
  -p j    : print the j first series of wrong vectors (default is 10).
  -p -1   : silent mode, only print "NORM: YES" or "NORM: NO".

mask : mask file in .nmask[.gz|bz2|7z] format (see npic-mask -h)
out1 : image file in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

Example: 5-7-d16 is not a 2D norm
  ./npic-wd-norm ../masks/d-5-7-d16_2l.nmask 10 -o tmp1.npz
  ./npic-print tmp1.npz

Example: bash script that checks a,b,c 3D masks
  for ((a = 1; a < 10; a++)); do
  for ((b = 1; b < 10; b++)); do
  for ((c = 1; c < 10; c++)); do
      echo -n "$a $b $c  "
      ./npic-mask tmp1.nmask -create -3l -dist -ghalf \
          -vec 0:0:1:$a -vec 0:1:1:$b -vec 1:1:1:$c > /dev/null
      ./npic-wd-norm tmp1.nmask 20 -p -1
  done ; done ; done | more

tools/npic-mlut.c

npic-mlut - Compute Medial Axis, LUT and Mlut for Distance Transforms.
Usage:
  npic-mlut  -h | -help | --help   : print help
  npic-mlut options ...

Options:
  -wd   d-mask        : use weighted distance mask
  -sed                : or use square Euclidean distance
  -2l|-3l|-4l|-5l|-6l : specify dimension (if it cannot be guessed)
  -mlut t-mask        : medial axis test mask (a.k.a Mlut), to use or to expand
  -create             : create or overwrite t-mask
  -rad  Rtarget       : the radius to reach (if it cannot be guessed)
  -axis in1 out1      : compute medial axis from distance transform in1
  -col  n R           : show the Lut column [n][1..R] for vector number n in t-mask
  -ctg  out2          : save CTg

d-mask, t-mask : masks in .nmask[.gz|bz2|7z] format
in1, out1, out2 : images in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

Example: compute and show MA from WDT for d4
  ./npic-wdt -dt ../masks/d4_2l.nmask ../images/K1b_2c.pgm.gz tmp1.npz
  ./npic-mlut -wd ../masks/d4_2l.nmask -axis tmp1.npz tmp2.npz
  ./npic-val tmp2.npz tmp3.npz -thr-gt 0 255
  ./npic-conv tmp3.npz tmp3.pgm -c
  gimp tmp3.pgm&
 
Example: compute and show MA from SEDT
  ./npic-sedt -dt -hirata ../images/klette_3c.pan.gz tmp1.npz
  ./npic-mlut -sed -axis tmp1.npz tmp2.npz -mlut ../masks/t-sed_3l.nmask.gz
  # or: ./npic-mlut -sed -axis tmp1.npz tmp2.npz
  ./npic-geomv tmp2.npz tmp3.geomv -show

Example: compute Mlut for SED in dim 4, then resume computation
  ./npic-mlut -sed -4l -rad 30 -mlut tmp1.nmask -create
  ./npic-mlut -sed -4l -rad 50 -mlut tmp1.nmask

Example: show a Lut column
  ./npic-mlut -wd ../masks/d-5-7-11_2l.nmask -col 2 65

tools/npic-dtma.c

npic-dtma - Compute Distance Transform and extract Medial Axis from it.
Usage:
  npic-dtma  -h | -help | --help : print help
  npic-dtma Mdist Mlut in1 out1  : compute DT and MA

    Mdist : a weighted distance mask, or a Euclidean distance mask,
            or "sed" for Squared Euclidean Distance
    Mlut  : a medial axis neighbourhood test mask corresponding to
            the distance (will be created or updated) or "none"
    in1   : a binary image
    out1  : the medial axis of in1

Mdist, Mlut : mask file in .nmask[.gz|bz2|7z] format (see npic-mask -h)
in1, out1   : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

Example: compute and show Medial Axis with distance <3,4,5> and with SED
  ./npic-dtma sed none ../images/K1b_2c.pgm.gz tmp1.pbm
  gimp tmp1.pbm &

  ./npic-dtma ../masks/d-3-4-5_3l.nmask none ../images/klette_3c.pan.gz tmp2.npz
  ./npic-geomv tmp2.npz tmp2.geom -show &

  ./npic-dtma sed ../masks/t-sed_3l.nmask ../images/klette_3c.pan.gz tmp3.npz
  ./npic-geomv tmp3.npz tmp3.geom -show &

tools/npic-ball.sh

npic-ball.sh - Generate a Distance Ball.
Usage:
  npic-ball.sh  -h | -help | --help : print help
  npic-ball.sh  mask out1 options   : compute a distance ball with WD mask or SED

mask : weighted distance mask in .nmask[.gz] format
       or "sed" for Squared Euclidean Distance

out1 : image in .npz, .pan[.gz] or other format.

Options:
  -2|-3|-4|-5|-6 : dimension d, if it cannot be guessed from mask
  -ir N  : image radius N, will create a (2N+1)^d image
  -dr R  : distance radius R of the closed ball
  -dt    : fill the center point and make a DT on the ball

Example 1: a 2-d Euclidean ball, without and with option -dt
  ./npic-ball.sh sed tmp1.npz  -2 -dr 100 -ir 12
  ./npic-print tmp1.npz | sed -e 's/ 0/ ./g'
  ./npic-ball.sh sed tmp1.npz  -2 -dr 100 -ir 12 -dt
  ./npic-print tmp1.npz | sed -e 's/ 0/ ./g'

Example 2: a 2-d Montanari's ball
  ./npic-ball.sh ../masks/d-M2_2d.nmask tmp1.npz -dr 254.3 -ir 280
  ./npic-conv tmp1.npz tmp1.pgm -c
  gimp tmp1.pgm &

Example 3: a 3-d chamfer ball
  ./npic-ball.sh ../masks/d-7-10-13-18_3l.nmask tmp1.npz -dr 210 -ir 40
  ./npic-geomv tmp1.npz tmp1.geom -show &

tools/npic-bissec.c

npic-bissec - Compute bissector of two points for two distances.
Usage:
  npic-bissec  -h | -help | --help  : print help
  npic-bissec out1 options : create image of bissector between points

Options:
  -2|..|-6        : dimension
  -size   coord   : size of image
  -p1|-p2 coord   : coordinates of centers
  -m1|-m2 mask    : weighted distance mask in .nmask[.gz|bz2|7z] format,
                    or "sed" for squared Euclidean distance (default).
  -a1|-a2 alpha   : normalisation factor, default is 1.0
  -col p r1 r2 f  : color of points, regions and frontier, in 0..255, 
                    default is 0 99 200 255
  -thr h          : threshold for comparing normalized distances, default 1E-5

The result out1 will contain the bissector of points p1 and p2, computed for
distance m1 from p1 and distance m2 from p2. Distances are normalized.

coord: y:x or z:y:x or t:z:y:x s:t:z:y:x or r:s:t:z:y:x
out1: image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

Example 1: using d8 and sed
  ./npic-bissec tmp1.npz -2 -size 40:30 -p1 20:2 -p2 28:26 \
      -m1 ../masks/d8_2l.nmask -m2 sed
  ./npic-print tmp1.npz

Exemple 2: using d<3,4> and d<5,7,11>
   ./npic-bissec tmp1.pgm -2 -size 700:500 -p1 300:10 -p2 351:490 \
       -m1 ../masks/d-3-4_2l.nmask -a1 3 -m2 ../masks/d-5-7-11_2l.nmask -a2 5
   gimp tmp1.pgm &

Exemple 3 in dim 3: using sed and d6
   ./npic-bissec tmp1.npz -3 -size 80:80:80 -p1 40:10:40 -p2 37:70:45\
       -m1 sed -m2 ../masks/d6_3l.nmask -col 1 0 0 2 -thr 1
   ./npic-geomv tmp1.npz tmp1.geomv -show &

tools/npic-metbases.c

npic-metbases - Compute metric bases and dimension.
Usage:
  npic-metbases  -h | -help | --help  : print help
  npic-metbases options action : check or find bases and dimension

Options:
  -2|..|-6     : dimension of space
  -size coord  : size of the rectangle
  -m mask      : weighted distance mask in .nmask[.gz|bz2|7z] format,
                 or "sed" for squared Euclidean distance (default).
  -v coord     : add one vertex to the set S (empty by default)
  -out out1    : save result in out1.
  -list        : print additional results
  -trace       : show the progression in stderr

Action:
  -test-rset      : test if the set S is a resolving set
                    Labels in out1: -1 undef, 0 vertex, 1 resolved, >1 unresolved
  -find-rsets d   : find resolving sets in metric dimension d, starting from S
                    Labels in out1: occurrence number
  -find-dim d1 d2 : find metric dimension in [d1..d2]
                    Labels in out1: 0 background, 1 vertex of the first base

out1: image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format
coord: y:x or z:y:x or t:z:y:x or s:t:z:y:x or r:s:t:z:y:x

Example 1: test a resolving set
   ./npic-metbases -size 10:20 -m ../masks/d-5-7-11_2l.nmask -out tmp2.npz \
       -v 0:0 -v 9:17 -test-rset
   ./npic-print tmp2.npz | sed -e 's/ 1/ ./g'

Example 2: find bases of dimension 2
   ./npic-metbases -size 8:11 -m ../masks/d-3-4_2l.nmask -out tmp2.npz \
       -find-rsets 2
   ./npic-print tmp2.npz | sed -e 's/ 0/ ./g'

Example 3: find bases given a forcing subset
   ./npic-metbases -size 8:11 -m ../masks/d-3-4_2l.nmask -out tmp2.npz \
       -find-rsets 2 -v 2:1 -list
   ./npic-print tmp2.npz | sed -e 's/ 0/ ./g'

Example 4: searching metric dimension
   for f in ../masks/d*_2l.nmask ; do \
       ./npic-metbases -size 10:15 -m "$f" -find-dim 1 4 -list ; done 

tools/npic-print.c

npic-print - Print image as text in console.
Usage:
  npic-print  -h | -help | --help       : print help
  npic-print  in1                       : print in1

in1 : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format

tools/npic-xfig.c

npic-xfig - Convert an 2-d image file to an Xfig file.
Usage:
  npic-xfig  -h | -help | --help  : print help
  npic-xfig  in1 out1 [options]   : convert in1 to out1

Options:
  -box y x h w   : only convert this part of image
  -latex         : add text flag 'special' to produce pstex
  -font n        : change font size (default is 12)
  -size h w      : change pixel height and width in cm (default is 0.8 0.8)
  -nozero        : do not output 0 values
  -norect        : do not output 0 pixels
  -bg a b grey   : set bg color for [a..b] pixels to grey (0..100)
                   (multiple -bg ... are allowed.)
  -coords        : show coordinates
  -co-orig y x   : the coordinates start from y,x
  -co-font n     : change coordinates font size (default is 10)
  -3d            : add 3D effects (more with -norect)
  -3d-size h w   : change 3D border height and width in cm (default 0.15 0.18)
  -show          : show result with xfig

in1  : image in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format
out1 : result in the Xfig .fig format

Example:
  ./npic-sedt -dt -saito ../images/ex1_2c.npz tmp1.npz
  ./npic-xfig tmp1.npz tmp2.fig -norect -nozero -coords -3d \
          -bg 9 15 90 -bg 16 25 80 -show

tools/npic-geomv.c

npic-geomv - Convert a 3-d image file to a geomview file.
Usage:
  npic-geomv  -h | -help | --help  : print help
  npic-geomv  in1 out1 [options]   : convert in1 to out1

in1  : volume in .npz .pan|vol|pnm|pbm|pgm|ppm[.gz|bz2|7z] format
out1 : result in the geomview .geom format

Options:
  -vobb   : add the real volume bounding box
  -rad r  : face radius, default is 0.5
  -show   : show result with geomview

Geomview is an interactive 3D viewing program using OpenGL,
available on most Unix platforms. See: http://www.geomview.org
To get on Ubuntu/Debian, type: sudo apt-get install geomview

Example:
  ./npic-geomv ../images/klette_3c.pan.gz tmp1.geom
  geomview tmp1.geom &

Example:
  ./npic-new tmp2.npz -3c 50:40:60
  ./npic-draw tmp2.npz tmp2.npz \
      -rect  10:20:30 15:26:37 100 \
      -ellip 30:20:30 35:26:37 100
  ./npic-geomv tmp2.npz tmp3.geom -vobb -show

tools/npic-anim4d.sh

npic-anim4d.sh - Show a hyper-volume slice by slice with geomview.
Usage:
  npic-anim4d.sh  -h | -help | --help   : print help
  npic-anim4d.sh  in1  [options]        : load in1 and run geomview

in1  : image in .npz, .pan[.gz] or other format.

Options:
  -time t         : time interval between 2 slices in seconds (default is 0.5).
  -x|-y|-z|-t ... : show a sequence of slices for x, y, z, t
  -all            : equivalent to -x -y -z -t
  -cont           : show sequence continuously

Example: show a 4-dimensionnal ball for weighted distance <3,4,5,6>
  ./npic-new tmp1.npz -4l 41:41:41:41
  ./npic-draw tmp1.npz tmp1.npz -point 20:20:20:20 60
  ./npic-wdt -rdt ../masks/d-3-4-5-6_4l.nmask tmp1.npz tmp2.npz
  ./npic-anim4d.sh tmp2.npz -x -cont

templa/npic-templa.c

npic-templa - expand Npic @macros in C files.
Usage:
  npic-templa  -h | -help | --help  : print this help
  npic-templa  in1 out1             : expand in1 to out1

in1  : .ct file containing Npic @macros
out1 : .c resulting file

General macros:
    @@         : expand to '@'
    @# ... \n  : comment, suppressed in output
    @G         : expand a generation message and date

Rule: any line expanding to blank is suppressed.

Loop:
    @BLOOP <list>\n
    <text>
    @ELOOP

  <list> is a list of words in 2C 2L 2D 2Q .. 6C 6L 6D 6Q
         separated by ' ' or ',' or '\t'
  <text> is a multi-line text; it will be duplicated for each word in <list>

Macros available in a loop:
    @H : expand to the current word in loop list (upper case)
    @h : the same in lower case
    @J : expand to first letter in @H (the dimension).
    @K : expand to second letter in @H (pixel type).
    @k : the same in lower case

Conditionnal in loop: x is a char in "'`:?#~&^
    @IF[<list>]<text>@FI :  expand <text> if @H in <list>
    @[<list>]x<text>x    :  expand <text> if @H in <list>
    @<23456>x<text>x     :  expand <text> if @J in <23456>
    @<LCDQ>x<text>x      :  expand <text> if @K in <LCDQ>
Any conditionnal can be negated by: @!...

Coordinates for dimension: word ~$~ can be empty; ? in ',;)'
    @ox~$~x]  : expand to ~r~][...][~y~][~x~]
    @ox~$~x?  : expand to ~r~, ..., ~y~, ~x~?


Generated by gen-npic-tools.sh on 01/10/2011