view dstep/coreservices/carboncore/Components.d @ 11:07194b026fa4

Added bindings to a couple of frameworks, new license + some other things
author Jacob Carlborg <doob@me.com>
date Sat, 01 Aug 2009 15:03:28 +0200
parents
children
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Jul 21, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.coreservices.carboncore.Components;

//import dstep.AvailabilityMacros;
import dstep.coreservices.carboncore.Files;
import dstep.coreservices.carboncore.MacErrors;
import dstep.coreservices.carboncore.MacTypes;
import dstep.coreservices.carboncore.MixedMode;
import dstep.coreservices.carboncore.Resources;
import dstep.internal.Version;
import dstep.objc.bridge.TypeEncoding;

alias ComponentResource* ComponentResourcePtr;
alias ComponentResourcePtr* ComponentResourceHandle;
alias ExtComponentResource* ExtComponentResourcePtr;
alias ExtComponentResourcePtr* ExtComponentResourceHandle;
alias ComponentRecord* Component;
alias ComponentInstanceRecord* ComponentInstance;
alias RegisteredComponentRecord* RegisteredComponentRecordPtr;
alias RegisteredComponentInstanceRecord* RegisteredComponentInstanceRecordPtr;
alias int ComponentResult;
alias uint CSComponentsThreadMode;
alias ComponentMPWorkFunctionHeaderRecord* ComponentMPWorkFunctionHeaderRecordPtr;
alias ComponentMPWorkFunctionProcPtr ComponentMPWorkFunctionUPP;
alias ComponentRoutineProcPtr ComponentRoutineUPP;
alias GetMissingComponentResourceProcPtr GetMissingComponentResourceUPP;
alias UniversalProcPtr ComponentFunctionUPP;

extern (C)
{
	alias short function (Component, uint, short, void*, Handle*) GetMissingComponentResourceProcPtr;
	alias int function (void*, ComponentMPWorkFunctionHeaderRecordPtr) ComponentMPWorkFunctionProcPtr;
	alias int function (ComponentParameters*, Handle) ComponentRoutineProcPtr;
}

// This is needed otherwise the enums will fail compiling with gdc
version (GNU)
{
	private
	{
		const __kAppleManufacturer = getOSType!("appl");
		const __kComponentResourceType = getOSType!("thng");
		const __kComponentAliasResourceType = getOSType!("thga");

	}
}

enum
{
	kAppleManufacturer = getOSType!("appl"),
	kComponentResourceType = getOSType!("thng"),
	kComponentAliasResourceType = getOSType!("thga")
}

enum
{
	kAnyComponentType = 0,
	kAnyComponentSubType = 0,
	kAnyComponentManufacturer = 0,
	kAnyComponentFlagsMask = 0
}

static if (D_LP64)
{
	enum : long
	{
		cmpThreadSafe = 1L << 28,
		cmpIsMissing = 1L << 29,
		cmpWantsRegisterMessage = 1L << 31
	}
}

else
{
	enum
	{
		cmpThreadSafe = 1 << 28,
		cmpIsMissing = 1 << 29,
		cmpWantsRegisterMessage = 1 << 31
	}
}

enum
{
	kComponentOpenSelect = -1,
	kComponentCloseSelect = -2,
	kComponentCanDoSelect = -3,
	kComponentVersionSelect = -4,
	kComponentRegisterSelect = -5,
	kComponentTargetSelect = -6,
	kComponentUnregisterSelect = -7,
	kComponentGetMPWorkFunctionSelect = -8,
	kComponentExecuteWiredActionSelect = -9,
	kComponentGetPublicResourceSelect = -10
}

enum
{
	componentDoAutoVersion = (1 << 0),
	componentWantsUnregister = (1 << 1),
	componentAutoVersionIncludeFlags = (1 << 2),
	componentHasMultiplePlatforms = (1 << 3),
	componentLoadResident = (1 << 4)
}

enum
{
	defaultComponentIdentical = 0,
	defaultComponentAnyFlags = 1,
	defaultComponentAnyManufacturer = 2,
	defaultComponentAnySubType = 4,
	defaultComponentAnyFlagsAnyManufacturer = (defaultComponentAnyFlags + defaultComponentAnyManufacturer),
	defaultComponentAnyFlagsAnyManufacturerAnySubType = (defaultComponentAnyFlags + defaultComponentAnyManufacturer + defaultComponentAnySubType)
}

enum
{
	registerComponentGlobal = 1,
	registerComponentNoDuplicates = 2,
	registerComponentAfterExisting = 4,
	registerComponentAliasesOnly = 8
}

enum
{
	platform68k = 1,
	platformPowerPC = 2,
	platformInterpreted = 3,
	platformWin32 = 4,
	platformPowerPCNativeEntryPoint = 5,
	platformIA32NativeEntryPoint = 6,
	platformPowerPC64NativeEntryPoint = 7,
	platformX86_64NativeEntryPoint = 8
}

