Provided by: snacc_1.3.1-5_amd64 bug

NAME

       snacc - ASN.1 to C, C++ or type table Compiler

SYNOPSIS

       snacc [-h] [-P] [-t] [-e] [-d] [-p] [-f]
             [-c | -C | -idl | -T <table output file>]
             [-u <useful types ASN.1 file>]
             [-mf <max file name len>]
             [-l <neg number>]
             [-meta] [-tcl <module.type>]
             [-novolat]
             <ASN.1 file list>

For complete and current documentation, refer to the snacc manual.

DESCRIPTION

       Snacc  (Sample  Neufeld  Asn.1  to  C/C++ Compiler) generates C or C++ source code for BER
       encode and decode routines as well as print and free routines for each type in  the  given
       ASN.1  modules.   Alternatively,  snacc can produce type tables that can be used for table
       based/interpreted encoding and decoding.  The type table based methods tend to  be  slower
       than  their  C  or C++ counterparts but they usually use less memory (table size vs. C/C++
       object code).

       Most of the 1990 ASN.1 features are parsed although some do not affect the generated code.
       Fairly rigourous error checking is performed on the ASN.1 source; any errors detected will
       be reported (printed to stderr).

       Each file in the ASN.1 file list should contain a complete ASN.1  module.   ASN.1  modules
       that  use  the IMPORTS feature must be compiled together (specify all necessary modules in
       the ASN.1 file list).  The generated source files will include each module's  header  file
       in  the  command  line  order.   This  makes  it important to order the modules from least
       dependent to most  dependent  on  the  command  line  to  avoid  type  ordering  problems.
       Currently,  snacc assumes that each ASN.1 file given on the command line depends on all of
       the others on the command line.  No attempt is made to only include the header files  from
       modules referenced in the import list for that module.

       If the target language is C, snacc will generate a .h and .c file for each specified ASN.1
       module.  If the target language is C++, snacc will generate a .h  and  .C  file  for  each
       module.  The generated file names will be derived from the module names.

