#ifndef	MultiXHIncluded
#define	MultiXHIncluded

#define	MultiXVersion					230
#define MultiXOldestVersionSupported	220

#define	MUtilArrayIndexNew				-1
#define	MUtilQueueSeqInvalid			-1
#define	MUtilArrayIndexInvalid			-2
#define	MMdxXonChar						0x11
#define	MMdxXoffChar					0x13

#define	MMdxParityNone		0l
#define	MMdxParityEven		0x80000000l
#define	MMdxParityOdd		0xc0000000l
#define	MMdxNoXonXoff		0x20000000l
#define	MMdxWordSize8		0x10000000l


#define	Use16
#define	MsDosOs
#define StdCall 				__pascal
#define	NoNetworkTranslation
#define	TimerAjustValue			0l
/*
#define	BEGIN		{
#define	END			}
#define	ELSE		else
#define	IF if		(
#define	THEN		)
#define	AND			&&
#define	OR			||
#define	LAND		&
#define	LOR			|
#define	XOR			^
#define	MOD			%
#define	SLAND(x,y)	(x)	&= (y)
#define	SLOR(x,y)	(x)	|= (y)
#define	SXOR(x,y)	(x)	^= (y)
#define	LANDE		&=
#define	LORE		|=
#define	XORE		^=
#define	MODE		%=
#define	REPEAT		do
#define	UNTIL(x)	while	(x)
#define	WHILE		while	(
#define	FOREVER		for(;;)
#define	FOR			for	(
#define	DO			)
#define	GETS		=
#define	EQ			==
#define	NE			!=
#define	GE			>=
#define	LE			<=
#define	LT			<
#define	GT			>
#define	NOT			!
#define	LNEG		~
#define	NOTEQ		!=
*/

#define	On	1
#define	Off	0

#define	MswGet(x)	(UInt16)(((UInt32)(x))	>>	16)
#define	LswGet(x)	(UInt16)(((UInt32)(x))	LAND	0xffff)

#define	MswSet(x,y)	x	GETS	(y	<<	16)	LOR	LswGet(x)
#define	LswSet(X,y)	x	GETS	y	LOR	((UInt32)(x)	LAND	0xffff0000)


#define	MakeFp(_Seg,_Off)	((FarPtr)(((UInt32)_Seg<<16)	LOR	_Off))

#define	TypedMax(t,a,b)	(t)(((t)(a)	> (t)(b)	?	(a)	: (b)))
#define	TypedMin(t,a,b)	(t)(((t)(a)	< (t)(b)	?	(a)	: (b)))

#define	Max16(a,b)	TypedMax(Int16,a,b)
#define	Min16(a,b)	TypedMin(Int16,a,b)

#define	MaxU16(a,b)	TypedMax(UInt16,a,b)
#define	MinU16(a,b)	TypedMin(UInt16,a,b)

#define	Max32(a,b)	TypedMax(Int32,a,b)
#define	Min32(a,b)	TypedMin(Int32,a,b)

#define	MaxU32(a,b)	TypedMax(UInt32,a,b)
#define	MinU32(a,b)	TypedMin(UInt32,a,b)

#define	SwapInt16(_Num)	(UInt16)((((UInt16)(_Num))	>>	8)	LOR	(((UInt16)(_Num))	<<	8))


#define	MIntSwap(_Int)		\
	(sizeof((_Int))	EQ	sizeof(Int16)	?	\
	(int)SwapInt16((UInt16)(_Int))			:	\
	(int)SwapInt32((UInt32)(_Int)))

#define	MIntSwapSet(_Int)	_Int	=	MIntSwap(_Int)

#define	MNetToHostInt(_Int)	(_Int)
#define	MHostToNetInt(_Int)	(_Int)
#define	MNetToHostIntSet(_Int)
#define	MHostToNetIntSet(_Int)


#define	NullP			(void	*)0
#define	MByteArray(x)	struct	{char	Byte[x];}
#define	IsNullP(x)		((x)	EQ	NullP)
#define	NotNullP(x)		((x)	NE	NullP)
#define	IfNotNullP(x)	IF	(x)	NE NullP	THEN
#define	IfNullP(x)		IF	(x)	EQ NullP	THEN
#define	MCreateNew(_X)	IfNullP((_X)	GETS	MdxCalloc(sizeof(*(_X))))	FatalError("No	Memory");
#define	MOccurs(_X)		(sizeof(_X)	/ sizeof((_X)[0]))

#define	FatalError(_ErrorText)	FatalErrorHandler(_ErrorText)


typedef				int		Int16;
typedef	unsigned			UInt16;
typedef				long	Int32;
typedef	unsigned	long	UInt32;
typedef	unsigned	short	UShort;
typedef	unsigned	int		TBit;
typedef				int		Int;
typedef	unsigned	int		UInt;
typedef				char	Int8;
typedef	unsigned	char	UInt8;
typedef				double	Double64;
typedef				float	Float32;
typedef				Int32	TFileDescr;
typedef				Int32	TLinkDescr;
typedef				Int16	TSLinkDescr;
typedef				Int16	TPtrArrayIndex;
typedef				Int32	TIndex;
typedef				UInt16	TSIndex;
typedef				UInt16	TBufSize;
typedef				Int32	TCounter;
typedef				Int16	TSCounter;
typedef				UInt16	TMdxObjectId;
typedef				Int32	TQueueSeq;
typedef				UInt32	TBaudRate;
typedef				UInt32	TTimer;
typedef				UInt32	TTimerId;
typedef				UInt32	TTimerTag;
typedef				Int32	TReqSeq;
typedef				Int16	TSReqSeq;
typedef				Int32	TListKey;
typedef				UInt32	*UInt32Ptr;
typedef				Int8	*Int8Ptr;
typedef				UInt8	*UInt8Ptr;
typedef				void	Void;
typedef				Int32	TMdxMsgSize;
typedef				Int16	TMdxBlockNo;
typedef				UInt16	TMdxMsgPri;
typedef				Int32	TMdxProcId;
typedef				Int16	TMdxMsgCode;
typedef				UInt32	TMdxTime;
typedef				UInt16	TMdxVersion;
typedef				UInt8	TOnOff;
typedef				Int8	TSResult;
typedef				Int8	TSBoolean;


typedef	MByteArray(30)	TMdxLinkName;
typedef	MByteArray(80)	TMdxService;
typedef	MByteArray(20)	TMdxNetAddr;
typedef	MByteArray(10)	TMdxPassword;
typedef	MByteArray(24)	TMdxProcDescr;

#pragma	pack(1)

typedef union	TVarChar
{
	Int16	Len;
	Int8	Text[2];
} TVarChar;

#pragma	pack()

typedef	enum	/*	TMdxStartupAttributes	*/
{
	MdxStartAsGateWay		=	0x0001,
	MdxUseDualEventQueues	=	0x0002,
	MdxReportAllProcesses	=	0x0004,
	MdxReportAllLinks		=	0x0008,
	MdxStartAsRouter		=	0x0010,
	MdxDisplayVersion		=	0x4000
} TMdxStartupAttributes;


typedef enum
{

	MdxLinkTypeAcceptOnly		=	0,	/*	Indicates	a	server	link	type,
											usually	as a	result	of	accept
											on	tcp/ip	or	something	like	that
										*/
	MdxLinkTypeFirst			=	1,

	MdxLinkTypeAsyncLocal		=	1,
	MdxLinkTypeNetBios			=	2,
	MdxLinkTypeTcpIpSocket		=	3,
	MdxLinkTypeNPipe			=	4,
	MdxLinkTypeAsyncModem		=	5,
	MdxLinkTypeX25				=	6,
	MdxLinkTypeLoopBack			=	7,
	MdxLinkTypeSpxIpx			=	8,
	MdxLinkTypeLast
} TMdxLinkType;

typedef enum
{
	MdxL2DlcProtoNone		=		0,
	MdxL2DlcProtoHdlc		=		1
} TMdxL2DlcProtocol;


typedef enum
{
	Failure	=	0,
	Success	=	1
} TResult;

typedef enum
{
	False	=	0,
	True	=	1
} TBoolean;


typedef enum
{
	MdxCallOk,
	MdxInvalidPassword
} TMdxCallError;


