/*
 	File:		Terminals.h
 
 	Contains:	Communications Toolbox Terminal tool Interfaces.
 
 	Version:	Technology:	System 7.5
 				Release:	QuickTime 4.1
 
 	Copyright:	(c) 1988-1993, 1995-1999 by Apple Computer, Inc., all rights reserved
 
 	Bugs?:		For bug reports, consult the following page on
 				the World Wide Web:
 
 					http://developer.apple.com/bugreporter/
 
*/
#ifndef __TERMINALS__
#define __TERMINALS__

#ifndef __CONDITIONALMACROS__
	#include <ConditionalMacros.h>
#endif

#ifndef __DIALOGS__
	#include <Dialogs.h>
#endif

#ifndef __CTBUTILITIES__
	#include <CTBUtilities.h>
#endif

#ifndef __CONNECTIONS__
	#include <Connections.h>
#endif




#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if PRAGMA_IMPORT
#pragma import on
#endif

#if PRAGMA_STRUCT_ALIGN
	#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
	#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
	#pragma pack(2)
#endif

#if CALL_NOT_IN_CARBON
enum {
	curTMVersion				= 2								/* current Terminal Manager version */
};

enum {
	curTermEnvRecVers			= 0								/* current Terminal Manager Environment Record version */
};

enum {
																/* error codes    */
	tmGenericError				= -1,
	tmNoErr						= 0,
	tmNotSent					= 1,
	tmEnvironsChanged			= 2,
	tmNotSupported				= 7,
	tmNoTools					= 8
};

typedef OSErr 							TMErr;
enum {
	tmInvisible					= 1 << 0,
	tmSaveBeforeClear			= 1 << 1,
	tmNoMenus					= 1 << 2,
	tmAutoScroll				= 1 << 3,
	tmConfigChanged				= 1 << 4
};

typedef unsigned long 					TMFlags;
enum {
	selTextNormal				= 1 << 0,
	selTextBoxed				= 1 << 1,
	selGraphicsMarquee			= 1 << 2,
	selGraphicsLasso			= 1 << 3,
	tmSearchNoDiacrit			= 1 << 8,
	tmSearchNoCase				= 1 << 9
};

typedef unsigned short 					TMSearchTypes;
typedef short 							TMSelTypes;
enum {
	cursorText					= 1,
	cursorGraphics				= 2
};

typedef unsigned short 					TMCursorTypes;
enum {
	tmTextTerminal				= 1 << 0,
	tmGraphicsTerminal			= 1 << 1
};

typedef unsigned short 					TMTermTypes;

struct TermDataBlock {
	TMTermTypes 					flags;
	Handle 							theData;
	Handle 							auxData;
	long 							reserved;
};
typedef struct TermDataBlock			TermDataBlock;
typedef TermDataBlock *					TermDataBlockPtr;
typedef TermDataBlockPtr *				TermDataBlockH;
typedef TermDataBlockPtr *				TermDataBlockHandle;

struct TermEnvironRec {
	short 							version;
	TMTermTypes 					termType;
	short 							textRows;
	short 							textCols;
	Point 							cellSize;
	Rect 							graphicSize;
	Point 							slop;
	Rect 							auxSpace;
};
typedef struct TermEnvironRec			TermEnvironRec;

typedef TermEnvironRec *				TermEnvironPtr;

union TMSelection {
	Rect 							selRect;
	RgnHandle 						selRgnHandle;
};
typedef union TMSelection				TMSelection;
typedef struct TermRecord 				TermRecord;

