topical media & game development
lib-of-vs-libs-QTDevWin-CIncludes-NameRegistry.h / h
/*
File: NameRegistry.h
Contains: NameRegistry Interfaces
Version: Technology: MacOS
Release: QuickTime 6.0.2
Copyright: (c) 1993-2001 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 __NAMEREGISTRY__
define __NAMEREGISTRY__
ifndef __MACTYPES__
include <MacTypes.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=power
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
#pragma pack(2)
endif
*****************************************************************************
Foundation Types
/* Value of a property */
typedef void * RegPropertyValue;
/* Length of property value */
typedef UInt32 RegPropertyValueSize;
*****************************************************************************
RegEntryID : The Global x-Namespace Entry Identifier
struct RegEntryID {
UInt32 contents[4];
};
typedef struct RegEntryID RegEntryID;
typedef RegEntryID * RegEntryIDPtr;
*****************************************************************************
Root Entry Name Definitions (Applies to all Names in the RootNameSpace)
o Names are a colon-separated list of name components. Name components
may not themselves contain colons.
o Names are presented as null-terminated ASCII character strings.
o Names follow similar parsing rules to Apple file system absolute
and relative paths. However the '::' parent directory syntax is
not currently supported.
/* Max length of Entry Name */
enum {
kRegCStrMaxEntryNameLength = 47
};
/* Entry Names are single byte ASCII */
typedef char RegCStrEntryName;
typedef char * RegCStrEntryNamePtr;
/* length of RegCStrEntryNameBuf = kRegCStrMaxEntryNameLength+1*/
typedef char RegCStrEntryNameBuf[48];
typedef char RegCStrPathName;
typedef UInt32 RegPathNameSize;
enum {
kRegPathNameSeparator = ':', /* 0x3A */
kRegEntryNameTerminator = 0x00, /* '\0' */
kRegPathNameTerminator = 0x00 /* '\0' */
};
*****************************************************************************
Property Name and ID Definitions
(Applies to all Properties Regardless of NameSpace)
enum {
kRegMaximumPropertyNameLength = 31, /* Max length of Property Name */
kRegPropertyNameTerminator = 0x00 /* '\0' */
};
typedef char RegPropertyNameBuf[32];
typedef char RegPropertyName;
typedef char * RegPropertyNamePtr;
*****************************************************************************
Iteration Operations
These specify direction when traversing the name relationships
typedef UInt32 RegIterationOp;
typedef RegIterationOp RegEntryIterationOp;
enum {
/* Absolute locations*/
kRegIterRoot = 0x00000002, /* "Upward" Relationships */
kRegIterParents = 0x00000003, /* include all parent(s) of entry */
/* "Downward" Relationships*/
kRegIterChildren = 0x00000004, /* include all children */
kRegIterSubTrees = 0x00000005, /* include all sub trees of entry */
kRegIterDescendants = 0x00000005, /* include all descendants of entry */
/* "Horizontal" Relationships */
kRegIterSibling = 0x00000006, /* include all siblings */
/* Keep doing the same thing*/
kRegIterContinue = 0x00000001
};
*****************************************************************************
Name Entry and Property Modifiers
Modifiers describe special characteristics of names
and properties. Modifiers might be supported for
some names and not others.
Device Drivers should not rely on functionality
specified as a modifier.
typedef UInt32 RegModifiers;
typedef RegModifiers RegEntryModifiers;
typedef RegModifiers RegPropertyModifiers;
enum {
kRegNoModifiers = 0x00000000, /* no entry modifiers in place */
kRegUniversalModifierMask = 0x0000FFFF, /* mods to all entries */
kRegNameSpaceModifierMask = 0x00FF0000, /* mods to all entries within namespace */
kRegModifierMask = (long)0xFF000000 /* mods to just this entry */
};
/* Universal Property Modifiers */
enum {
kRegPropertyValueIsSavedToNVRAM = 0x00000020, /* property is non-volatile (saved in NVRAM) */
kRegPropertyValueIsSavedToDisk = 0x00000040 /* property is non-volatile (saved on disk) */
};
/* NameRegistry version, Gestalt/PEF-style -- MUST BE KEPT IN SYNC WITH MAKEFILE !! */
enum {
LatestNR_PEFVersion = 0x01030000 /* latest NameRegistryLib version (Gestalt/PEF-style) */
};
/* /////////////////
//
// The Registry API
//
///////////////// */
/* NameRegistry dispatch indexes */
enum {
kSelectRegistryEntryIDInit = 0,
kSelectRegistryEntryIDCompare = 1,
kSelectRegistryEntryIDCopy = 2,
kSelectRegistryEntryIDDispose = 3,
kSelectRegistryCStrEntryCreate = 4,
kSelectRegistryEntryDelete = 5,
kSelectRegistryEntryCopy = 6,
kSelectRegistryEntryIterateCreate = 7,
kSelectRegistryEntryIterateDispose = 8,
kSelectRegistryEntryIterateSet = 9,
kSelectRegistryEntryIterate = 10,
kSelectRegistryEntrySearch = 11,
kSelectRegistryCStrEntryLookup = 12,
kSelectRegistryEntryToPathSize = 13,
kSelectRegistryCStrEntryToPath = 14,
kSelectRegistryCStrEntryToName = 15,
kSelectRegistryPropertyCreate = 16,
kSelectRegistryPropertyDelete = 17,
kSelectRegistryPropertyRename = 18,
kSelectRegistryPropertyIterateCreate = 19,
kSelectRegistryPropertyIterateDispose = 20,
kSelectRegistryPropertyIterate = 21,
kSelectRegistryPropertyGetSize = 22,
kSelectRegistryPropertyGet = 23,
kSelectRegistryPropertySet = 24,
kSelectRegistryEntryGetMod = 25,
kSelectRegistryEntrySetMod = 26,
kSelectRegistryPropertyGetMod = 27,
kSelectRegistryPropertySetMod = 28,
kSelectRegistryEntryMod = 29,
kSelectRegistryEntryPropertyMod = 30, /* if you add more selectors here, remember to change 'kSelectRegistryHighestSelector' below*/
kSelectRegistryHighestSelector = kSelectRegistryEntryPropertyMod
};
/* /////////////////
//
// Entry Management
//
///////////////// */
/*-------------------------------
* EntryID handling
*/
/*
* Initialize an EntryID to a known invalid state
* note: invalid != uninitialized
*/
if CALL_NOT_IN_CARBON
EXTERN_API_C( OSStatus )
RegistryEntryIDInit (RegEntryID * id) TWOWORDINLINE(0x7000, 0xABE9);
/*
* Compare EntryID's for equality or if invalid
*
* If a NULL value is given for either id1 or id2, the other id
* is compared with an invalid ID. If both are NULL, the id's
* are consided equal (result = true).
*/
EXTERN_API_C( Boolean )
RegistryEntryIDCompare (const RegEntryID * id1,
const RegEntryID * id2) TWOWORDINLINE(0x7001, 0xABE9);
/*
* Copy an EntryID
*/
EXTERN_API_C( OSStatus )
RegistryEntryIDCopy (const RegEntryID * src,
RegEntryID * dst) TWOWORDINLINE(0x7002, 0xABE9);
/*
* Free an ID so it can be reused.
*/
EXTERN_API_C( OSStatus )
RegistryEntryIDDispose (RegEntryID * id) TWOWORDINLINE(0x7003, 0xABE9);
/*-------------------------------
* Adding and removing entries
*
* If (parentEntry) is NULL, the name is assumed
* to be a rooted path. It is rooted to an anonymous, unnamed root.
*/
EXTERN_API_C( OSStatus )
RegistryCStrEntryCreate (const RegEntryID * parentEntry,
const RegCStrPathName * name,
RegEntryID * newEntry) TWOWORDINLINE(0x7004, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryEntryDelete (const RegEntryID * id) TWOWORDINLINE(0x7005, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryEntryCopy (RegEntryID * parentEntryID,
RegEntryID * sourceDevice,
RegEntryID * destDevice) TWOWORDINLINE(0x7006, 0xABE9);
/*---------------------------
* Traversing the namespace
*
* To support arbitrary namespace implementations in the future,
* I have hidden the form that the place pointer takes. The previous
* interface exposed the place pointer by specifying it as a
* RegEntryID.
*
* I have also removed any notion of returning the entries
* in a particular order, because an implementation might
* return the names in semi-random order. Many name service
* implementations will store the names in a hashed lookup
* table.
*
* Writing code to traverse some set of names consists of
* a call to begin the iteration, the iteration loop, and
* a call to end the iteration. The begin call initializes
* the iteration cookie data structure. The call to end the
* iteration should be called even in the case of error so
* that allocated data structures can be freed.
*
* Create(...)
* do {
* Iterate(...);
* } while (!done);
* Dispose(...);
*
* This is the basic code structure for callers of the iteration
* interface.
*/
endif /* CALL_NOT_IN_CARBON */
typedef struct OpaqueRegEntryIter* RegEntryIter;
/*
* create/dispose the iterator structure
* defaults to root with relationship = kRegIterDescendants
*/
if CALL_NOT_IN_CARBON
EXTERN_API_C( OSStatus )
RegistryEntryIterateCreate (RegEntryIter * cookie) TWOWORDINLINE(0x7007, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryEntryIterateDispose (RegEntryIter * cookie) TWOWORDINLINE(0x7008, 0xABE9);
/*
* set Entry Iterator to specified entry
*/
EXTERN_API_C( OSStatus )
RegistryEntryIterateSet (RegEntryIter * cookie,
const RegEntryID * startEntryID) TWOWORDINLINE(0x7009, 0xABE9);
/*
* Return each value of the iteration
*
* return entries related to the current entry
* with the specified relationship
*/
EXTERN_API_C( OSStatus )
RegistryEntryIterate (RegEntryIter * cookie,
RegEntryIterationOp relationship,
RegEntryID * foundEntry,
Boolean * done) TWOWORDINLINE(0x700A, 0xABE9);
/*
* return entries with the specified property
*
* A NULL RegPropertyValue pointer will return an
* entry with the property containing any value.
*/
EXTERN_API_C( OSStatus )
RegistryEntrySearch (RegEntryIter * cookie,
RegEntryIterationOp relationship,
RegEntryID * foundEntry,
Boolean * done,
const RegPropertyName * propertyName,
const void * propertyValue,
RegPropertyValueSize propertySize) TWOWORDINLINE(0x700B, 0xABE9);
/*--------------------------------
* Find a name in the namespace
*
* This is the fast lookup mechanism.
* NOTE: A reverse lookup mechanism
* has not been provided because
* some name services may not
* provide a fast, general reverse
* lookup.
*/
EXTERN_API_C( OSStatus )
RegistryCStrEntryLookup (const RegEntryID * searchPointID,
const RegCStrPathName * pathName,
RegEntryID * foundEntry) TWOWORDINLINE(0x700C, 0xABE9);
/*---------------------------------------------
* Convert an entry to a rooted name string
*
* A utility routine to turn an Entry ID
* back into a name string.
*/
EXTERN_API_C( OSStatus )
RegistryEntryToPathSize (const RegEntryID * entryID,
RegPathNameSize * pathSize) TWOWORDINLINE(0x700D, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryCStrEntryToPath (const RegEntryID * entryID,
RegCStrPathName * pathName,
RegPathNameSize pathSize) TWOWORDINLINE(0x700E, 0xABE9);
/*
* Parse a path name.
*
* Retrieve the last component of the path, and
* return a spec for the parent.
*/
EXTERN_API_C( OSStatus )
RegistryCStrEntryToName (const RegEntryID * entryID,
RegEntryID * parentEntry,
RegCStrEntryName * nameComponent,
Boolean * done) TWOWORDINLINE(0x700F, 0xABE9);
/* ////////////////////////////////////////////////
//
// Property Management
//
//////////////////////////////////////////////// */
/*-------------------------------
* Adding and removing properties
*/
EXTERN_API_C( OSStatus )
RegistryPropertyCreate (const RegEntryID * entryID,
const RegPropertyName * propertyName,
const void * propertyValue,
RegPropertyValueSize propertySize) TWOWORDINLINE(0x7010, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryPropertyDelete (const RegEntryID * entryID,
const RegPropertyName * propertyName) TWOWORDINLINE(0x7011, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryPropertyRename (const RegEntryID * entry,
const RegPropertyName * oldName,
const RegPropertyName * newName) TWOWORDINLINE(0x7012, 0xABE9);
/*---------------------------
* Traversing the Properties of a name
*
*/
endif /* CALL_NOT_IN_CARBON */
typedef struct OpaqueRegPropertyIter* RegPropertyIter;
if CALL_NOT_IN_CARBON
EXTERN_API_C( OSStatus )
RegistryPropertyIterateCreate (const RegEntryID * entry,
RegPropertyIter * cookie) TWOWORDINLINE(0x7013, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryPropertyIterateDispose (RegPropertyIter * cookie) TWOWORDINLINE(0x7014, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryPropertyIterate (RegPropertyIter * cookie,
RegPropertyName * foundProperty,
Boolean * done) TWOWORDINLINE(0x7015, 0xABE9);
/*
* Get the value of the specified property for the specified entry.
*
*/
EXTERN_API_C( OSStatus )
RegistryPropertyGetSize (const RegEntryID * entryID,
const RegPropertyName * propertyName,
RegPropertyValueSize * propertySize) TWOWORDINLINE(0x7016, 0xABE9);
/*
* (*propertySize) is the maximum size of the value returned in the buffer
* pointed to by (propertyValue). Upon return, (*propertySize) is the size of the
* value returned.
*/
EXTERN_API_C( OSStatus )
RegistryPropertyGet (const RegEntryID * entryID,
const RegPropertyName * propertyName,
void * propertyValue,
RegPropertyValueSize * propertySize) TWOWORDINLINE(0x7017, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryPropertySet (const RegEntryID * entryID,
const RegPropertyName * propertyName,
const void * propertyValue,
RegPropertyValueSize propertySize) TWOWORDINLINE(0x7018, 0xABE9);
/* ////////////////////////////////////////////////
//
// Modifier Management
//
//////////////////////////////////////////////// */
/*
* Modifiers describe special characteristics of names
* and properties. Modifiers might be supported for
* some names and not others.
*
* Device Drivers should not rely on functionality
* specified as a modifier. These interfaces
* are for use in writing Experts.
*/
/*
* Get and Set operators for entry modifiers
*/
EXTERN_API_C( OSStatus )
RegistryEntryGetMod (const RegEntryID * entry,
RegEntryModifiers * modifiers) TWOWORDINLINE(0x7019, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryEntrySetMod (const RegEntryID * entry,
RegEntryModifiers modifiers) TWOWORDINLINE(0x701A, 0xABE9);
/*
* Get and Set operators for property modifiers
*/
EXTERN_API_C( OSStatus )
RegistryPropertyGetMod (const RegEntryID * entry,
const RegPropertyName * name,
RegPropertyModifiers * modifiers) TWOWORDINLINE(0x701B, 0xABE9);
EXTERN_API_C( OSStatus )
RegistryPropertySetMod (const RegEntryID * entry,
const RegPropertyName * name,
RegPropertyModifiers modifiers) TWOWORDINLINE(0x701C, 0xABE9);
/*
* Iterator operator for entry modifier search
*/
EXTERN_API_C( OSStatus )
RegistryEntryMod (RegEntryIter * cookie,
RegEntryIterationOp relationship,
RegEntryID * foundEntry,
Boolean * done,
RegEntryModifiers matchingModifiers) TWOWORDINLINE(0x701D, 0xABE9);
/*
* Iterator operator for entries with matching
* property modifiers
*/
EXTERN_API_C( OSStatus )
RegistryEntryPropertyMod (RegEntryIter * cookie,
RegEntryIterationOp relationship,
RegEntryID * foundEntry,
Boolean * done,
RegPropertyModifiers matchingModifiers) TWOWORDINLINE(0x701E, 0xABE9);
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 /* __NAMEREGISTRY__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.