1 /* 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 7 struct asn1p_module_s; 8 9 /* 10 * A simple container for several modules. 11 */ 12 typedef struct asn1p_s { 13 TQ_HEAD(struct asn1p_module_s) modules; 14 } asn1p_t; 15 16 asn1p_t *asn1p_new(void); 17 void asn1p_delete(asn1p_t *asn); 18 19 /* 20 * Flags specific to a module. 21 */ 22 typedef enum asn1p_module_flags { 23 MSF_NOFLAGS, 24 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, 31 } asn1p_module_flags_e; 32 #define MSF_MASK_INSTRUCTIONS 0x0f 33 #define MSF_MASK_TAGS 0xf0 34 35 /* 36 * === EXAMPLE === 37 * MySyntax DEFINITIONS AUTOMATIC TAGS ::= 38 * BEGIN 39 * ... 40 * END 41 * === EOF === 42 */ 43 typedef struct asn1p_module_s { 44 45 /* 46 * Name of the source file. 47 */ 48 char *source_file_name; 49 50 /* 51 * Human-readable module reference. 52 */ 53 char *ModuleName; 54 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 /* 66 * List of everything that this module EXPORTS. 67 */ 68 TQ_HEAD(struct asn1p_xports_s) exports; 69 70 /* 71 * List of everything that this module IMPORTS. 72 */ 73 TQ_HEAD(struct asn1p_xports_s) imports; 74 75 /* 76 * 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 86 /* All modules */ 87 asn1p_t *asn1p; 88 89 /* 90 * Internally useful properties. 91 */ 92 enum { 93 MT_STANDARD_MODULE = 0x01, /* Module came from standard-modules */ 94 } _tags; 95 } asn1p_module_t; 96 97 /* 98 * Constructor and destructor. 99 */ 100 asn1p_module_t *asn1p_module_new(void); 101 void asn1p_module_free(asn1p_module_t *mod); 102 103 #endif /* ASN1_PARSER_MODULE_H */ 104