📄 pepsy.h
字号:
/* pepsy.h *//* * $Header: /xtel/isode/isode/h/RCS/pepsy.h,v 9.0 1992/06/16 12:17:57 isode Rel $ * * * $Log: pepsy.h,v $ * Revision 9.0 1992/06/16 12:17:57 isode * Release 8.0 * *//* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */#ifndef PEPSY_DEFINITIONS#define PEPSY_DEFINITIONS#ifndef PEPYPARM#define PEPYPARM char *#endif/* * Definitions for pep tables */typedef struct { int pe_type; /* Type of entry */ integer pe_ucode; /* index to user's code if any */ int pe_tag; /* Tag of this entry if any */ int pe_flags; /* Flags */ char **pe_typename; /* User defined name of variable */} ptpe;#define tpe ptpe#define NULLTPE ((tpe *)0)#define NULLPTPE ((ptpe *)0)/* extract a pointer from the pointer table */#define GPTR(mod, ind, type) ((type )(mod)->md_ptrtab[ind])/* tricky situation with the "type" - it must not contain the brackets of the * cast because we supply them here *//* macros for getting values of default flexibly */#define IVAL(mod, x) ((x)->pe_ucode) /* Integer value */#define PVAL(mod, x) (GPTR(mod, (x)->pe_tag, char *)) /* (char *) */#define TVAL(mod, x) ((x)->pe_flags) /* Type - Integer value */#define RVAL(mod, x) (*GPTR(mod, (x)->pe_tag, double *)) /* double *//* macros for getting the function pointer (for a FN_CALL entry) */#define FN_PTR(mod, x) (*GPTR(mod, (x)->pe_ucode, IFP )) /* function ptr *//* macros for getting other more general pointers transparently */#define EXT2MOD(mod, x) (GPTR(mod, (x)->pe_ucode, modtyp *))/* Types */#define PE_START (-1)#define PE_END 0#define XOBJECT 3#define UCODE 6#define MEMALLOC 7#define SCTRL 8#define CH_ACT 9#define OPTL 10 /* Optionals field offset */#define BOPTIONAL 11 /* optional test for next */#define FFN_CALL 12 /* call the free function */#define FREE_ONLY 13 /* the next item is only for freeing code *//* types that generate data */#define TYPE_DATA 20#define ANY (TYPE_DATA + 0)#define INTEGER (TYPE_DATA + 1)#define BOOLEAN (TYPE_DATA + 2)#define OBJECT (TYPE_DATA + 3) /* This generates data */#define BITSTRING (TYPE_DATA + 4)#define OCTETSTRING (TYPE_DATA + 5)#define SET_START (TYPE_DATA + 6)#define SEQ_START (TYPE_DATA + 7)#define SEQOF_START (TYPE_DATA + 8)#define SETOF_START (TYPE_DATA + 9)#define CHOICE_START (TYPE_DATA + 10)#define REALTYPE (TYPE_DATA + 11) /* ASN.1 Real */#define T_NULL (TYPE_DATA + 12)#define T_OID (TYPE_DATA + 13)#define ETAG (TYPE_DATA + 14) /*so set_find in pr_set is executed*/#define IMP_OBJ (TYPE_DATA + 15) /*so set_find in pr_set is executed*/#define EXTOBJ (TYPE_DATA + 16) /* External reference object */#define EXTMOD (TYPE_DATA + 17) /* External module for above object */#define OBJID (TYPE_DATA + 18) /* Object Identifier */#define DFLT_F (TYPE_DATA + 19)/* Default value for following entry */#define DFLT_B (TYPE_DATA + 20)/* default value for previous entry */#define T_STRING (TYPE_DATA + 21)/* [[ s ptr ]] supporting entry */#define OCTET_PTR (TYPE_DATA + 22)/* [[ o ptr $ len]] str entry */#define OCTET_LEN (TYPE_DATA + 23)/* [[ o ptr $ len]] len entry */#define BITSTR_PTR (TYPE_DATA + 24)/* [[ x ptr $ len]] str entry */#define BITSTR_LEN (TYPE_DATA + 25)/* [[ x ptr $ len]] len entry */#define FN_CALL (TYPE_DATA + 26)/* call a function to do the work */#if PEPSY_VERSION >= 2#define STYPE_DATA (TYPE_DATA + 50) /* Below here are the S* items */#else#define STYPE_DATA (TYPE_DATA + 30) /* Below here are the S* items */#endif/* Optimised - No indirection to cope with ISODE optimisation */#define SBITSTRING (STYPE_DATA + 0) /* No offset */#define SOBJID (STYPE_DATA + 1) /* Object Identifier - No offset */#define SREALTYPE (STYPE_DATA + 2) /* ASN.1 Real */#define SANY (STYPE_DATA + 3)#define SEXTOBJ (STYPE_DATA + 4) /* External reference object */#define SOBJECT (STYPE_DATA + 5) /* This generates data */#define SOCTETSTRING (STYPE_DATA + 6) /* No offset */#define SEXTERNAL (STYPE_DATA + 7) /* External to be encoded */#define SSEQ_START (STYPE_DATA + 8) /* SEQUENCE don't indirect */#define SSET_START (STYPE_DATA + 9) /* SET don't do an indirection */#define SSEQOF_START (STYPE_DATA + 10) /* SEQOF - no indirection */#define SSETOF_START (STYPE_DATA + 11) /* SETOF - no indirection */#define SCHOICE_START (STYPE_DATA + 12) /* CHOICE - no indirection */#define ISDTYPE(p) (p->pe_type >= TYPE_DATA)/* User code indexes */#define NONE 0 /* No User code *//* Standard Tags */#define T_BOOL 1#define T_INTEGER 2#define T_OCTETSTRING 4#define T_OBJIDENT 6#define T_EXTERNAL 8#define T_REAL 9#define T_ENUMERATED 10#define T_SEQ 16#define T_SET 17#define T_IA5 22#define T_GRAPHIC 25/* Flags *//* Use values 0-3 bottom two bits at the moment *//* This has to be changed if the values for the 4 below are changed in ISODE */#define FL_CLASS 0xf /* Class specification */#define FL_UNIVERSAL PE_CLASS_UNIV#define FL_APPLICATION PE_CLASS_APPL#define FL_CONTEXT PE_CLASS_CONT#define FL_PRIVATE PE_CLASS_PRIV#define FL_IMPLICIT 0100#define FL_DEFAULT 0200#define FL_OPTIONAL 0400#define OPTIONAL(p) ((p)->pe_flags & FL_OPTIONAL)#define DEFAULT(p) ((p)->pe_flags & FL_DEFAULT)#define FL_PRTAG 01000 /* only for printing - print the tag */#define PRINT_TAG(p) ((p)->pe_flags & FL_PRTAG)#define FL_USELECT 02000 /* user code selects */#define IF_USELECT(p) ((p) -> pe_flags & FL_USELECT)#define CLASS(p) ((PElementClass)((p)->pe_flags & FL_CLASS))#define TAG(p) ((PElementID)((p)->pe_tag))/* signed version of above - needed for tag == -1 */#define STAG(p) ((p)->pe_tag)#define TESTBIT(p, bit) ((p) & (1 << (bit)))#define SETBIT(p, bit) ((p) |= (1 << (bit)))#define CLRBIT(p, bit) ((p) &= ~(1 << (bit)))/* To support the OPTIONAL << field $ bitno >> construct */#define BITTEST(p, bit) (((p)[(bit)/8]) & (0x80 >> (bit) % 8))#define BITSET(p, bit) (((p)[(bit)/8]) |= (0x80 >> (bit) % 8))#define BITCLR(p, bit) (((p)[(bit)/8]) &= ~(0x80 >> (bit) % 8))/* compute the number of char's required to support x bits */#define NBITS2NCHARS(x) (((x) + 7)/8)/* * The module table. One per module which gives access to everything one needs * to know about the modules types */typedef struct { char *md_name; /* Name of this module */ int md_nentries; /* Number of entries */ tpe **md_etab; /* Pointer to encoding tables */ tpe **md_dtab; /* Pointer to decoding tables */ ptpe **md_ptab; /* Pointer to printing tables */ int (*md_eucode)(); /* User code for encoding */ int (*md_ducode)(); /* User code for decoding */ int (*md_pucode)(); /* User code for printing */ caddr_t *md_ptrtab; /* pointer table */ } modtyp;#define NULLMODTYP ((modtyp *)0)#define LOTSOFBITS 128int enc_f (), dec_f (), fre_obj ();#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -