/*
 	File:		FileTransfers.h
 
 	Contains:	CommToolbox File Transfer Manager Interfaces.
 
 	Version:	Technology:	System 7.5
 				Release:	QuickTime 4.1
 
 	Copyright:	(c) 1988-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 __FILETRANSFERS__
#define __FILETRANSFERS__

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

#ifndef __STANDARDFILE__
	#include <StandardFile.h>
#endif

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

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

#ifndef __FILES__
	#include <Files.h>
#endif

#ifndef __TERMINALS__
	#include <Terminals.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 {
	curFTVersion				= 2								/* current file transfer manager version*/
};

enum {
																/* FTErr    */
	ftGenericError				= -1,
	ftNoErr						= 0,
	ftRejected					= 1,
	ftFailed					= 2,
	ftTimeOut					= 3,
	ftTooManyRetry				= 4,
	ftNotEnoughDSpace			= 5,
	ftRemoteCancel				= 6,
	ftWrongFormat				= 7,
	ftNoTools					= 8,
	ftUserCancel				= 9,
	ftNotSupported				= 10
};

typedef OSErr 							FTErr;
enum {
	ftIsFTMode					= 1 << 0,
	ftNoMenus					= 1 << 1,
	ftQuiet						= 1 << 2,
	ftConfigChanged				= 1 << 4,
	ftSucc						= 1 << 7
};

typedef unsigned long 					FTFlags;
enum {
	ftSameCircuit				= 1 << 0,
	ftSendDisable				= 1 << 1,
	ftReceiveDisable			= 1 << 2,
	ftTextOnly					= 1 << 3,
	ftNoStdFile					= 1 << 4,
	ftMultipleFileSend			= 1 << 5
};

typedef unsigned short 					FTAttributes;
enum {
	ftReceiving					= 0,
	ftTransmitting				= 1,
	ftFullDuplex				= 2								/* (16) added ftFullDuplex bit.*/
};

typedef unsigned short 					FTDirection;
typedef CALLBACK_API( long , FileTransferDefProcPtr )(TermHandle hTerm, short msg, long p1, long p2, long p3);
/*	application routines type definitions */
typedef struct FTRecord 				FTRecord;
typedef FTRecord *						FTPtr;
typedef FTPtr *							FTHandle;
typedef CALLBACK_API( OSErr , FileTransferReadProcPtr )(unsigned long *count, Ptr pData, long refCon, short fileMsg);
typedef CALLBACK_API( OSErr , FileTransferWriteProcPtr )(unsigned long *count, Ptr pData, long refCon, short fileMsg);
typedef CALLBACK_API( Size , FileTransferSendProcPtr )(Ptr thePtr, long theSize, long refCon, CMChannel channel, CMFlags flag);
typedef CALLBACK_API( Size , FileTransferReceiveProcPtr )(Ptr thePtr, long theSize, long refCon, CMChannel channel, CMFlags *flag);
typedef CALLBACK_API( OSErr , FileTransferEnvironsProcPtr )(long refCon, ConnEnvironRec *theEnvirons);
typedef CALLBACK_API( void , FileTransferNotificationProcPtr )(FTHandle hFT, const FSSpec *pFSSpec);
typedef CALLBACK_API( void , FileTransferChooseIdleProcPtr )(void );
typedef STACK_UPP_TYPE(FileTransferDefProcPtr) 					FileTransferDefUPP;
typedef STACK_UPP_TYPE(FileTransferReadProcPtr) 				FileTransferReadUPP;
typedef STACK_UPP_TYPE(FileTransferWriteProcPtr) 				FileTransferWriteUPP;
typedef STACK_UPP_TYPE(FileTransferSendProcPtr) 				FileTransferSendUPP;
typedef STACK_UPP_TYPE(FileTransferReceiveProcPtr) 				FileTransferReceiveUPP;
typedef STACK_UPP_TYPE(FileTransferEnvironsProcPtr) 			FileTransferEnvironsUPP;
typedef STACK_UPP_TYPE(FileTransferNotificationProcPtr) 		FileTransferNotificationUPP;
typedef STACK_UPP_TYPE(FileTransferChooseIdleProcPtr) 			FileTransferChooseIdleUPP;