typedef enum
{
	L1WarnDontFreeSendBuf	=	-300	,
	L1ErrLinkNameMissing			,
	L1ErrUnableToInitSocket			,
	L1ErrAcceptError				,
	L1ErrLinkNameTooLong			,
	L1ErrInvalidLinkType			,
	L1ErrTooManyLinks				,
	L1ErrInvalidL1Ld				,
	L1ErrUnableToOpenAsync			,
	L1ErrUnableToSetupAsync			,
	L1ErrUnableToCreateNPipe		,
	L1ErrIllegalOperation			,
	L1ErrInvalidReqCode				,
	L1ErrTimeout					,
	L2ErrTooManyLinks				,
	L2ErrTooManyConnectRetries		,
	L2ErrSendQueueFull				,
	L2ErrSendBufferEmpty			,
	L2ErrSendBufferTooBig			,
	L2ErrMaxResetCount				,
	L2ErrMaxPollCount				,
	L2ErrInvalidConnectMode			,
	L2ErrInvalidFd					,
	L2ErrInvalidApprSeq				,
	L2ErrInvalidFrameType			,
	L2ErrInvalidReqCode				,
	L2ErrConnectFailed				,
	L2ErrNoResetResponse			,
	L2ErrNoPollResponse				,
	L3ErrProcessAlreadyDefined		,
	L3ErrNoLinkAvailable			,
	L3ErrSendBufferEmpty			,
	L3ErrMsgCanceled				,
	L3ErrInvalidReqCode				,
	L3ErrProcessDoesNotExist		,
	L3ErrNoGateWayAvailable			,
	L4ErrMsgSendCanceled			,
	L4ErrInvalidReqCode				,
	L4ErrInvalidReqSeq				,
	L5ErrProcessClosed				,
	L5ErrInvalidReqCode				,
	L6ErrInvalidReqCode				,
	UtErrTooManyLinks				,
	UtErrInvalidHashTable			,
	UtErrDuplicateHashKey			,
	UtErrHashKeyNotFound			,
	UtErrInvalidStackTable			,
	UtErrInvalidParam				,
	TsrErrMsgNotFound				,
	L2ErrMissingBuffer
} TMdxError;

typedef enum
{
	DdeErrFirstError			=	-400,
	DdeErrLastError				=	-381,
	DbmErrFirstError			=	-380,
	DbmErrLastError				=	-330,
	MdxErrFirstError			=	-300,
	MdxErrLastError				=	-201,
	TpErrFirstError				=	-200,
	TpErrLastError				=	-101,
	MdErrSessionRestarted		=	-100,
	MdErrMsgTimedOut,
	MdErrMsgCanceled,
	MdErrInvalidProcId,
	MdErrUnableToOpenLink,
	MdErrInvalidLinkLd,
	MdErrInvalidDriverIndex,
	MdErrLinkDisconnected,
	MdErrDataReplyNotAllowed,
	MdErrInvalidReplyInfo,
	MdErrMsgIsEmpty,
	MdErrInvalidEventCode,
	MdErrLinkClosed,
	MdErrLinkAlreadyOpened,
	MdErrProcessNotReady,
	MdErrNoMemory,
	MdErrLinkTypeNotSupported,
	MdErrNoError	=	0
} TMdxApplError;


typedef enum
{
	MdxDdeErrInvalidMsgCode	=	-400,
	MdxDdeErrAdviseStopped,
	MdxDdeErrInvalidDataFormat,
	MdxDdeErrInvalidItem
} TMdxDdeError;



typedef enum
{
	MdxConnectModeListen,
	MdxConnectModeCall
} TMdxConnectMode;