typedef TermRecord *					TermPtr;
typedef TermPtr *						TermHandle;
typedef CALLBACK_API( long , TerminalSendProcPtr )(Ptr thePtr, long theSize, long refCon, CMFlags flags);
typedef CALLBACK_API( void , TerminalBreakProcPtr )(long duration, long refCon);
typedef CALLBACK_API( long , TerminalCacheProcPtr )(long refCon, TermDataBlockPtr theTermData);
typedef CALLBACK_API( void , TerminalSearchCallBackProcPtr )(TermHandle hTerm, short refNum, Rect *foundRect);
typedef CALLBACK_API( Boolean , TerminalClikLoopProcPtr )(long refCon);
typedef CALLBACK_API( CMErr , TerminalEnvironsProcPtr )(long refCon, ConnEnvironRec *theEnvirons);
typedef CALLBACK_API( void , TerminalChooseIdleProcPtr )(void );
typedef CALLBACK_API( long , TerminalToolDefProcPtr )(TermHandle hTerm, short msg, long p1, long p2, long p3);
typedef STACK_UPP_TYPE(TerminalSendProcPtr) 					TerminalSendUPP;
typedef STACK_UPP_TYPE(TerminalBreakProcPtr) 					TerminalBreakUPP;
typedef STACK_UPP_TYPE(TerminalCacheProcPtr) 					TerminalCacheUPP;
typedef STACK_UPP_TYPE(TerminalSearchCallBackProcPtr) 			TerminalSearchCallBackUPP;
typedef STACK_UPP_TYPE(TerminalClikLoopProcPtr) 				TerminalClikLoopUPP;
typedef STACK_UPP_TYPE(TerminalEnvironsProcPtr) 				TerminalEnvironsUPP;
typedef STACK_UPP_TYPE(TerminalChooseIdleProcPtr) 				TerminalChooseIdleUPP;
typedef STACK_UPP_TYPE(TerminalToolDefProcPtr) 					TerminalToolDefUPP;
/*    TMTermTypes     */

struct TermRecord {
	short 							procID;
	TMFlags 						flags;
	TMErr 							errCode;
	long 							refCon;
	long 							userData;
	TerminalToolDefUPP 				defProc;
	Ptr 							config;
	Ptr 							oldConfig;
	TerminalEnvironsUPP 			environsProc;
	long 							reserved1;
	long 							reserved2;
	Ptr 							tmPrivate;
	TerminalSendUPP 				sendProc;
	TerminalBreakUPP 				breakProc;
	TerminalCacheUPP 				cacheProc;
	TerminalClikLoopUPP 			clikLoop;
	WindowPtr 						owner;
	Rect 							termRect;
	Rect 							viewRect;
	Rect 							visRect;
	long 							lastIdle;
	TMSelection 					selection;
	TMSelTypes 						selType;
	long 							mluField;
};

