GEG is a numerical and graphing calculator.

1] Main features

Geg's main purpose is to draw 2D curves defined by
mathematical functions. The actual drawing appears
instantly in the main graphic window, and can be
exported to EPS, PDF or SVG formats.

Several curves and functions can be drawn on the
same graphic window. There are 4 modes:
- cartesian : y = f(x)
- polar:      t→r(t)
- parametric: t→(x,y)
- sequence:   n→u(n)

The switch is made with the ad hoc toolbar buttons
or by using the cart, polar, param, sequ special
functions, see below for more details.

The symbols x, y denote the plane coordinates, and
t is used as the variable in the parametric and polar
modes. In polar mode, t is the angle in radian, and
r is the distance to origin, namely r=sqrt(x^2+y^2).

In sequence mode, n is an integer and represents
the index of the sequence. The sequence if computed
from n=nmin to n=nmax if nmax is specified, or
within the limits of the drawing otherwise. The
parameters tmin, tmax can alternatively be used for
the same purpose.

The bottom text entry is used to specify any function
to be evaluated or drawn. All variables a-z (except
e=exp(1)=2.718... and the coordinates x, y, t, r) can
be used as extra parameters. Except for e, they are
initially set to NAN ("not a number", undefined value)
at startup, and are kept unchanged until they are 
assigned another value by some further operation, or 
the user clicks the reinitialization button. Such an 
assignment is done e.g. by

g=0.5772156649015328

Several calculations or assignments can be done in
order by separating them with ; e.g. by putting
on a single line

m=pi/6;x=cos(m*t);y=sin(2*m*t)

Each drawing can be saved in a "calculation sheet"
in the form of a *.geg file that specifies the list
of parameters to evaluate and functions to represent.
These files can later be reopened by geg.


2] List of predefined functions and operators

The following functions are recognised:
    sin       (Sine)
    cos       (Cosine)
    tan       (Tangent)
    cot       (Cotangent, also cotan)
    sec       (Secant)
    csc       (Cosecant)
    asin      (Arc-Sine, also arcsin)
    acos      (Arc-Cosine, also arccos)
    atan      (Arc-Tan, also arctan)
    acot      (Arc-Cotan, also arccot)
    acsc      (Arc-Cosecant, also acsc)
    sinc      (Sine-Cardinal = sin(pi*x)/pi*x)
    sinh      (Hyperbolic Sine)
    cosh      (Hyperbolic Cosine)
    tanh      (Hyperbolic Tangent)
    exp       (Natural exponential)
    log       (log base 10)
    ln        (Natural Log, Log base e)
    floor     (Integer part of real number)
    gamma     (Gamma function)
    sqrt      (Square Root)
    cbrt      (Cube Root)
    abs       (Absolute Value)
    sign      (Sign function)
    char      (Characteristic function x>=0)

Special functions and operators
    clip      (Restriction to >=0 values of argument)
    cut       (Restriction to  >0 values of argument)    
    cart      (Set cartesian mode)
    polar     (Set polar mode)
    param     (Set parametric mode)
    sequ      (Set sequence mode)    
    '         (Derivation operator)
    int       (Integration operator)    
    tgt       (Affine tangent operator)


The following constants are recognised:
    pi        (3.141592653....)
    e         (2.718281828....)
(but e can viewed as a parameter and can be reset).

The following binary operators are recognised:
    +         (Add)
    -         (Subtract)
    *         (Multiply)
    /         (Divide)
    ^         (Raise to the Power)
    =         (Assignment,Equations)
    
The following miscellaneous symbols are recognised:
    (         (Left Bracket)
    )         (Right Bracket)
    [         (Left Square Bracket)
    ]         (Right Square Bracket)
    {         (Left Curly Bracket)
    }         (Right Curly Bracket)
   a-z        (Variable Parameters)


3] Escape characters, directives

These modes do not produce any graphical output,
but allow some calculations or definitions to
be made.

a] Evaluation mode (?)

Evaluation is turned on (and drawing disabled) by
starting the command line with ?. In this way, geg
can be used as a basic calculator. The accuracy
corresponds to the C-type "double" , that is
approximately 16 significant digits. For example

?a=3.7;b=-1.2;a^b
will output:  = 0.208045310600227