typedef enum
{
	MdxTimerEvent						=	110,
	MdxStdInAvailable					=	111,
	MdxIdleEvent						=	120,
	MdxL1L2EvConnectEnabled				=	130,
	MdxL1L2EvAcceptEnabled				=	140,
	MdxL1L2EvReadEnabled				=	150,
	MdxL1L2EvWriteEnabled				=	160,
	MdxL1L2EvLinkDisconnected			=	170,
	MdxL2L3EvSendComplete				=	180,
	MdxL2L3EvRecvComplete				=	190,
	MdxL2L3EvLinkClosed					=	200,
	MdxL2L3EvConnectComplete			=	210,
	MdxL2L3EvQueuesReset				=	220,
	MdxL2L3EvTransmitEnabled			=	225,
	MdxL2L3EvResumeTransmision			=	227,
	MdxL3L4EvMsgCancled					=	230,
	MdxL3L4EvMsgSentOk					=	240,
	MdxL3L4EvMsgReceived				=	250,
	MdxL3L4EvProcessReady				=	260,
	MdxL3L4EvProcessFailed				=	270,
	MdxL4L5EvMsgReceived				=	280,
	MdxL4L5EvControlMsgReceived			=	285,
	MdxL4L5EvMsgCancled					=	290,
	MdxL4L5EvMsgSentOk					=	300,
	MdxL4L5EvProcessReady				=	310,
	MdxL4L5EvProcessFailed				=	320,
	MdxL4L5EvProcessRestarted			=	330,
	MdxL4L5EvProcessConnected			=	340,
	MdxL5L6EvMsgReceived				=	350,
	MdxL5L6EvControlMsgReceived			=	355,
	MdxL5L6EvCallReqReceived			=	360,
	MdxL5L6EvCallRejected				=	370,
	MdxL5L6EvMsgCancled					=	380,
	MdxL5L6EvMsgSentOk					=	390,
	MdxL5L6EvCallCompleted				=	400,
	MdxL5L6EvProcessReady				=	402,
	MdxL5L6EvProcessNotReady			=	404,

	MdxEvDataMsgReceived				=	410,
	MdxEvDataReplyReceived				=	420,
	MdxEvSendMsgCompleted				=	430,

	MdxEvCallReqReceived				=	440,
	MdxEvCallRejected					=	450,
	MdxEvCallCompleted					=	460,


	MdxEvProcessReady					=	462,
	MdxEvProcessNotReady				=	464,

	MdxEventApplInit					=	470,
	MdxEvLinkStatus						=	480,
	MdxEvProcessAdded					=	490,
	MdxEvProcessRemoved					=	491,
	MdxEvNonMultiXDataReceived			=	500,


	MdxApplEventCodeFirst				=	30000,
	MdxApplEventCodeLast				=	31000

} TMdxEventCode;

typedef enum
{
	/*	Application	Assigned	Attributes	*/

	MdxResponseRequired	=	0x0001,
	MdxReportSuccess	=	0x0002,
	MdxReportError		=	0x0004,
	MdxResendOnRestart	=	0x0008,
	MdxReportAll		=	0x0007,
	MdxSendReliable		=	0x000f,
	MdxUseDataBuffer	=	0x0010,
	MdxUseDbProtection	=	0x0020,
	MdxUseMultiCast		=	0x0040,
	MdxDontUseAllocMod	=	0x0100,

	/*	Kernel	Assigned	Attributes	*/

	MdxL6IsReplyMsg			=	0x1000
} TMdxSendAttr;

typedef enum
{
	MdxL2EventHandlerIndex			=	2,
	MdxL3EventHandlerIndex			=	3,
	MdxL4EventHandlerIndex			=	4,
	MdxL5EventHandlerIndex			=	5,
	MdxL6EventHandlerIndex			=	6,
	MdxL7EventHandlerIndex			=	7,
	MdxTimerMgrEventHandlerIndex	=	8,
	MdxLinkMgrEventHandlerIndex		=	9,
	MdxProcMgrEventHandlerIndex		=	10,
	MdxEventHandlerIndexLast
} TMdxEventHandlerIndex;


typedef enum
{
	MdxTpmFirstMsgCode			=	-32700,
	MdxTpmLastMsgCode			=	-32601,
	MdxMvxFirstMsgCode			=	-32500,
	MdxMvxLastMsgCode			=	-32401,
	MdxSqlFirstMsgCode			=	-32400,
	MdxSqlLastMsgCode			=	-32351,
	MdxDdeAdviseStartMsgCode	=	-32100,
	MdxDdeAdviseDataMsgCode		=	-32099,
	MdxDdeDataReqMsgCode		=	-32098,
	MdxDdeDataReplyMsgCode		=	-32097,
	MdxDdePokeMsgCode			=	-32096,
	MdxDdeExecuteMsgCode		=	-32095
} TMdxReservedMsgCodes;

typedef enum
{
	MdxDdeDataFormatIsText	=	1
} TMdxDdeDataFormat;


typedef enum
{
	MdxSeekStart,
	MdxSeekFwrd,
	MdxSeekBack,
	MdxSeekEnd
} TMdxMsgSeekOrigin;


#pragma	pack(2)

typedef	struct	TMdxMsg
{
	TMdxObjectId	Id;
	TMdxMsgSize		BytesRead;
	void			*Global;
}	TMdxMsg;

