|
|
1.1 root 1: /* pepsy.h */
2:
3: /*
4: * $Header: /f/osi/h/RCS/pepsy.h,v 7.1 90/07/09 14:37:55 mrose Exp $
5: *
6: *
7: * $Log: pepsy.h,v $
8: * Revision 7.1 90/07/09 14:37:55 mrose
9: * sync
10: *
11: * Revision 7.0 90/07/01 19:52:37 mrose
12: * *** empty log message ***
13: *
14: */
15:
16: /*
17: * NOTICE
18: *
19: * Acquisition, use, and distribution of this module and related
20: * materials are subject to the restrictions of a license agreement.
21: * Consult the Preface in the User's Manual for the full terms of
22: * this agreement.
23: *
24: */
25:
26:
27: #ifndef PEPSY_DEFINITIONS
28: #define PEPSY_DEFINITIONS
29: /*
30: * Definitions for pep tables
31: */
32:
33: typedef struct {
34: int pe_type; /* Type of entry */
35: int pe_ucode; /* index to user's code if any */
36: int pe_tag; /* Tag of this entry if any */
37: int pe_flags; /* Flags */
38: } tpe;
39: #define NULLTPE ((tpe *)0)
40:
41: typedef struct {
42: int pe_type; /* Type of entry */
43: int pe_ucode; /* index to user's code if any */
44: int pe_tag; /* Tag of this entry if any */
45: int pe_flags; /* Flags */
46: char *pe_typename; /* User defined name of variable */
47: } ptpe;
48: #define NULLPTPE ((ptpe *)0)
49:
50: /* extract a pointer from the pointer table */
51: #define GPTR(mod, ind, type) ((type )(mod)->md_ptrtab[ind])
52: /* tricky situation with the "type" - it must not contain the brackets of the
53: * cast because we supply them here
54: */
55:
56: /* macros for getting values of default flexibly */
57: #define IVAL(mod, x) ((x)->pe_ucode) /* Integer value */
58: #define PVAL(mod, x) (GPTR(mod, (x)->pe_tag, char *)) /* (char *) */
59: #define TVAL(mod, x) ((x)->pe_flags) /* Type - Integer value */
60: #define RVAL(mod, x) (*GPTR(mod, (x)->pe_tag, double *)) /* double */
61:
62: /* macros for getting other more general pointers transparently */
63: #define EXT2MOD(mod, x) (GPTR(mod, (x)->pe_ucode, modtyp *))
64:
65: /* Types */
66: #define PE_START (-1)
67: #define PE_END 0
68: #define XOBJECT 3
69: #define UCODE 6
70: #define MALLOC 7
71: #define SCTRL 8
72: #define CH_ACT 9
73: #define OPTL 10 /* Optionals field offset */
74:
75: /* types that generate data */
76: #define TYPE_DATA 20
77:
78: #define ANY (TYPE_DATA + 0)
79: #define INTEGER (TYPE_DATA + 1)
80: #define BOOLEAN (TYPE_DATA + 2)
81: #define OBJECT (TYPE_DATA + 3) /* This generates data */
82: #define BITSTRING (TYPE_DATA + 4)
83: #define OCTETSTRING (TYPE_DATA + 5)
84: #define SET_START (TYPE_DATA + 6)
85: #define SEQ_START (TYPE_DATA + 7)
86: #define SEQOF_START (TYPE_DATA + 8)
87: #define SETOF_START (TYPE_DATA + 9)
88: #define CHOICE_START (TYPE_DATA + 10)
89: #define REALTYPE (TYPE_DATA + 11) /* ASN.1 Real */
90: #define T_NULL (TYPE_DATA + 12)
91: #define T_OID (TYPE_DATA + 13)
92: #define ETAG (TYPE_DATA + 14) /*so set_find in pr_set is executed*/
93: #define IMP_OBJ (TYPE_DATA + 15) /*so set_find in pr_set is executed*/
94: #define EXTOBJ (TYPE_DATA + 16) /* External reference object */
95: #define EXTMOD (TYPE_DATA + 17) /* External module for above object */
96: #define OBJID (TYPE_DATA + 18) /* Object Identifier */
97: #define DFLT_F (TYPE_DATA + 19)/* Default value for following entry */
98: #define DFLT_B (TYPE_DATA + 20)/* default value for previous entry */
99:
100: #define STYPE_DATA (TYPE_DATA + 30) /* Below here are the S* items */
101: /* Optimised - No indirection to cope with ISODE optimisation */
102: #define SBITSTRING (STYPE_DATA + 0) /* No offset */
103: #define SOBJID (STYPE_DATA + 1) /* Object Identifier - No offset */
104: #define SREALTYPE (STYPE_DATA + 2) /* ASN.1 Real */
105: #define SANY (STYPE_DATA + 3)
106: #define SEXTOBJ (STYPE_DATA + 4) /* External reference object */
107: #define SOBJECT (STYPE_DATA + 5) /* This generates data */
108: #define SOCTETSTRING (STYPE_DATA + 6) /* No offset */
109: #define SEXTERNAL (STYPE_DATA + 7) /* External to be encoded */
110:
111: #define ISDTYPE(p) (p->pe_type >= TYPE_DATA)
112:
113: /* User code indexes */
114:
115: #define NONE 0 /* No User code */
116: /* Standard Tags */
117:
118: #define T_BOOL 1
119: #define T_INTEGER 2
120: #define T_OCTETSTRING 4
121: #define T_OBJIDENT 6
122: #define T_EXTERNAL 8
123: #define T_REAL 9
124: #define T_ENUMERATED 10
125: #define T_SEQ 16
126: #define T_SET 17
127: #define T_IA5 22
128: #define T_GRAPHIC 25
129:
130: /* Flags */
131:
132: /* Use values 0-3 bottom two bits at the moment */
133: /* This has to be changed if the values for the 4 below are changed in ISODE */
134: #define FL_CLASS 0xf
135: /* Class specification */
136: #define FL_UNIVERSAL PE_CLASS_UNIV
137: #define FL_APPLICATION PE_CLASS_APPL
138: #define FL_CONTEXT PE_CLASS_CONT
139: #define FL_PRIVATE PE_CLASS_PRIV
140:
141:
142: #define FL_IMPLICIT 0100
143: #define FL_DEFAULT 0200
144: #define FL_OPTIONAL 0400
145:
146: #define OPTIONAL(p) ((p)->pe_flags & FL_OPTIONAL)
147: #define DEFAULT(p) ((p)->pe_flags & FL_DEFAULT)
148:
149: #define FL_PRTAG 01000 /* only for printing - print the tag */
150:
151: #define PRINT_TAG(p) ((p)->pe_flags & FL_PRTAG)
152:
153: #define CLASS(p) ((PElementClass)((p)->pe_flags & FL_CLASS))
154: #define TAG(p) ((PElementID)((p)->pe_tag))
155:
156: /* signed version of above - needed for tag == -1 */
157: #define STAG(p) ((p)->pe_tag)
158:
159: #define TESTBIT(p, bit) ((p) & (1 << (bit)))
160: #define SETBIT(p, bit) ((p) |= (1 << (bit)))
161: /*
162: * The module table. One per module which gives access to everything one needs
163: * to know about the modules types
164: */
165:
166: typedef struct {
167: char *md_name; /* Name of this module */
168: int md_nentries; /* Number of entries */
169: tpe **md_etab; /* Pointer to encoding tables */
170: tpe **md_dtab; /* Pointer to decoding tables */
171: ptpe **md_ptab; /* Pointer to printing tables */
172: int (*md_eucode)(); /* User code for encoding */
173: int (*md_ducode)(); /* User code for decoding */
174: int (*md_pucode)(); /* User code for printing */
175: caddr_t *md_ptrtab; /* pointer table */
176:
177: } modtyp;
178: #define NULLMODTYP ((modtyp *)0)
179: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.