generate manual pages from Markdown instead of writing directly
diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am
new file mode 100644
index 0000000..1035ff9
--- /dev/null
+++ b/doc/man/Makefile.am
@@ -0,0 +1,16 @@
+
+dist_man1_MANS = asn1c.1 unber.1 enber.1
+
+if HAVE_PANDOC
+
+PANDOC_OPTIONS= --from markdown --to man        \
+		--variable header="Version ${VERSION}"  \
+		--variable adjusting:l                  \
+		--variable hyphenate:""                 \
+		--standalone
+
+%.1: %.man.md
+	${PANDOC} ${PANDOC_OPTIONS} -o $@ $<
+
+endif
+
diff --git a/doc/man/asn1c.1 b/doc/man/asn1c.1
new file mode 100644
index 0000000..54c2337
--- /dev/null
+++ b/doc/man/asn1c.1
@@ -0,0 +1,199 @@
+.\" Automatically generated by Pandoc 1.16.0.2
+.\"
+.ad l
+.TH "asn1c" "1" "2016\-01\-23" "ASN.1 Compiler" "Version 0.9.28"
+.nh \" Turn off hyphenation by default.
+.SH NAME
+.PP
+asn1c \-\- the ASN.1 Compiler
+.SH SYNOPSIS
+.PP
+asn1c [\f[B]\-E\f[] [\f[B]\-F\f[]] | \f[B]\-P\f[] | \f[B]\-R\f[]]
+.PD 0
+.P
+.PD
+[\f[B]\-S\f[]\f[I]dir\f[]] [\f[B]\-X\f[]]
+.PD 0
+.P
+.PD
+[\f[B]\-W\f[]\f[I]debug\-\f[]...] [\f[B]\-f\f[]\f[I]option\f[]]
+[\f[B]\-gen\-\f[]\f[I]option\f[]]
+[\f[B]\-pdu\f[]={\f[B]all\f[]|\f[B]auto\f[]|\f[I]Type\f[]}]
+.PD 0
+.P
+.PD
+[\f[B]\-print\-\f[]\f[I]option\f[]]
+.PD 0
+.P
+.PD
+\f[I]input\-filenames\f[]...
+.SH DESCRIPTION
+.PP
+asn1c compiles ASN.1 specifications into a set of target language
+(C/C++) encoders and decoders for BER, DER, PER, XER and other encoding
+rules.
+.SH OPTIONS
+.SS Stage Selection Options
+.TP
+.B \-E
+Run the parsing stage only.
+Print the reconstructed ASN.1 text.
+.RS
+.RE
+.TP
+.B \-F
+Used together with \f[B]\-E\f[], instructs the compiler to stop after
+the ASN.1 syntax tree fixing stage and dump the reconstructed ASN.1
+specification to the standard output.
+.RS
+.RE
+.TP
+.B \-P
+Dump the compiled output to the standard output instead of creating the
+target language files on disk.
+.RS
+.RE
+.TP
+.B \-R
+Restrict the compiler to generate only the ASN.1 tables, omitting the
+usual support code.
+.RS
+.RE
+.TP
+.B \-S \f[I]directory\f[]
+Use the specified directory with ASN.1 skeleton files.
+.RS
+.RE
+.TP
+.B \-X
+Generate an XML DTD schema for the specified ASN.1 files.
+.RS
+.RE
+.SS Warning Options
+.TP
+.B \-Werror
+Treat warnings as errors; abort if any warning is produced.
+.RS
+.RE
+.TP
+.B \-Wdebug\-lexer
+Enable lexer debugging during the ASN.1 parsing stage.
+.RS
+.RE
+.TP
+.B \-Wdebug\-fixer
+Enable ASN.1 syntax tree fixer debugging during the fixing stage.
+.RS
+.RE
+.TP
+.B \-Wdebug\-compiler
+Enable debugging during the actual compile time.
+.RS
+.RE
+.SS Language Options
+.TP
+.B \-fbless\-SIZE
+Allow \f[C]SIZE()\f[] constraint for \f[C]INTEGER\f[],
+\f[C]ENUMERATED\f[], and other types for which this constraint is
+normally prohibited by the standard.
+This is a violation of ASN.1 standard, and the compiler may fail to
+produce a meaningful code.
+.RS
+.RE
+.TP
+.B \-fcompound\-names
+Using this option prevents name collisions in the target source code by
+using complex names for target language structures.
+(Name collisions may occur if the ASN.1 module reuses the same
+identifiers in multiple contexts).
+.RS
+.RE
+.TP
+.B \-findirect\-choice
+When generating code for a \f[C]CHOICE\f[] type, compile the
+\f[C]CHOICE\f[] members as indirect pointers instead of declaring them
+inline.
+Consider using this option together with \f[B]\-fno\-include\-deps\f[]
+to prevent circular references.
+.RS
+.RE
+.TP
+.B \-fincludes\-quoted
+Refer to header files in \f[C]#include\f[]s using
+\f[B]"\f[]double\f[B]"\f[] instead of \f[B]<\f[]angle\f[B]>\f[] quotes.
+.RS
+.RE
+.TP
+.B \-fknown\-extern\-type=\f[I]name\f[]
+Pretend the specified type is known.
+The compiler will assume the target language source files for the given
+type have been provided manually.
+.RS
+.RE
+.TP
+.B \-fline\-refs
+Include ASN.1 module\[aq]s line numbers in generated code comments.
+.RS
+.RE
+.TP
+.B \-fno\-constraints
+Do not generate ASN.1 subtype constraint checking code.
+This may make a shorter executable.
+.RS
+.RE
+.TP
+.B \-fno\-include\-deps
+Do not generate courtesy #include lines for non\-critical type
+dependencies.
+Helps prevent namespace collisions.
+.RS
+.RE
+.TP
+.B \-funnamed\-unions
+Enable unnamed unions in the definitions of target language\[aq]s
+structures.
+.RS
+.RE
+.TP
+.B \-fwide\-types
+Use the unbounded size data types (\f[C]INTEGER_t\f[],
+\f[C]ENUMERATED_t\f[], \f[C]REAL_t\f[]) by default, instead of using the
+native machine\[aq]s data types (long, double).
+.RS
+.RE
+.SS Codecs Generation Options
+.TP
+.B \-gen\-PER
+Generate the Packed Encoding Rules (PER) support code.
+.RS
+.RE
+.TP
+.B \-pdu={all|auto|\f[I]Type\f[]}
+Create a PDU table for specified types, or discover Protocol Data Units
+automatically.
+In case of \f[B]\-pdu=all\f[], all ASN.1 types defined in all modules
+will form a PDU table.
+In case of \f[B]\-pdu=auto\f[], all types not referenced by any other
+type will form a PDU table.
+If \f[I]Type\f[] is an ASN.1 type identifier, the identifier is added to
+the generated PDU table.
+The last form may be specified multiple times to add any number of PDUs.
+.RS
+.RE
+.SS Output Options
+.TP
+.B \-print\-constraints
+When \f[B]\-EF\f[] options are also specified, this option forces the
+compiler to explain its internal understanding of subtype constraints.
+.RS
+.RE
+.TP
+.B \-print\-lines
+Generate "\f[C]\-\-\ #line\f[]" comments in \f[B]\-E\f[] output.
+.RS
+.RE
+.SH SEE ALSO
+.PP
+\f[C]unber\f[](1), \f[C]enber\f[](1).
+.SH AUTHORS
+Lev Walkin <vlm@lionet.info>.
diff --git a/doc/man/asn1c.man.md b/doc/man/asn1c.man.md
new file mode 100644
index 0000000..afec71f
--- /dev/null
+++ b/doc/man/asn1c.man.md
@@ -0,0 +1,140 @@
+% asn1c(1) ASN.1 Compiler
+% Lev Walkin <vlm@lionet.info>
+% 2016-01-23
+
+# NAME
+
+asn1c -- the ASN.1 Compiler
+
+# SYNOPSIS
+
+asn1c [**-E** [**-F**] | **-P** | **-R**] \
+      [**-S***dir*] [**-X**] \
+      [**-W***debug-*...] [**-f***option*] [**-gen-***option*] 
+      [**-pdu**={**all**|**auto**|*Type*}] \
+      [**-print-***option*] \
+      *input-filenames*...
+
+# DESCRIPTION
+
+asn1c compiles ASN.1 specifications into a set of
+target language (C/C++) encoders and decoders for BER, DER, PER, XER
+and other encoding rules.
+
+# OPTIONS
+
+## Stage Selection Options
+
+-E
+:   Run the parsing stage only. Print the reconstructed ASN.1 text.
+
+-F
+:   Used together with **-E**,
+    instructs the compiler to stop after the ASN.1 syntax
+    tree fixing stage and dump the reconstructed ASN.1 specification
+    to the standard output.
+
+-P
+:   Dump the compiled output to the standard output instead of creating the
+    target language files on disk.
+
+-R
+:   Restrict the compiler to generate only the ASN.1 tables,
+    omitting the usual support code.
+
+-S *directory*
+:   Use the specified directory with ASN.1 skeleton files.
+
+-X
+:   Generate an XML DTD schema for the specified ASN.1 files.
+
+## Warning Options
+
+-Werror
+:   Treat warnings as errors; abort if any warning is produced.
+
+-Wdebug-lexer
+:   Enable lexer debugging during the ASN.1 parsing stage.
+
+-Wdebug-fixer
+:   Enable ASN.1 syntax tree fixer debugging during the fixing stage.
+
+-Wdebug-compiler
+:   Enable debugging during the actual compile time.
+
+## Language Options
+
+-fbless-SIZE
+:   Allow `SIZE()` constraint for `INTEGER`, `ENUMERATED`,
+    and other types for which this constraint is normally prohibited
+    by the standard.
+    This is a violation of ASN.1 standard, and the compiler may
+    fail to produce a meaningful code.
+
+-fcompound-names
+:   Using this option prevents name collisions in the target source code
+    by using complex names for target language structures.
+    (Name collisions may occur if the ASN.1 module reuses the same identifiers
+    in multiple contexts).
+
+-findirect-choice
+:   When generating code for a `CHOICE` type, compile the `CHOICE` members
+    as indirect pointers instead of declaring them inline.
+    Consider using this option together with **-fno-include-deps**
+    to prevent circular references.
+
+-fincludes-quoted
+:   Refer to header files in `#include`s using **"**double**"** instead of **\<**angle**>** quotes.
+
+-fknown-extern-type=*name*
+:   Pretend the specified type is known.
+    The compiler will assume the target language source files
+    for the given type have been provided manually.
+
+-fline-refs
+:   Include ASN.1 module's line numbers in generated code comments.
+
+-fno-constraints
+:   Do not generate ASN.1 subtype constraint checking code.
+    This may make a shorter executable.
+
+-fno-include-deps
+:   Do not generate courtesy #include lines for non-critical type dependencies.
+    Helps prevent namespace collisions.
+
+-funnamed-unions
+:   Enable unnamed unions in the definitions of target language's structures.
+
+-fwide-types
+:   Use the unbounded size data types (`INTEGER_t`, `ENUMERATED_t`, `REAL_t`)
+    by default, instead of using the native machine's data types (long, double).
+
+## Codecs Generation Options
+
+-gen-PER
+:   Generate the Packed Encoding Rules (PER) support code.
+
+-pdu={all|auto|*Type*}
+:   Create a PDU table for specified types, or discover Protocol Data Units
+    automatically. In case of **-pdu=all**,
+    all ASN.1 types defined in all modules will form a PDU table.
+    In case of **-pdu=auto**, all types not referenced by any other type will
+    form a PDU table.
+    If *Type* is an ASN.1 type identifier, the identifier is added to
+    the generated PDU table.
+    The last form may be specified multiple times to add any number of PDUs.
+
+## Output Options
+
+-print-constraints
+:   When **-EF** options are also specified,
+    this option forces the compiler to explain its internal understanding
+    of subtype constraints.
+
+-print-lines
+:   Generate "`-- #line`" comments in **-E** output.
+
+# SEE ALSO
+
+`unber`(1), `enber`(1).
+
diff --git a/doc/man/enber.1 b/doc/man/enber.1
new file mode 100644
index 0000000..827c211
--- /dev/null
+++ b/doc/man/enber.1
@@ -0,0 +1,71 @@
+.\" Automatically generated by Pandoc 1.16.0.2
+.\"
+.ad l
+.TH "enber" "1" "2016\-01\-23" "unber(1) counterpart" "Version 0.9.28"
+.nh \" Turn off hyphenation by default.
+.SH NAME
+.PP
+enber \-\- Convert the unber XML output back into BER
+.SH SYNOPSIS
+.PP
+enber [\f[B]\-n\f[]] [\f[B]\-\f[]] [\f[I]input\-filenames\f[]...]
+.SH DESCRIPTION
+.PP
+enber converts the XML\-formatted files produced by \f[C]unber\f[](1)
+back into the BER format.
+A single dash denotes the standard input.
+.SH OPTIONS
+.TP
+.B \-n
+Disable input validation.
+By default, enber performs some basic validity checks against XML input.
+.RS
+.RE
+.SH EXAMPLES
+.PP
+Decode a BER sequence and immediately encode it back
+.RS
+.PP
+unber \f[B]\-p\f[] \f[I]filename.ber\f[] | enber \f[B]\-\f[] >
+\f[I]reconstructed.ber\f[]
+.RE
+.SH FOOTNOTES
+.PP
+This program does not attempt to perform full\-fledged XML parsing.
+It is merely compatible with \f[C]unber\f[](1)\[aq]s output.
+In particular, the XML style comments are not supported.
+A hash "\f[B]#\f[]" or two dashes "\f[B]\-\-\f[]" following a whitespace
+is treated as a beginning of a comment line, which is ignored
+completely.
+Empty lines are ignored as well.
+.PP
+The following example \f[C]enber\f[](1) input demostrates the use of
+comments:
+.PP
+<C O="0" T="[1]" TL="2" V="2">
+.PD 0
+.P
+.PD
+\ \ \ \ <I O="2" T="[1]" TL="2" V="Indefinite">
+.PD 0
+.P
+.PD
+\ \ \ \ \f[B]\-\-\f[] </I O="4" T="[UNIVERSAL 0]" L="4">
+.PD 0
+.P
+.PD
+\ \ \ \ \f[B]#\f[] Do not terminate:
+.PD 0
+.P
+.PD
+\ \ \ \ \f[B]#\f[] the absence of end\-of\-content octets is
+intentional!
+.PD 0
+.P
+.PD
+</C O="6" T="[1]" L="6">
+.SH SEE ALSO
+.PP
+\f[C]unber\f[](1), \f[C]asn1c\f[](1).
+.SH AUTHORS
+Lev Walkin <vlm@lionet.info>.
diff --git a/doc/man/enber.man.md b/doc/man/enber.man.md
new file mode 100644
index 0000000..2bdb036
--- /dev/null
+++ b/doc/man/enber.man.md
@@ -0,0 +1,50 @@
+% enber(1) unber(1) counterpart
+% Lev Walkin <vlm@lionet.info>
+% 2016-01-23
+
+# NAME
+
+enber -- Convert the unber XML output back into BER
+
+# SYNOPSIS
+
+enber [**-n**] [**-**] [*input-filenames*...]
+
+# DESCRIPTION
+
+enber converts the XML-formatted files produced by `unber`(1) back into the BER format.
+A single dash denotes the standard input.
+
+# OPTIONS
+
+-n
+:   Disable input validation.
+By default, enber performs some basic validity checks
+against XML input.
+
+# EXAMPLES
+
+Decode a BER sequence and immediately encode it back
+
+> unber **-p** *filename.ber* | enber **-** > *reconstructed.ber*
+
+# FOOTNOTES
+
+This program does not attempt to perform full-fledged XML parsing.
+It is merely compatible with `unber`(1)'s output.
+In particular, the XML style comments are not supported.
+A hash "**#**" or two dashes "**--**" following a whitespace is treated as a beginning of a comment line, which is ignored completely.
+Empty lines are ignored as well.
+
+The following example `enber`(1) input demostrates the use of comments:
+
+| \<C O="0" T="[1]" TL="2" V="2">
+|     \<I O="2" T="[1]" TL="2" V="Indefinite">
+|     **--** \</I O="4" T="[UNIVERSAL 0]" L="4">
+|     **#** Do not terminate:
+|     **#** the absence of end-of-content octets is intentional!
+| \</C O="6" T="[1]" L="6">
+
+# SEE ALSO
+
+`unber`(1), `asn1c`(1).
diff --git a/doc/man/unber.1 b/doc/man/unber.1
new file mode 100644
index 0000000..8f787b4
--- /dev/null
+++ b/doc/man/unber.1
@@ -0,0 +1,181 @@
+.\" Automatically generated by Pandoc 1.16.0.2
+.\"
+.ad l
+.TH "unber" "1" "2016\-01\-23" "ASN.1 BER Decoder" "Version 0.9.28"
+.nh \" Turn off hyphenation by default.
+.SH NAME
+.PP
+unber \-\- the ASN.1 BER Decoder
+.SH SYNOPSIS
+.PP
+unber [\f[B]\-1\f[]] [\f[B]\-i\f[]\f[I]indent\f[]] [\f[B]\-m\f[]]
+[\f[B]\-p\f[]] [\f[B]\-s\f[]\f[I]skip\f[]]
+[\f[B]\-t\f[]\f[I]hex\-string\f[]] [\f[B]\-\f[]]
+[\f[I]input\-filenames\f[]...]
+.SH DESCRIPTION
+.PP
+unber presents the internal structure of BER\-encoded files as a human
+readable text.
+A single dash denotes the standard input.
+.PP
+(The DER and CER formats are subsets of the BER and are also supported.)
+.SH OPTIONS
+.TP
+.B \-1
+Do \f[I]not\f[] attempt to read the next BER structure after the first
+one.
+This may be useful if the input contains garbage past the single BER
+sequence.
+By default, unber continues decoding until the end of file (input
+stream).
+.RS
+.RE
+.TP
+.B \-i \f[I]indent\f[]
+Use the specified number of spaces for output indentation.
+Default is 4 spaces.
+.RS
+.RE
+.TP
+.B \-m
+Generate shorter output while still preserving BER encoding information.
+.RS
+.RE
+.TP
+.B \-p
+Do \f[I]not\f[] attempt to pretty\-print known ASN.1 types
+(\f[C]BOOLEAN\f[], \f[C]INTEGER\f[], \f[C]OBJECT\ IDENTIFIER\f[], etc).
+By default, some ASN.1 types are converted into the text representation.
+.RS
+.PP
+This option is required if the \f[C]unber\f[](1) output is used as an
+input to \f[C]enber\f[](1).
+.RE
+.TP
+.B \-s \f[I]skip\f[]
+Ignore the first \f[I]skip\f[] bytes in the input stream; useful for
+stripping off lower level protocol framing data.
+.RS
+.RE
+.TP
+.B \-t \f[I]hex\-string\f[]
+Interpret the hex\-string as a sequence of hexadecimal values
+representing the start of BER TLV encoding.
+Print the human readable explanation.
+.RS
+.RE
+.SH XML FORMAT
+.PP
+unber dumps the output in the regular XML format which preserves most of
+the information from the underlying binary encoding.
+.PP
+The XML opening tag format is as follows:
+.PP
+<\f[B]tform\f[] O="\f[B]off\f[]" T="\f[B]tag\f[]" TL="\f[B]t_len\f[]"
+V="{Indefinite|\f[B]v_len\f[]}" [A="\f[B]type\f[]"] [\f[B]F\f[]]>
+.PP
+Where:
+.TP
+.B \f[B]tform\f[]
+Encoding form the value is in: primitive ("P") or constructed ("C") or
+constructed with indefinite length ("I")
+.RS
+.RE
+.TP
+.B \f[B]off\f[]
+Offset of the encoded element in the unber input stream.
+.RS
+.RE
+.TP
+.B \f[B]tag\f[]
+The tag class and value in human readable form.
+.RS
+.RE
+.TP
+.B \f[B]t_len\f[]
+The length of the TL (BER Tag and Length) encoding.
+.RS
+.RE
+.TP
+.B \f[B]v_len\f[]
+The length of the value (V, encoded by the L), may be "Indefinite".
+.RS
+.RE
+.TP
+.B \f[B]type\f[]
+Likely name of the underlying ASN.1 type (for UNIVERSAL tags).
+.RS
+.RE
+.TP
+.B [\f[B]F\f[]]
+Indicates that the value was reformatted (pretty\-printed).
+This will never appear in the output produced using the \f[B]\-p\f[]
+command line option.
+.RS
+.RE
+.SS Example XML output:
+.PP
+<I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
+.PD 0
+.P
+.PD
+\ <P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">US</P>
+.PD 0
+.P
+.PD
+\ \ <C O="6" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
+.PD 0
+.P
+.PD
+\ \ \ \ <P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER"
+F>832970823</P>
+.PD 0
+.P
+.PD
+\ \ </C O="14" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
+.PD 0
+.P
+.PD
+</I O="14" T="[UNIVERSAL 0]" TL="2" L="16">
+.SH EXAMPLES
+.PP
+Decode the given Tag/Length sequence specified in hexadecimal form:
+.RS
+.PP
+unber\  \f[B]\-t\f[] "\f[I]bf 20\f[]"
+.RE
+.PP
+Decode the DER file using two\-spaces indentation:
+.RS
+.PP
+unber\  \f[B]\-i\f[] \f[I]2\f[]\  \f[I]filename.der\f[]
+.RE
+.PP
+Decode the binary stream taken from the standard input:
+.RS
+.PP
+cat \f[I]filename.der\f[] | unber \f[B]\-\f[]
+.RE
+.PP
+Decode the binary stream and encode it back into an identical stream
+(see \f[C]enber\f[](1)):
+.RS
+.PP
+cat \f[I]filename.der\f[] | unber \f[B]\-p\f[] \f[B]\-\f[] | enber
+\f[B]\-\f[] > \f[I]filename.ber\f[]
+.RE
+.SH FOOTNOTES
+.PP
+The constructed XML output is not necessarily well\-formed.
+.PP
+When indefinite length encoding is being used, the BER sequence which is
+not terminated with the end\-of\-content octets will cause the
+terminating \f[B]</I>\f[] XML tag to disappear.
+Thus, invalid BER framing directly causes invalid XML output.
+.PP
+The \f[C]enber\f[](1) utility understands such XML correctly.
+.SH SEE ALSO
+.PP
+\f[C]enber\f[](1), \f[C]asn1c\f[](1).
+.SH AUTHORS
+Lev Walkin <vlm@lionet.info>.
diff --git a/doc/man/unber.man.md b/doc/man/unber.man.md
new file mode 100644
index 0000000..b110eb8
--- /dev/null
+++ b/doc/man/unber.man.md
@@ -0,0 +1,121 @@
+% unber(1) ASN.1 BER Decoder
+% Lev Walkin <vlm@lionet.info>
+% 2016-01-23
+
+# NAME
+
+unber -- the ASN.1 BER Decoder
+
+# SYNOPSIS
+
+unber [**-1**] [**-i***indent*] [**-m**] [**-p**] [**-s***skip*] [**-t***hex-string*] [**-**] [*input-filenames*...]
+
+# DESCRIPTION
+
+unber presents the internal structure of BER-encoded files as a human readable text.
+A single dash denotes the standard input.
+
+(The DER and CER formats are subsets of the BER and are also supported.)
+
+# OPTIONS
+
+-1
+:   Do *not* attempt to read the next BER structure after the first one.
+    This may be useful if the input contains garbage past the single BER sequence.
+    By default, unber continues decoding until the end of file (input stream).
+
+-i *indent*
+:   Use the specified number of spaces for output indentation.
+    Default is 4 spaces.
+
+-m
+:   Generate shorter output while still preserving BER encoding information.
+
+-p
+:   Do *not* attempt to pretty-print known ASN.1 types (`BOOLEAN`, `INTEGER`, `OBJECT IDENTIFIER`, etc).
+    By default, some ASN.1 types are converted into the text representation.
+
+    This option is required if the `unber`(1) output is used as an input to `enber`(1).
+
+-s *skip*
+:   Ignore the first *skip* bytes in the input stream;
+    useful for stripping off lower level protocol framing data.
+
+-t *hex-string*
+:   Interpret the hex-string as a sequence of hexadecimal values representing
+    the start of BER TLV encoding.
+    Print the human readable explanation.
+
+# XML FORMAT
+unber dumps the output in the regular XML format which preserves most of the
+information from the underlying binary encoding.
+
+The XML opening tag format is as follows:
+
+<**tform** O="**off**" T="**tag**" TL="**t_len**" V="{Indefinite|**v_len**}" [A="**type**"] [**F**]>
+
+Where:
+
+**tform**
+:   Encoding form the value is in: primitive ("P") or constructed ("C") or constructed with indefinite length ("I")
+
+**off**
+:   Offset of the encoded element in the unber input stream.
+
+**tag**
+:   The tag class and value in human readable form.
+
+**t_len**
+:   The length of the TL (BER Tag and Length) encoding.
+
+**v_len**
+:   The length of the value (V, encoded by the L), may be "Indefinite".
+
+**type**
+:   Likely name of the underlying ASN.1 type (for UNIVERSAL tags).
+
+[**F**]
+:   Indicates that the value was reformatted (pretty-printed).
+This will never appear in the output produced using the **-p**
+command line option.
+
+## Example XML output:
+
+| \<I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
+|  \<P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">US\</P>
+|   \<C O="6" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
+|     \<P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER" F>832970823\</P>
+|   \</C O="14" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
+| \</I O="14" T="[UNIVERSAL 0]" TL="2" L="16">
+
+# EXAMPLES
+
+Decode the given Tag/Length sequence specified in hexadecimal form:
+
+> unber\  **-t** "*bf 20*"
+
+Decode the DER file using two-spaces indentation:
+
+> unber\  **-i** *2*\   *filename.der*
+
+Decode the binary stream taken from the standard input:
+
+> cat *filename.der* | unber **-**
+
+Decode the binary stream and encode it back into an identical stream (see `enber`(1)):
+
+> cat *filename.der* | unber **-p** **-** | enber **-** > *filename.ber*
+
+# FOOTNOTES
+The constructed XML output is not necessarily well-formed.
+
+When indefinite length encoding is being used, the BER sequence which is not
+terminated with the end-of-content octets will cause the terminating **\</I>**
+XML tag to disappear.
+Thus, invalid BER framing directly causes invalid XML output.
+
+The `enber`(1) utility understands such XML correctly.
+
+# SEE ALSO
+
+`enber`(1), `asn1c`(1).