GAA reference
GPL Argument Analyzer (c) Joran Maille 1998

GAA functions

These functions are declared in the header file generated by GAA

int gaa(int argc, char *argv[], gaainfo *gaaval);

gaa() analyses arguments from the command line

int gaa_file(char *name, gaainfo *gaaval);

gaa_file() analyses options from a configuration file

void gaa_help();

gaa_help() prints the help of the program

GAA file structure

A GAA file has two parts :

1. GAA declarations
2. (optionnal) C declarations that will be put at the begining of the output C file

These two parts are separated by the symbol '##'

GAA declarations

- DATA data-name AS gaa-arg-type
Data declaration for the gaainfo structure.
Example :
DATA a AS CHAR -> 'a' can contain a character
DATA textList AS *STR -> 'textList' can contain a list of strings (C type : char**)
- #C-variable-declaration
Data declaration for the gaainfo structure.
Example :
#char a;
- defitem ARGTYPE function-name #C-ArgType
Declaration of an user-defined named ARGTYPE. The function-name is the name of the function which will be called by gaa() to check if the argument is an ARGTYPE and to get its value. C-ArgType is the C type of ARGTYPE. The function-name function must declared (in the C-Declaration part) as follows :
C-ArgType function-name(char*) { }
In this function, you must use the GAAERROR macro when the argument is incorrect.
Example :
defitem HEX findhex #int
##
int findhex(char*) {...}
- helpnode "help text"
Writes a line in the help.
- incomp shortnamelist
shortnamelist is a list of options. This instruction makes the options in the list incompatibles.
Example :
incomp vn -> the option verbose and num (of the sample) become incompatible
- init { action }
Defines the intialization action. This action will be the first executed.
- obligat shortnamelist
shortnamelist is a list of options. This instruction forces the user to give one option in of the list.
Example :
obligat vn -> the user must give the option verbose or/and the option num
- option (shortname, longname) <ARG_DECL_LIST>{ action } "option help"
An ARG_DECL_LIST is a list of argument declarations (surprising, isn't it ?)

ARG_DECL syntax : ARGTYPE

or ARGTYPE "argument description"

Note : shortname must be a single character
When gaa() finds an argument begining with '-', it considers that this argument is an option. If an option with the same name has been declared, there are two possibilities :

- the option doesn't need any argument
gaa() executes the assiociated action. In this action, you can refer to a data contained in gaaval : you only have to put a '$' character before the name of the variable.
example : if you have declared 'DATA pom AS CHAR' '#char pom', to refer to 'pom' in an action, you must write '$pom'; otherwise, if you write 'pom', it will be considered as a general variable named 'pom'.
- the option requires one or more argument(s)
gaa() checks if the next argument has the right type, and calculates its value. Then, it executes the action associated with the option in the same way as if there was no argument. In the action, '$n' represents the value of the nth argument.
Note :

- predefined ARGTYPEs exist (cf. Quick Reference)
- the type of the argument value depends on the choosen ARGTYPE. For instance, type for 'INT' is 'int'

- rest <ARG_DECL_LIST> { action }
For most programs, the user must provide a filename (for instance) without an option. This is supported by GAA with the 'rest' instruction.
'rest' represents the argument(s) which remain when you remove all the options (with their private argument(s)) from the line given by the user.
For example, in the command 'tar -xv zorglub.gif -f toto.tar kiem.jpg bobby.c', the arguments managed by rest are zorglub.gif, kiem.jpg and bobby.c. In this case, if the GAA file specifies 'rest STR {...}', an error will occur, because the program wants one rest argument only. If the GAA files specifies 'rest *STR', it's OK, because it means that the program needs a list of arguments as rest.

Example :
rest *STR {...} -> the rest is a list of names

Predefined ARG_TYPEs

ARG_TYPE | C-type | Recognized arguments
STR | char* | any argument
INT | int | integers
CHAR | char | single characters
FLOAT | float | float number

Important : if in a declaration, you declare *ARG_TYPE, the user will have to give a list of ARG_TYPE and not a single ARG_TYPE. In the attached action, you can get the number of found arguments with the '@n' symbol.

Configuration files

GAA can analyse the content of a configuration file.
Syntax of a configuration file :

option-long-name arg1 arg2 arg3
...
option-long-name arg1 arg2 arg3

If you have any question or remark please write me !
joran@writeme.com

to the official gaa page