typedef	struct	TMdxProtocol
{
	TBoolean	Supported;
	void		(*StartupRoutine)(void);
	void		(*CleanUpRoutine)(void);
	TMdxError	(*ServiceRoutine)(void	*);
	void		(*EventHandler)(void	*);
	void		(*SetPoll)(void);
	void		(*CheckPoll)(void);
}	TMdxProtocol;

typedef enum
{
	MdxL2NetDriverIndex	=	0,
	MdxL2RawDriverIndex	=	2
} TMdxL2DriverIndex;

typedef enum
{
	MdxL3NetDriverIndex	=	0
} TMdxL3DriverIndex;

typedef enum
{
	MdxLinkClosed,
	MdxLinkDisconnected,
	MdxLinkWaitConnect,
	MdxLinkConnected
} TMdxLinkStatus;



typedef	struct	TMdxLinkParams
{
	TLinkDescr			Ld;
	TMdxLinkType		LinkType;
	TMdxLinkName		LinkName;
	TBaudRate			LinkBaud;
	TOnOff				UseDlcFraming;
	TOnOff				Ebcdic;
	TMdxNetAddr			NetAddr;
	TMdxL2DriverIndex	L2DriverIndex;
	TMdxL3DriverIndex	L3DriverIndex;
	TMdxLinkStatus		LinkStatus;
	TMdxService			Service;
	TMdxConnectMode		ConnectMode;
	TTimer				ConnectTimeout;
	TTimer				ConnectRetriesDelay;
	TBufSize			L1MaxSendSize;
	TCounter			MaxConnectRetries;	/*	L3	*/
	TTimer				IdleTimeout;		/*	L3	*/
	TTimer				ImAliveInterval;	/*	L3	*/
	TTimer				PollInterval;		/*	L2	*/
	TSCounter			MaxPollRetries;		/*	L2	*/
	TMdxProcId			DefaultProcId;
}	TMdxLinkParams;

typedef	struct	TMdxProcessParams
{
	TMdxProcId		ProcId;
	TMdxPassword	PasswordToSend;
	TMdxPassword	ExpectedPassword;
	TTimer			InactivityTimer;
	TTimer			ConnectRetriesInterval;
}	TMdxProcessParams;

typedef	struct	TMdxApplTimerInfo
{
	TTimerId		TimerId;
	Int16			Code;
	TTimer			Timer;
	TTimerTag		Tag1;
	TTimerTag		Tag2;
	TTimerTag		Tag3;
	TCounter		Count;
}	TMdxApplTimerInfo;




/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/

/****	The internal structure of following structures are for			***/
/****	Application use.												***/

/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/

typedef	struct	TMdxEvent
{
	TMdxEventCode	Code;
	TLinkDescr		Ld;
	TMdxError		Error;
	TReqSeq			ReqSeq;
	TMdxProcId		ProcId;
	void			*Data;
	TBufSize		DataCount;
	TMdxEventHandlerIndex	DataDestructorIndex;
	TBoolean		KeepEvent;
	TMdxObjectId	Id;
	TTimer			EventTimer;
}	TMdxEvent;

/*	Send / Receive Msg Info */
typedef	struct	TMdxSRMsgInfo
{
	struct
	{
		TMdxMsg			*Msg;
		TMdxMsgCode		MsgCode;
		TMdxProcId		SentFrom;
		TQueueSeq		SenderMsgId;
		TMdxSendAttr	SendAttr;
		TMdxMsgPri		MsgPri;
	}	Received;
	struct
	{
		TMdxMsg			*Msg;
		TMdxMsgCode		MsgCode;
	}	Sent;
}	TMdxSRMsgInfo;

#pragma	pack()

typedef void			(cdecl	*	TEventHandler)(TMdxEvent	 *);
typedef	void			(cdecl	*	TEventDataDestructor)(TMdxEvent	*);

extern	TMdxProtocol		StdCall		ProtocolNotSupported(void);

extern	TMdxTime		StdCall	MdxGetTime(void);
extern	UInt32			StdCall	MdxTimeTo_time_t(TMdxTime);
extern	void			*StdCall	MdxAlloc(UInt32);
extern	void			*StdCall	MdxCalloc(UInt32);
extern	void			*StdCall	MdxRealloc(void	*,UInt32);
extern	void			StdCall	MdxFree(void	*);
extern	TTimer			StdCall	MdxGetCurrTimerValue(void);



