/*****************************************************************************/
/* Copyright (C) 1989-1996 Open Systems Solutions, Inc. All rights reserved.*/
/*****************************************************************************/
/* THIS FILE IS PROPRIETARY MATERIAL OF OPEN SYSTEMS SOLUTIONS, INC.
* AND MAY ONLY BE USED BY DIRECT LICENSEES OF OPEN SYSTEM SOLUTIONS, INC.
* THIS FILE MAY NOT BE DISTRIBUTED. */
/**************************************************************************/
/* FILE: @(#)asn1util.h 5.4 96/04/23 */
/* */
/* function: Support routines definitions for the optimized */
/* encoder/decoder generated by the OSS ASN.1 Compiler */
/* */
/* */
/* changes: */
/* 11/16/90 pet created */
/* */
/**************************************************************************/
#include "ossdll.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 */
/* The _MEM_ARRAY_SIZE size should be such that the size of the encDecVar
* field be equal or greater than that of the world->c structure */
#ifdef __hp9000s300
#define _MEM_ARRAY_SIZE 34
#endif
#ifdef __alpha
#ifdef __osf__
#define _MEM_ARRAY_SIZE 43
#endif /* __osf__ */
#endif /* __alpha */
#ifdef _AIX
#define _MEM_ARRAY_SIZE 52
#endif
#ifdef __hp9000s700
#define _MEM_ARRAY_SIZE 60
#endif
#ifdef __NeXT__
#define _MEM_ARRAY_SIZE 66
#endif
#ifdef VAXC
#define _MEM_ARRAY_SIZE 78
#endif
#ifdef __TANDEM
# ifdef __XMEM
# ifdef __INT32
# define _MEM_ARRAY_SIZE 83
# else /* INT32 */
# define _MEM_ARRAY_SIZE 84
# endif /* INT32 */
# else /* XMEM */
# define _MEM_ARRAY_SIZE 136
# endif /* XMEM */
#endif /* TANDEM */
#ifdef __mips
# define _MEM_ARRAY_SIZE 70
#endif /* __mips */
#ifdef _FTX /* Stratus's Fault Tolerant Unix */
#define _MEM_ARRAY_SIZE 92
#endif
#ifndef _MEM_ARRAY_SIZE
#define _MEM_ARRAY_SIZE 80
#endif
typedef struct _mem_array_ {
short _used; /* Next available entry */
void *_entry[_MEM_ARRAY_SIZE]; /* Pointers to allocated
* memory */
struct _mem_array_ *_next; /* Pointer to additional mem_array */
} _mem_array;
#if defined(_WINDOWS) || defined(_WIN32)
/*
* This structure is used as a node to build a linked list of
* the addresses of the ossGlobal structures for each copy of
* the encoder/decoder run under Windows 3.1 to make the decoder
* reentrant when floating point errors occur (see globlist.c)
*/
struct globalInfo {
/*
* It is very important that "next" come first in "globalInfo".
* See globlist.c for more info about the code itself
*/
struct globalInfo *next; /* pointer to the next node in the list */
struct globalInfo *prev; /* pointer to the previous node */
DWORD task; /* process id number */
DWORD thread;/* thread id number */
struct ossGlobal *world; /* pointer to "ossGlobal" for current task */
};
extern BOOL globlist(struct ossGlobal *, struct globalInfo *,
struct globalInfo **);
extern BOOL serializeGlobalAccess(struct ossGlobal *, struct globalInfo *,
struct globalInfo **);
extern struct globalInfo *sigworld;
#else
extern struct ossGlobal *sigworld;
#endif /* _WINDOWS || _WIN32 */
#ifndef _BOOL
#define _BOOL
typedef char _Bool;
#endif
#ifndef _OSSNOANSI
#ifdef __cplusplus
extern "C"
{
#endif
extern void *DLL_ENTRY _oss_enc_getmem(struct ossGlobal *g,_Bool _userbuf);
extern void *DLL_ENTRY _oss_dec_getmem(struct ossGlobal *g,long _size,_Bool _userbuf);
extern void DLL_ENTRY _oss_enc_push(struct ossGlobal *g,void *_p);
extern void *DLL_ENTRY _oss_enc_pop(struct ossGlobal *g);
extern void DLL_ENTRY _oss_freeMem(struct ossGlobal *g,_mem_array *_p);
extern void DLL_ENTRY _oss_releaseMem(struct ossGlobal *g,_mem_array *_p);
#define _oss_freeTempMem _oss_releaseMem
extern void DLL_ENTRY _oss_set_outmem_d(struct ossGlobal *g, long _final_max_len,
long *_totalsize, char **_outbuf);
extern void DLL_ENTRY _oss_set_outmem_i(struct ossGlobal *g,long _final_max_len,
long *_totalsize,char **_outbuf);
extern void DLL_ENTRY _oss_set_outmem_p(struct ossGlobal *g,
long *_totalsize,char **_outbuf);
extern void DLL_ENTRY _oss_set_outmem_pb(struct ossGlobal *g,
long *_totalsize, char **_outbuf, unsigned flags);
extern void _oss_hdl_signal(int _signal);
extern void DLL_ENTRY _oss_free_creal(struct ossGlobal *g, char *p);
extern int DLL_ENTRY ossMinit(struct ossGlobal *g);
#ifdef __cplusplus
}
#endif
#else
extern void *_oss_enc_getmem();
extern void *_oss_dec_getmem();
extern void _oss_enc_push();
extern void *_oss_enc_pop();
extern void _oss_freeMem();
extern void _oss_releaseMem();
#define _oss_freeTempMem _oss_releaseMem
extern void _oss_set_outmem_d();
extern void _oss_set_outmem_i();
extern void _oss_set_outmem_p();
extern void _oss_set_outmem_pb();
extern void _oss_free_creal();
extern void _oss_hdl_signal(); /* signal handler */
#endif /* _OSSNOANSI */
#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 */