naming abstraction
diff --git a/libasn1compiler/asn1c_naming.h b/libasn1compiler/asn1c_naming.h
new file mode 100644
index 0000000..2e0e88d
--- /dev/null
+++ b/libasn1compiler/asn1c_naming.h
@@ -0,0 +1,19 @@
+#ifndef ASN1_COMPILER_NAMING_H
+#define ASN1_COMPILER_NAMING_H
+
+struct c_names {
+ const char *base_name; /* "foo" */
+ const char *short_name; /* "foo_t", "e_foo" */
+ const char *full_name; /* "struct foo", "enum foo" */
+ const char *as_member; /* "foo" (not compounded) */
+ const char *presence_enum; /* "enum foo_PR" */
+ const char *presence_name; /* "foo_PR" */
+ const char *members_enum; /* "enum foo" */
+ const char *members_name; /* "e_foo" */
+};
+
+struct c_names c_name(arg_t *);
+const char *c_member_name(arg_t *, asn1p_expr_t *); /* %s_%s */
+const char *c_presence_name(arg_t *, asn1p_expr_t *); /* %s_PR_%s */
+
+#endif /* ASN1_COMPILER_NAMING_H */