struct FTRecord {
	short 							procID;
	FTFlags 						flags;
	FTErr 							errCode;
	long 							refCon;
	long 							userData;
	FileTransferDefUPP 				defProc;
	Ptr 							config;
	Ptr 							oldConfig;
	FileTransferEnvironsUPP 		environsProc;
	long 							reserved1;
	long 							reserved2;
	Ptr 							ftPrivate;
	FileTransferSendUPP 			sendProc;
	FileTransferReceiveUPP 			recvProc;
	FileTransferWriteUPP 			writeProc;
	FileTransferReadUPP 			readProc;
	WindowPtr 						owner;
	FTDirection 					direction;
	SFReply 						theReply;
	long 							writePtr;
	long 							readPtr;
	Ptr 							theBuf;
	long 							bufSize;
	Str255 							autoRec;
	FTAttributes 					attributes;
};

typedef unsigned short 					FTCompletionKind;
enum {
																/* FTReadProc messages */
	ftReadOpenFile				= 0,							/* count = forkFlags, buffer = pblock from PBGetFInfo */
	ftReadDataFork				= 1,
	ftReadRsrcFork				= 2,
	ftReadAbort					= 3,
	ftReadComplete				= 4,
	ftReadSetFPos				= 6,							/* count = forkFlags, buffer = pBlock same as PBSetFPos */
	ftReadGetFPos				= 7								/* count = forkFlags, buffer = pBlock same as PBGetFPos */
};

enum {
																/* FTWriteProc messages */
	ftWriteOpenFile				= 0,							/* count = forkFlags, buffer = pblock from PBGetFInfo */
	ftWriteDataFork				= 1,
	ftWriteRsrcFork				= 2,
	ftWriteAbort				= 3,
	ftWriteComplete				= 4,
	ftWriteFileInfo				= 5,
	ftWriteSetFPos				= 6,							/* count = forkFlags, buffer = pBlock same as PBSetFPos */
	ftWriteGetFPos				= 7								/* count = forkFlags, buffer = pBlock same as PBGetFPos */
};

enum {
																/*	fork flags */
	ftOpenDataFork				= 1,
	ftOpenRsrcFork				= 2
};

#if OPAQUE_UPP_TYPES
	EXTERN_API(FileTransferDefUPP)
	NewFileTransferDefUPP		   (FileTransferDefProcPtr	userRoutine);

	EXTERN_API(FileTransferReadUPP)
	NewFileTransferReadUPP		   (FileTransferReadProcPtr	userRoutine);

	EXTERN_API(FileTransferWriteUPP)
	NewFileTransferWriteUPP		   (FileTransferWriteProcPtr userRoutine);

	EXTERN_API(FileTransferSendUPP)
	NewFileTransferSendUPP		   (FileTransferSendProcPtr	userRoutine);

	EXTERN_API(FileTransferReceiveUPP)
	NewFileTransferReceiveUPP	   (FileTransferReceiveProcPtr userRoutine);

	EXTERN_API(FileTransferEnvironsUPP)
	NewFileTransferEnvironsUPP	   (FileTransferEnvironsProcPtr userRoutine);

	EXTERN_API(FileTransferNotificationUPP)
	NewFileTransferNotificationUPP    (FileTransferNotificationProcPtr userRoutine);

	EXTERN_API(FileTransferChooseIdleUPP)
	NewFileTransferChooseIdleUPP    (FileTransferChooseIdleProcPtr userRoutine);

	EXTERN_API(void)
	DisposeFileTransferDefUPP	   (FileTransferDefUPP		userUPP);

	EXTERN_API(void)
	DisposeFileTransferReadUPP	   (FileTransferReadUPP		userUPP);

	EXTERN_API(void)
	DisposeFileTransferWriteUPP	   (FileTransferWriteUPP	userUPP);

	EXTERN_API(void)
	DisposeFileTransferSendUPP	   (FileTransferSendUPP		userUPP);

	EXTERN_API(void)
	DisposeFileTransferReceiveUPP    (FileTransferReceiveUPP userUPP);

	EXTERN_API(void)
	DisposeFileTransferEnvironsUPP    (FileTransferEnvironsUPP userUPP);

	EXTERN_API(void)
	DisposeFileTransferNotificationUPP    (FileTransferNotificationUPP userUPP);

	EXTERN_API(void)
	DisposeFileTransferChooseIdleUPP    (FileTransferChooseIdleUPP userUPP);

	EXTERN_API(long)
	InvokeFileTransferDefUPP	   (TermHandle				hTerm,
									short					msg,
									long					p1,
									long					p2,
									long					p3,
									FileTransferDefUPP		userUPP);

	EXTERN_API(OSErr)
	InvokeFileTransferReadUPP	   (unsigned long *			count,
									Ptr						pData,
									long					refCon,
									short					fileMsg,
									FileTransferReadUPP		userUPP);

	EXTERN_API(OSErr)
	InvokeFileTransferWriteUPP	   (unsigned long *			count,
									Ptr						pData,
									long					refCon,
									short					fileMsg,
									FileTransferWriteUPP	userUPP);

	EXTERN_API(Size)
	InvokeFileTransferSendUPP	   (Ptr						thePtr,
									long					theSize,
									long					refCon,
									CMChannel				channel,
									CMFlags					flag,
									FileTransferSendUPP		userUPP);

	EXTERN_API(Size)
	InvokeFileTransferReceiveUPP    (Ptr					thePtr,
									long					theSize,
									long					refCon,
									CMChannel				channel,
									CMFlags *				flag,
									FileTransferReceiveUPP	userUPP);

	EXTERN_API(OSErr)
	InvokeFileTransferEnvironsUPP    (long					refCon,
									ConnEnvironRec *		theEnvirons,
									FileTransferEnvironsUPP	userUPP);

	EXTERN_API(void)
	InvokeFileTransferNotificationUPP    (FTHandle			hFT,
									const FSSpec *			pFSSpec,
									FileTransferNotificationUPP userUPP);

	EXTERN_API(void)
	InvokeFileTransferChooseIdleUPP    (FileTransferChooseIdleUPP userUPP);

