blob: 2aeb82befbde8b6d35c24a14b98f2b0d3dbb1365 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001/*
2 * Miscellaneous functions necessary for several other modules.
3 */
4#ifndef _ASN1FIX_RETRIEVE_H_
5#define _ASN1FIX_RETRIEVE_H_
6
7/*
8 * Simple search for the label in the descendants of the given node.
9 * ERRORS:
10 * NULL/ESRCH
11 */
12asn1p_expr_t *asn1f_lookup_child(asn1p_expr_t *tc, const char *name);
13
14/*
15 * Return a module which contain a specified name, as stated in appropriate
16 * IMPORTS section of the current module (arg->mod).
17 *
18 * RETURN VALUES:
19 * NULL/ESRCH: The name was not found in IMPORTS section.
20 * NULL/EPERM: The name was not found in EXPORTS section of the source module.
21 * Also, NULL with errno values defined by asn1f_lookup_module().
22 */
Lev Walkin225d8872004-09-15 11:48:47 +000023asn1p_module_t *asn1f_lookup_in_imports(arg_t *arg, asn1p_module_t *mod, const char *name);
Lev Walkinf15320b2004-06-03 03:38:44 +000024
25/*
26 * Return a module by its name or optional OID.
27 *
28 * RETURN VALUES:
29 * NULL/ENOENT: No module was found by the specified name and oid
30 * NULL/ETOOMANYREFS: Several modules are matching the specified name and oid
31 */
32asn1p_module_t *asn1f_lookup_module(arg_t *arg,
33 const char *module_name,
34 asn1p_oid_t *module_oid);
35
36/*
37 * Return the reference to a destination of the given reference,
38 * symbol lookup. Not a recursive function.
Lev Walkinf15320b2004-06-03 03:38:44 +000039 */
Lev Walkin6fec44d2004-08-22 03:10:23 +000040asn1p_expr_t *asn1f_lookup_symbol(arg_t *arg,
41 asn1p_module_t *mod,
Lev Walkina00d6b32006-03-21 03:40:38 +000042 asn1p_expr_t *rhs_pspecs,
Lev Walkin6fec44d2004-08-22 03:10:23 +000043 asn1p_ref_t *ref);
Lev Walkinf15320b2004-06-03 03:38:44 +000044
45/*
46 * Recursively find the original type for the given expression.
47 * i.e.:
48 * If the original specification defines
49 * v Type1 ::= 5
50 * Type1 ::= Type2 (1..5)
51 * Type3 ::= Type4 (2..7)
52 * Type4 ::= INTEGER (1..10)
53 * Then this function, given the the first expression as an argument,
54 * would return an expression for Type4.
55 * WARNING: No attempts are made to honor constraints at this moment.
56 */
Lev Walkin6fec44d2004-08-22 03:10:23 +000057asn1p_expr_t *asn1f_find_terminal_type(arg_t *arg, asn1p_expr_t *tc);
Lev Walkinf15320b2004-06-03 03:38:44 +000058
59/*
60 * Recursively find the original value for the given expression.
61 * i.e.:
62 * If the original specification defines
63 * v Type1 ::= value
64 * value Type2 ::= value2
65 * value2 Type3 ::= 3
66 * Then this function will return the expression for value2 if given
67 * the v as an argment.
68 */
Lev Walkin6fec44d2004-08-22 03:10:23 +000069asn1p_expr_t *asn1f_find_terminal_value(arg_t *arg, asn1p_expr_t *tc);
Lev Walkinf15320b2004-06-03 03:38:44 +000070
71#endif /* _ASN1FIX_RETRIEVE_H_ */