/*
     File:       Dictionary.h
 
     Contains:   Dictionary Manager Interfaces
 
     Version:    Technology: System 7
                 Release:    QuickTime 6.0.2
 
     Copyright:  (c) 1992-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 __DICTIONARY__
#define __DICTIONARY__

#ifndef __MACTYPES__
#include "MacTypes.h"
#endif

#ifndef __FILES__
#include "Files.h"
#endif

#ifndef __AEREGISTRY__
#include "AERegistry.h"
#endif

#ifndef __CODEFRAGMENTS__
#include "CodeFragments.h"
#endif

#ifndef __MACERRORS__
#include "MacErrors.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

/*
=============================================================================================
 Modern Dictionary Manager
=============================================================================================
*/
/*
    Dictionary information
*/
enum {
    kDictionaryFileType         = FOUR_CHAR_CODE('dict'),
    kDCMDictionaryHeaderSignature = FOUR_CHAR_CODE('dict'),
    kDCMDictionaryHeaderVersion = 2
};

enum {
    kDCMAnyFieldTag             = typeWildCard,
    kDCMAnyFieldType            = typeWildCard
};

/*
    Contents of a Field Info Record (an AERecord)
*/
enum {
    keyDCMFieldTag              = FOUR_CHAR_CODE('ftag'),       /* typeEnumeration */
    keyDCMFieldType             = FOUR_CHAR_CODE('ftyp'),       /* typeEnumeration */
    keyDCMMaxRecordSize         = FOUR_CHAR_CODE('mrsz'),       /* typeMagnitude */
    keyDCMFieldAttributes       = FOUR_CHAR_CODE('fatr'),
    keyDCMFieldDefaultData      = FOUR_CHAR_CODE('fdef'),
    keyDCMFieldName             = FOUR_CHAR_CODE('fnam'),       /* typeChar */
    keyDCMFieldFindMethods      = FOUR_CHAR_CODE('ffnd')        /* typeAEList of typeDCMFindMethod */
};

/*
    Special types for fields of a Field Info Record
*/
enum {
    typeDCMFieldAttributes      = FOUR_CHAR_CODE('fatr'),
    typeDCMFindMethod           = FOUR_CHAR_CODE('fmth')
};


/*
    Field attributes
*/
enum {
    kDCMIndexedFieldMask        = 0x00000001,
    kDCMRequiredFieldMask       = 0x00000002,
    kDCMIdentifyFieldMask       = 0x00000004,
    kDCMFixedSizeFieldMask      = 0x00000008,
    kDCMHiddenFieldMask         = (long)0x80000000
};

typedef OptionBits                      DCMFieldAttributes;
/*
    Standard dictionary properties
*/
enum {
    pDCMAccessMethod            = FOUR_CHAR_CODE('amtd'),       /* data type: typeChar ReadOnly */
    pDCMPermission              = FOUR_CHAR_CODE('perm'),       /* data type: typeUInt16 */
    pDCMListing                 = FOUR_CHAR_CODE('list'),       /* data type: typeUInt16 */
    pDCMMaintenance             = FOUR_CHAR_CODE('mtnc'),       /* data type: typeUInt16 */
    pDCMLocale                  = FOUR_CHAR_CODE('locl'),       /* data type: typeUInt32.  Optional; default = kLocaleIdentifierWildCard */
    pDCMClass                   = pClass,                       /* data type: typeUInt16 */
    pDCMCopyright               = FOUR_CHAR_CODE('info')        /* data type: typeChar */
};

/*
    pDCMPermission property constants
*/
enum {
    kDCMReadOnlyDictionary      = 0,
    kDCMReadWriteDictionary     = 1
};

/*
    pDCMListing property constants
*/
enum {
    kDCMAllowListing            = 0,
    kDCMProhibitListing         = 1
};

/*
    pDCMClass property constants
*/
enum {
    kDCMUserDictionaryClass     = 0,
    kDCMSpecificDictionaryClass = 1,
    kDCMBasicDictionaryClass    = 2
};

/*
    Standard search method
*/
enum {
    kDCMFindMethodExactMatch    = kAEEquals,
    kDCMFindMethodBeginningMatch = kAEBeginsWith,
    kDCMFindMethodContainsMatch = kAEContains,
    kDCMFindMethodEndingMatch   = kAEEndsWith,
    kDCMFindMethodForwardTrie   = FOUR_CHAR_CODE('ftri'),       /* used for morphological analysis*/
    kDCMFindMethodBackwardTrie  = FOUR_CHAR_CODE('btri')        /* used for morphological analysis*/
};