#else
	enum { uppFileTransferDefProcInfo = 0x0000FEF0 }; 				/* pascal 4_bytes Func(4_bytes, 2_bytes, 4_bytes, 4_bytes, 4_bytes) */
	enum { uppFileTransferReadProcInfo = 0x00002FE0 }; 				/* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 2_bytes) */
	enum { uppFileTransferWriteProcInfo = 0x00002FE0 }; 			/* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 2_bytes) */
	enum { uppFileTransferSendProcInfo = 0x0000AFF0 }; 				/* pascal 4_bytes Func(4_bytes, 4_bytes, 4_bytes, 2_bytes, 2_bytes) */
	enum { uppFileTransferReceiveProcInfo = 0x0000EFF0 }; 			/* pascal 4_bytes Func(4_bytes, 4_bytes, 4_bytes, 2_bytes, 4_bytes) */
	enum { uppFileTransferEnvironsProcInfo = 0x000003E0 }; 			/* pascal 2_bytes Func(4_bytes, 4_bytes) */
	enum { uppFileTransferNotificationProcInfo = 0x000003C0 }; 		/* pascal no_return_value Func(4_bytes, 4_bytes) */
	enum { uppFileTransferChooseIdleProcInfo = 0x00000000 }; 		/* pascal no_return_value Func() */
	#define NewFileTransferDefUPP(userRoutine) 						(FileTransferDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileTransferDefProcInfo, GetCurrentArchitecture())
	#define NewFileTransferReadUPP(userRoutine) 					(FileTransferReadUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileTransferReadProcInfo, GetCurrentArchitecture())
	#define NewFileTransferWriteUPP(userRoutine) 					(FileTransferWriteUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileTransferWriteProcInfo, GetCurrentArchitecture())
	#define NewFileTransferSendUPP(userRoutine) 					(FileTransferSendUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileTransferSendProcInfo, GetCurrentArchitecture())
	#define NewFileTransferReceiveUPP(userRoutine) 					(FileTransferReceiveUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileTransferReceiveProcInfo, GetCurrentArchitecture())
	#define NewFileTransferEnvironsUPP(userRoutine) 				(FileTransferEnvironsUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileTransferEnvironsProcInfo, GetCurrentArchitecture())
	#define NewFileTransferNotificationUPP(userRoutine) 			(FileTransferNotificationUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileTransferNotificationProcInfo, GetCurrentArchitecture())
	#define NewFileTransferChooseIdleUPP(userRoutine) 				(FileTransferChooseIdleUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileTransferChooseIdleProcInfo, GetCurrentArchitecture())
	#define DisposeFileTransferDefUPP(userUPP) 						DisposeRoutineDescriptor(userUPP)
	#define DisposeFileTransferReadUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define DisposeFileTransferWriteUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define DisposeFileTransferSendUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define DisposeFileTransferReceiveUPP(userUPP) 					DisposeRoutineDescriptor(userUPP)
	#define DisposeFileTransferEnvironsUPP(userUPP) 				DisposeRoutineDescriptor(userUPP)
	#define DisposeFileTransferNotificationUPP(userUPP) 			DisposeRoutineDescriptor(userUPP)
	#define DisposeFileTransferChooseIdleUPP(userUPP) 				DisposeRoutineDescriptor(userUPP)
	#define InvokeFileTransferDefUPP(hTerm, msg, p1, p2, p3, userUPP)  (long)CALL_FIVE_PARAMETER_UPP((userUPP), uppFileTransferDefProcInfo, (hTerm), (msg), (p1), (p2), (p3))
	#define InvokeFileTransferReadUPP(count, pData, refCon, fileMsg, userUPP)  (OSErr)CALL_FOUR_PARAMETER_UPP((userUPP), uppFileTransferReadProcInfo, (count), (pData), (refCon), (fileMsg))
	#define InvokeFileTransferWriteUPP(count, pData, refCon, fileMsg, userUPP)  (OSErr)CALL_FOUR_PARAMETER_UPP((userUPP), uppFileTransferWriteProcInfo, (count), (pData), (refCon), (fileMsg))
	#define InvokeFileTransferSendUPP(thePtr, theSize, refCon, channel, flag, userUPP)  (Size)CALL_FIVE_PARAMETER_UPP((userUPP), uppFileTransferSendProcInfo, (thePtr), (theSize), (refCon), (channel), (flag))
	#define InvokeFileTransferReceiveUPP(thePtr, theSize, refCon, channel, flag, userUPP)  (Size)CALL_FIVE_PARAMETER_UPP((userUPP), uppFileTransferReceiveProcInfo, (thePtr), (theSize), (refCon), (channel), (flag))
	#define InvokeFileTransferEnvironsUPP(refCon, theEnvirons, userUPP)  (OSErr)CALL_TWO_PARAMETER_UPP((userUPP), uppFileTransferEnvironsProcInfo, (refCon), (theEnvirons))
	#define InvokeFileTransferNotificationUPP(hFT, pFSSpec, userUPP)  CALL_TWO_PARAMETER_UPP((userUPP), uppFileTransferNotificationProcInfo, (hFT), (pFSSpec))
	#define InvokeFileTransferChooseIdleUPP(userUPP) 				CALL_ZERO_PARAMETER_UPP((userUPP), uppFileTransferChooseIdleProcInfo)
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewFileTransferDefProc(userRoutine) 					NewFileTransferDefUPP(userRoutine)
#define NewFileTransferReadProc(userRoutine) 					NewFileTransferReadUPP(userRoutine)
#define NewFileTransferWriteProc(userRoutine) 					NewFileTransferWriteUPP(userRoutine)
#define NewFileTransferSendProc(userRoutine) 					NewFileTransferSendUPP(userRoutine)
#define NewFileTransferReceiveProc(userRoutine) 				NewFileTransferReceiveUPP(userRoutine)
#define NewFileTransferEnvironsProc(userRoutine) 				NewFileTransferEnvironsUPP(userRoutine)
#define NewFileTransferNotificationProc(userRoutine) 			NewFileTransferNotificationUPP(userRoutine)
#define NewFileTransferChooseIdleProc(userRoutine) 				NewFileTransferChooseIdleUPP(userRoutine)
#define CallFileTransferDefProc(userRoutine, hTerm, msg, p1, p2, p3) InvokeFileTransferDefUPP(hTerm, msg, p1, p2, p3, userRoutine)
#define CallFileTransferReadProc(userRoutine, count, pData, refCon, fileMsg) InvokeFileTransferReadUPP(count, pData, refCon, fileMsg, userRoutine)
#define CallFileTransferWriteProc(userRoutine, count, pData, refCon, fileMsg) InvokeFileTransferWriteUPP(count, pData, refCon, fileMsg, userRoutine)
#define CallFileTransferSendProc(userRoutine, thePtr, theSize, refCon, channel, flag) InvokeFileTransferSendUPP(thePtr, theSize, refCon, channel, flag, userRoutine)
#define CallFileTransferReceiveProc(userRoutine, thePtr, theSize, refCon, channel, flag) InvokeFileTransferReceiveUPP(thePtr, theSize, refCon, channel, flag, userRoutine)
#define CallFileTransferEnvironsProc(userRoutine, refCon, theEnvirons) InvokeFileTransferEnvironsUPP(refCon, theEnvirons, userRoutine)
#define CallFileTransferNotificationProc(userRoutine, hFT, pFSSpec) InvokeFileTransferNotificationUPP(hFT, pFSSpec, userRoutine)
#define CallFileTransferChooseIdleProc(userRoutine)				InvokeFileTransferChooseIdleUPP(userRoutine)
EXTERN_API( FTErr )
InitFT							(void);

