per encoding


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1141 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/skeletons/converter-sample.c b/skeletons/converter-sample.c
index 3a76b76..e5ab8da 100644
--- a/skeletons/converter-sample.c
+++ b/skeletons/converter-sample.c
@@ -52,7 +52,8 @@
 /* Output data format selector */
 static enum output_format {
 	OUT_XER,	/* -oxer: XER (XML) output */
-	OUT_DER,	/* -oder: DER output */
+	OUT_DER,	/* -oder: DER (BER) output */
+	OUT_PER,	/* -oper: Unaligned PER output */
 	OUT_TEXT,	/* -otext: semi-structured text */
 	OUT_NULL	/* -onull: No pretty-printing */
 } oform;	/* -o<format> */
@@ -91,15 +92,17 @@
 		if(optarg[0] == 'x') { iform = INP_XER; break; }
 		if(pduType->uper_decoder
 		&& optarg[0] == 'p') { iform = INP_PER; break; }
-		fprintf(stderr, "-i<format>: '%s': improper format selector",
+		fprintf(stderr, "-i<format>: '%s': improper format selector\n",
 			optarg);
 		exit(EX_UNAVAILABLE);
 	case 'o':
 		if(optarg[0] == 'd') { oform = OUT_DER; break; }
+		if(pduType->uper_encoder
+		&& optarg[0] == 'p') { oform = OUT_PER; break; }
 		if(optarg[0] == 'x') { oform = OUT_XER; break; }
 		if(optarg[0] == 't') { oform = OUT_TEXT; break; }
 		if(optarg[0] == 'n') { oform = OUT_NULL; break; }
-		fprintf(stderr, "-o<format>: '%s': improper format selector",
+		fprintf(stderr, "-o<format>: '%s': improper format selector\n",
 			optarg);
 		exit(EX_UNAVAILABLE);
 	case 'p':
@@ -161,7 +164,11 @@
 		"  -iber        Input is in BER (Basic Encoding Rules)%s\n",
 			iform == INP_PER ? "" : " (DEFAULT)");
 		fprintf(stderr,
-		"  -ixer        Input is in XER (XML Encoding Rules)\n"
+		"  -ixer        Input is in XER (XML Encoding Rules)\n");
+		if(pduType->uper_encoder)
+		fprintf(stderr,
+		"  -oper        Output in Unaligned PER (Packed Encoding Rules)\n");
+		fprintf(stderr,
 		"  -oder        Output in DER (Distinguished Encoding Rules)\n"
 		"  -oxer        Output in XER (XML Encoding Rules) (DEFAULT)\n"
 		"  -otext       Output in plain semi-structured text (dump)\n"
@@ -247,6 +254,14 @@
 				exit(EX_UNAVAILABLE);
 			}
 			break;
+		case OUT_PER:
+			erv = uper_encode(pduType, structure, write_out, stdout);
+			if(erv.encoded < 0) {
+				fprintf(stderr, "%s: Cannot convert into Unaligned PER\n",
+					fname);
+				exit(EX_UNAVAILABLE);
+			}
+			break;
 		}
 
 		ASN_STRUCT_FREE(*pduType, structure);