OPTIONS

       -h     Help. Prints a synopsis of snacc and exits.

       -c     Generate  C source code.  This is the default behaviour of snacc.  Only one of -c ,
              -C or -T should be specified.

       -C     Generate C++ source code.

       -novolat
              Generate ``return *this'' after calling ``abort()''.  (Some broken compilers  don't
              know about volatile functions, or their abort() isn't correctly typed.)

       -meta  Generate meta code that describes the generated types.  Implies -C.

       -tcl   module.type[,module.type] Generate code for a Tcl interpreter where module.type are
              the top level PDUs.  Implies -meta.

       -T fileThis causes snacc to generate type tables and write them to the given
              file.

       -P     This causes snacc to print the parsed ASN.1 modules to stdout after the types  have
              been  linked, sorted, and processed.  This option is useful for debugging snacc and
              observing the modifications snacc performs on the types  to  make  code  generation
              simpler.

       -t     Generate type definitions in the target language for each ASN.1 type.

       -v     Generate  value definitions in the target language for each ASN.1 value.  Currently
              value definitions are limited to INTEGERs, BOOLEANs and OBJECT IDENTIFIERs.

       -e     Generate encode routines in the target language for each ASN.1 type.

       -d     Generate decode routines in the target language for each ASN.1 type.

       -p     Generate print routines in the target language for each ASN.1 type.

       -f     Generate free routines in the target language for each  ASN.1  type.   This  option
              only works when the target language is C.

              If  none  of  the  -t, -v, -e, -d, -p, or -f options are given on the command line,
              snacc assumes that all of them are in  effect.   They  do  not  affect  type  table
              generation.

       -u  fileRead  the  useful types definitions from the ASN.1 module in file file for linking
       purposes.  For some ASN.1 specifications, such as SNMP,
              the useful types are not needed. The types in  the  given  useful  types  file  are
              globally  available  to  all  modules;  a useful type definition is overridden by a
              local or explicitly imported type with the same name.  The current list  of  useful
              types is:
                ObjectDecscriptor
                NumericString
                PrintableString
                TeletexString
                T61String
                VideoTexString
                IA5String
                GraphicString
                ISO646String
                GeneralString
                UTCTime
                GeneralizedTime
                EXTERNAL

       -mf numberThis causes the generated source files to have a
              maximum length of number characters, including their suffix.  The number must be at
              least 3.  This option is useful for supporting operating systems that only  support
              short  file  names.   A better solution is to shorten the module name of each ASN.1
              module.

       -l numberThis is fairly obscure but may be useful.  Each error that the
              decoders can report is given an id number.  The number number is  where  the  error
              ids  start decreasing from as they are assigned to errors .  The default is -100 if
              this option is not given.  Avoid using a number in the range -100 to 0  since  they
              may  conflict  with  the  library routines' error ids.  If you are re-compiling the
              useful types for the library use -50.  Another use of this option is  to  integrate
              newly  generated  code  with  older code; if done correctly, the error ids will not
              conflict.

FILES

       snacc/asn1specs/asn-useful.asn1
                                   ASN.1 useful types module (use with -u option)
       snacc/c-lib/inc/            C runtime library include files
       snacc/c-lib/libasn1csbuf.a  C SBuf runtime library
       snacc/c-lib/libasn1cmbuf.a  C MinBuf runtime library
       snacc/c-lib/libasn1cebuf.a  C ExpBuf runtime library
       snacc/c++-lib/inc/          C++ runtime library include files
       snacc/c++-lib/libasn1c++.a  C++ runtime library
       snacc/c-lib/inc/tbl*/       Type table runtime library include files
       snacc/c-lib/libasn1ctbl.a   Type table runtime library
       snacc/tbl-tools/            Source code for table based tools (mkchdr, ptbl, pval)
       snacc/c-examples/           directory with ASN.1 to C examples
       snacc/c++-examples/         directory with ASN.1 to C++ examples
       snacc/tbl-example           directory with an ASN.1 to type table example
       snacc/doc                   directory with snacc documentation and this man page

BUGS

       Snacc has problems with the following case:

              Foo ::= SEQUENCE
              {
                  id IdType,
                  val ANY DEFINED BY id
              }

              IdType ::= CHOICE
              {
                  a INTEGER,
                  b OBJECT IDENTIFIER
              }

       The error checking pass will print an error to the effect that the id type must be INTEGER
       or  OBJECT  IDENTIFER.  To fix this you must modify the error checking pass as well as the
       code generation pass.  To be cheap about it,  disable/fix  the  error  checking  and  hand
       modify the generated code.

       The  hashing  code  used  for  handling  ANY DEFINED BY id to type mappings will encounter
       problems if the hash table goes more than four levels deep (I think this is unlikely).  To
       fix this just add linear chaining at fourth level.

       Please  send  bug  reports  or comments to Robert Joop <rj@rainbow.in-berlin.de>.  See the
       documentation about reporting bugs and (lack of) support.

COPYING

       Copyright (c) 1993 Mike Sample and the University of British Columbia
       Copyright (c) 1994 1995 Robert Joop and GMD Fokus.

       Permission is granted to make and distribute verbatim copies of this manual  provided  the
       copyright notice and this permission notice are preserved on all copies.

       Permission  is  granted  to copy and distribute modified versions of this manual under the
       conditions for verbatim copying, provided  that  the  entire  resulting  derived  work  is
       distributed under the terms of a permission notice identical to this one.

       The  snacc  compiler  is  released  under  the  GNU  General  Public License.  The runtime
       libraries are no longer under the GNU Library General Public License.  The generated  code
       is yours.

AUTHOR

       Snacc  was written by Mike Sample at the University of British Columbia (UBC).  He used it
       as a tool to do encoding/decoding performance research.

       It was augmented by Robert Joop at GMD  Fokus  with  the  help  of  some  of  its  project
       partners.

ACKNOWLEDGEMENTS

       This  work  was made possible by grants from the Canadian Institute for Telecommunications
       Research (CITR) and Natural Sciences and Engineering Research Council of Canada (NSERC).

                                           11 July 1993                                  SNACC(1)