#if OPAQUE_UPP_TYPES
	EXTERN_API(TerminalSendUPP)
	NewTerminalSendUPP			   (TerminalSendProcPtr		userRoutine);

	EXTERN_API(TerminalBreakUPP)
	NewTerminalBreakUPP			   (TerminalBreakProcPtr	userRoutine);

	EXTERN_API(TerminalCacheUPP)
	NewTerminalCacheUPP			   (TerminalCacheProcPtr	userRoutine);

	EXTERN_API(TerminalSearchCallBackUPP)
	NewTerminalSearchCallBackUPP    (TerminalSearchCallBackProcPtr userRoutine);

	EXTERN_API(TerminalClikLoopUPP)
	NewTerminalClikLoopUPP		   (TerminalClikLoopProcPtr	userRoutine);

	EXTERN_API(TerminalEnvironsUPP)
	NewTerminalEnvironsUPP		   (TerminalEnvironsProcPtr	userRoutine);

	EXTERN_API(TerminalChooseIdleUPP)
	NewTerminalChooseIdleUPP	   (TerminalChooseIdleProcPtr userRoutine);

	EXTERN_API(TerminalToolDefUPP)
	NewTerminalToolDefUPP		   (TerminalToolDefProcPtr	userRoutine);

	EXTERN_API(void)
	DisposeTerminalSendUPP		   (TerminalSendUPP			userUPP);

	EXTERN_API(void)
	DisposeTerminalBreakUPP		   (TerminalBreakUPP		userUPP);

	EXTERN_API(void)
	DisposeTerminalCacheUPP		   (TerminalCacheUPP		userUPP);

	EXTERN_API(void)
	DisposeTerminalSearchCallBackUPP    (TerminalSearchCallBackUPP userUPP);

	EXTERN_API(void)
	DisposeTerminalClikLoopUPP	   (TerminalClikLoopUPP		userUPP);

	EXTERN_API(void)
	DisposeTerminalEnvironsUPP	   (TerminalEnvironsUPP		userUPP);

	EXTERN_API(void)
	DisposeTerminalChooseIdleUPP    (TerminalChooseIdleUPP	userUPP);

	EXTERN_API(void)
	DisposeTerminalToolDefUPP	   (TerminalToolDefUPP		userUPP);

	EXTERN_API(long)
	InvokeTerminalSendUPP		   (Ptr						thePtr,
									long					theSize,
									long					refCon,
									CMFlags					flags,
									TerminalSendUPP			userUPP);

	EXTERN_API(void)
	InvokeTerminalBreakUPP		   (long					duration,
									long					refCon,
									TerminalBreakUPP		userUPP);

	EXTERN_API(long)
	InvokeTerminalCacheUPP		   (long					refCon,
									TermDataBlockPtr		theTermData,
									TerminalCacheUPP		userUPP);

	EXTERN_API(void)
	InvokeTerminalSearchCallBackUPP    (TermHandle			hTerm,
									short					refNum,
									Rect *					foundRect,
									TerminalSearchCallBackUPP userUPP);

	EXTERN_API(Boolean)
	InvokeTerminalClikLoopUPP	   (long					refCon,
									TerminalClikLoopUPP		userUPP);

	EXTERN_API(CMErr)
	InvokeTerminalEnvironsUPP	   (long					refCon,
									ConnEnvironRec *		theEnvirons,
									TerminalEnvironsUPP		userUPP);

	EXTERN_API(void)
	InvokeTerminalChooseIdleUPP	   (TerminalChooseIdleUPP	userUPP);

	EXTERN_API(long)
	InvokeTerminalToolDefUPP	   (TermHandle				hTerm,
									short					msg,
									long					p1,
									long					p2,
									long					p3,
									TerminalToolDefUPP		userUPP);

