blob: 25dcf1e7ec326f0cd9321d16b15169d7527b1f76 [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001/*
2 * A Module definition structure used by the ASN.1 parser.
3 */
4#ifndef ASN1_PARSER_MODULE_H
5#define ASN1_PARSER_MODULE_H
6
vlm43c8ac52006-09-17 04:52:50 +00007struct asn1p_module_s;
8
9/*
10 * A simple container for several modules.
11 */
12typedef struct asn1p_s {
13 TQ_HEAD(struct asn1p_module_s) modules;
14} asn1p_t;
15
16asn1p_t *asn1p_new(void);
17void asn1p_delete(asn1p_t *asn);
18
vlmfa67ddc2004-06-03 03:38:44 +000019/*
20 * Flags specific to a module.
21 */
22typedef enum asn1p_module_flags {
23 MSF_NOFLAGS,
vlm9283dbe2004-08-18 04:59:12 +000024 MSF_unk_INSTRUCTIONS = 0x001,
25 MSF_TAG_INSTRUCTIONS = 0x002,
26 MSF_XER_INSTRUCTIONS = 0x004,
27 MSF_EXPLICIT_TAGS = 0x010,
28 MSF_IMPLICIT_TAGS = 0x020,
29 MSF_AUTOMATIC_TAGS = 0x040,
30 MSF_EXTENSIBILITY_IMPLIED = 0x100,
vlmfa67ddc2004-06-03 03:38:44 +000031} asn1p_module_flags_e;
vlm9283dbe2004-08-18 04:59:12 +000032#define MSF_MASK_INSTRUCTIONS 0x0f
33#define MSF_MASK_TAGS 0xf0
vlmfa67ddc2004-06-03 03:38:44 +000034
35/*
36 * === EXAMPLE ===
37 * MySyntax DEFINITIONS AUTOMATIC TAGS ::=
38 * BEGIN
39 * ...
40 * END
41 * === EOF ===
42 */
43typedef struct asn1p_module_s {
44
45 /*
46 * Name of the source file.
47 */
48 char *source_file_name;
49
50 /*
vlm931aeed2005-08-12 10:09:10 +000051 * Human-readable module reference.
vlmfa67ddc2004-06-03 03:38:44 +000052 */
vlm931aeed2005-08-12 10:09:10 +000053 char *ModuleName;
vlmfa67ddc2004-06-03 03:38:44 +000054
55 /*
56 * Unique module identifier, OID.
57 */
58 asn1p_oid_t *module_oid; /* Optional OID of the module */
59
60 /*
61 * Module flags.
62 */
63 asn1p_module_flags_e module_flags; /* AUTOMATIC TAGS? */
64
65 /*
vlmfa67ddc2004-06-03 03:38:44 +000066 * List of everything that this module EXPORTS.
67 */
68 TQ_HEAD(struct asn1p_xports_s) exports;
69
70 /*
vlmd3420d32006-09-14 10:35:20 +000071 * List of everything that this module IMPORTS.
72 */
73 TQ_HEAD(struct asn1p_xports_s) imports;
74
75 /*
vlmfa67ddc2004-06-03 03:38:44 +000076 * List of everything that this module defines itself.
77 */
78 TQ_HEAD(struct asn1p_expr_s) members;
79
80 /*
81 * Next module in the list.
82 */
83 TQ_ENTRY(struct asn1p_module_s)
84 mod_next;
85
vlm43c8ac52006-09-17 04:52:50 +000086 /* All modules */
87 asn1p_t *asn1p;
88
vlmd02739b2006-03-06 13:05:34 +000089 /*
90 * Internally useful properties.
91 */
92 enum {
93 MT_STANDARD_MODULE = 0x01, /* Module came from standard-modules */
94 } _tags;
vlmfa67ddc2004-06-03 03:38:44 +000095} asn1p_module_t;
96
97/*
98 * Constructor and destructor.
99 */
100asn1p_module_t *asn1p_module_new(void);
101void asn1p_module_free(asn1p_module_t *mod);
102
vlmfa67ddc2004-06-03 03:38:44 +0000103#endif /* ASN1_PARSER_MODULE_H */