#ifndef _h_Extern_
#define _h_Extern_
#include <cstddef>
#include <memory>
#if defined(__GNUC__)
#define FMX_PACK __attribute__ ((packed))
#define FMX_PACK_ON
#define FMX_PACK_OFF
#define FMX_PROC(retType) retType
#define FMX_PROCPTR(retType, name) typedef retType (*name)
#define FMX_ENTRYPT
#define FMX_API
#if !defined(DEPRECATED)
#define DEPRECATED __attribute__((deprecated))
#endif
#if defined (_LIBCPP_STD_VER) && _LIBCPP_STD_VER > 14
#define FMX_USE_AUTO_PTR 0
#else
#define FMX_USE_AUTO_PTR 1
#endif
#if defined(_UNIQUE_PTR_H) || defined(_LIBCPP_VERSION)
#define FMX_USE_UNIQUE_PTR 1
#endif
#if defined(_LP64)
#define FMX_64BIT_PLUGIN_API 1
#endif
#elif defined(_MSC_VER)
#define FMX_PACK
#define FMX_PACK_ON pack (push, 1)
#define FMX_PACK_OFF pack (pop)
#define FMX_PROC(retType) retType __stdcall
#define FMX_PROCPTR(retType, name) typedef retType (__stdcall *name)
#define FMX_ENTRYPT __declspec(dllexport)
#define FMX_API __declspec(dllimport)
#if !defined(DEPRECATED)
#define DEPRECATED __declspec(deprecated)
#endif
#if defined(_MSVC_LANG) && _MSVC_LANG <= 201402
#define FMX_USE_AUTO_PTR 1
#endif
#if _MSC_VER >= 1800
#define FMX_USE_UNIQUE_PTR 1
#endif
#if defined(_M_X64)
#define FMX_64BIT_PLUGIN_API 1
#endif
#else
#error "Unsupported compiler"
#endif
#if defined(FMX_64BIT_PLUGIN_API) || defined(__linux__) || TARGET_OS_IPHONE
#define FMX_OBSOLETE_API 0
#else
#define FMX_OBSOLETE_API 1
#endif
extern "C++"
{
namespace fmx
{
class Text;
class Data;
class ExprEnv;
typedef unsigned short uint16;
typedef short int16;
typedef unsigned char uchar;
typedef int int32;
typedef unsigned int uint32;
#if defined( _MSC_VER )
typedef __int64 int64;
typedef unsigned __int64 uint64;
#if defined( _M_X64)
typedef uint64 ptrtype;
#else
typedef uint32 ptrtype;
#endif
typedef int16 unusedid;
#else
#if defined( _LP64 )
typedef long int64;
typedef unsigned long uint64;
typedef uint64 ptrtype;
typedef int32 unusedid;
#else
typedef long long int64;
typedef unsigned long long uint64;
typedef uint32 ptrtype;
typedef int16 unusedid;
#endif
#endif
typedef short errcode;
typedef unsigned short unichar16;
typedef DEPRECATED unichar16 unichar;
#if FMX_OBSOLETE_API
typedef DEPRECATED fmx::uint32 ulong;
typedef DEPRECATED fmx::uint16 ushort;
typedef DEPRECATED fmx::int64 longlong;
#endif
}
}
extern "C"
{
typedef fmx::Text FMX_Text;
typedef fmx::Data FMX_Data;
typedef fmx::ExprEnv FMX_ExprEnv;
typedef fmx::uchar FMX_UChar;
typedef fmx::int16 FMX_Int16;
typedef fmx::uint16 FMX_UInt16;
typedef fmx::int32 FMX_Int32;
typedef fmx::uint32 FMX_UInt32;
typedef fmx::unichar16 FMX_Unichar;
typedef fmx::errcode FMX_ErrorCode;
typedef fmx::ptrtype FMX_PtrType;
typedef char FMX_Char;
typedef char FMX_Boolean;
#if FMX_OBSOLETE_API
typedef DEPRECATED FMX_UInt32 FMX_ULong;
typedef DEPRECATED FMX_UInt16 FMX_UShort;
typedef DEPRECATED FMX_Int32 FMX_Long;
typedef DEPRECATED FMX_Int16 FMX_Short;
typedef DEPRECATED FMX_Char* FMX_Ptr;
typedef DEPRECATED FMX_Char** FMX_Hdl;
FMX_PROCPTR(char**, FMX_NewHandleCall)(FMX_Int32 size);
FMX_PROCPTR(void, FMX_SetHandleSizeCall)(char** h, FMX_Int32 size);
FMX_PROCPTR(FMX_Int32, FMX_GetHandleSizeCall)(char** h);
FMX_PROCPTR(void, FMX_DisposeHandleCall)(char** h);
FMX_PROCPTR(void, FMX_MoveHHiCall)(char** h);
FMX_PROCPTR(void, FMX_LockHandleCall)(char** h);
FMX_PROCPTR(void, FMX_UnlockHandleCall)(char** h);
FMX_PROCPTR(char*, FMX_NewPointerCall)(FMX_Int32 size);
FMX_PROCPTR(void, FMX_DisposePointerCall)(char* p);
FMX_PROCPTR(FMX_Int16, FMX_MemoryErrorCall)(void);
#define FMX_NewHandle(size) (gFMX_ExternCallPtr->cNewHandle)(size)
#define FMX_SetHandleSize(h, size) (gFMX_ExternCallPtr->cSetHandleSize)(h, size)
#define FMX_GetHandleSize(h) (gFMX_ExternCallPtr->cGetHandleSize)(h)
#define FMX_DisposeHandle(h) (gFMX_ExternCallPtr->cDisposeHandle)(h)
#define FMX_MoveHHi(h) (gFMX_ExternCallPtr->cMoveHHi)(h)
#define FMX_LockHandle(h) (gFMX_ExternCallPtr->cLockHandle)(h)
#define FMX_UnlockHandle(h) (gFMX_ExternCallPtr->cUnlockHandle)(h)
#define FMX_NewPointer(size) (gFMX_ExternCallPtr->cNewPointer)(size)
#define FMX_DisposePointer(p) (gFMX_ExternCallPtr->cDisposePointer)(p)
#define FMX_MemoryError() (gFMX_ExternCallPtr->cMemoryError)()
#endif
typedef FMX_UChar FMX_ScriptControl;
enum
{
kFMXT_Halt,
kFMXT_Exit,
kFMXT_Resume,
kFMXT_Pause
};
FMX_PROCPTR(FMX_ErrorCode, FMX_StartScriptCall)(const FMX_Text* fileName, const FMX_Text* scriptName, FMX_ScriptControl control, const FMX_Data* parameter);
FMX_PROCPTR(FMX_ErrorCode, FMX_CurrentEnvCall)(FMX_ExprEnv* env);
#define FMX_StartScript(fileName, scriptName, control, parameter) (gFMX_ExternCallPtr->cStartScript)(fileName, scriptName, control, parameter)
#define FMX_SetToCurrentEnv(env) (gFMX_ExternCallPtr->cCurrentEnv)(env)
enum
{
kBadExtnVersion = -1,
kDoNotEnable = -2,
k40ExtnVersion = 11,
k41ExtnVersion = 12,
k50ExtnVersion = 14,
k60ExtnVersion = 17,
k70ExtnVersion = 50, k80ExtnVersion = 51,
k110ExtnVersion = 52,
k120ExtnVersion = 53, k130ExtnVersion = 54,
k140ExtnVersion = 55,
k150ExtnVersion = 56,
k160ExtnVersion = 57,
k170ExtnVersion = 59,
k180ExtnVersion = 60,
k190ExtnVersion = 62,
kCurrentExtnVersion = 62,
kMinExtnVersion = 4,
kMaxExtnVersion = 255
};
typedef FMX_UChar FMX_ExternCallSwitch;
enum
{
kFMXT_Init = 0, kFMXT_Idle = 1, #if FMX_OBSOLETE_API
kFMXT_External = 3, #endif
kFMXT_Shutdown = 4, kFMXT_DoAppPreferences = 5, kFMXT_GetString = 7,
kFMXT_SessionShutdown = 8, kFMXT_FileShutdown = 9 };
typedef FMX_UChar FMX_Strings; enum
{
kFMXT_NameStr = 128, kFMXT_AppConfigStr = 129, kFMXT_OptionsStr = 131,
kFMXT_HelpURLStr = 132 };
typedef FMX_UChar FMX_IdleLevel;
enum
{
kFMXT_UserIdle = 0, kFMXT_UserNotIdle = 1, kFMXT_ScriptPaused = 2, kFMXT_ScriptRunning = 3, kFMXT_Unsafe = 4 };
typedef FMX_UChar FMX_Application;
enum
{
kFMXT_Developer = 0, kFMXT_Pro = 1, kFMXT_Runtime = 2, kFMXT_Server = 3, kFMXT_Web = 4, kFMXT_Mobile = 5, kFMXT_XDBC = 6, kFMXT_SASE = 7, kFMXT_IWP = 8 };
struct FMX_ExternCallStruct;
typedef struct FMX_ExternCallStruct *FMX_ExternCallPtr;
typedef void (*FMX_ExternCallProc)(FMX_ExternCallPtr);
#pragma FMX_PACK_ON
struct FMX_ExternCallStruct
{
FMX_Int16 extnVersion; fmx::unusedid unusedID; FMX_ExternCallProc entryPoint; FMX_Boolean cfmCalls; FMX_ExternCallSwitch whichCall; FMX_Boolean unsafeCalls;
FMX_UChar parm1;
FMX_PtrType parm2;
FMX_PtrType parm3;
FMX_PtrType instanceID;
FMX_PtrType result;
FMX_PtrType unused;
#if FMX_OBSOLETE_API
DEPRECATED FMX_NewHandleCall cNewHandle;
DEPRECATED FMX_SetHandleSizeCall cSetHandleSize;
DEPRECATED FMX_GetHandleSizeCall cGetHandleSize;
DEPRECATED FMX_DisposeHandleCall cDisposeHandle;
DEPRECATED FMX_MoveHHiCall cMoveHHi;
DEPRECATED FMX_LockHandleCall cLockHandle;
DEPRECATED FMX_UnlockHandleCall cUnlockHandle;
DEPRECATED FMX_NewPointerCall cNewPointer;
DEPRECATED FMX_DisposePointerCall cDisposePointer;
DEPRECATED FMX_MemoryErrorCall cMemoryError;
#endif
FMX_StartScriptCall cStartScript;
FMX_CurrentEnvCall cCurrentEnv;
} FMX_PACK;
#pragma FMX_PACK_OFF
extern void FMX_ENTRYPT FMExternCallProc(FMX_ExternCallPtr pb);
extern FMX_ExternCallPtr gFMX_ExternCallPtr;
}
#endif