constness
diff --git a/doc/docsrc/asn_dec_rval.inc b/doc/docsrc/asn_dec_rval.inc
new file mode 100644
index 0000000..82b8551
--- /dev/null
+++ b/doc/docsrc/asn_dec_rval.inc
@@ -0,0 +1,23 @@
+The return value is returned in a compound structure:
+\begin{codesample}
+typedef struct {
+    enum {
+        RC_OK,          /* Decoded successfully */
+        RC_WMORE,       /* More data expected, call again */
+        RC_FAIL         /* Failure to decode data */
+    } code;             /* Result code */
+    size_t consumed;    /* Number of bytes consumed */
+} asn_dec_rval_t;
+\end{codesample}
+
+The \code{.code} member specifies the decoding outcome.
+
+\begin{description}[labelindent=\parindent]
+\item[RC\_OK] Decoded successfully and completely
+\item[RC\_WMORE] More data expected, call again
+\item[RC\_FAIL] Failed for good
+\end{description}
+
+The \code{.consumed} member specifies the amount of \code{buffer} data
+that was used during parsing, irrespectively of the \code{.code}.
+
diff --git a/skeletons/constr_TYPE.c b/skeletons/constr_TYPE.c
index 7a135ce..aefaefd 100644
--- a/skeletons/constr_TYPE.c
+++ b/skeletons/constr_TYPE.c
@@ -33,22 +33,25 @@
  * Print the target language's structure in human readable form.
  */
 int
-asn_fprint(FILE *stream, asn_TYPE_descriptor_t *td, const void *struct_ptr) {
-	if(!stream) stream = stdout;
-	if(!td || !struct_ptr) {
-		errno = EINVAL;
-		return -1;
+asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td,
+           const void *struct_ptr) {
+    if(!stream) stream = stdout;
+    if(!td || !struct_ptr) {
+        errno = EINVAL;
+        return -1;
 	}
 
 	/* Invoke type-specific printer */
-	if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream))
-		return -1;
+    if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) {
+        return -1;
+    }
 
-	/* Terminate the output */
-	if(_print2fp("\n", 1, stream))
-		return -1;
+    /* Terminate the output */
+    if(_print2fp("\n", 1, stream)) {
+        return -1;
+    }
 
-	return fflush(stream);
+    return fflush(stream);
 }
 
 /* Dump the data into the specified stdio stream */
diff --git a/skeletons/constr_TYPE.h b/skeletons/constr_TYPE.h
index d9d55c2..31102f5 100644
--- a/skeletons/constr_TYPE.h
+++ b/skeletons/constr_TYPE.h
@@ -242,17 +242,16 @@
 } asn_TYPE_tag2member_t;
 
 /*
- * This function is a wrapper around (td)->print_struct, which prints out
- * the contents of the target language's structure (struct_ptr) into the
- * file pointer (stream) in human readable form.
+ * This function prints out the contents of the target language's structure
+ * (struct_ptr) into the file pointer (stream) in human readable form.
  * RETURN VALUES:
  * 	 0: The structure is printed.
  * 	-1: Problem dumping the structure.
  * (See also xer_fprint() in xer_encoder.h)
  */
-int asn_fprint(FILE *stream,		/* Destination stream descriptor */
-	asn_TYPE_descriptor_t *td,	/* ASN.1 type descriptor */
-	const void *struct_ptr);	/* Structure to be printed */
+int asn_fprint(FILE *stream, /* Destination stream descriptor */
+               const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */
+               const void *struct_ptr);         /* Structure to be printed */
 
 #ifdef __cplusplus
 }