typedef OSType                          DCMFindMethod;
/*
    AccessMethod features
*/
enum {
    kDCMCanUseFileDictionaryMask = 0x00000001,
    kDCMCanUseMemoryDictionaryMask = 0x00000002,
    kDCMCanStreamDictionaryMask = 0x00000004,
    kDCMCanHaveMultipleIndexMask = 0x00000008,
    kDCMCanModifyDictionaryMask = 0x00000010,
    kDCMCanCreateDictionaryMask = 0x00000020,
    kDCMCanAddDictionaryFieldMask = 0x00000040,
    kDCMCanUseTransactionMask   = 0x00000080
};

typedef OptionBits                      DCMAccessMethodFeature;
typedef UInt32                          DCMUniqueID;
typedef struct OpaqueDCMObjectID*       DCMObjectID;
typedef DCMObjectID                     DCMAccessMethodID;
typedef DCMObjectID                     DCMDictionaryID;
#define kDCMInvalidObjectID ((DCMObjectID) kInvalidID)
typedef struct OpaqueDCMObjectRef*      DCMObjectRef;
typedef DCMObjectRef                    DCMDictionaryRef;
typedef DCMObjectRef                    DCMDictionaryStreamRef;
#define kDCMInvalidObjectRef ((DCMObjectRef) kInvalidID)
typedef struct OpaqueDCMObjectIterator*  DCMObjectIterator;
typedef DCMObjectIterator               DCMAccessMethodIterator;
typedef DCMObjectIterator               DCMDictionaryIterator;
typedef struct OpaqueDCMFoundRecordIterator*  DCMFoundRecordIterator;
/*
    Field specification declarations
*/
typedef DescType                        DCMFieldTag;
typedef DescType                        DCMFieldType;
/*
    Dictionary header information
*/

struct DCMDictionaryHeader {
    FourCharCode                    headerSignature;
    UInt32                          headerVersion;
    ByteCount                       headerSize;
    Str63                           accessMethod;
};
typedef struct DCMDictionaryHeader      DCMDictionaryHeader;
/*
    Callback routines
*/
typedef CALLBACK_API( Boolean , DCMProgressFilterProcPtr )(Boolean determinateProcess, UInt16 percentageComplete, UInt32 callbackUD);
typedef STACK_UPP_TYPE(DCMProgressFilterProcPtr)                DCMProgressFilterUPP;
#if OPAQUE_UPP_TYPES
#if CALL_NOT_IN_CARBON
    EXTERN_API(DCMProgressFilterUPP)
    NewDCMProgressFilterUPP        (DCMProgressFilterProcPtr userRoutine);

    EXTERN_API(void)
    DisposeDCMProgressFilterUPP    (DCMProgressFilterUPP    userUPP);

    EXTERN_API(Boolean)
    InvokeDCMProgressFilterUPP     (Boolean                 determinateProcess,
                                    UInt16                  percentageComplete,
                                    UInt32                  callbackUD,
                                    DCMProgressFilterUPP    userUPP);

#endif  /* CALL_NOT_IN_CARBON */

#else
    enum { uppDCMProgressFilterProcInfo = 0x00000E50 };             /* pascal 1_byte Func(1_byte, 2_bytes, 4_bytes) */
    #define NewDCMProgressFilterUPP(userRoutine)                    (DCMProgressFilterUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDCMProgressFilterProcInfo, GetCurrentArchitecture())
    #define DisposeDCMProgressFilterUPP(userUPP)                    DisposeRoutineDescriptor(userUPP)
    #define InvokeDCMProgressFilterUPP(determinateProcess, percentageComplete, callbackUD, userUPP)  (Boolean)CALL_THREE_PARAMETER_UPP((userUPP), uppDCMProgressFilterProcInfo, (determinateProcess), (percentageComplete), (callbackUD))
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewDCMProgressFilterProc(userRoutine)                   NewDCMProgressFilterUPP(userRoutine)
#define CallDCMProgressFilterProc(userRoutine, determinateProcess, percentageComplete, callbackUD) InvokeDCMProgressFilterUPP(determinateProcess, percentageComplete, callbackUD, userRoutine)
/*
    Library version
*/
EXTERN_API( UInt32 )
DCMLibraryVersion               (void);

