diff options
Diffstat (limited to '')
-rw-r--r-- | public/sdk/inc/ossber.h | 716 |
1 files changed, 716 insertions, 0 deletions
diff --git a/public/sdk/inc/ossber.h b/public/sdk/inc/ossber.h new file mode 100644 index 000000000..faa5c65ac --- /dev/null +++ b/public/sdk/inc/ossber.h @@ -0,0 +1,716 @@ +/*****************************************************************************/ +/* Copyright (C) 1989-1996 Open Systems Solutions, Inc. All rights reserved.*/ +/*****************************************************************************/ + +/* THIS FILE IS PROPRIETARY MATERIAL OF OPEN SYSTEMS SOLUTIONS, INC. + * AND MAY BE USED ONLY BY DIRECT LICENSEES OF OPEN SYSTEM SOLUTIONS, INC. + * THIS FILE MAY NOT BE DISTRIBUTED. */ + +/**************************************************************************/ +/* + * FILE: @(#)coderror.h 5.2 96/01/04 +# @(#)errindex.sh 1.5 94/06/22 + */ +/* FILE: @(#)ossber.hh 5.4 96/04/23 */ +/* */ +/* function: Define the interfaces to the routines in ossber.a for the */ +/* OSS optimized encoder and decoder. */ +/* */ +/* */ +/* changes: */ +/* 06/28/90 pet created */ +/* */ +/**************************************************************************/ + +#ifndef ossber_hdr_file +#define ossber_hdr_file + +#include <setjmp.h> +#include "asn1hdr.h" + +#if defined(_MSC_VER) && (defined(_WIN32) || defined(WIN32)) +#pragma pack(push, ossPacking, 4) +#elif defined(_MSC_VER) && (defined(_WINDOWS) || defined(_MSDOS)) +#pragma pack(1) +#elif defined(__BORLANDC__) && defined(__MSDOS__) +#pragma option -a1 +#elif defined(__BORLANDC__) && defined(__WIN32__) +#pragma option -a4 +#elif defined(__IBMC__) +#pragma pack(4) +#endif /* _MSC_VER && _WIN32 */ + +#define _dstd_parms_def char **_pos, long *_buf_len, long _length +#define _dstd_parms _pos, _buf_len, _length +#define _sdstd_parms_def char **_pos, long *_buf_len +#define _sdstd_parms _pos, _buf_len + +#define _std_parms_def char **_pos, long *_max_len, _Bool _userbuf +#define _std_parms _pos, _max_len, _userbuf + +#ifndef _BOOL +#define _BOOL +typedef char _Bool; +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* Entry Points for the Interface Routines */ + +#ifndef _OSSNOANSI + +typedef int (DLL_ENTRY_FPTR *_Encode_function)(struct ossGlobal *world, int pdunum, + void *inbuf, char **outbuf, long *outlen, + void *ctl_tbl, unsigned flags, + char errmsg[]); + +typedef int (DLL_ENTRY_FPTR *_Decode_function)(struct ossGlobal *world, int *pduNum, + char **inbuf, long *inlen, void **outbuf, + long *outlen, void *ctl_tbl, unsigned flags, + char errmsg[]); + +typedef int (DLL_ENTRY_FPTR *_FreePDU_function)(struct ossGlobal *world, int pdunum, + void *data, void *ctl_tbl); + +typedef void (DLL_ENTRY_FPTR *_Ossinit_function)(struct ossGlobal *); + +#else + +typedef int (*_Encode_function)(); + +typedef int (*_Decode_function)(); + +typedef int (*_FreePDU_function)(); + +typedef void (*_Ossinit_function)(); + +#endif /* _OSSNOANSI */ + + +typedef struct _entry_point_struct_ { + _Ossinit_function _ossinit_function; + _Encode_function _ber_encode_function; + _Decode_function _ber_decode_function; + _FreePDU_function _freePDU_function; + unsigned short int _oss_ber_version_number; + _Encode_function _per_encode_function; + _Decode_function _per_decode_function; + unsigned short int _oss_per_version_number; + unsigned int _oss_pa_count; + struct _char_data *_chars_ptr; +} _entry_point_struct; + + + + + +/* Error Handling */ + + +/* The index to the error messages. NOTE: The enumerated constants here + must match those in coderror.h. */ + +enum _err_index { +_no_msg , _small_buffer , _type_not_impl , _pdu_range , +_bad_argument , _version_mismatch_toed , _version_mismatch_soed , +_out_stor , _bad_choice , _stor_error , _int_too_long , +_uint_too_long , _bit_str_comp , _access_serialization , +_constrainedBy , _singleValue_integer , _singleValue_uinteger , +_singleValue_real , _singleValue_string , _singleValue_void , +_valueRange_integer , _valueRange_uinteger , _valueRange_real , +_sizeConstraint_length , _sizeConstraint_number , _oPA_constraint, +_absence_constraint , _presence_constraint , _openType_denc , +_tableConstraint , _componentRelation , _not_enumerated , +_null_tbl , _null_fcn , _corrupted_tbl , _neg_uinteger , +_typeConstraint , _bit_str_too_long , _more_input , _more_output, +_zero_bytes_requested , _size_too_big , _out_of_memory , +_invalid_object , _memmgr_undefined_err , _bad_encrules_err , +_toed_rules_not_impl_err , _unlinked_encrules_err , +_table_mismatch, _type_not_supported, _type_not_supported_decreal, +_real_dll_failed, _indef_length_not_supported, _front_align_not_supported, +_only_user_buf_supported, _user_buf_not_supported, _cstrain_dll_failed, +_cmp_dll_failed, _cmp_code_not_linked, _real_code_not_linked, +_bad_objid , _bad_pointer , _bad_time , _bad_der_time, +_too_long , _toom_field , _mandatory_field , _zero_length_ANY , +_zero_length_OpenType , _inval_dec_real , _inval_mixed_real , +_tag_long_nec , _tag_too_long , _exp_long_nec , _exp_too_long , +_int_long_nec , _subid_long_nec , _subid_too_long , +_length_too_long , _size_too_long , _non_std_eoc , _unknown_size, +_inconsis_len , _tag_mismatch , _pdu_mismatch , _extra_bits , +_inval_enc , _no_dec_dig , _no_exp_dig , _inval_nr1 , _inval_nr2, +_inval_nr3 , _real_long_zero , _undef_enc , _truncate , +_null_in_nlltrm , _unknown_field , _field_repeat , _field_omit , +_expec_eoc , _indef_len_prim , _expec_constr_fnd_prim , +_expec_prim_fnd_constr , _unknown_type , _end_of_input , +_cannot_happen , _neg_not_allowed , _expect_tag , _more_value , +_real_too_large, _hindmost_error +}; + + + +/* typedef's for the context information */ + +typedef enum _context_type { + _boolean_type, _integer_type, _enumerated_type, _real_type, + _bitstring_type, _octetstring_type, _null_type, _sequence_type, + _sequence_of_type, _set_type, _set_of_type, _choice_type, + _charstring_type, _object_identifier_type, _time_type, _any_type, + _opentype +} _Context_Type; + +typedef struct _context_id { + char *_element_name; + char *_element_type; + _Context_Type _type; +} _Context_Id; + + +typedef struct _context_element { + struct _context_element *_parent; + _Context_Id *_id; + long _occurrence;/* For SET OF or SEQUENCE OF */ +} _Context_Element; + +typedef enum _context_state { + _encoding_tag, _encoding_length, _encoding_data, + _decoding_tag, _decoding_length, _decoding_data +} _Context_State; + +typedef struct _context_anchor { + _Context_Element *_last; + int _pdu_number; + _Context_Id *_pdu_id; + _Context_State _state; +} _Context_Anchor; + +typedef char _Per_Inverted_Index[128]; + + +extern _Context_Anchor _oss_context_anchor; + +/* The error routines */ + +#ifndef _OSSNOANSI + +extern void DLL_ENTRY _oss_enc_error(struct ossGlobal *g, _Bool _jump, + enum _err_index _error_code, long _data); + +#else + +extern void _oss_enc_error(); + +#endif /* _OSSNOANSI */ + + +#define _oss_dec_error _oss_enc_error + + + +#ifndef _OSSNOANSI + +/* Encode Routines */ + +extern long DLL_ENTRY _oss_encd_length(struct ossGlobal *g, _std_parms_def, + unsigned long _data); +extern void DLL_ENTRY _oss_enci_length(struct ossGlobal *g, _std_parms_def, + unsigned long _data); +extern long DLL_ENTRY _oss_encd_tag(struct ossGlobal *g, _std_parms_def, + unsigned short _data, _Bool _constructed); +extern void DLL_ENTRY _oss_enci_tag(struct ossGlobal *g, _std_parms_def, + unsigned short _data, _Bool _constructed); +extern long DLL_ENTRY _oss_encd_bool(struct ossGlobal *g, _std_parms_def, + ossBoolean _data); +extern void DLL_ENTRY _oss_enci_bool(struct ossGlobal *g, _std_parms_def, + ossBoolean _data); +extern long DLL_ENTRY _oss_encd_int(struct ossGlobal *g, _std_parms_def, + LONG_LONG _data); +extern void DLL_ENTRY _oss_enci_int(struct ossGlobal *g, _std_parms_def, + LONG_LONG _data); +extern long DLL_ENTRY _oss_encd_uint(struct ossGlobal *g, _std_parms_def, + ULONG_LONG _data); +extern void DLL_ENTRY _oss_enci_uint(struct ossGlobal *g, _std_parms_def, + ULONG_LONG _data); +extern long DLL_ENTRY _oss_encd_huge_int(struct ossGlobal *g, _std_parms_def, + void *_data); +extern long DLL_ENTRY _oss_encd_real(struct ossGlobal *g, _std_parms_def, + double _data); +extern long DLL_ENTRY _oss_encd_creal(struct ossGlobal *g, _std_parms_def, + char *_data); +extern long DLL_ENTRY _oss_encd_mreal(struct ossGlobal *g, _std_parms_def, + MixedReal *_data); +extern void DLL_ENTRY _oss_enci_real(struct ossGlobal *g, _std_parms_def, + double _data); +extern void DLL_ENTRY _oss_enci_creal(struct ossGlobal *g, _std_parms_def, + char *_data); +extern void DLL_ENTRY _oss_enci_mreal(struct ossGlobal *g, _std_parms_def, + MixedReal *_data); +extern long DLL_ENTRY _oss_encd_alobjid(struct ossGlobal *g, _std_parms_def, + void *_data, short _array_size); +extern long DLL_ENTRY _oss_encd_asobjid(struct ossGlobal *g, _std_parms_def, + void *_data, short _array_size); +extern long DLL_ENTRY _oss_encd_aiobjid(struct ossGlobal *g, _std_parms_def, + void *_data, short _array_size); +extern void DLL_ENTRY _oss_enci_alobjid(struct ossGlobal *g, _std_parms_def, + void *_data, short _array_size); +extern void DLL_ENTRY _oss_enci_asobjid(struct ossGlobal *g, _std_parms_def, + void *_data, short _array_size); +extern void DLL_ENTRY _oss_enci_aiobjid(struct ossGlobal *g, _std_parms_def, + void *_data, short _array_size); +extern long DLL_ENTRY _oss_encd_llobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern long DLL_ENTRY _oss_encd_lsobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern long DLL_ENTRY _oss_encd_liobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern void DLL_ENTRY _oss_enci_llobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern void DLL_ENTRY _oss_enci_lsobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern void DLL_ENTRY _oss_enci_liobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern long DLL_ENTRY _oss_encd_ulobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern long DLL_ENTRY _oss_encd_usobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern long DLL_ENTRY _oss_encd_uiobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern void DLL_ENTRY _oss_enci_ulobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern void DLL_ENTRY _oss_enci_usobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern void DLL_ENTRY _oss_enci_uiobjid(struct ossGlobal *g, _std_parms_def, + void *_data, long _size_c); +extern long DLL_ENTRY _oss_encd_pbit(struct ossGlobal *g, _std_parms_def, + void *_data, long _bit_count); +extern void DLL_ENTRY _oss_enci_pbit(struct ossGlobal *g, _std_parms_def, + void *_data, long _bit_count); +extern long DLL_ENTRY _oss_encd_ubit(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern void DLL_ENTRY _oss_enci_ubit(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern long DLL_ENTRY _oss_encd_vbit(struct ossGlobal *g, _std_parms_def, + void *_data, long _array_size, + char _lengthsize); +extern void DLL_ENTRY _oss_enci_vbit(struct ossGlobal *g, _std_parms_def, + void *_data, long _array_size, + char _lengthsize); +extern long DLL_ENTRY _oss_encd_nstr(struct ossGlobal *g, _std_parms_def, + char *_data, long _size_c); +extern void DLL_ENTRY _oss_enci_nstr(struct ossGlobal *g, _std_parms_def, + char *_data, long _size_c); +extern long DLL_ENTRY _oss_encd_pstr(struct ossGlobal *g, _std_parms_def, + char *_data, long _byte_count); +extern void DLL_ENTRY _oss_enci_pstr(struct ossGlobal *g, _std_parms_def, + char *_data, long _byte_count); +extern long DLL_ENTRY _oss_encd_ustr(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern void DLL_ENTRY _oss_enci_ustr(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern long DLL_ENTRY _oss_encd_vstr(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern void DLL_ENTRY _oss_enci_vstr(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern long DLL_ENTRY _oss_encd_uoct(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern void DLL_ENTRY _oss_enci_uoct(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern long DLL_ENTRY _oss_encd_voct(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern void DLL_ENTRY _oss_enci_voct(struct ossGlobal *g, _std_parms_def, + void *_data, char _lengthsize, long _size_c); +extern long DLL_ENTRY _oss_encd_gtime(struct ossGlobal *g, _std_parms_def, + GeneralizedTime*_data); +extern void DLL_ENTRY _oss_enci_gtime(struct ossGlobal *g, _std_parms_def, + GeneralizedTime *_data); +extern long DLL_ENTRY _oss_encd_utime(struct ossGlobal *g, _std_parms_def, + UTCTime *_data); +extern void DLL_ENTRY _oss_enci_utime(struct ossGlobal *g, _std_parms_def, + UTCTime *_data); +extern long DLL_ENTRY _oss_encd_uany(struct ossGlobal *g, _std_parms_def, + void *_data); +extern void DLL_ENTRY _oss_enci_uany(struct ossGlobal *g, _std_parms_def, + void *_data); +extern long DLL_ENTRY _oss_encd_opentype(struct ossGlobal *g, _std_parms_def, + void *_data); +extern void DLL_ENTRY _oss_enci_opentype(struct ossGlobal *g, _std_parms_def, + void *_data); +extern long DLL_ENTRY _oss_encd_bmpstr(struct ossGlobal *g, _std_parms_def, + void *data, char lengthsize, + long size_c); +extern long DLL_ENTRY _oss_enci_bmpstr(struct ossGlobal *g, _std_parms_def, + void *data, char lengthsize, + long size_c); +extern long DLL_ENTRY _oss_encd_unistr(struct ossGlobal *g, _std_parms_def, + void *data, char lengthsize, + long size_c); +extern long DLL_ENTRY _oss_enci_unistr(struct ossGlobal *g, _std_parms_def, + void *data, char lengthsize, + long size_c); + +/* Decode Routines */ +/* these return values */ +extern void DLL_ENTRY _oss_dec_tag(struct ossGlobal *g, _sdstd_parms_def, + unsigned short *tag, _Bool *con); +extern long DLL_ENTRY _oss_dec_length(struct ossGlobal *g, _sdstd_parms_def); + + +extern ossBoolean DLL_ENTRY _oss_dec_bool(struct ossGlobal *g, _dstd_parms_def); +extern LONG_LONG DLL_ENTRY _oss_dec_llint(struct ossGlobal *g, _dstd_parms_def); +extern long DLL_ENTRY _oss_dec_lint(struct ossGlobal *g, _dstd_parms_def); +extern int DLL_ENTRY _oss_dec_iint(struct ossGlobal *g, _dstd_parms_def); +extern short DLL_ENTRY _oss_dec_sint(struct ossGlobal *g, _dstd_parms_def); +extern void DLL_ENTRY _oss_dec_hint(struct ossGlobal *g, _dstd_parms_def, + _Bool userbuf, void *data); +extern ULONG_LONG DLL_ENTRY _oss_dec_ullint(struct ossGlobal *g, _dstd_parms_def); +extern unsigned long DLL_ENTRY _oss_dec_ulint(struct ossGlobal *g, _dstd_parms_def); +extern unsigned int DLL_ENTRY _oss_dec_uiint(struct ossGlobal *g, _dstd_parms_def); +extern unsigned short DLL_ENTRY _oss_dec_usint(struct ossGlobal *g, _dstd_parms_def); + +/* The code for this one is so huge that it would be criminal to + * repeat it three times. Caller should cast the returned value + * to what she wants. + */ +extern void DLL_ENTRY _oss_dec_real(struct ossGlobal *g, _dstd_parms_def, + double *data); +extern void DLL_ENTRY _oss_dec_freal(struct ossGlobal *g, _dstd_parms_def, + float *data); +extern void DLL_ENTRY _oss_dec_creal(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, char **_data); +extern void DLL_ENTRY _oss_dec_mreal(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, MixedReal *_data); + +/* Two versions of these functions. If the type has the pointer + * directive, then its size is not fixed--the function will allocate + * the memory. Otherwise the caller allocates the memory. (Actually, + * the type will probably be enclosed in another type, and therefore + * the memory has already been allocated.) + */ +extern void DLL_ENTRY _oss_dec_alobjid_ptr(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, + short _array_size); +extern void DLL_ENTRY _oss_dec_alobjid(struct ossGlobal *g, _dstd_parms_def, + void *_data, short _array_size); + +extern void DLL_ENTRY _oss_dec_aiobjid_ptr(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, + short _array_size); +extern void DLL_ENTRY _oss_dec_aiobjid(struct ossGlobal *g, _dstd_parms_def, + void *_data, short _array_size); + +extern void DLL_ENTRY _oss_dec_asobjid_ptr(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, + short _array_size); +extern void DLL_ENTRY _oss_dec_asobjid(struct ossGlobal *g, _dstd_parms_def, + void *_data, short _array_size); + +/* These allocate all their own memory. */ +extern void DLL_ENTRY _oss_dec_llobjid(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, long _size_c); +extern void DLL_ENTRY _oss_dec_liobjid(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, long _size_c); +extern void DLL_ENTRY _oss_dec_lsobjid(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, long _size_c); + +/* These are passed the structure containing the count, but allocate + * space for the data itself. */ +extern void DLL_ENTRY _oss_dec_ulobjid(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void *_data, short _size_c); +extern void DLL_ENTRY _oss_dec_uiobjid(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void *_data, short _size_c); +extern void DLL_ENTRY _oss_dec_usobjid(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void *_data, short _size_c); + +/* Caller allocates memory for this one. Call for both e_pad & e_big_pad. */ +extern void DLL_ENTRY _oss_dec_pbit(struct ossGlobal *g, _dstd_parms_def, + void *_data, unsigned long _bit_count, + _Bool _cons, _Bool _named_bits); + +/* See comment before dec_ulobjid. */ +extern void DLL_ENTRY _oss_dec_ubit(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void *_data, + char _lengthsize, long _size_c, _Bool _cons); + +/* Two versions of this one too. */ +extern void DLL_ENTRY _oss_dec_vbit_ptr(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, + long _array_size, char _lengthsize, + _Bool _cons); +extern void DLL_ENTRY _oss_dec_vbit(struct ossGlobal *g, _dstd_parms_def, + void *_data, long _array_size, + char _lengthsize, _Bool _cons); + +extern void DLL_ENTRY _oss_dec_nstr_ptr(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, char **_data, long _size_c, + _Bool _cons); +extern void DLL_ENTRY _oss_dec_nstr(struct ossGlobal *g, _dstd_parms_def, + char *_data, long _size_c, _Bool _cons); + +extern void DLL_ENTRY _oss_dec_pstr(struct ossGlobal *g, _dstd_parms_def, + char *_data, long _byte_count, _Bool _cons); +extern void DLL_ENTRY _oss_dec_ustr(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void *_data, + char _lengthsize, long _size_c, _Bool _cons); + +extern void DLL_ENTRY _oss_dec_vstr_ptr(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, + char _lengthsize, long _size_c, _Bool _cons); +extern void DLL_ENTRY _oss_dec_vstr(struct ossGlobal *g, _dstd_parms_def, + void *_data, char _lengthsize, long _array_size, + _Bool _cons); + +extern void DLL_ENTRY _oss_dec_uoct(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void *_data, + char _lengthsize, long _size_c, _Bool _cons); + +extern void DLL_ENTRY _oss_dec_voct_ptr(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void **_data, + char _lengthsize, long _size_c, _Bool _cons); +extern void DLL_ENTRY _oss_dec_voct(struct ossGlobal *g, _dstd_parms_def, + void *_data, char _lengthsize, long _array_size, + _Bool _cons); + +extern void DLL_ENTRY _oss_dec_gtime(struct ossGlobal *g, _dstd_parms_def, + GeneralizedTime *_data); +extern void DLL_ENTRY _oss_dec_utime(struct ossGlobal *g, _dstd_parms_def, + UTCTime *_data); + +extern void DLL_ENTRY _oss_dec_uany(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void *_data); + +extern void DLL_ENTRY _oss_dec_opentype(struct ossGlobal *g, _dstd_parms_def, + _Bool _userbuf, void *_data); + +extern void DLL_ENTRY _oss_dec_bmpstr(struct ossGlobal *g, _dstd_parms_def, + _Bool userbuf, void *data, + char lengthsize, long size_c, _Bool cons); +extern void DLL_ENTRY _oss_dec_unistr(struct ossGlobal *g, _dstd_parms_def, + _Bool userbuf, void *data, + char lengthsize, long size_c, _Bool cons); + +/* Other functions */ + +/* called to count the items for set of or sequence of. */ +extern long DLL_ENTRY _oss_count_setof_items(struct ossGlobal *g, _dstd_parms_def); + +/* called to skip past items for the EXTENSIBLE directive */ +extern void _oss_skip_past_item(struct ossGlobal *g, _dstd_parms_def); + +#else + +/* Encode Routines */ + +extern long _oss_encd_length(); +extern void _oss_enci_length(); +extern long _oss_encd_tag(); +extern void _oss_enci_tag(); + + +extern long _oss_encd_bool(); +extern void _oss_enci_bool(); +extern long _oss_encd_int(); +extern void _oss_enci_int(); +extern long _oss_encd_uint(); +extern void _oss_enci_uint(); +extern void _oss_encd_huge_int(); +extern long _oss_encd_real(); +extern void _oss_enci_real(); +extern long _oss_encd_alobjid(); +extern long _oss_encd_asobjid(); +extern long _oss_encd_aiobjid(); +extern void _oss_enci_alobjid(); +extern void _oss_enci_asobjid(); +extern void _oss_enci_aiobjid(); +extern long _oss_encd_llobjid(); +extern long _oss_encd_lsobjid(); +extern long _oss_encd_liobjid(); +extern void _oss_enci_llobjid(); +extern void _oss_enci_lsobjid(); +extern void _oss_enci_liobjid(); +extern long _oss_encd_ulobjid(); +extern long _oss_encd_usobjid(); +extern long _oss_encd_uiobjid(); +extern void _oss_enci_ulobjid(); +extern void _oss_enci_usobjid(); +extern void _oss_enci_uiobjid(); +extern long _oss_encd_pbit(); +extern void _oss_enci_pbit(); +extern long _oss_encd_ubit(); +extern void _oss_enci_ubit(); +extern long _oss_encd_vbit(); +extern void _oss_enci_vbit(); +extern long _oss_encd_nstr(); +extern void _oss_enci_nstr(); +extern long _oss_encd_pstr(); +extern void _oss_enci_pstr(); +extern long _oss_encd_ustr(); +extern void _oss_enci_ustr(); +extern long _oss_encd_vstr(); +extern void _oss_enci_vstr(); +extern long _oss_encd_uoct(); +extern void _oss_enci_uoct(); +extern long _oss_encd_voct(); +extern void _oss_enci_voct(); +extern long _oss_encd_gtime(); +extern void _oss_enci_gtime(); +extern long _oss_encd_utime(); +extern void _oss_enci_utime(); +extern long _oss_encd_uany(); +extern void _oss_enci_uany(); +extern long _oss_encd_opentype(); +extern void _oss_enci_opentype(); +extern long _oss_encd_bmpstr(); +extern long _oss_enci_bmpstr(); +extern long _oss_encd_unistr(); +extern long _oss_enci_unistr(); + +/* Decode Routines */ +/* these return values */ +extern void _oss_dec_tag(); +extern long _oss_dec_length(); + + +extern ossBoolean _oss_dec_bool(); +extern long _oss_dec_lint(); +extern int _oss_dec_iint(); +extern short _oss_dec_sint(); +extern void _oss_dec_hint(); +extern unsigned long _oss_dec_ulint(); +extern unsigned int _oss_dec_uiint(); +extern unsigned short _oss_dec_usint(); + +/* The code for this one is so huge that it would be criminal to + * repeat it three times. Caller should cast the returned value + * to what she wants. + */ +extern double _oss_dec_real(); + +/* Two versions of these functions. If the type has the pointer + * directive, then its size is not fixed--the function will allocate + * the memory. Otherwise the caller allocates the memory. (Actually, + * the type will probably be enclosed in another type, and therefore + * the memory has already been allocated.) + */ +extern void _oss_dec_alobjid_ptr(); +extern void _oss_dec_alobjid(); + +extern void _oss_dec_aiobjid_ptr(); +extern void _oss_dec_aiobjid(); + +extern void _oss_dec_asobjid_ptr(); +extern void _oss_dec_asobjid(); + +/* These allocate all their own memory. */ +extern void _oss_dec_llobjid(); +extern void _oss_dec_liobjid(); +extern void _oss_dec_lsobjid(); + +/* These are passed the structure containing the count, but allocate + * space for the data itself. */ +extern void _oss_dec_ulobjid(); +extern void _oss_dec_uiobjid(); +extern void _oss_dec_usobjid(); + +/* Caller allocates memory for this one. Call for both e_pad & e_big_pad. */ +extern void _oss_dec_pbit(); + +/* See comment before dec_ulobjid. */ +extern void _oss_dec_ubit(); + +/* Two versions of this one too. */ +extern void _oss_dec_vbit_ptr(); +extern void _oss_dec_vbit(); + +extern void _oss_dec_nstr_ptr(); +extern void _oss_dec_nstr(); + +extern void _oss_dec_pstr(); +extern void _oss_dec_ustr(); + +extern void _oss_dec_vstr_ptr(); +extern void _oss_dec_vstr(); + +extern void _oss_dec_uoct(); + +extern void _oss_dec_voct_ptr(); +extern void _oss_dec_voct(); + +extern void _oss_dec_gtime(); +extern void _oss_dec_utime(); + +extern void _oss_dec_uany(); + +extern void _oss_dec_opentype(); + +extern void _oss_dec_bmpstr(); +extern void _oss_dec_unistr(); + + +/* Other functions */ + +/* called to count the items for set of or sequence of. */ +extern long _oss_count_setof_items(); + +/* called to skip past items for the EXTENSIBLE directive */ +extern void _oss_skip_past_item(); + +#endif /* _OSSNOANSI */ + +typedef struct _EncDecGlobals { + + jmp_buf *_oss_err_env; +#ifndef _OSSNOANSI + void (*_old_sigsegv)(int); + void (*_old_sigbus)(int); +#else + void (*_old_sigsegv)(); + void (*_old_sigbus)(); +#endif + int _oss_asn1err; + char *_oss_err_msg; + _Bool _buffer_provided; + _Bool _tag_decoded; + _Bool _restrain_mode; + long _restrain_size; + _Context_Anchor _oss_context_anchor; + char *_oss_outbufpos; + long _oss_outbuflen; + _mem_array _oss_mem; + _mem_array *_oss_mem_tail; + _mem_array *_oss_temp_tail; + _mem_array _oss_temp_mem; + long _oss_mem_alloc; + long _oss_out_alloc; + unsigned int relax_ber: 1; + unsigned char man[sizeof(double)]; +#if defined(_WINDOWS) || defined(_DLL) + void (DLL_ENTRY_FPTR *_oss_enc_error)(struct ossGlobal *g, _Bool _jump, + enum _err_index _error_code, long _data); +#endif /* _WINDOWS | _DLL */ + _Bool _aligned; + int _bitpos; + struct ossGlobal *_prev; + _Per_Inverted_Index *_ia; + _Bool _ia_aligned; + char *_oss_inbufpos; + long _oss_inbuflen; + void *_prevbuf; +} _EncDecGlobals; + +#ifdef __cplusplus +} +#endif + +#if defined(_MSC_VER) && (defined(_WIN32) || defined(WIN32)) +#pragma pack(pop, ossPacking) +#elif defined(_MSC_VER) && (defined(_WINDOWS) || defined(_MSDOS)) +#pragma pack() +#elif defined(__BORLANDC__) && (defined(__WIN32__) || defined(__MSDOS__)) +#pragma option -a. +#elif defined(__IBMC__) +#pragma pack() +#endif /* _MSC_VER && _WIN32 */ + +#endif /* ossber_hdr_file */ |