You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
478 lines
17 KiB
478 lines
17 KiB
/* |
|
File: Translation.h |
|
|
|
Contains: Translation Manager (Macintosh Easy Open) Interfaces. |
|
|
|
Version: QuickTime 7.3 |
|
|
|
Copyright: (c) 2007 (c) 1991-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 __TRANSLATION__ |
|
#define __TRANSLATION__ |
|
|
|
#ifndef __MACTYPES__ |
|
#include <MacTypes.h> |
|
#endif |
|
|
|
#ifndef __FILES__ |
|
#include <Files.h> |
|
#endif |
|
|
|
#ifndef __COMPONENTS__ |
|
#include <Components.h> |
|
#endif |
|
|
|
#ifndef __TRANSLATIONEXTENSIONS__ |
|
#include <TranslationExtensions.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=mac68k |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(push, 2) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack(2) |
|
#endif |
|
|
|
/* enumerated types on how a document can be opened*/ |
|
typedef short DocOpenMethod; |
|
enum { |
|
domCannot = 0, |
|
domNative = 1, |
|
domTranslateFirst = 2, |
|
domWildcard = 3 |
|
}; |
|
|
|
/* 0L terminated array of OSTypes, or FileTypes*/ |
|
typedef OSType TypesBlock[64]; |
|
typedef OSType * TypesBlockPtr; |
|
/* Progress dialog resource ID*/ |
|
enum { |
|
kTranslationScrapProgressDialogID = -16555 |
|
}; |
|
|
|
/* block of data that describes how to translate*/ |
|
struct FileTranslationSpec { |
|
OSType componentSignature; |
|
const void * translationSystemInfo; |
|
FileTypeSpec src; |
|
FileTypeSpec dst; |
|
}; |
|
typedef struct FileTranslationSpec FileTranslationSpec; |
|
typedef FileTranslationSpec * FileTranslationSpecArrayPtr; |
|
typedef FileTranslationSpecArrayPtr * FileTranslationSpecArrayHandle; |
|
|
|
/***************************************************************************************** |
|
* |
|
* GetFileTypesThatAppCanNativelyOpen |
|
* |
|
* This routine returns a list of all FileTypes that an application can open by itself |
|
* |
|
* Enter: appVRefNumHint volume where application resides (can be wrong, and if is, will be used as a starting point) |
|
* appSignature signature (creator) of application |
|
* nativeTypes pointer to a buffer to be filled with up to 64 FileTypes |
|
* |
|
* Exit: nativeTypes zero terminated array of FileTypes that can be opened by app |
|
*/ |
|
/* |
|
* GetFileTypesThatAppCanNativelyOpen() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSErr ) |
|
GetFileTypesThatAppCanNativelyOpen( |
|
short appVRefNumHint, |
|
OSType appSignature, |
|
FileType * nativeTypes) TWOWORDINLINE(0x701C, 0xABFC); |
|
|
|
|
|
/***************************************************************************************** |
|
* |
|
* ExtendFileTypeList |
|
* |
|
* This routine makes a new list of file types that can be translated into a type in the given list |
|
* Used by StandardFile |
|
* |
|
* Enter: originalTypeList pointer to list of file types that can be opened |
|
* numberOriginalTypes number of file types in orgTypeList |
|
* extendedTypeList pointer to a buffer to be filled with file types |
|
* numberExtendedTypes max number of file types that can be put in extendedTypeList |
|
* |
|
* Exit: extendedTypeList buffer filled in with file types that can be translated |
|
* numberExtendedTypes number of file types put in extendedTypeList |
|
*/ |
|
/* |
|
* ExtendFileTypeList() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSErr ) |
|
ExtendFileTypeList( |
|
const FileType * originalTypeList, |
|
short numberOriginalTypes, |
|
FileType * extendedTypeList, |
|
short * numberExtendedTypes) TWOWORDINLINE(0x7009, 0xABFC); |
|
|
|
|
|
|
|
/***************************************************************************************** |
|
* |
|
* |
|
* This routine checks if a file can be opened by a particular application. |
|
* If so, it returns if it needs to be translated first, and if so then how. |
|
* The FileTypes that the app can open are specified by nativelyOpenableTypes, |
|
* or if it is NULL, GetFileTypesThatAppCanNativelyOpen is called. |
|
* |
|
* Enter: targetDocument document to check if it can be opened |
|
* appVRefNumHint vRefNum of application to open doc ( can be wrong, and if is, will be used as a starting point) |
|
* appSignature signature (creator) of application to open doc |
|
* nativeTypes zero terminated list of FileTypes app can open natively, or NULL to use default list |
|
* onlyNative whether to consider if document can be translated before opening |
|
* howToOpen pointer to buffer in which to put how the document can be opened |
|
* howToTranslate pointer to buffer in which to put a FileTranslationSpec record |
|
* |
|
* Exit: howToOpen whether file needs to be translated to be read |
|
* howToTranslate if file can be translated, buffer filled in with how to translate |
|
* returns noErr, noPrefAppErr |
|
*/ |
|
/* |
|
* CanDocBeOpened() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSErr ) |
|
CanDocBeOpened( |
|
const FSSpec * targetDocument, |
|
short appVRefNumHint, |
|
OSType appSignature, |
|
const FileType * nativeTypes, |
|
Boolean onlyNative, |
|
DocOpenMethod * howToOpen, |
|
FileTranslationSpec * howToTranslate) TWOWORDINLINE(0x701E, 0xABFC); |
|
|
|
|
|
|
|
/***************************************************************************************** |
|
* |
|
* GetFileTranslationPaths |
|
* |
|
* This routine returns a list of all ways a translation can occure to or from a FileType. |
|
* The app is checked to exist. The hint for each app is the VRefNum and DTRefNum |
|
* |
|
* Enter: srcDoc source file or NULL for all matches |
|
* dstDoc destination FileType or 0 for all matches |
|
* maxResultCount |
|
* resultBuffer |
|
* Exit: number of paths |
|
*/ |
|
/* |
|
* GetFileTranslationPaths() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( short ) |
|
GetFileTranslationPaths( |
|
const FSSpec * srcDocument, |
|
FileType dstDocType, |
|
unsigned short maxResultCount, |
|
FileTranslationSpecArrayPtr resultBuffer) TWOWORDINLINE(0x7038, 0xABFC); |
|
|
|
|
|
/***************************************************************************************** |
|
* |
|
* GetPathFromTranslationDialog |
|
* |
|
* This routine, with a given document, application, and a passed typelist will display the |
|
* Macintosh Easy Open translation dialog allowing the user to make a choice. The choice |
|
* made will be written as a preference (so the next call to CanDocBeOpened() will work). |
|
* The routine returns the translation path information. |
|
* |
|
* Enter: theDocument FSSpec to document to open |
|
* theApplication FSSpec to application to open document |
|
* typeList Nil terminated list of FileType's (e.g. SFTypeList-like) of types |
|
* you would like the documented translated to. Order most perferred |
|
* to least. |
|
* |
|
* Exit: howToOpen Translation method needed to open document |
|
* howToTranslate Translation specification |
|
* returns Any errors that might occur. |
|
*/ |
|
/* |
|
* GetPathFromTranslationDialog() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSErr ) |
|
GetPathFromTranslationDialog( |
|
const FSSpec * theDocument, |
|
const FSSpec * theApplication, |
|
TypesBlockPtr typeList, |
|
DocOpenMethod * howToOpen, |
|
FileTranslationSpec * howToTranslate) TWOWORDINLINE(0x7037, 0xABFC); |
|
|
|
|
|
|
|
/***************************************************************************************** |
|
* |
|
* TranslateFile |
|
* |
|
* This routine reads a file of one format and writes it to another file in another format. |
|
* The information on how to translated is generated by the routine CanDocBeOpened. |
|
* TranslateFile calls through to the TranslateFile Extension's DoTranslateFile routine. |
|
* The destination file must not exist. It is created by this routine. |
|
* |
|
* Enter: sourceDocument input file to translate |
|
* destinationDocument output file of translation |
|
* howToTranslate pointer to info on how to translate |
|
* Exit: returns noErr, badTranslationSpecErr |
|
*/ |
|
/* |
|
* TranslateFile() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSErr ) |
|
TranslateFile( |
|
const FSSpec * sourceDocument, |
|
const FSSpec * destinationDocument, |
|
const FileTranslationSpec * howToTranslate) TWOWORDINLINE(0x700C, 0xABFC); |
|
|
|
|
|
/***************************************************************************************** |
|
* |
|
* GetDocumentKindString |
|
* |
|
* This routine returns the string the Finder should show for the "kind" of a document |
|
* in the GetInfo window and in the kind column of a list view. |
|
* |
|
* Enter: docVRefNum The volume containing the document |
|
* docType The catInfo.fdType of the document |
|
* docCreator The catInfo.fdCreator of the document |
|
* kindString pointer to where to return the string |
|
* |
|
* Exit: kindString pascal string. Ex: "\pSurfCalc spreadsheet" |
|
* returns noErr, or afpItemNoFound if kind could not be determined |
|
*/ |
|
/* |
|
* GetDocumentKindString() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSErr ) |
|
GetDocumentKindString( |
|
short docVRefNum, |
|
OSType docType, |
|
OSType docCreator, |
|
Str63 kindString) TWOWORDINLINE(0x7016, 0xABFC); |
|
|
|
|
|
/***************************************************************************************** |
|
* |
|
* GetTranslationExtensionName |
|
* |
|
* This routine returns the translation system name from a specified TranslationSpec |
|
* |
|
* Enter: translationMethod The translation path to get the translation name from |
|
* |
|
* Exit: extensionName The name of the translation system |
|
* returns Any errors that might occur |
|
*/ |
|
/* |
|
* GetTranslationExtensionName() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSErr ) |
|
GetTranslationExtensionName( |
|
const FileTranslationSpec * translationMethod, |
|
Str31 extensionName) TWOWORDINLINE(0x7036, 0xABFC); |
|
|
|
|
|
|
|
/***************************************************************************************** |
|
* |
|
* GetScrapDataProcPtr |
|
* |
|
* This is a prototype for the function you must supply to TranslateScrap. It is called to |
|
* get the data to be translated. The first call TranslateScrap will make to this is to |
|
* ask for the 'fmts' data. That is a special. You should resize and fill in the handle |
|
* with a list all the formats that you have available to be translated, and the length of each. |
|
* (See I.M. VI 4-23 for details of 'fmts'). It will then be called again asking for one of |
|
* the formats that 'fmts' list said was available. |
|
* |
|
* Enter: requestedFormat Format of data that TranslateScrap needs. |
|
* dataH Handle in which to put the requested data |
|
* srcDataGetterRefCon Extra parameter for you passed to TranslateScrap |
|
* |
|
* Exit: dataH Handle is resized and filled with data in requested format |
|
*/ |
|
typedef CALLBACK_API( OSErr , GetScrapDataProcPtr )(ScrapType requestedFormat, Handle dataH, void *srcDataGetterRefCon); |
|
typedef STACK_UPP_TYPE(GetScrapDataProcPtr) GetScrapDataUPP; |
|
/* |
|
* NewGetScrapDataUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( GetScrapDataUPP ) |
|
NewGetScrapDataUPP(GetScrapDataProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppGetScrapDataProcInfo = 0x00000FE0 }; /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(GetScrapDataUPP) NewGetScrapDataUPP(GetScrapDataProcPtr userRoutine) { return (GetScrapDataUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppGetScrapDataProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewGetScrapDataUPP(userRoutine) (GetScrapDataUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppGetScrapDataProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* DisposeGetScrapDataUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeGetScrapDataUPP(GetScrapDataUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeGetScrapDataUPP(GetScrapDataUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeGetScrapDataUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* InvokeGetScrapDataUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OSErr ) |
|
InvokeGetScrapDataUPP( |
|
ScrapType requestedFormat, |
|
Handle dataH, |
|
void * srcDataGetterRefCon, |
|
GetScrapDataUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(OSErr) InvokeGetScrapDataUPP(ScrapType requestedFormat, Handle dataH, void * srcDataGetterRefCon, GetScrapDataUPP userUPP) { return (OSErr)CALL_THREE_PARAMETER_UPP(userUPP, uppGetScrapDataProcInfo, requestedFormat, dataH, srcDataGetterRefCon); } |
|
#else |
|
#define InvokeGetScrapDataUPP(requestedFormat, dataH, srcDataGetterRefCon, userUPP) (OSErr)CALL_THREE_PARAMETER_UPP((userUPP), uppGetScrapDataProcInfo, (requestedFormat), (dataH), (srcDataGetterRefCon)) |
|
#endif |
|
#endif |
|
|
|
#if CALL_NOT_IN_CARBON || OLDROUTINENAMES |
|
/* support for pre-Carbon UPP routines: New...Proc and Call...Proc */ |
|
#define NewGetScrapDataProc(userRoutine) NewGetScrapDataUPP(userRoutine) |
|
#define CallGetScrapDataProc(userRoutine, requestedFormat, dataH, srcDataGetterRefCon) InvokeGetScrapDataUPP(requestedFormat, dataH, srcDataGetterRefCon, userRoutine) |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
typedef GetScrapDataUPP GetScrapData; |
|
/***************************************************************************************** |
|
* |
|
* TranslateScrap |
|
* |
|
* This routine resizes the destination handle and fills it with data of the requested format. |
|
* The data is generated by translated one or more source formats of data supplied by |
|
* the procedure srcDataGetter. |
|
* This routine is automatically called by GetScrap and ReadEdition. You only need to call |
|
* this if you need to translated scrap style data, but are not using the ScrapMgr or EditionMgr. |
|
* |
|
* Enter: sourceDataGetter Pointer to routine that can get src data |
|
* sourceDataGetterRefCon Extra parameter for dataGetter |
|
* destinationFormat Format of data desired |
|
* destinationData Handle in which to store translated data |
|
* |
|
* Exit: dstData Handle is resized and filled with data in requested format |
|
*/ |
|
/* |
|
* TranslateScrap() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in Translation 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSErr ) |
|
TranslateScrap( |
|
GetScrapDataUPP sourceDataGetter, |
|
void * sourceDataGetterRefCon, |
|
ScrapType destinationFormat, |
|
Handle destinationData, |
|
short progressDialogID) TWOWORDINLINE(0x700E, 0xABFC); |
|
|
|
|
|
|
|
|
|
|
|
#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 /* __TRANSLATION__ */ |
|
|
|
|