#else
	enum { uppTerminalSendProcInfo = 0x00002FF0 }; 					/* pascal 4_bytes Func(4_bytes, 4_bytes, 4_bytes, 2_bytes) */
	enum { uppTerminalBreakProcInfo = 0x000003C0 }; 				/* pascal no_return_value Func(4_bytes, 4_bytes) */
	enum { uppTerminalCacheProcInfo = 0x000003F0 }; 				/* pascal 4_bytes Func(4_bytes, 4_bytes) */
	enum { uppTerminalSearchCallBackProcInfo = 0x00000EC0 }; 		/* pascal no_return_value Func(4_bytes, 2_bytes, 4_bytes) */
	enum { uppTerminalClikLoopProcInfo = 0x000000D0 }; 				/* pascal 1_byte Func(4_bytes) */
	enum { uppTerminalEnvironsProcInfo = 0x000003E0 }; 				/* pascal 2_bytes Func(4_bytes, 4_bytes) */
	enum { uppTerminalChooseIdleProcInfo = 0x00000000 }; 			/* pascal no_return_value Func() */
	enum { uppTerminalToolDefProcInfo = 0x0000FEF0 }; 				/* pascal 4_bytes Func(4_bytes, 2_bytes, 4_bytes, 4_bytes, 4_bytes) */
	#define NewTerminalSendUPP(userRoutine) 						(TerminalSendUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTerminalSendProcInfo, GetCurrentArchitecture())
	#define NewTerminalBreakUPP(userRoutine) 						(TerminalBreakUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTerminalBreakProcInfo, GetCurrentArchitecture())
	#define NewTerminalCacheUPP(userRoutine) 						(TerminalCacheUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTerminalCacheProcInfo, GetCurrentArchitecture())
	#define NewTerminalSearchCallBackUPP(userRoutine) 				(TerminalSearchCallBackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTerminalSearchCallBackProcInfo, GetCurrentArchitecture())
	#define NewTerminalClikLoopUPP(userRoutine) 					(TerminalClikLoopUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTerminalClikLoopProcInfo, GetCurrentArchitecture())
	#define NewTerminalEnvironsUPP(userRoutine) 					(TerminalEnvironsUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTerminalEnvironsProcInfo, GetCurrentArchitecture())
	#define NewTerminalChooseIdleUPP(userRoutine) 					(TerminalChooseIdleUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTerminalChooseIdleProcInfo, GetCurrentArchitecture())
	#define NewTerminalToolDefUPP(userRoutine) 						(TerminalToolDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppTerminalToolDefProcInfo, GetCurrentArchitecture())
	#define DisposeTerminalSendUPP(userUPP) 						DisposeRoutineDescriptor(userUPP)
	#define DisposeTerminalBreakUPP(userUPP) 						DisposeRoutineDescriptor(userUPP)
	#define DisposeTerminalCacheUPP(userUPP) 						DisposeRoutineDescriptor(userUPP)
	#define DisposeTerminalSearchCallBackUPP(userUPP) 				DisposeRoutineDescriptor(userUPP)
	#define DisposeTerminalClikLoopUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define DisposeTerminalEnvironsUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define DisposeTerminalChooseIdleUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define DisposeTerminalToolDefUPP(userUPP) 						DisposeRoutineDescriptor(userUPP)
	#define InvokeTerminalSendUPP(thePtr, theSize, refCon, flags, userUPP)  (long)CALL_FOUR_PARAMETER_UPP((userUPP), uppTerminalSendProcInfo, (thePtr), (theSize), (refCon), (flags))
	#define InvokeTerminalBreakUPP(duration, refCon, userUPP) 		CALL_TWO_PARAMETER_UPP((userUPP), uppTerminalBreakProcInfo, (duration), (refCon))
	#define InvokeTerminalCacheUPP(refCon, theTermData, userUPP) 	(long)CALL_TWO_PARAMETER_UPP((userUPP), uppTerminalCacheProcInfo, (refCon), (theTermData))
	#define InvokeTerminalSearchCallBackUPP(hTerm, refNum, foundRect, userUPP)  CALL_THREE_PARAMETER_UPP((userUPP), uppTerminalSearchCallBackProcInfo, (hTerm), (refNum), (foundRect))
	#define InvokeTerminalClikLoopUPP(refCon, userUPP) 				(Boolean)CALL_ONE_PARAMETER_UPP((userUPP), uppTerminalClikLoopProcInfo, (refCon))
	#define InvokeTerminalEnvironsUPP(refCon, theEnvirons, userUPP)  (CMErr)CALL_TWO_PARAMETER_UPP((userUPP), uppTerminalEnvironsProcInfo, (refCon), (theEnvirons))
	#define InvokeTerminalChooseIdleUPP(userUPP) 					CALL_ZERO_PARAMETER_UPP((userUPP), uppTerminalChooseIdleProcInfo)
	#define InvokeTerminalToolDefUPP(hTerm, msg, p1, p2, p3, userUPP)  (long)CALL_FIVE_PARAMETER_UPP((userUPP), uppTerminalToolDefProcInfo, (hTerm), (msg), (p1), (p2), (p3))
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewTerminalSendProc(userRoutine) 						NewTerminalSendUPP(userRoutine)
#define NewTerminalBreakProc(userRoutine) 						NewTerminalBreakUPP(userRoutine)
#define NewTerminalCacheProc(userRoutine) 						NewTerminalCacheUPP(userRoutine)
#define NewTerminalSearchCallBackProc(userRoutine) 				NewTerminalSearchCallBackUPP(userRoutine)
#define NewTerminalClikLoopProc(userRoutine) 					NewTerminalClikLoopUPP(userRoutine)
#define NewTerminalEnvironsProc(userRoutine) 					NewTerminalEnvironsUPP(userRoutine)
#define NewTerminalChooseIdleProc(userRoutine) 					NewTerminalChooseIdleUPP(userRoutine)
#define NewTerminalToolDefProc(userRoutine) 					NewTerminalToolDefUPP(userRoutine)
#define CallTerminalSendProc(userRoutine, thePtr, theSize, refCon, flags) InvokeTerminalSendUPP(thePtr, theSize, refCon, flags, userRoutine)
#define CallTerminalBreakProc(userRoutine, duration, refCon)	InvokeTerminalBreakUPP(duration, refCon, userRoutine)
#define CallTerminalCacheProc(userRoutine, refCon, theTermData)	InvokeTerminalCacheUPP(refCon, theTermData, userRoutine)
#define CallTerminalSearchCallBackProc(userRoutine, hTerm, refNum, foundRect) InvokeTerminalSearchCallBackUPP(hTerm, refNum, foundRect, userRoutine)
#define CallTerminalClikLoopProc(userRoutine, refCon)			InvokeTerminalClikLoopUPP(refCon, userRoutine)
#define CallTerminalEnvironsProc(userRoutine, refCon, theEnvirons) InvokeTerminalEnvironsUPP(refCon, theEnvirons, userRoutine)
#define CallTerminalChooseIdleProc(userRoutine)					InvokeTerminalChooseIdleUPP(userRoutine)
#define CallTerminalToolDefProc(userRoutine, hTerm, msg, p1, p2, p3) InvokeTerminalToolDefUPP(hTerm, msg, p1, p2, p3, userRoutine)