/*
    Create/delete dictionary
*/
EXTERN_API( OSStatus )
DCMNewDictionary                (DCMAccessMethodID      accessMethodID,
                                 const FSSpec *         newDictionaryFile,
                                 ScriptCode             scriptTag,
                                 const AEDesc *         listOfFieldInfoRecords,
                                 Boolean                invisible,
                                 ItemCount              recordCapacity,
                                 DCMDictionaryID *      newDictionary);

EXTERN_API( OSStatus )
DCMDeriveNewDictionary          (DCMDictionaryID        srcDictionary,
                                 const FSSpec *         newDictionaryFile,
                                 ScriptCode             scriptTag,
                                 Boolean                invisible,
                                 ItemCount              recordCapacity,
                                 DCMDictionaryID *      newDictionary);

EXTERN_API( OSStatus )
DCMDeleteDictionary             (DCMDictionaryID        dictionaryID);

/*
    Register dictionary
*/
EXTERN_API( OSStatus )
DCMRegisterDictionaryFile       (const FSSpec *         dictionaryFile,
                                 DCMDictionaryID *      dictionaryID);

EXTERN_API( OSStatus )
DCMUnregisterDictionary         (DCMDictionaryID        dictionaryID);

/*
    Open dictionary
*/
EXTERN_API( OSStatus )
DCMOpenDictionary               (DCMDictionaryID        dictionaryID,
                                 ByteCount              protectKeySize,
                                 ConstLogicalAddress    protectKey,
                                 DCMDictionaryRef *     dictionaryRef);

EXTERN_API( OSStatus )
DCMCloseDictionary              (DCMDictionaryRef       dictionaryRef);

/*
    Change access privilege
*/
EXTERN_API( OSStatus )
DCMGetDictionaryWriteAccess     (DCMDictionaryRef       dictionaryRef,
                                 Duration               timeOutDuration);

EXTERN_API( OSStatus )
DCMReleaseDictionaryWriteAccess (DCMDictionaryRef       dictionaryRef,
                                 Boolean                commitTransaction);

/*
    Find records
*/
EXTERN_API( OSStatus )
DCMFindRecords                  (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ByteCount              keySize,
                                 ConstLogicalAddress    keyData,
                                 DCMFindMethod          findMethod,
                                 ItemCount              preFetchedDataNum,
                                 DCMFieldTag            preFetchedData[],
                                 ItemCount              skipCount,
                                 ItemCount              maxRecordCount,
                                 DCMFoundRecordIterator * recordIterator);

EXTERN_API( ItemCount )
DCMCountRecordIterator          (DCMFoundRecordIterator  recordIterator);

EXTERN_API( OSStatus )
DCMIterateFoundRecord           (DCMFoundRecordIterator  recordIterator,
                                 ByteCount              maxKeySize,
                                 ByteCount *            actualKeySize,
                                 LogicalAddress         keyData,
                                 DCMUniqueID *          uniqueID,
                                 AEDesc *               dataList);

EXTERN_API( OSStatus )
DCMDisposeRecordIterator        (DCMFoundRecordIterator  recordIterator);

/*
    Dump dictionary
*/
EXTERN_API( OSStatus )
DCMCountRecord                  (DCMDictionaryID        dictionaryID,
                                 ItemCount *            count);

EXTERN_API( OSStatus )
DCMGetRecordSequenceNumber      (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ByteCount              keySize,
                                 ConstLogicalAddress    keyData,
                                 DCMUniqueID            uniqueID,
                                 ItemCount *            sequenceNum);

EXTERN_API( OSStatus )
DCMGetNthRecord                 (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ItemCount              serialNum,
                                 ByteCount              maxKeySize,
                                 ByteCount *            keySize,
                                 LogicalAddress         keyData,
                                 DCMUniqueID *          uniqueID);

EXTERN_API( OSStatus )
DCMGetNextRecord                (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ByteCount              keySize,
                                 ConstLogicalAddress    keyData,
                                 DCMUniqueID            uniqueID,
                                 ByteCount              maxKeySize,
                                 ByteCount *            nextKeySize,
                                 LogicalAddress         nextKeyData,
                                 DCMUniqueID *          nextUniqueID);

EXTERN_API( OSStatus )
DCMGetPrevRecord                (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ByteCount              keySize,
                                 ConstLogicalAddress    keyData,
                                 DCMUniqueID            uniqueID,
                                 ByteCount              maxKeySize,
                                 ByteCount *            prevKeySize,
                                 LogicalAddress         prevKeyData,
                                 DCMUniqueID *          prevUniqueID);