b] Solutions of equations (=)

Any input of the form "=f(x)" initiates
a calculation of the roots of f(x)=0 by a dichotomy
method, within the interval tmin < x < tmax, or
xmin < x < xmax if tmin, tmax are not specified.

Alternatively, mouse Buttons can be used on the graphic
window to select a rectangle and launch equation
resolutions in the corresponding area. Here are the
various actions of buttons:

- Left button:    zoom to selected area
- Middle button:  find intersections f(x)=g(x)
- Right button:   solve f(x)=0

c] Definitions of parameters or functions (&)

The initial character & is used to define parameters
or functions. For instance

&c=2.31*sin(pi/7)

assigns the specified value to variable c.

Other assignable parameters include tmin, tmax, amin, amax
(ranges for t, and polar angle, respectively), e.g. via

&amax=7*pi

The special 2 letter strings fa ... fz are meant to be used
as user defined functions. Such functions can then be called
later from the calculation sheet, exactly as the predefined
functions. The syntax to define a new function fc(p) of the
variable p uses & as the initial marker: one can set e.g.

&fc(p)=sin(p*p)

Any variable a-z can be used in a function definition,
and that definition may include other parameters
(preferably not x, y, r, t which will probably vary
according to the choice of coordinates), provided they
are previously initialized to a value (otherwise the
result will be undefined). A function definition should
be isolated on its line.

If the function ff has already been defined, then

&fg=ff'

will let fg be the derivative of ff. Two related
constructions are

&fs=int_c_ff
&ft=tgt_c_ff

This defines fs(x) to be the indefinite integral of ff
navishing at c (i.e. the integral of ff taken between
c and x), and ft to be the affine linear function that
represents the tangent to y=ff(x) at point x=c, namely

ft(x)=ff'(c)(x-c) + ff(c)

c is used here as a formal parameter that has to be set
prior to actually draw the primitive function,
respectively the tangent function, e.g. by putting

&c=0;
fs(x)
&c=2*pi
ft(x)

The special parmeters der_step, tgt_right, tgt_left
are respectively the relative step used to perform
numerical differentiation (0.001 by default), the
relative size of the tangential segment to be drawn
on the right side and on the left side (default value
is 100 which yields an infinite tangent half-line on
the corresponding side). Finally, int_step is the
absolute value of the integration step (0.005 by
default). One can e.g. set

&der_step=0.003
&int_step=0.002
&tgt_left=0;tgt_right=100

The last setting corresponds to an infinite right
half-tangent.

The gap parameter is used to detect singularities
and discontinuities. The default value is

&gap=1.0

Smaller values of the gap increase sensitivity
but may lead to losing parts of the graph around
the points of discontinuity.

d] Linewidth and color of curves

The directives

&lw=0.35
&color=127096008

which can be concatened with the character ; in between

&lw=0.35;color=127096008

specify a linewidth equal to 0.35 and a RGB color with
red=127/255, green=96/255, blue=8/255. They apply for the
curves that are subsequently drawn, until new values of
those parameters are set.

The lw and color parameters are considered unspecified
if they are given negative values, e.g. -1. In that case
geg uses the global default value lw=0.5 and the default
color scheme according to the index of the curve.

The color and linewidth of the axes, and the color of
the numerical values of x, y, t can be specified from
the "Preferences" dialog.

e] Sequences

The "sequence mode" can be started via the directive

&sequ

In this setting, the special parameter 'ptrad' indicates
the radius of points representing the values (n,u(n)) of
the sequence. The parameter is set by putting e.g.

&ptrad=2

The parameters nmin and nmax can be used to specify the
interval in which the sequence is to be computed:

&nmin=3

f] Comments

Any string starting by # is a comment. Such a
string is reproduced verbatim in the calculation
sheet without generating any action. Blank lines
can be entered by a 2 character string ##.


4] Formal symbolic expressions in geg

The Extended Backus Naur Notation (EBNF) used in geg is:
    <expression> ::= [ + | - ] <term>   { + | - <term> }
    <term>       ::= <factor> { * | / | ^ <factor> }
    <factor>     ::= <number> | <function> | (<expression>)
    <number>     ::= <float> | e pi | a-z
    <function>   ::= <function_name>(<expression>);
