Provided by: snacc_1.3.1-4_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)