/*
    Get field data
*/
EXTERN_API( OSStatus )
DCMGetFieldData                 (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ByteCount              keySize,
                                 ConstLogicalAddress    keyData,
                                 DCMUniqueID            uniqueID,
                                 ItemCount              numOfData,
                                 const DCMFieldTag      dataTag[],
                                 AEDesc *               dataList);

EXTERN_API( OSStatus )
DCMSetFieldData                 (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ByteCount              keySize,
                                 ConstLogicalAddress    keyData,
                                 DCMUniqueID            uniqueID,
                                 const AEDesc *         dataList);

/*
    Add record
*/
EXTERN_API( OSStatus )
DCMAddRecord                    (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ByteCount              keySize,
                                 ConstLogicalAddress    keyData,
                                 Boolean                checkOnly,
                                 const AEDesc *         dataList,
                                 DCMUniqueID *          newUniqueID);

EXTERN_API( OSStatus )
DCMDeleteRecord                 (DCMDictionaryRef       dictionaryRef,
                                 DCMFieldTag            keyFieldTag,
                                 ByteCount              keySize,
                                 ConstLogicalAddress    keyData,
                                 DCMUniqueID            uniqueID);

/*
    Reorganize/compact dictionary
*/
EXTERN_API( OSStatus )
DCMReorganizeDictionary         (DCMDictionaryID        dictionaryID,
                                 ItemCount              extraCapacity,
                                 DCMProgressFilterUPP   progressProc,
                                 UInt32                 userData);

EXTERN_API( OSStatus )
DCMCompactDictionary            (DCMDictionaryID        dictionaryID,
                                 DCMProgressFilterUPP   progressProc,
                                 UInt32                 userData);

/*
    DictionaryID utilities
*/
EXTERN_API( OSStatus )
DCMGetFileFromDictionaryID      (DCMDictionaryID        dictionaryID,
                                 FSSpec *               fileRef);

EXTERN_API( OSStatus )
DCMGetDictionaryIDFromFile      (const FSSpec *         fileRef,
                                 DCMDictionaryID *      dictionaryID);

EXTERN_API( DCMDictionaryID )
DCMGetDictionaryIDFromRef       (DCMDictionaryRef       dictionaryRef);

/*
    Field information and manipulation
*/
EXTERN_API( OSStatus )
DCMGetDictionaryFieldInfo       (DCMDictionaryID        dictionaryID,
                                 DCMFieldTag            fieldTag,
                                 AEDesc *               fieldInfoRecord);

/*
    Dictionary property
*/
EXTERN_API( OSStatus )
DCMGetDictionaryProperty        (DCMDictionaryID        dictionaryID,
                                 DCMFieldTag            propertyTag,
                                 ByteCount              maxPropertySize,
                                 ByteCount *            actualSize,
                                 LogicalAddress         propertyValue);

EXTERN_API( OSStatus )
DCMSetDictionaryProperty        (DCMDictionaryID        dictionaryID,
                                 DCMFieldTag            propertyTag,
                                 ByteCount              propertySize,
                                 ConstLogicalAddress    propertyValue);

EXTERN_API( OSStatus )
DCMGetDictionaryPropertyList    (DCMDictionaryID        dictionaryID,
                                 ItemCount              maxPropertyNum,
                                 ItemCount *            numProperties,
                                 DCMFieldTag            propertyTag[]);

/*
    Seaarch dictionary
*/
EXTERN_API( OSStatus )
DCMCreateDictionaryIterator     (DCMDictionaryIterator * dictionaryIterator);

/*
    Search AccessMethod
*/
EXTERN_API( OSStatus )
DCMCreateAccessMethodIterator   (DCMAccessMethodIterator * accessMethodIterator);

/*
    Iterator Operation
*/
EXTERN_API( ItemCount )
DCMCountObjectIterator          (DCMObjectIterator      iterator);

EXTERN_API( OSStatus )
DCMIterateObject                (DCMObjectIterator      iterator,
                                 DCMObjectID *          objectID);

EXTERN_API( OSStatus )
DCMResetObjectIterator          (DCMObjectIterator      iterator);

EXTERN_API( OSStatus )
DCMDisposeObjectIterator        (DCMObjectIterator      iterator);

