view dstep/coreservices/carboncore/CodeFragments.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.CodeFragments;

//import dstep.AvailabilityMacros;
import dstep.coreservices.carboncore.Files;
import dstep.coreservices.carboncore.MacTypes;
import dstep.coreservices.carboncore.Multiprocessing;
import dstep.corefoundation.CFBundle;
import dstep.internal.Version;
import dstep.objc.bridge.Bridge;
import dstep.objc.bridge.TypeEncoding;
import dstep.objc.objc : id;

static if (!D_LP64):
align (2):
	
version (GNU)
{
	private
	{
		const __kPowerPCCFragArch = getOSType!("pwpc");
		const __kMotorola68KCFragArch = getOSType!("m68k");
		const __kCFragResourceType = getOSType!("cfrg");
		const __kCFragLibraryFileType = getOSType!("shlb");
		const __kCompiledCFragArch = getOSType!("none");
	}
}

template CFragHasFileLocation (alias a)
{
	const CFragHasFileLocation = a == kDataForkCFragLocator || a == kResourceCFragLocator;
}
	
struct CFragCFBundleLocator
{
	CFBundleRef fragmentBundle;
	uint offset;
	uint length;
}

struct OpaqueCFragClosureID;
alias OpaqueCFragClosureID* CFragClosureID;

struct OpaqueCFragConnectionID;
alias OpaqueCFragConnectionID* CFragConnectionID;

struct OpaqueCFragContainerID;
alias OpaqueCFragContainerID* CFragContainerID;

alias MPProcessID CFragContextID;
alias CFragSystem7DiskFlatLocator CFragHFSDiskFlatLocator;
alias CFragSystem7Locator CFragHFSLocator;
alias CFragSystem7LocatorPtr CFragHFSLocatorPtr;
alias CFragSystem7MemoryLocator CFragHFSMemoryLocator;
alias CFragSystem7SegmentedLocator CFragHFSSegmentedLocator;
alias CFragSystem7InitBlock CFragInitBlock;
alias CFragSystem7InitBlockPtr CFragInitBlockPtr;

struct CFragResource
{
	uint reservedA;
	uint reservedB;
	ushort reservedC;
	ushort version_;
	uint reservedD;
	uint reservedE;
	uint reservedF;
	uint reservedG;
	ushort reservedH;
	ushort memberCount;
	CFragResourceMember firstMember;
}

alias CFragResource* CFragResourcePtr;
alias CFragResourcePtr* CFragResourceHandle;

struct CFragResourceExtensionHeader
{
	ushort extensionKind;
	ushort extensionSize;
}

alias CFragResourceExtensionHeader* CFragResourceExtensionHeaderPtr;

struct CFragResourceMember
{
	CFragArchitecture architecture;
	ushort reservedA;
	ubyte reservedB;
	ubyte updateLevel;
	CFragVersionNumber currentVersion;
	CFragVersionNumber oldDefVersion;
	CFragUsage1Union uUsage1;
	CFragUsage2Union uUsage2;
	CFragUsage usage;
	CFragLocatorKind where;
	uint offset;
	uint length;
	CFragWhere1Union uWhere1;
	CFragWhere2Union uWhere2;
	ushort extensionCount;
	ushort memberSize;
	ubyte[16] name;
}

alias CFragResourceMember* CFragResourceMemberPtr;

struct CFragResourceSearchExtension
{
	CFragResourceExtensionHeader header;
	OSType libKind;
	ubyte[1] qualifiers;
}

alias CFragResourceSearchExtension* CFragResourceSearchExtensionPtr;

struct CFragSystem7DiskFlatLocator
{
	FSSpec* fileSpec;
	uint offset;
	uint length;
}

struct CFragSystem7InitBlock
{
	CFragContextID contextID;
	CFragContextID closureID;
	CFragConnectionID connectionID;
	CFragSystem7Locator fragLocator;
	StringPtr libName;
	uint reservedA;
}

alias CFragSystem7InitBlock* CFragSystem7InitBlockPtr;

struct CFragSystem7Locator
{
	int where;
	
	union
	{
		CFragSystem7DiskFlatLocator onDisk;
		CFragSystem7MemoryLocator inMem;
		CFragSystem7SegmentedLocator inSegs;
		CFragCFBundleLocator inBundle;
	}
}

alias CFragSystem7Locator* CFragSystem7LocatorPtr;

struct CFragSystem7MemoryLocator
{
	LogicalAddress address;
	uint length;
	bool inPlace;
	ubyte reservedA;
	ushort reservedB;
}

struct CFragSystem7SegmentedLocator
{
	FSSpec* fileSpec;
	OSType rsrcType;
	short rsrcID;
	ushort reservedA;
}

union CFragUsage1Union
{
	uint appStackSize;
}

union CFragUsage2Union
{
	short appSubdirID;
	ushort libFlags;
}

union CFragWhere1Union
{
	uint spaceID;
}