EXTERN_API( Handle )
FTGetVersion					(FTHandle 				hFT);

EXTERN_API( short )
FTGetFTVersion					(void);

EXTERN_API( FTHandle )
FTNew							(short 					procID,
								 FTFlags 				flags,
								 FileTransferSendUPP 	sendProc,
								 FileTransferReceiveUPP  recvProc,
								 FileTransferReadUPP 	readProc,
								 FileTransferWriteUPP 	writeProc,
								 FileTransferEnvironsUPP  environsProc,
								 WindowPtr 				owner,
								 long 					refCon,
								 long 					userData);

EXTERN_API( void )
FTDispose						(FTHandle 				hFT);

EXTERN_API( FTErr )
FTStart							(FTHandle 				hFT,
								 FTDirection 			direction,
								 const SFReply *		fileInfo);

EXTERN_API( FTErr )
FTAbort							(FTHandle 				hFT);

EXTERN_API( FTErr )
FTSend							(FTHandle 				hFT,
								 short 					numFiles,
								 FSSpecArrayPtr 		pFSSpec,
								 FileTransferNotificationUPP  notifyProc);

EXTERN_API( FTErr )
FTReceive						(FTHandle 				hFT,
								 FSSpecPtr 				pFSSpec,
								 FileTransferNotificationUPP  notifyProc);