extern	TTimerId		StdCall	MdxSetApplTimer(Int16,TTimer,TTimerTag,
													TTimerTag,TTimerTag,
													TCounter);
extern	void			StdCall	MdxClrTimer(TTimerId);
extern	TResult			StdCall	MdxGetApplTimerInfo(void	*,
														TMdxApplTimerInfo	*);


extern	TMdxMsg			*StdCall	MdxMsgNew(TMdxMsgSize);
extern	TMdxMsg			*StdCall	MdxMsgNewFile(Int8Ptr,UInt8Ptr,
												TSCounter);
extern	TMdxMsg			*StdCall	MdxMsgDup(TMdxMsg	*);
extern	TResult			StdCall	MdxMsgDelete(TMdxMsg	*);
extern	TResult			StdCall	MdxMsgAppend(TMdxMsg	*,void	*,
												TBufSize);
extern	TResult			StdCall	MdxMsgStore(TMdxMsg	*,TMdxMsgSize,void	*,
												TBufSize);
extern	TBufSize		StdCall	MdxMsgRead(TMdxMsg	*,void	*,
												TBufSize);
extern	TMdxMsgSize		StdCall	MdxMsgSeekRead(TMdxMsg	*,TMdxMsgSize,TMdxMsgSeekOrigin);
extern	TResult			StdCall	MdxMsgRewindRead(TMdxMsg	*);
extern	TMdxMsgSize		StdCall	MdxMsgSizeGet(TMdxMsg	*);
extern	TMdxError		StdCall	MdxSendMsg(TMdxProcId,TMdxMsg	*,
												TMdxMsgCode,TMdxMsgPri,
												TMdxSendAttr,TReqSeq,TTimer);
extern	TMdxError		StdCall	MdxSendData(TMdxProcId,void	*,
												TBufSize,TMdxMsgCode,
												TMdxMsgPri,TMdxSendAttr,
												TReqSeq,TTimer);
extern	TMdxError		StdCall	MdxReply(TMdxSRMsgInfo	*,TMdxError);
extern	TMdxError		StdCall	MdxReplyWithData(TMdxSRMsgInfo	*,
													TMdxError,void	*,
													TBufSize,TMdxMsgCode,
													TMdxMsgPri,TMdxSendAttr,
													TReqSeq,TTimer);
extern	TMdxError		StdCall	MdxReplyWithMsg(TMdxSRMsgInfo	*,
													TMdxError,TMdxMsg	*,
													TMdxMsgCode,TMdxMsgPri,
													TMdxSendAttr,TReqSeq,
													TTimer);
extern	TMdxError		cdecl	MdxL3SendNonMultiXData(TMdxProcId,
													UInt8Ptr,TBufSize);

extern	TMdxError		StdCall	MdxConnectProcess(TMdxProcessParams	*);
extern	TMdxError		StdCall	MdxDisconnectProcess(TMdxProcId);
extern	TMdxError		cdecl	MdxCheckProcessStatus(TMdxProcId);
extern	TMdxError		StdCall	MdxAcceptProcess(TMdxProcId,TMdxPassword	*);
extern	TMdxError		StdCall	MdxRejectProcess(TMdxProcId,
													TMdxCallError);


extern	TMdxError		cdecl	MdxOpenLink(TMdxLinkParams	*);
extern	TMdxError		cdecl	MdxCloseLink(TLinkDescr);
extern	TMdxError		cdecl	MdxCheckLinkStatus(TLinkDescr);
extern	TMdxError		cdecl	MdxGetLinkParams(TMdxLinkParams	*);


extern	void			cdecl	MultiXStart(TMdxProcId,Int8Ptr,
												TMdxStartupAttributes,
												TEventHandler);
extern	void			cdecl	MultiXWaitEvent(void);
extern	void			cdecl	MultiXCheckEvent(void);
extern	void			cdecl	MdxDeleteEvent(TMdxEvent	*);
extern	void			cdecl	FatalErrorHandler(Int8Ptr);
extern	TMdxProcId		cdecl	MdxGetMyId(TMdxProcDescr	*);
extern	TMdxError		cdecl	MdxCreateApplEvent(TMdxEventCode,void*,TBufSize);
extern	void			StdCall	TraceBuffer(Int16,void	*,TBufSize);
extern	int			StdCall	TruncSpace(void	*,int,TBoolean);

#endif	/*	MultiXHIncluded */