EXTERN_API( TMErr )
InitTM							(void);

EXTERN_API( Handle )
TMGetVersion					(TermHandle 			hTerm);

EXTERN_API( short )
TMGetTMVersion					(void);

EXTERN_API( TermHandle )
TMNew							(const Rect *			termRect,
								 const Rect *			viewRect,
								 TMFlags 				flags,
								 short 					procID,
								 WindowPtr 				owner,
								 TerminalSendUPP 		sendProc,
								 TerminalCacheUPP 		cacheProc,
								 TerminalBreakUPP 		breakProc,
								 TerminalClikLoopUPP 	clikLoop,
								 TerminalEnvironsUPP 	environsProc,
								 long 					refCon,
								 long 					userData);

EXTERN_API( void )
TMDispose						(TermHandle 			hTerm);

EXTERN_API( void )
TMKey							(TermHandle 			hTerm,
								 const EventRecord *	theEvent);

EXTERN_API( void )
TMUpdate						(TermHandle 			hTerm,
								 RgnHandle 				visRgn);

EXTERN_API( void )
TMPaint							(TermHandle 			hTerm,
								 const TermDataBlock *	theTermData,
								 const Rect *			theRect);

EXTERN_API( void )
TMActivate						(TermHandle 			hTerm,
								 Boolean 				activate);

EXTERN_API( void )
TMResume						(TermHandle 			hTerm,
								 Boolean 				resume);

EXTERN_API( void )
TMClick							(TermHandle 			hTerm,
								 const EventRecord *	theEvent);

EXTERN_API( void )
TMIdle							(TermHandle 			hTerm);

EXTERN_API( long )
TMStream						(TermHandle 			hTerm,
								 void *					theBuffer,
								 long 					theLength,
								 CMFlags 				flags);

EXTERN_API( Boolean )
TMMenu							(TermHandle 			hTerm,
								 short 					menuID,
								 short 					item);

EXTERN_API( void )
TMReset							(TermHandle 			hTerm);

EXTERN_API( void )
TMClear							(TermHandle 			hTerm);

EXTERN_API( void )
TMResize						(TermHandle 			hTerm,
								 const Rect *			newViewRect);

EXTERN_API( long )
TMGetSelect						(TermHandle 			hTerm,
								 Handle 				theData,
								 ResType *				theType);

EXTERN_API( void )
TMGetLine						(TermHandle 			hTerm,
								 short 					lineNo,
								 TermDataBlock *		theTermData);

EXTERN_API( void )
TMSetSelection					(TermHandle 			hTerm,
								 const TMSelection *	theSelection,
								 TMSelTypes 			selType);