enum
{
	platformIRIXmips = 1000,
	platformSunOSsparc = 1100,
	platformSunOSintel = 1101,
	platformLinuxppc = 1200,
	platformLinuxintel = 1201,
	platformAIXppc = 1300,
	platformNeXTIntel = 1400,
	platformNeXTppc = 1401,
	platformNeXTsparc = 1402,
	platformNeXT68k = 1403,
	platformMacOSx86 = 1500
}

enum
{
	mpWorkFlagDoWork = (1 << 0),
	mpWorkFlagDoCompletion = (1 << 1),
	mpWorkFlagCopyWorkBlock = (1 << 2),
	mpWorkFlagDontBlock = (1 << 3),
	mpWorkFlagGetProcessorCount = (1 << 4),
	mpWorkFlagGetIsRunning = (1 << 6)
}

enum
{
	cmpAliasNoFlags = 0,
	cmpAliasOnlyThisFile = 1
}

enum
{
	kCSAcceptAllComponentsMode = 0,
	kCSAcceptThreadSafeComponentsOnlyMode = 1
}

enum
{
	uppComponentFunctionImplementedProcInfo = 0x000002F0,
	uppGetComponentVersionProcInfo = 0x000000F0,
	uppComponentSetTargetProcInfo = 0x000003F0,
	uppCallComponentOpenProcInfo = 0x000003F0,
	uppCallComponentCloseProcInfo = 0x000003F0,
	uppCallComponentCanDoProcInfo = 0x000002F0,
	uppCallComponentVersionProcInfo = 0x000000F0,
	uppCallComponentRegisterProcInfo = 0x000000F0,
	uppCallComponentTargetProcInfo = 0x000003F0,
	uppCallComponentUnregisterProcInfo = 0x000000F0,
	uppCallComponentGetMPWorkFunctionProcInfo = 0x00000FF0,
	uppCallComponentGetPublicResourceProcInfo = 0x00003BF0
}

struct ComponentDescription
{
	uint componentType;
	uint componentSubType;
	uint componentManufacturer;
	uint componentFlags;
	uint componentFlagsMask;
}


struct ResourceSpec
{
	uint resType;
	short resID;
}


struct ComponentResource
{
	ComponentDescription cd;
	ResourceSpec component;
	ResourceSpec componentName;
	ResourceSpec componentInfo;
	ResourceSpec componentIcon;
}


struct ComponentPlatformInfo
{
	int componentFlags;
	ResourceSpec component;
	short platformType;
}


struct ComponentResourceExtension
{
	int componentVersion;
	int componentRegisterFlags;
	short componentIconFamily;
}


struct ComponentPlatformInfoArray
{
	int count;
	ComponentPlatformInfo* platformArray;
}


struct ExtComponentResource
{
	ComponentDescription cd;
	ResourceSpec component;
	ResourceSpec componentName;
	ResourceSpec componentInfo;
	ResourceSpec componentIcon;
	int componentVersion;
	int componentRegisterFlags;
	short componentIconFamily;
	int count;
	ComponentPlatformInfo* platformArray;
}


struct ComponentAliasResource
{
	ComponentResource cr;
	ComponentDescription aliasCD;
}


struct ComponentParameters
{
	ubyte flags;
	ubyte paramSize;
	short what;
	uint padding;
	long* params;
}


struct ComponentRecord
{
	long* data;
}


struct ComponentInstanceRecord
{
	long* data;
}


struct RegisteredComponentRecord
{
	long* data;
}


struct RegisteredComponentInstanceRecord
{
	long* data;
}


struct ComponentMPWorkFunctionHeaderRecord
{
	uint headerSize;
	uint recordSize;
	uint workFlags;
	ushort processorCount;
	ubyte unused;
	ubyte isRunning;
}