union CFragWhere2Union
{
	ushort reserved;
}

alias CFragConnectionID ConnectionID;
alias CFragSystem7DiskFlatLocator DiskFragment;
alias CFragSystem7Locator FragmentLocator;
alias CFragSystem7LocatorPtr FragmentLocatorPtr;
alias CFragInitBlock InitBlock;
alias CFragInitBlockPtr InitBlockPtr;
alias CFragLoadOptions LoadFlags;
alias CFragSystem7MemoryLocator MemFragment;
alias CFragSystem7SegmentedLocator SegmentedFragment;
alias CFragSymbolClass SymClass;

alias OSType CFragArchitecture;
enum : OSType
{
	kPowerPCCFragArch = getOSType!("pwpc"),
	kMotorola68KCFragArch = getOSType!("m68k"),
	kAnyCFragArch = 0x3F3F3F3F
}

enum
{
	kIsCompleteCFrag = 0,
	kFirstCFragUpdate = 1
}

enum
{
	kCurrCFragResourceVersion = 1
}

enum
{
	kDefaultCFragNameLen = 16
}

alias CFragHasFileLocation IsFileLocation;

enum
{
	kCFragGoesToEOF = 0
}

enum
{
	kCFragLibUsageMapPrivatelyMask = 0x0001
}

enum
{
	kCFragResourceSearchExtensionKind = 0x30EE
}

enum
{
	kCFragResourceType = getOSType!("cfrg"),
	kCFragResourceID = 0,
	kCFragLibraryFileType = getOSType!("shlb"),
	kCFragAllFileTypes = 0xFFFFFFFF
}

static if (PPC)
{
	enum
	{
		kCompiledCFragArch = kPowerPCCFragArch
	}
}

else static if (X86)
{
	enum
	{
		kCompiledCFragArch = getOSType!("none")
	}
}

enum : OptionBits
{
	kReferenceCFrag = 0x0001,
	kFindCFrag = 0x0002,
	kPrivateCFragCopy = 0x0005
}

enum
{
	kLoadCFrag = kReferenceCFrag
}

enum
{
	kPowerPC = kPowerPCCFragArch,
	kMotorola68K = kMotorola68KCFragArch
}

enum : ubyte
{
	kCodeCFragSymbol = 0,
	kDataCFragSymbol = 1,
	kTVectorCFragSymbol = 2,
	kTOCCFragSymbol = 3,
	kGlueCFragSymbol = 4
}

enum : ubyte
{
	kMemoryCFragLocator = 0,
	kDataForkCFragLocator = 1,
	kResourceCFragLocator = 2,
	kNamedFragmentCFragLocator = 4,
	kCFBundleCFragLocator = 5,
	kCFBundlePreCFragLocator = 6
}


enum : ubyte
{
	kImportLibraryCFrag = 0,
	kApplicationCFrag = 1,
	kDropInAdditionCFrag = 2,
	kStubLibraryCFrag = 3,
	kWeakStubLibraryCFrag = 4
}

enum
{
	kUnresolvedCFragSymbolAddress = 0
}


enum
{
	kPowerPCArch = kPowerPCCFragArch,
	kMotorola68KArch = kMotorola68KCFragArch,
	kAnyArchType = kAnyCFragArch,
	kNoLibName = 0,
	kNoConnectionID = 0,
	kLoadLib = kLoadCFrag,
	kFindLib = kFindCFrag,
	kNewCFragCopy = kPrivateCFragCopy,
	kLoadNewCopy = kPrivateCFragCopy,
	kUseInPlace = 0x80,
	kCodeSym = kCodeCFragSymbol,
	kDataSym = kDataCFragSymbol,
	kTVectSym = kTVectorCFragSymbol,
	kTOCSym = kTOCCFragSymbol,
	kGlueSym = kGlueCFragSymbol,
	kInMem = kMemoryCFragLocator,
	kOnDiskFlat = kDataForkCFragLocator,
	kOnDiskSegmented = kResourceCFragLocator,
	kIsLib = kImportLibraryCFrag,
	kIsApp = kApplicationCFrag,
	kIsDropIn = kDropInAdditionCFrag,
	kFullLib = kIsCompleteCFrag,
	kUpdateLib = kFirstCFragUpdate,
	kWholeFork = kCFragGoesToEOF,
	kCFMRsrcType = kCFragResourceType,
	kCFMRsrcID = kCFragResourceID,
	kSHLBFileType = kCFragLibraryFileType,
	kUnresolvedSymbolAddress = kUnresolvedCFragSymbolAddress
}

alias OptionBits CFragLoadOptions;
alias ubyte CFragLocatorKind;
alias ubyte CFragSymbolClass;
alias ubyte CFragUsage;
alias uint CFragVersionNumber;

enum : uint
{
	kNullCFragVersion = 0,
	kWildcardCFragVersion = 0xFFFFFFFF
}