EXTERN_API( void )
TMScroll						(TermHandle 			hTerm,
								 short 					dh,
								 short 					dv);

EXTERN_API( Boolean )
TMValidate						(TermHandle 			hTerm);

EXTERN_API( void )
TMDefault						(Ptr *					theConfig,
								 short 					procID,
								 Boolean 				allocate);

EXTERN_API( Handle )
TMSetupPreflight				(short 					procID,
								 long *					magicCookie);

EXTERN_API( void )
TMSetupSetup					(short 					procID,
								 const void *			theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 long *					magicCookie);

EXTERN_API( Boolean )
TMSetupFilter					(short 					procID,
								 const void *			theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 EventRecord *			theEvent,
								 short *				theItem,
								 long *					magicCookie);

EXTERN_API( void )
TMSetupItem						(short 					procID,
								 const void *			theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 short *				theItem,
								 long *					magicCookie);

EXTERN_API( void )
TMSetupXCleanup					(short 					procID,
								 const void *			theConfig,
								 short 					count,
								 DialogPtr 				theDialog,
								 Boolean 				OKed,
								 long *					magicCookie);

EXTERN_API( void )
TMSetupPostflight				(short 					procID);

EXTERN_API( Ptr )
TMGetConfig						(TermHandle 			hTerm);

EXTERN_API( short )
TMSetConfig						(TermHandle 			hTerm,
								 const void *			thePtr);

EXTERN_API( OSErr )
TMIntlToEnglish					(TermHandle 			hTerm,
								 const void *			inputPtr,
								 Ptr *					outputPtr,
								 short 					language);

EXTERN_API( OSErr )
TMEnglishToIntl					(TermHandle 			hTerm,
								 const void *			inputPtr,
								 Ptr *					outputPtr,
								 short 					language);

EXTERN_API( void )
TMGetToolName					(short 					id,
								 Str255 				name);

EXTERN_API( short )
TMGetProcID						(ConstStr255Param 		name);

EXTERN_API( void )
TMSetRefCon						(TermHandle 			hTerm,
								 long 					refCon);

EXTERN_API( long )
TMGetRefCon						(TermHandle 			hTerm);

EXTERN_API( void )
TMSetUserData					(TermHandle 			hTerm,
								 long 					userData);

EXTERN_API( long )
TMGetUserData					(TermHandle 			hTerm);

EXTERN_API( short )
TMAddSearch						(TermHandle 			hTerm,
								 ConstStr255Param 		theString,
								 const Rect *			where,
								 TMSearchTypes 			searchType,
								 TerminalSearchCallBackUPP  callBack);

EXTERN_API( void )
TMRemoveSearch					(TermHandle 			hTerm,
								 short 					refnum);

EXTERN_API( void )
TMClearSearch					(TermHandle 			hTerm);

EXTERN_API( Point )
TMGetCursor						(TermHandle 			hTerm,
								 TMCursorTypes 			cursType);

EXTERN_API( TMErr )
TMGetTermEnvirons				(TermHandle 			hTerm,
								 TermEnvironRec *		theEnvirons);

EXTERN_API( short )
TMChoose						(TermHandle *			hTerm,
								 Point 					where,
								 TerminalChooseIdleUPP 	idleProc);

EXTERN_API( void )
TMEvent							(TermHandle 			hTerm,
								 const EventRecord *	theEvent);

EXTERN_API( Boolean )
TMDoTermKey						(TermHandle 			hTerm,
								 ConstStr255Param 		theKey);

EXTERN_API( short )
TMCountTermKeys					(TermHandle 			hTerm);

EXTERN_API( void )
TMGetIndTermKey					(TermHandle 			hTerm,
								 short 					id,
								 Str255 				theKey);

EXTERN_API( void )
TMGetErrorString				(TermHandle 			hTerm,
								 short 					id,
								 Str255 				errMsg);

#endif  /* CALL_NOT_IN_CARBON */


#if PRAGMA_STRUCT_ALIGN
	#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
	#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
	#pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __TERMINALS__ */

