yaz-asncomp
1

# yaz-asncomp

YAZ ASN.1 compiler

       yaz-asncomp
       -v
       -c cfile
       -h hfile
       -p pfile
       -d config
       -I includeout
       -i includedir
       -m module
       filename

## DESCRIPTION

`yaz-asncomp` is an ASN.1 compiler that reads an ASN.1 specification in filename and produces C/C++ definitions and BER encoders/decoders for it.

The produced C/C++ code and header files uses the ODR module of YAZ which is a library that encodes/decodes/prints BER packages. `yaz-asncomp` allows you to specify name of resulting source via options. Alternatively, you can specify a DEFINISIONS file, which provides customized output to many output files - if the ASN.1 specification file consists of many modules.

This utility is written in Tcl. Any version of Tcl should work.

## OPTIONS

`-v`

  Makes the ASN.1 compiler print more verbose about the various stages of operations.

`-c` cfile

  Specifies the name of the C/C++ file with encoders/decoders.

`-h` hfile

  Specifies the name of header file with definitions.

`-p` pfile

  Specifies the name of the a private header file with definitions. By default all definitions are put in header file (option -h).

`-d` dfile

  Specifies the name of a definitions file.

`-I` iout

  Specifies first part of directory in which header files are written.

`-i` idir

  Specifies second part of directory in which header files are written.

`-m` module

  Specifies that ASN.1 compiler should only process the module given. If this option is not specified, all modules in the ASN.1 file are processed.

## DEFINITIONS FILE

The definitions file is really a Tcl script but follows traditional rules for Shell like configuration files. That is # denotes the beginning of a comment. Definitions are line oriented. The definitions files usually consists of a series of variable assignments of the form:

`set` name value

Available variables are:

`default-prefix`

  Sets prefix for names in the produced output. The value consists of three tokens: C function prefix, C typedef prefix and preprocessor prefix respectively.

`prefix(`module`)`

  This value sets prefix values for module module. The value has same form as `default-prefix`.

`filename(`module`)`

  Specifies filename for C/header file for module module.

`init(`module`,h)`

  Code fragment to be put in first part of public header for module module.

`body(`module`,h)`

  Code fragment to be put in last part of public header for module module (trailer).

`init(`module`,c)`

  Code fragment to be put in first part of C based encoder/decoder for module module.

`body(`module`,c)`

  Code fragment to be put in last part of C based encoder/decoder for module module (trailer).

`map(`module`,`name`)`

  Maps ASN.1 type in module module of name to value.

`membermap(`module`,`name`,`member`)`

  Maps member member in SEQUENCE/CHOICE of name in module module to value. The value consists of one or two tokens. First token is name of C preprocessor part. Second token is resulting C member name. If second token is omitted the value (one token) is both preprocessor part and C `struct`,`union`.

`unionmap(`module`,`name`,`member`)`

  Maps member member in CHOICE of name in module module to value. Value consists of to or three tokens. The first token is name of the integer in the `union` that is used as selector for the `union` itself. The second token is name of the `union`. The third token overrides the name of the CHOICE member; if omitted the member name is used.

## FILES

`/usr/share/yaz/z39.50/z.tcl`

`/usr/share/yaz/z39.50/*.asn`

## SEE ALSO

yaz 7

Section "The ODR Module" in the YAZ manual.