/*
    Get AccessMethod information
*/
EXTERN_API( OSStatus )
DCMGetAccessMethodIDFromName    (ConstStr63Param        accessMethodName,
                                 DCMAccessMethodID *    accessMethodID);

/*
    Field Info Record routines
*/
EXTERN_API( OSStatus )
DCMCreateFieldInfoRecord        (DescType               fieldTag,
                                 DescType               fieldType,
                                 ByteCount              maxRecordSize,
                                 DCMFieldAttributes     fieldAttributes,
                                 AEDesc *               fieldDefaultData,
                                 ItemCount              numberOfFindMethods,
                                 DCMFindMethod          findMethods[],
                                 AEDesc *               fieldInfoRecord);

EXTERN_API( OSStatus )
DCMGetFieldTagAndType           (const AEDesc *         fieldInfoRecord,
                                 DCMFieldTag *          fieldTag,
                                 DCMFieldType *         fieldType);

EXTERN_API( OSStatus )
DCMGetFieldMaxRecordSize        (const AEDesc *         fieldInfoRecord,
                                 ByteCount *            maxRecordSize);

EXTERN_API( OSStatus )
DCMGetFieldAttributes           (const AEDesc *         fieldInfoRecord,
                                 DCMFieldAttributes *   attributes);

EXTERN_API( OSStatus )
DCMGetFieldDefaultData          (const AEDesc *         fieldInfoRecord,
                                 DescType               desiredType,
                                 AEDesc *               fieldDefaultData);

EXTERN_API( OSStatus )
DCMGetFieldFindMethods          (const AEDesc *         fieldInfoRecord,
                                 ItemCount              findMethodsArrayMaxSize,
                                 DCMFindMethod          findMethods[],
                                 ItemCount *            actualNumberOfFindMethods);

/*
    Check Dictionary Manager availability
*/
#if TARGET_RT_MAC_CFM
#ifdef __cplusplus
    inline pascal Boolean DCMDictionaryManagerAvailable() { return (DCMLibraryVersion != (void*)kUnresolvedCFragSymbolAddress); }
#else
    #define DCMDictionaryManagerAvailable()     ((DCMLibraryVersion != (void*)kUnresolvedCFragSymbolAddress)
#endif
#elif TARGET_RT_MAC_MACHO
/* Dictionary Manager is always available on OS X */
#ifdef __cplusplus
    inline pascal Boolean DCMDictionaryManagerAvailable() { return true; }
#else
    #define DCMDictionaryManagerAvailable()     (true)
#endif
#endif  /*  */

/*
=============================================================================================
    Definitions for Japanese Analysis Module
=============================================================================================
*/
/*
    Default dictionary access method for Japanese analysis
*/
#define kAppleJapaneseDefaultAccessMethodName   "\pDAM:Apple Backward Trie Access Method"
/*
    Data length limitations of Apple Japanese dictionaries
*/
enum {
    kMaxYomiLengthInAppleJapaneseDictionary = 40,
    kMaxKanjiLengthInAppleJapaneseDictionary = 64
};

/*
    Defined field tags of Apple Japanese dictionary
*/
enum {
    kDCMJapaneseYomiTag         = FOUR_CHAR_CODE('yomi'),
    kDCMJapaneseHyokiTag        = FOUR_CHAR_CODE('hyok'),
    kDCMJapaneseHinshiTag       = FOUR_CHAR_CODE('hins'),
    kDCMJapaneseWeightTag       = FOUR_CHAR_CODE('hind'),
    kDCMJapanesePhoneticTag     = FOUR_CHAR_CODE('hton'),
    kDCMJapaneseAccentTag       = FOUR_CHAR_CODE('acnt'),
    kDCMJapaneseOnKunReadingTag = FOUR_CHAR_CODE('OnKn'),
    kDCMJapaneseFukugouInfoTag  = FOUR_CHAR_CODE('fuku')
};

enum {
    kDCMJapaneseYomiType        = typeUnicodeText,
    kDCMJapaneseHyokiType       = typeUnicodeText,
    kDCMJapaneseHinshiType      = FOUR_CHAR_CODE('hins'),
    kDCMJapaneseWeightType      = typeShortInteger,
    kDCMJapanesePhoneticType    = typeUnicodeText,
    kDCMJapaneseAccentType      = FOUR_CHAR_CODE('byte'),
    kDCMJapaneseOnKunReadingType = typeUnicodeText,
    kDCMJapaneseFukugouInfoType = FOUR_CHAR_CODE('fuku')
};


