Description of how aperture macros are implemented in gerbv

By Stefan Petersen

$Id$

Operation of gerbv is split in two stages; parsing and drawing.
This makes it simpler handle peculiar syntax in different gerber
implementation by just doing the parser more robust. It also
simplifies debugging.

Handling of aperture macros are also split in two parts, ie parsing
and drawing.

Parsing
-------
When the command "%AM" is stumbled upon in the gerber file command
is left to the function parse_aperture_macro in amacro.c. It first
extracts out the name of the aperture macro. Then it tries to build
program in a very primitive assembler. This program should describe
how to draw the macro. The assembler consist of 8 instruction intended
for a stackbased machine. The instructions are:
NOP, PUSH, PPUSH, ADD, SUB, MUL, DIV, PRIM.

The instructions
----------------
NOP  : The no operation. This is the default instruction and are
       added as a security measure.
PUSH : Pushes a value on the stack. This machine only works with floats
       on the stack. 
PPUSH: Pushes inparameters onto the stack. Gerber aperture macros accepts
       parameters to be set when later declared, so the same macro can
       be used at several instances. Wich parameter to b set is an integer
       and starts with 1.
ADD  : The mathematical operation +. Takes the two uppermost values on the
       the stack, adds them and pushes the result back onto the stack.
SUB  : Same as ADD, but with -.
MUL  : Same as ADD, but with *.
DIV  : Same as ADD, but with /.
PRIM : Aperture macros are based on primitive figures, which then are
       combined in a macro. This instruction describes which primitive
       figure to draw (for a description, see Gerber documentation) and
       all parameters when drawing this primitive figure is taken from
       the stack (and hence popped).

Caveats
-------
The parser have no precedence at all regarding mathematical operations.
The standard doesn't define any, but the limit lies only within the parser.
The parser handles several primitives within one aperture macro definition.