EXTERN_API( void )
FTExec							(FTHandle 				hFT);

EXTERN_API( void )
FTActivate						(FTHandle 				hFT,
								 Boolean 				activate);

EXTERN_API( void )
FTResume						(FTHandle 				hFT,
								 Boolean 				resume);

EXTERN_API( Boolean )
FTMenu							(FTHandle 				hFT,
								 short 					menuID,
								 short 					item);

EXTERN_API( short )
FTChoose						(FTHandle *				hFT,
								 Point 					where,
								 FileTransferChooseIdleUPP  idleProc);

EXTERN_API( void )
FTEvent							(FTHandle 				hFT,
								 const EventRecord *	theEvent);

EXTERN_API( Boolean )
FTValidate						(FTHandle 				hFT);

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

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

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

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

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

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

EXTERN_API( void )
FTSetupPostflight				(short 					procID);

EXTERN_API( Ptr )
FTGetConfig						(FTHandle 				hFT);

EXTERN_API( short )
FTSetConfig						(FTHandle 				hFT,
								 const void *			thePtr);

EXTERN_API( FTErr )
FTIntlToEnglish					(FTHandle 				hFT,
								 const void *			inputPtr,
								 Ptr *					outputPtr,
								 short 					language);

EXTERN_API( FTErr )
FTEnglishToIntl					(FTHandle 				hFT,
								 const void *			inputPtr,
								 Ptr *					outputPtr,
								 short 					language);

EXTERN_API( void )
FTGetToolName					(short 					procID,
								 Str255 				name);

EXTERN_API( short )
FTGetProcID						(ConstStr255Param 		name);

EXTERN_API( void )
FTSetRefCon						(FTHandle 				hFT,
								 long 					refCon);

EXTERN_API( long )
FTGetRefCon						(FTHandle 				hFT);

EXTERN_API( void )
FTSetUserData					(FTHandle 				hFT,
								 long 					userData);

EXTERN_API( long )
FTGetUserData					(FTHandle 				hFT);

EXTERN_API( void )
FTGetErrorString				(FTHandle 				hFT,
								 short 					id,
								 Str255 				errMsg);

/*
	These Async routines were added to InterfaceLib in System 7.5
*/
EXTERN_API( FTErr )
FTSendAsync						(FTHandle 				hFT,
								 short 					numFiles,
								 FSSpecArrayPtr 		pFSSpec,
								 FileTransferNotificationUPP  notifyProc);

EXTERN_API( FTErr )
FTReceiveAsync					(FTHandle 				hFT,
								 FSSpecPtr 				pFSSpec,
								 FileTransferNotificationUPP  notifyProc);

EXTERN_API( FTErr )
FTCompletionAsync				(FTHandle 				hFT,
								 FTCompletionKind 		completionCall);

#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 /* __FILETRANSFERS__ */