/*
=============================================================================================
 System 7 Dictionary Manager
=============================================================================================
*/

#if PRAGMA_STRUCT_ALIGN
#pragma options align=reset
#pragma options align=mac68k
#endif

enum {
                                                                /* Dictionary data insertion modes */
    kInsert                     = 0,                            /* Only insert the input entry if there is nothing in the dictionary that matches the key. */
    kReplace                    = 1,                            /* Only replace the entries which match the key with the input entry. */
    kInsertOrReplace            = 2                             /* Insert the entry if there is nothing in the dictionary which matches the key, otherwise replaces the existing matched entries with the input entry. */
};

/* This Was InsertMode */

typedef short                           DictionaryDataInsertMode;
enum {
                                                                /* Key attribute constants */
    kIsCaseSensitive            = 0x10,                         /* case sensitive = 16       */
    kIsNotDiacriticalSensitive  = 0x20                          /* diac not sensitive = 32    */
};

enum {
                                                                /* Registered attribute type constants.   */
    kNoun                       = -1,
    kVerb                       = -2,
    kAdjective                  = -3,
    kAdverb                     = -4
};

/* This Was AttributeType */
typedef SInt8                           DictionaryEntryAttribute;
/* Dictionary information record */

struct DictionaryInformation {
    FSSpec                          dictionaryFSSpec;
    SInt32                          numberOfRecords;
    SInt32                          currentGarbageSize;
    ScriptCode                      script;
    SInt16                          maximumKeyLength;
    SInt8                           keyAttributes;
};
typedef struct DictionaryInformation    DictionaryInformation;

struct DictionaryAttributeTable {
    UInt8                           datSize;
    DictionaryEntryAttribute        datTable[1];
};
typedef struct DictionaryAttributeTable DictionaryAttributeTable;
typedef DictionaryAttributeTable *      DictionaryAttributeTablePtr;
#if CALL_NOT_IN_CARBON
EXTERN_API( OSErr )
InitializeDictionary            (const FSSpec *         theFsspecPtr,
                                 SInt16                 maximumKeyLength,
                                 SInt8                  keyAttributes,
                                 ScriptCode             script)                             THREEWORDINLINE(0x303C, 0x0500, 0xAA53);

EXTERN_API( OSErr )
OpenDictionary                  (const FSSpec *         theFsspecPtr,
                                 SInt8                  accessPermission,
                                 SInt32 *               dictionaryReference)                THREEWORDINLINE(0x303C, 0x0501, 0xAA53);

EXTERN_API( OSErr )
CloseDictionary                 (SInt32                 dictionaryReference)                THREEWORDINLINE(0x303C, 0x0202, 0xAA53);

EXTERN_API( OSErr )
InsertRecordToDictionary        (SInt32                 dictionaryReference,
                                 ConstStr255Param       key,
                                 Handle                 recordDataHandle,
                                 DictionaryDataInsertMode  whichMode)                       THREEWORDINLINE(0x303C, 0x0703, 0xAA53);

EXTERN_API( OSErr )
DeleteRecordFromDictionary      (SInt32                 dictionaryReference,
                                 ConstStr255Param       key)                                THREEWORDINLINE(0x303C, 0x0404, 0xAA53);

EXTERN_API( OSErr )
FindRecordInDictionary          (SInt32                 dictionaryReference,
                                 ConstStr255Param       key,
                                 DictionaryAttributeTablePtr  requestedAttributeTablePointer,
                                 Handle                 recordDataHandle)                   THREEWORDINLINE(0x303C, 0x0805, 0xAA53);

EXTERN_API( OSErr )
FindRecordByIndexInDictionary   (SInt32                 dictionaryReference,
                                 SInt32                 recordIndex,
                                 DictionaryAttributeTablePtr  requestedAttributeTablePointer,
                                 Str255                 recordKey,
                                 Handle                 recordDataHandle)                   THREEWORDINLINE(0x303C, 0x0A06, 0xAA53);

EXTERN_API( OSErr )
GetDictionaryInformation        (SInt32                 dictionaryReference,
                                 DictionaryInformation * theDictionaryInformation)          THREEWORDINLINE(0x303C, 0x0407, 0xAA53);

EXTERN_API( OSErr )
CompactDictionary               (SInt32                 dictionaryReference)                THREEWORDINLINE(0x303C, 0x0208, 0xAA53);




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