extern (C)
{
	void CSSetComponentsThreadMode (uint mode);
	uint CSGetComponentsThreadMode ();
	ComponentFunctionUPP NewComponentFunctionUPP (ProcPtr userRoutine, uint procInfo);
	void DisposeComponentFunctionUPP (ComponentFunctionUPP userUPP);
	Component RegisterComponent (ComponentDescription* cd, ComponentRoutineUPP componentEntryPoint, short global, Handle componentName, Handle componentInfo, Handle componentIcon);
	Component RegisterComponentResource (ComponentResourceHandle cr, short global);
	short UnregisterComponent (Component aComponent);
	Component FindNextComponent (Component aComponent, ComponentDescription* looking);
	int CountComponents (ComponentDescription* looking);
	short GetComponentInfo (Component aComponent, ComponentDescription* cd, Handle componentName, Handle componentInfo, Handle componentIcon);
	int GetComponentListModSeed ();
	int GetComponentTypeModSeed (uint componentType);
	short OpenAComponent (Component aComponent, ComponentInstance* ci);
	ComponentInstance OpenComponent (Component aComponent);
	short CloseComponent (ComponentInstance aComponentInstance);
	short GetComponentInstanceError (ComponentInstance aComponentInstance);
	Component ResolveComponentAlias (Component aComponent);
	short GetComponentPublicResource (Component aComponent, uint resourceType, short resourceID, Handle* theResource);
	short GetComponentPublicResourceList (uint resourceType, short resourceID, int flags, ComponentDescription* cd, GetMissingComponentResourceUPP missingProc, void* refCon, void* atomContainerPtr);
	short GetComponentPublicIndString (Component aComponent, ubyte[256] theString, short strListID, short index);
	void SetComponentInstanceError (ComponentInstance aComponentInstance, short theError);
	int GetComponentRefcon (Component aComponent);
	void SetComponentRefcon (Component aComponent, int theRefcon);
	short OpenComponentResFile (Component aComponent);
	short OpenAComponentResFile (Component aComponent, ResFileRefNum* resRef);
	short CloseComponentResFile (short refnum);
	short GetComponentResource (Component aComponent, uint resType, short resID, Handle* theResource);
	short GetComponentIndString (Component aComponent, ubyte[256] theString, short strListID, short index);
	Handle GetComponentInstanceStorage (ComponentInstance aComponentInstance);
	void SetComponentInstanceStorage (ComponentInstance aComponentInstance, Handle theStorage);
	int CountComponentInstances (Component aComponent);
	int CallComponentFunction (ComponentParameters* params, ComponentFunctionUPP func);
	int CallComponentFunctionWithStorage (Handle storage, ComponentParameters* params, ComponentFunctionUPP func);
	int CallComponentFunctionWithStorageProcInfo (Handle storage, ComponentParameters* params, ProcPtr func, uint funcProcInfo);
	int DelegateComponentCall (ComponentParameters* originalParams, ComponentInstance ci);
	short SetDefaultComponent (Component aComponent, short flags);
	ComponentInstance OpenDefaultComponent (uint componentType, uint componentSubType);
	short OpenADefaultComponent (uint componentType, uint componentSubType, ComponentInstance* ci);
	Component CaptureComponent (Component capturedComponent, Component capturingComponent);
	short UncaptureComponent (Component aComponent);
	int RegisterComponentResourceFile (short resRefNum, short global);
	short RegisterComponentFileRef (FSRef* ref_, short global);
	short RegisterComponentFileRefEntries (FSRef* ref_, short global, ComponentDescription* toRegister, uint registerCount);
	int CallComponentOpen (ComponentInstance ci, ComponentInstance self);
	int CallComponentClose (ComponentInstance ci, ComponentInstance self);
	int CallComponentCanDo (ComponentInstance ci, short ftnNumber);
	int CallComponentVersion (ComponentInstance ci);
	int CallComponentRegister (ComponentInstance ci);
	int CallComponentTarget (ComponentInstance ci, ComponentInstance target);
	int CallComponentUnregister (ComponentInstance ci);
	int CallComponentGetMPWorkFunction (ComponentInstance ci, ComponentMPWorkFunctionUPP* workFunction, void** refCon);
	int CallComponentGetPublicResource (ComponentInstance ci, uint resourceType, short resourceID, Handle* resource);
	int CallComponentDispatch (ComponentParameters* cp);
	ComponentMPWorkFunctionUPP NewComponentMPWorkFunctionUPP (ComponentMPWorkFunctionProcPtr userRoutine);
	ComponentRoutineUPP NewComponentRoutineUPP (ComponentRoutineProcPtr userRoutine);
	GetMissingComponentResourceUPP NewGetMissingComponentResourceUPP (GetMissingComponentResourceProcPtr userRoutine);
	void DisposeComponentMPWorkFunctionUPP (ComponentMPWorkFunctionUPP userUPP);
	void DisposeComponentRoutineUPP (ComponentRoutineUPP userUPP);
	void DisposeGetMissingComponentResourceUPP (GetMissingComponentResourceUPP userUPP);
	int InvokeComponentMPWorkFunctionUPP (void* globalRefCon, ComponentMPWorkFunctionHeaderRecordPtr header, ComponentMPWorkFunctionUPP userUPP);
	int InvokeComponentRoutineUPP (ComponentParameters* cp, Handle componentStorage, ComponentRoutineUPP userUPP);
	short InvokeGetMissingComponentResourceUPP (Component c, uint resType, short resID, void* refCon, Handle* resource, GetMissingComponentResourceUPP userUPP);
}