406 lines
17 KiB
C
406 lines
17 KiB
C
/*
|
|
* Copyright (C) 1993-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: @(#)ossdll.h 5.7 96/04/23
|
|
*/
|
|
|
|
|
|
#ifndef OSSDLL_H
|
|
#define OSSDLL_H
|
|
|
|
#if defined(_WIN32) && defined(_MSC_VER)
|
|
#define LONG_LONG __int64
|
|
#elif defined(__BORLANDC__)
|
|
#define LONG_LONG long
|
|
#endif /* _WIN32 && _MSC_VER */
|
|
|
|
typedef enum {
|
|
OSS_DEFAULT_MEMMGR = 0, /* memory is malloc'ed for each pointer in
|
|
* data tree */
|
|
OSS_FILE_MEMMGR, /* file memory manager with memory malloc'ed
|
|
* for each pointer in data tree */
|
|
OSS_SOCKET_MEMMGR, /* TCP/IP socket and file memory manager with memory
|
|
* malloc'ed for each pointer in data tree */
|
|
OSS_FLAT_MEMMGR, /* memory is malloc'ed in large blocks */
|
|
OSS_OSAK_MEMMGR, /* OSAK-buffer memory manager */
|
|
OSS_USER_MEMMGR /* user memory manager */
|
|
} OssMemMgrType;
|
|
|
|
#if defined(_WINDOWS) || defined(_DLL) || \
|
|
defined(OS2_DLL) || defined(NETWARE_DLL)
|
|
#include <stdio.h>
|
|
#if defined(_WINDOWS) || defined(_DLL)
|
|
#include <windows.h>
|
|
#elif defined(OS2_DLL)
|
|
#define HWND int
|
|
#define LONG long
|
|
#define BOOL char
|
|
#define DWORD unsigned long
|
|
#define HINSTANCE unsigned long
|
|
#elif defined(NETWARE_DLL)
|
|
#define LONG unsigned long
|
|
#define HWND int
|
|
#define DWORD LONG
|
|
#define BOOL char
|
|
#define HINSTANCE LONG
|
|
#endif /* _WINDOWS || _DLL */
|
|
|
|
#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 */
|
|
|
|
#ifndef DLL_ENTRY
|
|
#if defined(_WIN32) || defined(WIN32) || defined(__WIN32__)
|
|
#ifdef __BORLANDC__
|
|
#define DLL_ENTRY __stdcall __export
|
|
#define DLL_ENTRY_FDEF __stdcall __export
|
|
#define DLL_ENTRY_FPTR __stdcall __export
|
|
#else
|
|
#define DLL_ENTRY WINAPI
|
|
#define DLL_ENTRY_FDEF WINAPI
|
|
#define DLL_ENTRY_FPTR WINAPI
|
|
#endif /* __BORLANDC__ */
|
|
#define _System
|
|
#elif defined(_WINDOWS)
|
|
#ifdef DPMI_DLL
|
|
#define DLL_ENTRY FAR PASCAL __export
|
|
#define DLL_ENTRY_FDEF FAR PASCAL __export
|
|
#define DLL_ENTRY_FPTR FAR PASCAL __export
|
|
#else
|
|
#define DLL_ENTRY far pascal _export
|
|
#define DLL_ENTRY_FDEF far pascal _export
|
|
#define DLL_ENTRY_FPTR far pascal _export
|
|
#endif /* DPMI_DLL */
|
|
#define _System
|
|
#elif defined(OS2_DLL)
|
|
#define DLL_ENTRY _System
|
|
#define DLL_ENTRY_FDEF _Export _System
|
|
#define DLL_ENTRY_FPTR
|
|
#elif defined(NETWARE_DLL)
|
|
#define DLL_ENTRY
|
|
#define DLL_ENTRY_FDEF
|
|
#define DLL_ENTRY_FPTR
|
|
#define _Export
|
|
#undef _System
|
|
#define _System
|
|
#endif /* _WIN32 || WIN32 || __WIN32__ */
|
|
#endif /* DLL_ENTRY */
|
|
|
|
#define BUFFERSIZE 1024
|
|
/*
|
|
* NUMBER_OF_LINES_IN_BLOCK is the number of
|
|
* 4-byte offsets in a block of memory allocated
|
|
* at a time. Each offset corresponds to a line
|
|
* of a text file to be displayed in a window.
|
|
*/
|
|
#define NUMBER_OF_LINES_IN_BLOCK 200
|
|
|
|
#define OSS_PLUS_INFINITY "PLUS_INFINITY"
|
|
#define OSS_MINUS_INFINITY "MINUS_INFINITY"
|
|
#define ossNaN "NOT_A_NUMBER"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct memblock {
|
|
struct memblock *prev;
|
|
struct memblock *next;
|
|
LONG *fileOffset;
|
|
short *lineLength;
|
|
short blockNumber;
|
|
} MEMBLOCK;
|
|
|
|
typedef struct memManagerTbl {
|
|
int (DLL_ENTRY_FPTR *_System ossMinitp)(void *);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System dopenInp)(void *,
|
|
void **, unsigned long *);
|
|
unsigned long (DLL_ENTRY_FPTR *_System dclosInp)(void *,
|
|
void **, size_t);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System dswapInp)(void *,
|
|
void **, size_t *);
|
|
void (DLL_ENTRY_FPTR *_System dopenOutp)(void *, void *,
|
|
unsigned long, unsigned long);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System dxferObjp)(void *,
|
|
void **inn, void **out,
|
|
size_t *, unsigned long *);
|
|
unsigned long (DLL_ENTRY_FPTR *_System dclosOutp)(void *, void **);
|
|
void *(DLL_ENTRY_FPTR *_System dallcOutp)(void *, size_t,
|
|
char root);
|
|
void (DLL_ENTRY_FPTR *_System openWorkp)(void *);
|
|
void (DLL_ENTRY_FPTR *_System pushHndlp)(void *, void *);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System popHndlp)(void *,
|
|
void **, size_t);
|
|
void (DLL_ENTRY_FPTR *_System closWorkp)(void *);
|
|
void *(DLL_ENTRY_FPTR *_System allcWorkp)(void *, size_t);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System lockMemp)(void *, void *);
|
|
void (DLL_ENTRY_FPTR *_System unlokMemp)(void *, void *,
|
|
char);
|
|
void (DLL_ENTRY_FPTR *_System ossFreerp)(void *, void *);
|
|
int (DLL_ENTRY_FPTR *_System freePDUp)(void *, int,
|
|
void *, void *);
|
|
void (DLL_ENTRY_FPTR *_System drcovObjp)(void *, int,
|
|
void *, void *);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System eopenInp)(void *, void *,
|
|
size_t);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System eswapInp)(void *, void *,
|
|
void *, size_t);
|
|
void (DLL_ENTRY_FPTR *_System eclosInp)(void *, void *);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System eopenOutp)(void *, void **,
|
|
size_t *, char);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System eswapOutp)(void *, void **,
|
|
size_t, size_t *);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System exferObjp)(void *, void **,
|
|
void **, unsigned long *, unsigned long);
|
|
unsigned long (DLL_ENTRY_FPTR *_System eclosOutp)(void *, void **,
|
|
size_t, char);
|
|
void (DLL_ENTRY_FPTR *_System ercovObjp)(void *);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System asideBeginp)(void *,
|
|
void **, size_t, size_t *);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System asideSwapp)(void *,
|
|
void **, size_t, size_t *);
|
|
void *(DLL_ENTRY_FPTR *_System asideEndp)(void *,
|
|
void *, size_t);
|
|
unsigned char *(DLL_ENTRY_FPTR *_System setDumpp)(void *, void **,
|
|
void *, size_t *);
|
|
void (DLL_ENTRY_FPTR *_System ossSetSortp)(void *, void *,
|
|
unsigned char);
|
|
void (DLL_ENTRY_FPTR *_System freeBUFp)(void *, void *);
|
|
void *(DLL_ENTRY_FPTR *_System _ossMarkObjp)(void *,
|
|
OssMemMgrType, void *);
|
|
void *(DLL_ENTRY_FPTR *_System _ossUnmarkObjp)(void *,
|
|
void *);
|
|
void *(DLL_ENTRY_FPTR *_System _ossTestObjp)(void *,
|
|
void *);
|
|
void (DLL_ENTRY_FPTR *_System _ossFreeObjectStackp)(void *);
|
|
void (DLL_ENTRY_FPTR *_System osstracep)(void *,
|
|
void *p, size_t);
|
|
void (DLL_ENTRY_FPTR *_System ossMtermp)(void *);
|
|
} MemManagerTbl;
|
|
|
|
typedef struct cstrainTbl {
|
|
int (DLL_ENTRY_FPTR *_System ossConstrainp)(void *, int, void *, void *);
|
|
} CstrainTbl;
|
|
|
|
typedef struct berTbl {
|
|
int (DLL_ENTRY_FPTR *_System ossBerEncodep)(void *, int, void *,
|
|
char **, long *, void *, unsigned, char *);
|
|
int (DLL_ENTRY_FPTR *_System ossBerDecodep)(void *, int *, char **,
|
|
long *, void **, long *, void *, unsigned, char *);
|
|
void (DLL_ENTRY_FPTR *_System enc_errorp)(void *world,
|
|
OssMemMgrType, void *);
|
|
void (DLL_ENTRY_FPTR *_System dec_errorp)(void *world,
|
|
OssMemMgrType, void *);
|
|
long (DLL_ENTRY_FPTR *_System writetobufferp)(void *, unsigned char c);
|
|
long (DLL_ENTRY_FPTR *_System write_intp)(void *, char length, LONG_LONG);
|
|
long (DLL_ENTRY_FPTR *_System write_valuep)(void *, unsigned long,
|
|
unsigned char *, char);
|
|
int (DLL_ENTRY_FPTR *_System numbitsp)(long);
|
|
void (DLL_ENTRY_FPTR *_System fpeHandlerp)(int);
|
|
void *(DLL_ENTRY_FPTR *_System new_perm_pointed_top)(void *, void *,
|
|
size_t, size_t);
|
|
void (DLL_ENTRY_FPTR *_System release_work_spacep)(void *, void *, size_t);
|
|
void *(DLL_ENTRY_FPTR *_System copy_from_work_spacep)(void *, size_t,
|
|
size_t suffix, void *, size_t, char);
|
|
unsigned char (DLL_ENTRY_FPTR *_System get_bytep)(void *);
|
|
void (DLL_ENTRY_FPTR *_System set_intp)(void *, unsigned char *,
|
|
unsigned int, LONG_LONG value, enum OssMemMgrType);
|
|
void *(DLL_ENTRY_FPTR *_System reserve_work_spacep)(void *,
|
|
size_t, size_t *);
|
|
} BERTbl;
|
|
|
|
typedef struct perTbl {
|
|
int (DLL_ENTRY_FPTR *_System ossPerEncodep)(void *, int, void *,
|
|
char **, long *, void *, unsigned, char *);
|
|
int (DLL_ENTRY_FPTR *_System ossPerDecodep)(void *, int *, char **,
|
|
long *, void **, long *, void *, unsigned, char *);
|
|
} PERTbl;
|
|
|
|
typedef struct apiTbl {
|
|
int (DLL_ENTRY_FPTR *_System ossSetEncodingRulesp)(void *, OssMemMgrType);
|
|
OssMemMgrType (DLL_ENTRY_FPTR *_System ossGetEncodingRulesp)(void *);
|
|
int (DLL_ENTRY_FPTR *_System ossDispatchEncodep)(void *world, int,
|
|
void *, char **, long *, void *, unsigned, char *);
|
|
int (DLL_ENTRY_FPTR *_System ossDispatchDecodep)(void *, int *, char **,
|
|
long *, void **, long *, void *, unsigned, char *);
|
|
int (DLL_ENTRY_FPTR *_System encodep)(void *, int, void *, char **,
|
|
long *, void *, unsigned, char *);
|
|
int (DLL_ENTRY_FPTR *_System decodep)(void *, int *, char **, long *,
|
|
void **, long *, void *, unsigned, char *);
|
|
int (DLL_ENTRY_FPTR *_System ossSetDecodingLengthp)(void *, long);
|
|
long (DLL_ENTRY_FPTR *_System ossGetDecodingLengthp)(void *);
|
|
int (DLL_ENTRY_FPTR *_System ossSetEncodingFlagsp)(void *, unsigned);
|
|
unsigned (DLL_ENTRY_FPTR *_System ossGetEncodingFlagsp)(void *);
|
|
int (DLL_ENTRY_FPTR *_System ossSetDecodingFlagsp)(void *, unsigned);
|
|
unsigned (DLL_ENTRY_FPTR *_System ossGetDecodingFlagsp)(void *);
|
|
char *(DLL_ENTRY_FPTR *_System ossGetErrMsgp)(void *world);
|
|
void (DLL_ENTRY_FPTR *_System ossPrintHexp)(void *, char *, long);
|
|
int (DLL_ENTRY_FPTR *_System ossEncodep)(void *, int, void *, void *);
|
|
int (DLL_ENTRY_FPTR *_System ossDecodep)(void *, int *, void *, void **);
|
|
int (DLL_ENTRY_FPTR *_System ossPrintPDUp)(void *, int, void *);
|
|
int (DLL_ENTRY_FPTR *_System ossFreePDUp)(void *, int, void *);
|
|
void (DLL_ENTRY_FPTR *_System ossFreeBufp)(void *, void *);
|
|
int (DLL_ENTRY_FPTR *_System ossCallerIsDecoderp)(void *);
|
|
void *(DLL_ENTRY_FPTR *_System ossMarkObjp)(void *, OssMemMgrType, void *);
|
|
void *(DLL_ENTRY_FPTR *_System ossUnmarkObjp)(void *, void *);
|
|
void *(DLL_ENTRY_FPTR *_System ossTestObjp)(void *, void *);
|
|
void (DLL_ENTRY_FPTR *_System ossFreeObjectStackp)(void *);
|
|
int (DLL_ENTRY_FPTR *ossPrintWinp)(void *, const char *, int, int,
|
|
int, int, int, int, int, int, int, int);
|
|
int (DLL_ENTRY_FPTR *_System ossReadLinep)(void *, HWND, FILE *,
|
|
char *, MEMBLOCK *, LONG);
|
|
void (DLL_ENTRY_FPTR *_System ossFreeListp)(void *);
|
|
void (DLL_ENTRY_FPTR *_System ossSaveTraceInfop)(void *, HWND, char *);
|
|
} ApiTbl;
|
|
|
|
typedef struct cpyvalTbl {
|
|
int (DLL_ENTRY_FPTR *_System ossCpyValuep)(void *, int, void *, void **);
|
|
} CpyValTbl;
|
|
|
|
typedef struct cmpvalTbl {
|
|
int (DLL_ENTRY_FPTR *_System ossCmpValuep)(void *, int, void *, void *);
|
|
} CmpValTbl;
|
|
|
|
typedef struct berrealTbl {
|
|
long (DLL_ENTRY_FPTR *_System ossBerEncodeRealp)(void *, void *,
|
|
unsigned char *);
|
|
long (DLL_ENTRY_FPTR *_System ossBerDecodeRealp)(void *, void *,
|
|
long, char);
|
|
} BerRealTbl;
|
|
|
|
typedef struct perrealTbl {
|
|
long (DLL_ENTRY_FPTR *_System ossPerEncodeRealp)(void *, void *, unsigned char *);
|
|
long (DLL_ENTRY_FPTR *_System ossPerDecodeRealp)(void *, long, char);
|
|
} PerRealTbl;
|
|
|
|
/*
|
|
* The structure "WinParm" is used to store DLL-related information.
|
|
*/
|
|
typedef struct winparm {
|
|
HWND hWnd; /* Handle of the window */
|
|
LONG index; /* Current index into the file pointer array;
|
|
* it indicates the number of lines written */
|
|
MEMBLOCK *memBlock; /* Pointer to a current node of a memory
|
|
* handling linked list of MEMBLOCKs */
|
|
MEMBLOCK *startBlock; /* Pointer to the first node of a memory
|
|
* handling linked list of MEMBLOCKs */
|
|
short length; /* Length of a line that is written only
|
|
* in part and no '\n' symbol was reached yet */
|
|
short blockNumber; /* Current MEMBLOCK number */
|
|
FILE *tmpfp; /* Temporary output file with tracing info */
|
|
char tmpfn[16]; /* Temporary output file name */
|
|
BOOL endSwitch; /* Indicates if a '\n' symbol was reached or
|
|
* not when writing a tracing info file to
|
|
* a window */
|
|
BOOL conSwitch; /* If FALSE, the output goes to a console,
|
|
* otherwise to a window */
|
|
BOOL ossEncoderDecoderType; /* SOED vs. TOED */
|
|
BOOL cstrainNeeded; /* If TRUE, constraint checking is needed */
|
|
CstrainTbl *cstrainTbl; /* Constraint checker DLL function table */
|
|
BERTbl *berTbl; /* BER & DER DLL function table */
|
|
PERTbl *perTbl; /* PER DLL function table */
|
|
ApiTbl *apiTbl; /* Spartan/basic API DLL function table */
|
|
CpyValTbl *cpyvalTbl; /* Value copier DLL function table */
|
|
CmpValTbl *cmpvalTbl; /* Value comparator DLL function table */
|
|
BerRealTbl *berrealTbl; /* BER/DER encoder/decoder real DLL function
|
|
* table */
|
|
MemManagerTbl *memMgrTbl; /* Memory manager DLL function table */
|
|
PerRealTbl *perrealTbl; /* PER encoder/decoder real DLL function table */
|
|
HINSTANCE hBerDLL; /* Handle of BER/DER encoder/decoder DLL */
|
|
HINSTANCE hPerDLL; /* Handle of PER DLL */
|
|
HINSTANCE hCtlDLL; /* Handle of control table/code file DLL */
|
|
HINSTANCE hMemDLL; /* Handle of memory manager DLL */
|
|
HINSTANCE hCstrainDLL; /* Handle of constraint checker DLL */
|
|
HINSTANCE hApiDLL; /* Handle of Spartan/basic API DLL */
|
|
HINSTANCE hCpyvalDLL; /* Handle of value copier DLL */
|
|
HINSTANCE hCmpvalDLL; /* Handle of value comparator DLL */
|
|
HINSTANCE hBerrealDLL; /* Handle of BER/DER encoder/decoder real DLL */
|
|
HINSTANCE hPerrealDLL; /* Handle of PER encoder/decoder real DLL */
|
|
void *reserved[10]; /* Reserved for possible future use */
|
|
} WinParm;
|
|
|
|
#ifndef OS2_DLL
|
|
extern int DLL_ENTRY ossPrintWin(struct ossGlobal *, const char *, int, int,
|
|
int, int, int, int, int, int, int, int);
|
|
extern BOOL ossWriteWindow(struct ossGlobal *, HWND);
|
|
extern int DLL_ENTRY ossReadLine(struct ossGlobal *, HWND, FILE *, char *, MEMBLOCK *, LONG);
|
|
extern void DLL_ENTRY ossFreeList(struct ossGlobal *);
|
|
extern void DLL_ENTRY ossSaveTraceInfo(struct ossGlobal *, HWND, char *);
|
|
void *getStartAddress(struct ossGlobal *, char *);
|
|
extern int DLL_ENTRY oss_test(struct ossGlobal *);
|
|
int ossGeneric(struct ossGlobal *, HWND);
|
|
extern void DLL_ENTRY ossWterm(struct ossGlobal *);
|
|
extern HINSTANCE DLL_ENTRY ossLoadMemoryManager(struct ossGlobal *,
|
|
OssMemMgrType, char *);
|
|
extern HINSTANCE DLL_ENTRY ossLoadDll(struct ossGlobal *, char *);
|
|
extern int DLL_ENTRY ossFreeDll(struct ossGlobal *, char *);
|
|
extern int DLL_ENTRY ossOpenTraceFile(struct ossGlobal *, char *);
|
|
extern void *DLL_ENTRY ossGetHeader(void);
|
|
extern const int ossEncoderDecoderType;
|
|
#if defined(_WINDOWS) && !defined(_WIN32) && !defined(WIN32)
|
|
#define GWL_USERDATA 0
|
|
#define ossWinit(world, ctl_tbl, dllName, hWnd) \
|
|
(*(void **)ctl_tbl = (void *)MakeProcInstance((FARPROC)*(void **)ctl_tbl, hInst),\
|
|
osswinit(world, ctl_tbl, dllName, hWnd))
|
|
#else
|
|
#define ossWinit osswinit
|
|
#endif /* _WINDOWS && !_WIN32 && !WIN32 */
|
|
extern int DLL_ENTRY osswinit(struct ossGlobal *, void *, char *, HWND);
|
|
/*
|
|
* These two functions are callback functions used by the
|
|
* memory manager & tracing routine DLL as low level memory
|
|
* allocator and freer replacing the default which is malloc()
|
|
* and free(). They are used as callback functions under 16-bit
|
|
* Windows for DOS only. Under Windows NT they may be replaced
|
|
* directly by setting the corresponding function pointers in
|
|
* the ossGlobal structure. See ossgnrc.c for more information.
|
|
*/
|
|
extern void *DLL_ENTRY getmem(size_t);
|
|
extern void DLL_ENTRY rlsmem(void *);
|
|
extern HINSTANCE hInst;
|
|
extern int DLL_ENTRY _freePDU(struct ossGlobal *, int, void *, void *);
|
|
#endif /* OS2_DLL */
|
|
#define freeBUF ossFreeBuf
|
|
#define freePDU _freePDU
|
|
extern void *ctl_tbl;
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
#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 */
|
|
#elif !defined(DLL_ENTRY)
|
|
#if defined(_WIN32) || defined(WIN32)
|
|
#include <windows.h>
|
|
#define DLL_ENTRY WINAPI
|
|
#define DLL_ENTRY_FDEF WINAPI
|
|
#define DLL_ENTRY_FPTR WINAPI
|
|
#else
|
|
#define DLL_ENTRY
|
|
#define DLL_ENTRY_FDEF
|
|
#define DLL_ENTRY_FPTR
|
|
#endif /* _WIN32 || WIN32 */
|
|
#undef _System
|
|
#define _System
|
|
#endif /* _WINDOWS || _DLL || OS2_DLL || NETWARE_DLL */
|
|
#endif /* OSSDLL_H */
|
|
|