summaryrefslogtreecommitdiff
path: root/sdk_hdrs/CWPlugins.h
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2023-01-15 21:50:41 +0000
committerAsh Wolf <ninji@wuffs.org>2023-01-15 21:50:41 +0000
commita231f5dbb93c60da240a027f2afd8a4797069541 (patch)
treea6bc68fdc2f1a1fa0000e5cd63a5189f170c226b /sdk_hdrs/CWPlugins.h
parent35d488e972a9dd75ce3867c000405f128b79c615 (diff)
downloadMWCC-a231f5dbb93c60da240a027f2afd8a4797069541.tar.gz
MWCC-a231f5dbb93c60da240a027f2afd8a4797069541.zip
more cleanup
Diffstat (limited to 'sdk_hdrs/CWPlugins.h')
-rwxr-xr-xsdk_hdrs/CWPlugins.h815
1 files changed, 814 insertions, 1 deletions
diff --git a/sdk_hdrs/CWPlugins.h b/sdk_hdrs/CWPlugins.h
index c959b9f..a427853 100755
--- a/sdk_hdrs/CWPlugins.h
+++ b/sdk_hdrs/CWPlugins.h
@@ -1 +1,814 @@
-/* * CWPlugins.h - Common declarations for Metrowerks CodeWarrior� plugins * * Copyright � 1995-1997 Metrowerks, Inc. All rights reserved. * */ #include "common.h" #ifndef __CWPlugins_H__ #define __CWPlugins_H__ #ifdef __MWERKS__ # pragma once #endif #define CWPLUGIN_HOST_MACOS 1 #define CWPLUGIN_HOST_WIN32 2 #define CWPLUGIN_HOST_SOLARIS 3 #define CWPLUGIN_HOST_LINUX 4 #ifndef CWPLUGIN_HOST # ifdef WIN32 # define CWPLUGIN_HOST CWPLUGIN_HOST_WIN32 # elif defined(macintosh) || defined(__MACH__) # define CWPLUGIN_HOST CWPLUGIN_HOST_MACOS # elif defined(__sun__) # define CWPLUGIN_HOST CWPLUGIN_HOST_SOLARIS # elif defined(__linux__) # define CWPLUGIN_HOST CWPLUGIN_HOST_LINUX # else # error # endif #endif #define CWPLUGIN_API_MACOS 1 #define CWPLUGIN_API_WIN32 2 #define CWPLUGIN_API_UNIX 3 #ifndef CWPLUGIN_API # ifdef WIN32 # define CWPLUGIN_API CWPLUGIN_API_WIN32 # elif defined(macintosh) || defined(__MACH__) # define CWPLUGIN_API CWPLUGIN_API_MACOS # elif defined(__sun__) || defined(__linux__) # define CWPLUGIN_API CWPLUGIN_API_UNIX # else # error # endif #endif /* ** Radix 256 notation where a 32-bit integer is created from four ** ASCII characters. A four-character constant of this form, say ** 'ABCD', must always be represented with the same pattern, 0x41424344 ** in this case, regardless of big/little endian issues. */ typedef SInt32 CWFourCharType; #define CWFOURCHAR(a, b, c, d) \ (((CWFourCharType) ((a) & 0xff) << 24) \ | ((CWFourCharType) ((b) & 0xff) << 16) \ | ((CWFourCharType) ((c) & 0xff) << 8) \ | ((CWFourCharType) ((d) & 0xff))) #if CWPLUGIN_API == CWPLUGIN_API_UNIX #include <sys/param.h> #endif #ifndef CW_USE_PRAGMA_EXPORT #if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS #define CW_USE_PRAGMA_EXPORT 1 #else #define CW_USE_PRAGMA_EXPORT 0 #endif #endif #ifndef CW_USE_PRAGMA_IMPORT #if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS #define CW_USE_PRAGMA_IMPORT 1 #else #define CW_USE_PRAGMA_IMPORT 0 #endif #endif #ifdef __MWERKS__ #pragma options align=mac68k #endif #ifdef _MSC_VER #pragma pack(push,2) #endif #ifdef __cplusplus extern "C" { #endif #if CW_USE_PRAGMA_IMPORT #pragma import on #endif /* These constants specify the action the IDE is asking the plugin to execute */ enum { reqInitialize = -2, /* called when the plugin is loaded */ reqTerminate = -1, /* called when the plugin is unloaded */ reqIdle = -100, /* called periodically to allow for plugin tasks EP 6/24/98 */ reqAbout = -101, /* called to ask plugin to display about dialog EP 6/24/98 */ reqPrefsChange = -102 /* called when an associated pref panel changes EP 6/24/98 */ }; /* Used in CWFileInfo.dependencyType to indicate what type of make */ /* dependency to establish between files */ typedef enum CWDependencyType { cwNoDependency, /* do not establish a dependency */ cwNormalDependency, /* recompile dependent whenever prereq changes */ cwInterfaceDependency /* recompile only if interface to file changes */ } CWDependencyType; /* Used in CWFileInfo.filedatatype to indicate the type of data in a loaded file */ enum { cwFileTypeUnknown, /* unknown binary data */ cwFileTypeText, /* normal text file */ cwFileTypePrecompiledHeader /* cached precompiled header */ }; /* constant for CWFileInfo.isdependentoffile */ #define kCurrentCompiledFile -1L /* constant for CWStorePluginData/CWGetPluginData */ #define kTargetGlobalPluginData -1L /* constant for CWNewProjectEntryInfo link order, segment, and overlay values */ #define kDefaultLinkPosition -1L /* Selectors for CWFindLogicalDirectory */ enum { kIDEDirectorySelector = 1, /* parent directory of IDE application; "bin" folder on Win32 */ kCodeWarriorDirectorySelector, /* root CodeWarrior directory */ kSystemDirectorySelector, /* system directory */ kProjectDirectorySelector, /* parent directory of current project */ kProjectDataDirectorySelector, /* project data directory */ kTargetDataDirectorySelector, /* target data directory (within project data directory) */ kTargetObjectCodeDirectorySelector, /* object code directory (within target data directory) */ kDebuggerCacheDirectorySelector, /* "CW Debugging Cache" directory */ kHelperAppsDirectorySelector, /* "(Helper Apps)" directory */ kPluginsDirectorySelector, /* "CodeWarrior Plugins" (Mac) or "plugins" (Win32) directory */ kPluginParentDirectorySelector, /* parent directory of current plugin */ kStationeryDirectorySelector, /* "(Project Stationery)" directory */ kRADStationeryDirectorySelector, /* "RAD Stationery" directory */ kLocalizedResourcesDirectorySelector /* "resources" directory */ }; /* CWPluginContext is a magic cookie passed to all plugins. It must */ /* be passed back to all IDE callbacks */ typedef struct CWPluginPrivateContext* CWPluginContext; /* CWResult is the error/status result returned by all IDE API routine. */ /* The most common errors are returned directly. For OS-specific errors, the */ /* CWResult is cwErrOSError, and the OS-specific error can be obtained by */ /* calling CWGetOSError() */ typedef SInt32 CWResult; /* CWMemHandle is an abstraction for memory used in some parts */ /* of the plugin API. API routines must be used to allocate */ /* and free CWMemHandles, or to convert them to pointers. */ typedef struct CWMemHandlePrivateStruct* CWMemHandle; /* Used to identify custom data associated by a plugin with */ /* a project file or a target as a whole. Must be a four character */ /* constant. All lower case constants are reserved by the IDE */ typedef UInt32 CWDataType; /* Some information used in the compiler/linker API is platform-dependent */ /* We use some typedefs to isolate the differences */ /* CWFileSpec contains the native platform file specifier. */ /* CWFileName contains the string type for a native file name */ /* CWFileTime contains the native platform file timestamp */ /* CWOSResult contains the native platform error return value */ /* CWResult contains an API routine error/status result */ /* CW_CALLBACK is a macro defining the calling convention and return type for */ /* IDE callback routines. */ /* CW_PLUGINENTRY is a macro defining the calling convention and return type for */ /* plugin entry points. */ /* CWSUCCESS is a macro that evaluates to true when given a CWResult indicating an */ /* routine succeeded */ #if CWPLUGIN_API == CWPLUGIN_API_MACOS typedef FSSpec CWFileSpec; typedef char CWFileName[32]; typedef UInt32 CWFileTime; typedef OSErr CWOSResult; #elif CWPLUGIN_API == CWPLUGIN_API_WIN32 typedef unsigned char Boolean; typedef struct CWFileSpec { char path[MAX_PATH]; } CWFileSpec; typedef char CWFileName[65]; typedef FILETIME CWFileTime; typedef DWORD CWOSResult; #elif CWPLUGIN_API == CWPLUGIN_API_UNIX #define MAX_PATH MAXPATHLEN #ifndef __MACTYPES__ typedef unsigned char Boolean; #endif #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif typedef struct CWFileSpec { char path[MAX_PATH]; } CWFileSpec; typedef char CWFileName[65]; typedef time_t CWFileTime; typedef int CWOSResult; #else #error Unknown plugin API! #endif #define CWSUCCESS(result) ((result) == 0) #if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS && !defined(__MACH__) #define CW_CALLBACK pascal CWResult #define CW_CALLBACK_PTR(function_name) pascal CWResult (function_name) #define CWPLUGIN_ENTRY(function_name) pascal short (function_name) #elif CWPLUGIN_HOST == CWPLUGIN_HOST_WIN32 #define CW_CALLBACK CWResult __stdcall #define CW_CALLBACK_PTR(function_name) CWResult (__stdcall function_name) #define CWPLUGIN_ENTRY(function_name) short (__stdcall function_name) #elif CWPLUGIN_HOST==CWPLUGIN_HOST_SOLARIS || CWPLUGIN_HOST==CWPLUGIN_HOST_LINUX || defined(__MACH__) #define CW_CALLBACK CWResult #define CW_CALLBACK_PTR(function_name) CWResult (function_name) #define CWPLUGIN_ENTRY(function_name) short (function_name) #else #error Unknown plugin host! #endif /* information returned by CWFindAndLoadFile */ typedef struct CWFileInfo { Boolean fullsearch; /* [<-] do we do a full search of paths for file */ char dependencyType; /* [<-] type CWDependencyType */ SInt32 isdependentoffile; /* [<-] this file is a dependent of file id */ /* (zero based) or -1L if of current file */ Boolean suppressload; /* [<-] find but don't load the file */ Boolean padding; /* [**] structure padding */ const char* filedata; /* [->] point to the file text/data, or NULL */ SInt32 filedatalength; /* [->] length of filedata */ short filedatatype; /* [->] type of data pointed to by filedata */ /* the remaining members are valid only when called by compilers */ short fileID; /* [->] use in browse records and dependencies */ CWFileSpec filespec; /* [->] specifies the file on disk */ Boolean alreadyincluded; /* [->] TRUE if already included in current compile */ Boolean recordbrowseinfo; /* [->] record browse info for this file? */ } CWFileInfo; /* information maintained by the IDE for each segment in the project */ typedef struct CWProjectSegmentInfo { char name[32]; /* segment name */ short attributes; /* segment attributes */ } CWProjectSegmentInfo; /* 64 bit address */ typedef struct CWAddr64 { SInt32 lo; /* low order longword of address */ SInt32 hi; /* high order longword of address */ } CWAddr64; /* describes an overlay group, Use CWGetOverlayGroup1Info to iterate over overlay groups */ typedef struct CWOverlay1GroupInfo { char name[256]; /* overlay group name */ CWAddr64 address; /* load address */ SInt32 numoverlays; /* number of overlays in this group */ } CWOverlay1GroupInfo; /* describes an overlay, use CWGetOverlay1Info to iterate over overlays */ typedef struct CWOverlay1Info { char name[256]; /* name of this overlay */ SInt32 numfiles; /* number of files in the overlay */ } CWOverlay1Info; /* describes a file in an overlay, use CWGetOverlayFile1Info to iterate over files. Use */ /* whichfile in calls taking a file number, e.g. CWLoadObjectData or CWGetFileInfo */ typedef struct CWOverlay1FileInfo { SInt32 whichfile; /* flat file number */ } CWOverlay1FileInfo; /* * All compiler errors or warnings which occur at some specific location in some * source file are identified by a CWMessageRef structure. This structure * provides sufficient information for the development environment to locate * and display the exact position associated with a message. For each message, * the compiler provides: * * errorstring: contains a description of the error, e.g. "syntax error" * errorline: contains a subset of the text containing the error * errorlevel: indicates if the "error" is an error, warning, or informational message * CWMessageRef: further info so the IDE can perform two tasks: * - Display a summary of each message, with the "error token" * underlined within the compiler-provided errorline. This * information is provided by the tokenoffset and tokenlength * fields. If tokenLength is zero then no underlining is performed. * * - Open the file containing the error and select the full * text of the error. This information is provided by the * selectionoffset and selectionlength fields. */ typedef struct CWMessageRef { CWFileSpec sourcefile; /* file containing error */ SInt32 linenumber; /* error linenumber in file */ short tokenoffset; /* offset into errorline of token underline */ short tokenlength; /* length of error token to be underlined */ SInt32 selectionoffset; /* start of error for text selection */ SInt32 selectionlength; /* length of error for text selection */ } CWMessageRef; /* message types, used for errorlevel parameter to message routines */ enum { messagetypeInfo, /* informational only */ messagetypeWarning, /* warning message */ messagetypeError /* error message */ }; /* information maintained by the IDE for each file in the project */ typedef struct CWProjectFileInfo { CWFileSpec filespec; /* CW_FileSpec of file in project */ CWFileTime moddate; /* date source file was last modified */ short segment; /* segment number of file */ Boolean hasobjectcode; /* file has object code to be linked */ Boolean hasresources; /* file has resources to be linked */ Boolean isresourcefile; /* file -is- a resource file to be linked */ Boolean weakimport; /* file has "Import Weak" flag set */ Boolean initbefore; /* file has "Init Before" flag set */ Boolean gendebug; /* file has generate debug info on */ CWFileTime objmoddate; /* date object code was last modified */ CWFileName dropinname; /* name of dropin used to process this file */ short fileID; /* fileID to use in browse records */ Boolean recordbrowseinfo; /* record browse info for this file? */ Boolean reserved; /* reserved and used internally */ #if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS /* some Macintosh-specific information */ OSType filetype; /* MacOS file type */ OSType filecreator; /* MacOS file creator */ #endif Boolean hasunitdata; /* file has associated unit data (Pascal) */ Boolean mergeintooutput; /* file has "Merge Into Output" flag set */ UInt32 unitdatadependencytag; /* dependency tag (i.e. checksum) of unit data (Pascal) */ } CWProjectFileInfo; typedef struct CWNewTextDocumentInfo { const char* documentname; /* name for new document, can be NULL */ CWMemHandle text; /* initial text for document */ Boolean markDirty; /* mark doc as needing to be saved? */ } CWNewTextDocumentInfo; typedef struct CWNewProjectEntryInfo { /* use kDefaultLinkPosition to get default link order, overlay, or segment */ SInt32 position; /* optional link order position */ SInt32 segment; /* optional segment number */ SInt32 overlayGroup; /* optional overlay group number */ SInt32 overlay; /* optional overlay number */ const char* groupPath; /* optional fully qualified path to file group */ Boolean mergeintooutput; /* set merge into output flag? */ Boolean weakimport; /* set weak import flag? */ Boolean initbefore; /* set initbefore flag? */ } CWNewProjectEntryInfo; typedef struct CWIDEInfo { unsigned short majorVersion; unsigned short minorVersion; unsigned short bugFixVersion; unsigned short buildVersion; unsigned short dropinAPIVersion; } CWIDEInfo; /* Structures for getting the list of access paths. */ /* The callback does the filtering on the host flags, so the list returned */ /* will only contain the paths that are enabled for the host platform. */ /* There are separate APIs to get the Mac OS X framework style access paths. */ typedef enum CWAccessPathType { cwSystemPath, cwUserPath } CWAccessPathType; typedef struct CWAccessPathInfo { CWFileSpec pathSpec; Boolean recursive; SInt32 subdirectoryCount; } CWAccessPathInfo; typedef struct CWAccessPathListInfo { SInt32 systemPathCount; SInt32 userPathCount; Boolean alwaysSearchUserPaths; Boolean convertPaths; } CWAccessPathListInfo; /* Structures for getting the list of Mac OS X framework access paths. */ /* The callback does the filtering on the host flags, so the list returned */ /* will only contain the Mac OS X framework style paths that are enabled for */ /* the host platform. */ /* There are separate APIs to get the traditional style access paths. */ typedef struct CWFrameworkAccessPathInfo { CWFileSpec pathSpec; Boolean framework; } CWFrameworkAccessPathInfo; typedef struct CWFrameworkAccessPathListInfo { SInt32 systemPathCount; SInt32 userPathCount; Boolean alwaysSearchUserPaths; Boolean convertPaths; Boolean requireFrameworkIncludes; } CWFrameworkAccessPathListInfo; /* constants for different types of plugins */ /* Used in the dropintype in the DropInFlags, as well as for the MacOS file type */ enum { CWDROPINLINKERTYPE = CWFOURCHAR('L','i','n','k'), /* type for DropIn linkers */ CWDROPINCOMPILERTYPE= CWFOURCHAR('C','o','m','p'), /* type for DropIn compilers */ CWDROPINPREFSTYPE = CWFOURCHAR('P','a','n','L'), /* type for DropIn panels */ CWDROPINPREFSTYPE_1 = CWFOURCHAR('P','a','n','l'), /* type for 1.x IDE DropIn panels */ CWDROPINVCSTYPE = CWFOURCHAR('V','C','S',' '), /* type for DropIn version control */ CWDROPINCOMTYPE = CWFOURCHAR('C','O','M',' ') /* type for COM-only plugins */ }; typedef SInt32 CWPluginType; // one of the above types /* Format of 'Flag' resources, or data returned by dropin's GetDropinFlags entry */ /* point. */ /* */ /* For the version 2 of these resource, we renamed the 'apiversion' field to */ /* 'earliestCompatibleAPIVersion' and added the 'newestAPIVersion' field. */ /* This allows plugins to support more than one API version and therefore run */ /* under more than one version of the IDE. The CWGetAPIVersion call should be used */ /* to determine what API version the IDE is using to talk to a plugin. */ #define kCurrentDropInFlagsVersion 2 typedef struct DropInFlagsV1 { short rsrcversion; /* version number of resource */ CWDataType dropintype; /* dropin type (compiler, panel, etc) */ /* earliest API support by this plugin */ unsigned short earliestCompatibleAPIVersion; UInt32 dropinflags; /* capability flags */ CWDataType edit_language; /* language */ } DropInFlagsV1, **DropInFlagsHandleV1; typedef struct DropInFlags { short rsrcversion; /* version number of resource */ CWDataType dropintype; /* dropin type (compiler, panel, etc) */ /* earliest API support by this plugin */ unsigned short earliestCompatibleAPIVersion; UInt32 dropinflags; /* capability flags */ CWDataType edit_language; /* language */ unsigned short newestAPIVersion; /* newest API version supported */ } DropInFlags, **DropInFlagsHandle; #define kCurrentCWPanelListVersion 1 typedef struct CWPanelList { short version; short count; const char** names; } CWPanelList; #define kCurrentCWFamilyListVersion 1 #define kCurrentCWFamilyResourceVersion 1 typedef struct CWFamily { CWDataType type; const char* name; } CWFamily; typedef struct CWFamilyList { short version; short count; CWFamily* families; } CWFamilyList; typedef struct CWFamilyResource { short version; CWDataType type; unsigned char name[64]; } CWFamilyResource; #define kCurrentCWHelpInfoVersion 1 typedef struct CWHelpInfo { short version; const char* helpFileName; } CWHelpInfo; #define kCurrentCWRelativePathVersion 1 typedef enum CWRelativePathFormat { format_Generic = 0, // Simple name, not platform-specific format_Mac, // Uses : as separator :: for parent directory format_Win, // Uses \ as separator .. for parent directory format_Unix // Uses / as separator .. for parent directory } CWRelativePathFormat; typedef enum CWRelativePathTypes { type_Absolute = 0, type_Project, type_Compiler, type_System, type_UserDefined } CWRelativePathTypes; typedef struct CWRelativePath { short version; // version number unsigned char pathType; // use CWRelativePathTypes unsigned char pathFormat; // use CWRelativePathFormat char userDefinedTree[256]; // user-defined tree name char pathString[512]; // actual path string } CWRelativePath; /* * */ #define kCurrentCWPluginInfoVersion 1 typedef struct CWPluginInfo { short version; // struct version number const char* companyName; // i.e. Metrowerks const char* pluginName; // Defaults to Dropin->GetName() const char* pluginDisplayName; const char* familyName; // i.e. Java unsigned short majorIDEVersion; // Version of IDE Required unsigned short minorIDEVersion; } CWPluginInfo; /* Declaration of plugin entry points that must be implemented by non-MacOS plugins */ /* It can also be implemented for MacOS plugins instead of having a 'Flag' resource */ CWPLUGIN_ENTRY (CWPlugin_GetDropInFlags)(const DropInFlags**, SInt32* flagsSize); /* Declaration of plugin entry points that may optionally be implemented by plugins */ /* These entry points override the corresponding resources on MacOS */ CWPLUGIN_ENTRY (CWPlugin_GetDropInName)(const char** dropInName); CWPLUGIN_ENTRY (CWPlugin_GetDisplayName)(const char** displayName); CWPLUGIN_ENTRY (CWPlugin_GetPanelList)(const CWPanelList** panelList); CWPLUGIN_ENTRY (CWPlugin_GetFamilyList)(const CWFamilyList** familyList); CWPLUGIN_ENTRY (CWPlugin_GetHelpInfo)(const CWHelpInfo** helpInfo); /* Declaration of info plugin entry point that must be implemented by all COM plugins */ CWPLUGIN_ENTRY (CWPlugin_GetPluginInfo)(const CWPluginInfo** pluginInfo); /* Callback declarations: these callbacks are supported for all CodeWarrior plugins */ /* Get the action the IDE is requesting of the plugin */ CW_CALLBACK CWGetPluginRequest(CWPluginContext context, SInt32* request); /* Call when finished handling a request, just before returning to the shell */ CW_CALLBACK CWDonePluginRequest(CWPluginContext, CWResult resultCode); /* Get the version number of API used by the IDE to talk to the plugin */ CW_CALLBACK CWGetAPIVersion(CWPluginContext context, SInt32* version); /* Get information about the IDE being used */ CW_CALLBACK CWGetIDEInfo(CWPluginContext context, CWIDEInfo* info); /* Get the OS error associated with the last callback */ CW_CALLBACK CWGetCallbackOSError(CWPluginContext context, CWOSResult* error); /* Set the OS error associated with a failed plugin request */ CW_CALLBACK CWSetPluginOSError(CWPluginContext context, CWOSResult); /* Get the file specifier for the current project */ CW_CALLBACK CWGetProjectFile(CWPluginContext context, CWFileSpec* projectSpec); /* Get the directory where the IDE stores target-specific generated data */ CW_CALLBACK CWGetTargetDataDirectory(CWPluginContext context, CWFileSpec* targetDataDirectorySpec); /* Get the name of the current target in the current project */ CW_CALLBACK CWGetTargetName(CWPluginContext context, char* name, short maxLength); /* Get the directory where output files should be stored */ CW_CALLBACK CWGetOutputFileDirectory(CWPluginContext context, CWFileSpec* outputFileDirectory); /* Get the number of files in the current project */ CW_CALLBACK CWGetProjectFileCount(CWPluginContext context, SInt32* count); /* Get information about a particular file in the project */ CW_CALLBACK CWGetFileInfo(CWPluginContext context, SInt32 whichfile, Boolean checkFileLocation, CWProjectFileInfo* fileinfo); /* Search for a file by name on the current file's access paths. */ CW_CALLBACK CWFindAndLoadFile(CWPluginContext context, const char* filename, CWFileInfo *fileinfo); /* Get the access paths for the current target */ CW_CALLBACK CWGetAccessPathListInfo(CWPluginContext context, CWAccessPathListInfo* pathListInfo); CW_CALLBACK CWGetAccessPathInfo(CWPluginContext context, CWAccessPathType pathType, SInt32 whichPath, CWAccessPathInfo* pathInfo); CW_CALLBACK CWGetAccessPathSubdirectory(CWPluginContext context, CWAccessPathType pathType, SInt32 whichPath, SInt32 whichSubdirectory, CWFileSpec* subdirectory); CW_CALLBACK CWGetFrameworkAccessPathListInfo(CWPluginContext context, CWFrameworkAccessPathListInfo* pathListInfo); CW_CALLBACK CWGetFrameworkAccessPathInfo(CWPluginContext context, CWAccessPathType pathType, SInt32 whichPath, CWFrameworkAccessPathInfo* pathInfo); /* Get file text, from the editor, include file cache, or by reading the file */ CW_CALLBACK CWGetFileText(CWPluginContext context, const CWFileSpec* filespec, const char** text, SInt32* textLength, short* filedatatype); /* Release file text returned by CWFindAndLoadFile and CWGetFileText */ CW_CALLBACK CWReleaseFileText(CWPluginContext context, const char* text); /* Get information about a project segment */ CW_CALLBACK CWGetSegmentInfo(CWPluginContext context, SInt32 whichsegment, CWProjectSegmentInfo* segmentinfo); /* Get the number of overlay groups in the target */ CW_CALLBACK CWGetOverlay1GroupsCount(CWPluginContext context, SInt32* count); /* Get information about a project overlay group */ CW_CALLBACK CWGetOverlay1GroupInfo(CWPluginContext context, SInt32 whichgroup, CWOverlay1GroupInfo* groupinfo); /* Get information about an overlay within a group */ CW_CALLBACK CWGetOverlay1Info(CWPluginContext context, SInt32 whichgroup, SInt32 whichoverlay, CWOverlay1Info* overlayinfo); /* Get information about a file in an overlay */ CW_CALLBACK CWGetOverlay1FileInfo(CWPluginContext context, SInt32 whichgroup, SInt32 whichoverlay, SInt32 whichoverlayfile, CWOverlay1FileInfo* fileinfo); /* Report a error, warning, or informational message */ CW_CALLBACK CWReportMessage(CWPluginContext context, const CWMessageRef* msgRef, const char *line1, const char *line2, short errorlevel, SInt32 errorNumber); /* Display an alert. May actually be put in a message, depending on the plugin request */ CW_CALLBACK CWAlert(CWPluginContext context, const char* msg1, const char* msg2, const char* msg3, const char* msg4); /* Display one or two status messages to the user */ CW_CALLBACK CWShowStatus(CWPluginContext context, const char *line1, const char *line2); /* Give to the IDE to handle events and check if user has canceled this operation */ CW_CALLBACK CWUserBreak(CWPluginContext context); /* Return stored preference data, referenced by name. Typically used for preference */ /* panel settings. */ CW_CALLBACK CWGetNamedPreferences(CWPluginContext context, const char* prefsname, CWMemHandle* prefsdata); /* Store data referenced by a data type and file number */ CW_CALLBACK CWStorePluginData(CWPluginContext context, SInt32 whichfile, CWDataType type, CWMemHandle prefsdata); /* Return stored data referenced by a data type and file number */ CW_CALLBACK CWGetPluginData(CWPluginContext context, SInt32 whichfile, CWDataType type, CWMemHandle* prefsdata); /* Inform the IDE that a file modification date has changed. isGenerated is for use */ /* by compiler and linker plugins only */ CW_CALLBACK CWSetModDate(CWPluginContext context, const CWFileSpec* filespec, CWFileTime* moddate, Boolean isGenerated); /* Ask the IDE to add a file to the current target in the current project. isGenerated */ /* is for use by compiler plugins only. */ CW_CALLBACK CWAddProjectEntry(CWPluginContext context, const CWFileSpec* fileSpec, Boolean isGenerated, const CWNewProjectEntryInfo* projectEntryInfo, SInt32* whichfile); /* Ask the IDE to remove a file from the current target (link-order/segment/overlay) in the current project. */ /* If it's the last target that contains the file, it would be removed from the file list. */ CW_CALLBACK CWRemoveProjectEntry(CWPluginContext context, const CWFileSpec* fileSpec); /* Create a new editor window, supplying initial text and an optional document name */ CW_CALLBACK CWCreateNewTextDocument(CWPluginContext, const CWNewTextDocumentInfo* docinfo); /* Allocate memory. Permanent memory is not freed until the plugin is unloaded. */ /* Temporary memory is freed after each plugin request completes. */ CW_CALLBACK CWAllocateMemory(CWPluginContext context, SInt32 size, Boolean isPermanent, void** ptr); /* Free memory allocated via CWAllocateMemory */ CW_CALLBACK CWFreeMemory(CWPluginContext context, void* ptr, Boolean isPermanent); /* Allocate a memory handle of the requested size. All handles are automatically */ /* freed at the end of each compiler/linker request. useTempMemory is MacOS-specific*/ CW_CALLBACK CWAllocMemHandle(CWPluginContext context, SInt32 size, Boolean useTempMemory, CWMemHandle* handle); /* Free a memory handle */ CW_CALLBACK CWFreeMemHandle(CWPluginContext context, CWMemHandle handle); /* Return the current size of a memory handle */ CW_CALLBACK CWGetMemHandleSize(CWPluginContext context, CWMemHandle handle, SInt32* size); /* Resize an existing memory handle */ CW_CALLBACK CWResizeMemHandle(CWPluginContext context, CWMemHandle handle, SInt32 newSize); /* To obtain a pointer to the block, you must lock the handle */ /* moveHi is MacOS-specific */ CW_CALLBACK CWLockMemHandle(CWPluginContext context, CWMemHandle handle, Boolean moveHi, void** ptr); /* Unlock a memory handle, the pointer returned by locking the handle may no */ /* longer be valid */ CW_CALLBACK CWUnlockMemHandle(CWPluginContext context, CWMemHandle handle); #if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS /* Utility function to map MacOS error codes to a CWResult code. Plugins */ /* may internally generate OSErrs, but need to return CWResult to the */ /* CodeWarrior IDE */ CW_CALLBACK CWMacOSErrToCWResult(CWPluginContext context, OSErr err); #endif /* Turn off the built in PP window manager while the plugin displays a dialog */ CW_CALLBACK CWPreDialog(CWPluginContext context); /* Turn on the built in PP window manager after the plugin is through with its */ /* dialog */ CW_CALLBACK CWPostDialog(CWPluginContext context); /* Notify the IDE that the plugin will be performing actions on a file */ CW_CALLBACK CWPreFileAction(CWPluginContext context, const CWFileSpec *theFile); /* Notify the IDE that the plugin is finished performing actions on a file */ CW_CALLBACK CWPostFileAction(CWPluginContext context, const CWFileSpec *theFile); CW_CALLBACK CWResolveRelativePath(CWPluginContext context, const CWRelativePath* relativePath, CWFileSpec* fileSpec, Boolean create); CW_CALLBACK CWFindLogicalDirectory(CWPluginContext context, SInt32 selector, CWFileSpec *dirSpec); CW_CALLBACK CWOpenFileInEditor(CWPluginContext context, const CWFileSpec *fileSpec); #if CWPLUGIN_HOST==CWPLUGIN_HOST_SOLARIS || CWPLUGIN_HOST==CWPLUGIN_HOST_LINUX /* Forward declarations */ struct ICodeWarriorApp; struct ICodeWarriorProject; struct ICodeWarriorDesign; struct ICodeWarriorTarget; #endif /* CWPLUGIN_HOST==CWPLUGIN_HOST_SOLARIS || CWPLUGIN_HOST==CWPLUGIN_HOST_LINUX */ /* Get the IDE application COM interface. Fails if called from any thread */ /* other than the main IDE thread, e.g. a build thread. */ CW_CALLBACK CWGetCOMApplicationInterface(CWPluginContext context, struct ICodeWarriorApp **app); /* Get the current project COM interface. Adds a reference upon return. */ /* Only succeeds if the plugin is being called in the context of a */ /* particular project. Fails if called from any thread */ /* other than the main IDE thread, e.g. a build thread. */ CW_CALLBACK CWGetCOMProjectInterface(CWPluginContext context, struct ICodeWarriorProject **project); /* Get the current design COM interface. Adds a reference upon return. */ /* Only succeeds if the plugin is being called in the context of a */ /* particular target that is associated with a design. */ /* Fails if called from any thread other than the main IDE thread, */ /* e.g. a build thread. */ CW_CALLBACK CWGetCOMDesignInterface(CWPluginContext context, struct ICodeWarriorDesign **design); /* Get the current target COM interface. Adds a reference upon return. */ /* Only succeeds if the plugin is being called in the context of a */ /* particular target. Fails if called from any thread */ /* other than the main IDE thread, e.g. a build thread. */ CW_CALLBACK CWGetCOMTargetInterface(CWPluginContext context, struct ICodeWarriorTarget **target); #if CW_USE_PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #ifdef _MSC_VER #pragma pack(pop) #endif #ifdef __MWERKS__ #pragma options align=reset #endif #endif /* __CWPlugins_H__ */ \ No newline at end of file
+/*
+ * CWPlugins.h - Common declarations for Metrowerks CodeWarrior� plugins
+ *
+ * Copyright � 1995-1997 Metrowerks, Inc. All rights reserved.
+ *
+ */
+
+#include "common.h"
+
+#ifndef __CWPlugins_H__
+#define __CWPlugins_H__
+
+#ifdef __MWERKS__
+# pragma once
+#endif
+
+#define CWPLUGIN_HOST_MACOS 1
+#define CWPLUGIN_HOST_WIN32 2
+#define CWPLUGIN_HOST_SOLARIS 3
+#define CWPLUGIN_HOST_LINUX 4
+
+// This seems to always be true for command-line tools
+#define CWPLUGIN_HOST CWPLUGIN_HOST_MACOS
+
+//#ifndef CWPLUGIN_HOST
+//# ifdef WIN32
+//# define CWPLUGIN_HOST CWPLUGIN_HOST_WIN32
+//# elif defined(macintosh)
+//# define CWPLUGIN_HOST CWPLUGIN_HOST_MACOS
+//# elif defined(__sun__)
+//# define CWPLUGIN_HOST CWPLUGIN_HOST_SOLARIS
+//# elif defined(__linux__)
+//# define CWPLUGIN_HOST CWPLUGIN_HOST_LINUX
+//# else
+//# error
+//# endif
+//#endif
+
+#define CWPLUGIN_API_MACOS 1
+#define CWPLUGIN_API_WIN32 2
+#define CWPLUGIN_API_UNIX 3
+
+//#ifndef CWPLUGIN_API
+//# ifdef WIN32
+//# define CWPLUGIN_API CWPLUGIN_API_WIN32
+//# elif defined(macintosh)
+//# define CWPLUGIN_API CWPLUGIN_API_MACOS
+//# elif defined(__sun__) || defined(__linux__)
+//# define CWPLUGIN_API CWPLUGIN_API_UNIX
+//# else
+//# error
+//# endif
+//#endif
+
+// This seems to always be true for command-line tools
+#define CWPLUGIN_API CWPLUGIN_API_MACOS
+
+/*
+** Radix 256 notation where a 32-bit integer is created from four
+** ASCII characters. A four-character constant of this form, say
+** 'ABCD', must always be represented with the same pattern, 0x41424344
+** in this case, regardless of big/little endian issues.
+*/
+typedef SInt32 CWFourCharType;
+#define CWFOURCHAR(a, b, c, d) \
+ (((CWFourCharType) ((a) & 0xff) << 24) \
+ | ((CWFourCharType) ((b) & 0xff) << 16) \
+ | ((CWFourCharType) ((c) & 0xff) << 8) \
+ | ((CWFourCharType) ((d) & 0xff)))
+
+
+#if CWPLUGIN_API == CWPLUGIN_API_UNIX
+#include <sys/param.h>
+#endif
+
+#ifndef CW_USE_PRAGMA_EXPORT
+#if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS
+#define CW_USE_PRAGMA_EXPORT 1
+#else
+#define CW_USE_PRAGMA_EXPORT 0
+#endif
+#endif
+
+#ifndef CW_USE_PRAGMA_IMPORT
+#if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS
+#define CW_USE_PRAGMA_IMPORT 1
+#else
+#define CW_USE_PRAGMA_IMPORT 0
+#endif
+#endif
+
+#ifdef __MWERKS__
+ #pragma options align=mac68k
+#endif
+
+#ifdef _MSC_VER
+ #pragma pack(push,2)
+#endif
+
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#if CW_USE_PRAGMA_IMPORT
+#pragma import on
+#endif
+
+ /* These constants specify the action the IDE is asking the plugin to execute */
+enum {
+ reqInitialize = -2, /* called when the plugin is loaded */
+ reqTerminate = -1, /* called when the plugin is unloaded */
+ reqIdle = -100, /* called periodically to allow for plugin tasks EP 6/24/98 */
+ reqAbout = -101, /* called to ask plugin to display about dialog EP 6/24/98 */
+ reqPrefsChange = -102 /* called when an associated pref panel changes EP 6/24/98 */
+};
+
+ /* Used in CWFileInfo.dependencyType to indicate what type of make */
+ /* dependency to establish between files */
+typedef enum CWDependencyType {
+ cwNoDependency, /* do not establish a dependency */
+ cwNormalDependency, /* recompile dependent whenever prereq changes */
+ cwInterfaceDependency /* recompile only if interface to file changes */
+} CWDependencyType;
+
+ /* Used in CWFileInfo.filedatatype to indicate the type of data in a loaded file */
+enum {
+ cwFileTypeUnknown, /* unknown binary data */
+ cwFileTypeText, /* normal text file */
+ cwFileTypePrecompiledHeader /* cached precompiled header */
+};
+
+ /* constant for CWFileInfo.isdependentoffile */
+#define kCurrentCompiledFile -1L
+
+ /* constant for CWStorePluginData/CWGetPluginData */
+#define kTargetGlobalPluginData -1L
+
+ /* constant for CWNewProjectEntryInfo link order, segment, and overlay values */
+#define kDefaultLinkPosition -1L
+
+ /* Selectors for CWFindLogicalDirectory */
+enum {
+ kIDEDirectorySelector = 1, /* parent directory of IDE application; "bin" folder on Win32 */
+ kCodeWarriorDirectorySelector, /* root CodeWarrior directory */
+ kSystemDirectorySelector, /* system directory */
+ kProjectDirectorySelector, /* parent directory of current project */
+ kProjectDataDirectorySelector, /* project data directory */
+ kTargetDataDirectorySelector, /* target data directory (within project data directory) */
+ kTargetObjectCodeDirectorySelector, /* object code directory (within target data directory) */
+ kDebuggerCacheDirectorySelector, /* "CW Debugging Cache" directory */
+ kHelperAppsDirectorySelector, /* "(Helper Apps)" directory */
+ kPluginsDirectorySelector, /* "CodeWarrior Plugins" (Mac) or "plugins" (Win32) directory */
+ kPluginParentDirectorySelector, /* parent directory of current plugin */
+ kStationeryDirectorySelector, /* "(Project Stationery)" directory */
+ kRADStationeryDirectorySelector, /* "RAD Stationery" directory */
+ kLocalizedResourcesDirectorySelector /* "resources" directory */
+};
+
+
+ /* CWPluginContext is a magic cookie passed to all plugins. It must */
+ /* be passed back to all IDE callbacks */
+
+typedef struct CWPluginPrivateContext* CWPluginContext;
+
+ /* CWResult is the error/status result returned by all IDE API routine. */
+ /* The most common errors are returned directly. For OS-specific errors, the */
+ /* CWResult is cwErrOSError, and the OS-specific error can be obtained by */
+ /* calling CWGetOSError() */
+typedef SInt32 CWResult;
+
+ /* CWMemHandle is an abstraction for memory used in some parts */
+ /* of the plugin API. API routines must be used to allocate */
+ /* and free CWMemHandles, or to convert them to pointers. */
+
+typedef struct CWMemHandlePrivateStruct* CWMemHandle;
+
+ /* Used to identify custom data associated by a plugin with */
+ /* a project file or a target as a whole. Must be a four character */
+ /* constant. All lower case constants are reserved by the IDE */
+typedef UInt32 CWDataType;
+
+ /* Some information used in the compiler/linker API is platform-dependent */
+ /* We use some typedefs to isolate the differences */
+ /* CWFileSpec contains the native platform file specifier. */
+ /* CWFileName contains the string type for a native file name */
+ /* CWFileTime contains the native platform file timestamp */
+ /* CWOSResult contains the native platform error return value */
+ /* CWResult contains an API routine error/status result */
+ /* CW_CALLBACK is a macro defining the calling convention and return type for */
+ /* IDE callback routines. */
+ /* CW_PLUGINENTRY is a macro defining the calling convention and return type for */
+ /* plugin entry points. */
+ /* CWSUCCESS is a macro that evaluates to true when given a CWResult indicating an */
+ /* routine succeeded */
+
+#if CWPLUGIN_API == CWPLUGIN_API_MACOS
+
+typedef FSSpec CWFileSpec;
+typedef char CWFileName[32];
+typedef UInt32 CWFileTime;
+typedef OSErr CWOSResult;
+
+#elif CWPLUGIN_API == CWPLUGIN_API_WIN32
+
+typedef unsigned char Boolean;
+typedef struct CWFileSpec { char path[MAX_PATH]; } CWFileSpec;
+typedef char CWFileName[65];
+typedef FILETIME CWFileTime;
+typedef DWORD CWOSResult;
+
+#elif CWPLUGIN_API == CWPLUGIN_API_UNIX
+
+#define MAX_PATH MAXPATHLEN
+
+#ifndef __MACTYPES__
+typedef unsigned char Boolean;
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+typedef struct CWFileSpec { char path[MAX_PATH]; } CWFileSpec;
+typedef char CWFileName[65];
+typedef time_t CWFileTime;
+typedef int CWOSResult;
+
+#else
+
+#error Unknown plugin API!
+
+#endif
+
+#define CWSUCCESS(result) ((result) == 0)
+
+#if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS
+
+#define CW_CALLBACK CW_PASCAL CWResult
+#define CW_CALLBACK_PTR(function_name) CW_PASCAL CWResult (function_name)
+#define CWPLUGIN_ENTRY(function_name) CW_PASCAL short (function_name)
+
+#elif CWPLUGIN_HOST == CWPLUGIN_HOST_WIN32
+
+#define CW_CALLBACK CWResult __stdcall
+#define CW_CALLBACK_PTR(function_name) CWResult (__stdcall function_name)
+#define CWPLUGIN_ENTRY(function_name) short (__stdcall function_name)
+
+#elif CWPLUGIN_HOST==CWPLUGIN_HOST_SOLARIS || CWPLUGIN_HOST==CWPLUGIN_HOST_LINUX
+
+#define CW_CALLBACK CWResult
+#define CW_CALLBACK_PTR(function_name) CWResult (function_name)
+#define CWPLUGIN_ENTRY(function_name) short (function_name)
+
+#else
+
+#error Unknown plugin host!
+
+#endif
+
+/* information returned by CWFindAndLoadFile */
+typedef struct CWFileInfo {
+ Boolean fullsearch; /* [<-] do we do a full search of paths for file */
+ char dependencyType; /* [<-] type CWDependencyType */
+ SInt32 isdependentoffile; /* [<-] this file is a dependent of file id */
+ /* (zero based) or -1L if of current file */
+ Boolean suppressload; /* [<-] find but don't load the file */
+ Boolean padding; /* [**] structure padding */
+ const char* filedata; /* [->] point to the file text/data, or NULL */
+ SInt32 filedatalength; /* [->] length of filedata */
+ short filedatatype; /* [->] type of data pointed to by filedata */
+
+ /* the remaining members are valid only when called by compilers */
+ short fileID; /* [->] use in browse records and dependencies */
+ CWFileSpec filespec; /* [->] specifies the file on disk */
+ Boolean alreadyincluded; /* [->] TRUE if already included in current compile */
+ Boolean recordbrowseinfo; /* [->] record browse info for this file? */
+} CWFileInfo;
+
+/* information maintained by the IDE for each segment in the project */
+typedef struct CWProjectSegmentInfo {
+ char name[32]; /* segment name */
+ short attributes; /* segment attributes */
+} CWProjectSegmentInfo;
+
+/* 64 bit address */
+typedef struct CWAddr64 {
+ SInt32 lo; /* low order longword of address */
+ SInt32 hi; /* high order longword of address */
+} CWAddr64;
+
+/* describes an overlay group, Use CWGetOverlayGroup1Info to iterate over overlay groups */
+typedef struct CWOverlay1GroupInfo {
+ char name[256]; /* overlay group name */
+ CWAddr64 address; /* load address */
+ SInt32 numoverlays; /* number of overlays in this group */
+
+} CWOverlay1GroupInfo;
+
+/* describes an overlay, use CWGetOverlay1Info to iterate over overlays */
+typedef struct CWOverlay1Info {
+ char name[256]; /* name of this overlay */
+ SInt32 numfiles; /* number of files in the overlay */
+} CWOverlay1Info;
+
+/* describes a file in an overlay, use CWGetOverlayFile1Info to iterate over files. Use */
+/* whichfile in calls taking a file number, e.g. CWLoadObjectData or CWGetFileInfo */
+typedef struct CWOverlay1FileInfo {
+ SInt32 whichfile; /* flat file number */
+} CWOverlay1FileInfo;
+
+/*
+ * All compiler errors or warnings which occur at some specific location in some
+ * source file are identified by a CWMessageRef structure. This structure
+ * provides sufficient information for the development environment to locate
+ * and display the exact position associated with a message. For each message,
+ * the compiler provides:
+ *
+ * errorstring: contains a description of the error, e.g. "syntax error"
+ * errorline: contains a subset of the text containing the error
+ * errorlevel: indicates if the "error" is an error, warning, or informational message
+ * CWMessageRef: further info so the IDE can perform two tasks:
+
+ * - Display a summary of each message, with the "error token"
+ * underlined within the compiler-provided errorline. This
+ * information is provided by the tokenoffset and tokenlength
+ * fields. If tokenLength is zero then no underlining is performed.
+ *
+ * - Open the file containing the error and select the full
+ * text of the error. This information is provided by the
+ * selectionoffset and selectionlength fields.
+ */
+
+typedef struct CWMessageRef
+{
+ CWFileSpec sourcefile; /* file containing error */
+ SInt32 linenumber; /* error linenumber in file */
+ short tokenoffset; /* offset into errorline of token underline */
+ short tokenlength; /* length of error token to be underlined */
+ SInt32 selectionoffset; /* start of error for text selection */
+ SInt32 selectionlength; /* length of error for text selection */
+} CWMessageRef;
+
+/* message types, used for errorlevel parameter to message routines */
+enum {
+ messagetypeInfo, /* informational only */
+ messagetypeWarning, /* warning message */
+ messagetypeError /* error message */
+};
+
+
+/* information maintained by the IDE for each file in the project */
+typedef struct CWProjectFileInfo
+{
+ CWFileSpec filespec; /* CW_FileSpec of file in project */
+ CWFileTime moddate; /* date source file was last modified */
+ short segment; /* segment number of file */
+ Boolean hasobjectcode; /* file has object code to be linked */
+ Boolean hasresources; /* file has resources to be linked */
+ Boolean isresourcefile; /* file -is- a resource file to be linked */
+ Boolean weakimport; /* file has "Import Weak" flag set */
+ Boolean initbefore; /* file has "Init Before" flag set */
+ Boolean gendebug; /* file has generate debug info on */
+ CWFileTime objmoddate; /* date object code was last modified */
+ CWFileName dropinname; /* name of dropin used to process this file */
+ short fileID; /* fileID to use in browse records */
+ Boolean recordbrowseinfo; /* record browse info for this file? */
+ Boolean reserved; /* reserved and used internally */
+#if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS
+ /* some Macintosh-specific information */
+ OSType filetype; /* MacOS file type */
+ OSType filecreator; /* MacOS file creator */
+#endif
+ Boolean hasunitdata; /* file has associated unit data (Pascal) */
+ Boolean mergeintooutput; /* file has "Merge Into Output" flag set */
+ UInt32 unitdatadependencytag; /* dependency tag (i.e. checksum) of unit data (Pascal) */
+} CWProjectFileInfo;
+
+typedef struct CWNewTextDocumentInfo
+{
+ const char* documentname; /* name for new document, can be NULL */
+ CWMemHandle text; /* initial text for document */
+ Boolean markDirty; /* mark doc as needing to be saved? */
+} CWNewTextDocumentInfo;
+
+typedef struct CWNewProjectEntryInfo
+{ /* use kDefaultLinkPosition to get default link order, overlay, or segment */
+ SInt32 position; /* optional link order position */
+ SInt32 segment; /* optional segment number */
+ SInt32 overlayGroup; /* optional overlay group number */
+ SInt32 overlay; /* optional overlay number */
+ const char* groupPath; /* optional fully qualified path to file group */
+ Boolean mergeintooutput; /* set merge into output flag? */
+ Boolean weakimport; /* set weak import flag? */
+ Boolean initbefore; /* set initbefore flag? */
+} CWNewProjectEntryInfo;
+
+typedef struct CWIDEInfo
+{
+ unsigned short majorVersion;
+ unsigned short minorVersion;
+ unsigned short bugFixVersion;
+ unsigned short buildVersion;
+ unsigned short dropinAPIVersion;
+} CWIDEInfo;
+
+/* Structures for getting the list of access paths. */
+/* The callback does the filtering on the host flags, so the list returned */
+/* will only contain the paths that are enabled for the host platform. */
+/* There are separate APIs to get the Mac OS X framework style access paths. */
+
+typedef enum CWAccessPathType {
+ cwSystemPath,
+ cwUserPath
+} CWAccessPathType;
+
+typedef struct CWAccessPathInfo
+{
+ CWFileSpec pathSpec;
+ Boolean recursive;
+ SInt32 subdirectoryCount;
+} CWAccessPathInfo;
+
+typedef struct CWAccessPathListInfo
+{
+ SInt32 systemPathCount;
+ SInt32 userPathCount;
+ Boolean alwaysSearchUserPaths;
+ Boolean convertPaths;
+} CWAccessPathListInfo;
+
+/* Structures for getting the list of Mac OS X framework access paths. */
+/* The callback does the filtering on the host flags, so the list returned */
+/* will only contain the Mac OS X framework style paths that are enabled for */
+/* the host platform. */
+/* There are separate APIs to get the traditional style access paths. */
+
+typedef struct CWFrameworkAccessPathInfo
+{
+ CWFileSpec pathSpec;
+ Boolean framework;
+} CWFrameworkAccessPathInfo;
+
+typedef struct CWFrameworkAccessPathListInfo
+{
+ SInt32 systemPathCount;
+ SInt32 userPathCount;
+ Boolean alwaysSearchUserPaths;
+ Boolean convertPaths;
+ Boolean requireFrameworkIncludes;
+} CWFrameworkAccessPathListInfo;
+
+/* constants for different types of plugins */
+/* Used in the dropintype in the DropInFlags, as well as for the MacOS file type */
+enum
+{
+ CWDROPINLINKERTYPE = CWFOURCHAR('L','i','n','k'), /* type for DropIn linkers */
+ CWDROPINCOMPILERTYPE= CWFOURCHAR('C','o','m','p'), /* type for DropIn compilers */
+ CWDROPINPREFSTYPE = CWFOURCHAR('P','a','n','L'), /* type for DropIn panels */
+ CWDROPINPREFSTYPE_1 = CWFOURCHAR('P','a','n','l'), /* type for 1.x IDE DropIn panels */
+ CWDROPINVCSTYPE = CWFOURCHAR('V','C','S',' '), /* type for DropIn version control */
+ CWDROPINCOMTYPE = CWFOURCHAR('C','O','M',' ') /* type for COM-only plugins */
+};
+typedef SInt32 CWPluginType; // one of the above types
+
+/* Format of 'Flag' resources, or data returned by dropin's GetDropinFlags entry */
+/* point. */
+/* */
+/* For the version 2 of these resource, we renamed the 'apiversion' field to */
+/* 'earliestCompatibleAPIVersion' and added the 'newestAPIVersion' field. */
+/* This allows plugins to support more than one API version and therefore run */
+/* under more than one version of the IDE. The CWGetAPIVersion call should be used */
+/* to determine what API version the IDE is using to talk to a plugin. */
+
+#define kCurrentDropInFlagsVersion 2
+
+typedef struct DropInFlagsV1 {
+ short rsrcversion; /* version number of resource */
+ CWDataType dropintype; /* dropin type (compiler, panel, etc) */
+ /* earliest API support by this plugin */
+ unsigned short earliestCompatibleAPIVersion;
+ UInt32 dropinflags; /* capability flags */
+ CWDataType edit_language; /* language */
+
+} DropInFlagsV1, **DropInFlagsHandleV1;
+
+typedef struct DropInFlags {
+ short rsrcversion; /* version number of resource */
+ CWDataType dropintype; /* dropin type (compiler, panel, etc) */
+ /* earliest API support by this plugin */
+ unsigned short earliestCompatibleAPIVersion;
+ UInt32 dropinflags; /* capability flags */
+ CWDataType edit_language; /* language */
+ unsigned short newestAPIVersion; /* newest API version supported */
+
+} DropInFlags, **DropInFlagsHandle;
+
+#define kCurrentCWPanelListVersion 1
+
+typedef struct CWPanelList {
+ short version;
+ short count;
+ const char** names;
+} CWPanelList;
+
+#define kCurrentCWFamilyListVersion 1
+#define kCurrentCWFamilyResourceVersion 1
+
+typedef struct CWFamily {
+ CWDataType type;
+ const char* name;
+} CWFamily;
+
+typedef struct CWFamilyList {
+ short version;
+ short count;
+ CWFamily* families;
+} CWFamilyList;
+
+typedef struct CWFamilyResource {
+ short version;
+ CWDataType type;
+ unsigned char name[64];
+} CWFamilyResource;
+
+#define kCurrentCWHelpInfoVersion 1
+
+typedef struct CWHelpInfo {
+ short version;
+ const char* helpFileName;
+} CWHelpInfo;
+
+
+#define kCurrentCWRelativePathVersion 1
+
+typedef enum CWRelativePathFormat
+{
+ format_Generic = 0, // Simple name, not platform-specific
+ format_Mac, // Uses : as separator :: for parent directory
+ format_Win, // Uses \ as separator .. for parent directory
+ format_Unix // Uses / as separator .. for parent directory
+
+} CWRelativePathFormat;
+
+typedef enum CWRelativePathTypes
+{
+ type_Absolute = 0,
+ type_Project,
+ type_Compiler,
+ type_System,
+ type_UserDefined
+} CWRelativePathTypes;
+
+typedef struct CWRelativePath
+{
+ short version; // version number
+ unsigned char pathType; // use CWRelativePathTypes
+ unsigned char pathFormat; // use CWRelativePathFormat
+ char userDefinedTree[256]; // user-defined tree name
+ char pathString[512]; // actual path string
+} CWRelativePath;
+
+/*
+ *
+ */
+
+#define kCurrentCWPluginInfoVersion 1
+
+typedef struct CWPluginInfo
+{
+ short version; // struct version number
+ const char* companyName; // i.e. Metrowerks
+ const char* pluginName; // Defaults to Dropin->GetName()
+ const char* pluginDisplayName;
+ const char* familyName; // i.e. Java
+ unsigned short majorIDEVersion; // Version of IDE Required
+ unsigned short minorIDEVersion;
+
+} CWPluginInfo;
+
+
+/* Declaration of plugin entry points that must be implemented by non-MacOS plugins */
+/* It can also be implemented for MacOS plugins instead of having a 'Flag' resource */
+
+CWPLUGIN_ENTRY (CWPlugin_GetDropInFlags)(const DropInFlags**, SInt32* flagsSize);
+
+/* Declaration of plugin entry points that may optionally be implemented by plugins */
+/* These entry points override the corresponding resources on MacOS */
+
+CWPLUGIN_ENTRY (CWPlugin_GetDropInName)(const char** dropInName);
+CWPLUGIN_ENTRY (CWPlugin_GetDisplayName)(const char** displayName);
+CWPLUGIN_ENTRY (CWPlugin_GetPanelList)(const CWPanelList** panelList);
+CWPLUGIN_ENTRY (CWPlugin_GetFamilyList)(const CWFamilyList** familyList);
+CWPLUGIN_ENTRY (CWPlugin_GetHelpInfo)(const CWHelpInfo** helpInfo);
+
+/* Declaration of info plugin entry point that must be implemented by all COM plugins */
+
+CWPLUGIN_ENTRY (CWPlugin_GetPluginInfo)(const CWPluginInfo** pluginInfo);
+
+
+/* Callback declarations: these callbacks are supported for all CodeWarrior plugins */
+
+ /* Get the action the IDE is requesting of the plugin */
+CW_CALLBACK CWGetPluginRequest(CWPluginContext context, SInt32* request);
+
+ /* Call when finished handling a request, just before returning to the shell */
+CW_CALLBACK CWDonePluginRequest(CWPluginContext, CWResult resultCode);
+
+ /* Get the version number of API used by the IDE to talk to the plugin */
+CW_CALLBACK CWGetAPIVersion(CWPluginContext context, SInt32* version);
+
+ /* Get information about the IDE being used */
+CW_CALLBACK CWGetIDEInfo(CWPluginContext context, CWIDEInfo* info);
+
+ /* Get the OS error associated with the last callback */
+CW_CALLBACK CWGetCallbackOSError(CWPluginContext context, CWOSResult* error);
+
+ /* Set the OS error associated with a failed plugin request */
+CW_CALLBACK CWSetPluginOSError(CWPluginContext context, CWOSResult);
+
+ /* Get the file specifier for the current project */
+CW_CALLBACK CWGetProjectFile(CWPluginContext context, CWFileSpec* projectSpec);
+
+ /* Get the directory where the IDE stores target-specific generated data */
+CW_CALLBACK CWGetTargetDataDirectory(CWPluginContext context, CWFileSpec* targetDataDirectorySpec);
+
+ /* Get the name of the current target in the current project */
+CW_CALLBACK CWGetTargetName(CWPluginContext context, char* name, short maxLength);
+
+ /* Get the directory where output files should be stored */
+CW_CALLBACK CWGetOutputFileDirectory(CWPluginContext context, CWFileSpec* outputFileDirectory);
+
+ /* Get the number of files in the current project */
+CW_CALLBACK CWGetProjectFileCount(CWPluginContext context, SInt32* count);
+
+ /* Get information about a particular file in the project */
+CW_CALLBACK CWGetFileInfo(CWPluginContext context, SInt32 whichfile, Boolean checkFileLocation, CWProjectFileInfo* fileinfo);
+
+ /* Search for a file by name on the current file's access paths. */
+CW_CALLBACK CWFindAndLoadFile(CWPluginContext context, const char* filename, CWFileInfo *fileinfo);
+
+ /* Get the access paths for the current target */
+CW_CALLBACK CWGetAccessPathListInfo(CWPluginContext context, CWAccessPathListInfo* pathListInfo);
+CW_CALLBACK CWGetAccessPathInfo(CWPluginContext context, CWAccessPathType pathType, SInt32 whichPath, CWAccessPathInfo* pathInfo);
+CW_CALLBACK CWGetAccessPathSubdirectory(CWPluginContext context, CWAccessPathType pathType, SInt32 whichPath, SInt32 whichSubdirectory, CWFileSpec* subdirectory);
+CW_CALLBACK CWGetFrameworkAccessPathListInfo(CWPluginContext context, CWFrameworkAccessPathListInfo* pathListInfo);
+CW_CALLBACK CWGetFrameworkAccessPathInfo(CWPluginContext context, CWAccessPathType pathType, SInt32 whichPath, CWFrameworkAccessPathInfo* pathInfo);
+
+ /* Get file text, from the editor, include file cache, or by reading the file */
+CW_CALLBACK CWGetFileText(CWPluginContext context, const CWFileSpec* filespec, const char** text, SInt32* textLength, short* filedatatype);
+
+ /* Release file text returned by CWFindAndLoadFile and CWGetFileText */
+CW_CALLBACK CWReleaseFileText(CWPluginContext context, const char* text);
+
+ /* Get information about a project segment */
+CW_CALLBACK CWGetSegmentInfo(CWPluginContext context, SInt32 whichsegment, CWProjectSegmentInfo* segmentinfo);
+
+ /* Get the number of overlay groups in the target */
+CW_CALLBACK CWGetOverlay1GroupsCount(CWPluginContext context, SInt32* count);
+
+ /* Get information about a project overlay group */
+CW_CALLBACK CWGetOverlay1GroupInfo(CWPluginContext context, SInt32 whichgroup, CWOverlay1GroupInfo* groupinfo);
+
+ /* Get information about an overlay within a group */
+CW_CALLBACK CWGetOverlay1Info(CWPluginContext context, SInt32 whichgroup, SInt32 whichoverlay, CWOverlay1Info* overlayinfo);
+
+ /* Get information about a file in an overlay */
+CW_CALLBACK CWGetOverlay1FileInfo(CWPluginContext context, SInt32 whichgroup, SInt32 whichoverlay, SInt32 whichoverlayfile, CWOverlay1FileInfo* fileinfo);
+
+ /* Report a error, warning, or informational message */
+CW_CALLBACK CWReportMessage(CWPluginContext context, const CWMessageRef* msgRef, const char *line1, const char *line2, short errorlevel, SInt32 errorNumber);
+
+ /* Display an alert. May actually be put in a message, depending on the plugin request */
+CW_CALLBACK CWAlert(CWPluginContext context, const char* msg1, const char* msg2, const char* msg3, const char* msg4);
+
+ /* Display one or two status messages to the user */
+CW_CALLBACK CWShowStatus(CWPluginContext context, const char *line1, const char *line2);
+
+ /* Give to the IDE to handle events and check if user has canceled this operation */
+CW_CALLBACK CWUserBreak(CWPluginContext context);
+
+ /* Return stored preference data, referenced by name. Typically used for preference */
+ /* panel settings. */
+CW_CALLBACK CWGetNamedPreferences(CWPluginContext context, const char* prefsname, CWMemHandle* prefsdata);
+
+ /* Store data referenced by a data type and file number */
+CW_CALLBACK CWStorePluginData(CWPluginContext context, SInt32 whichfile, CWDataType type, CWMemHandle prefsdata);
+
+ /* Return stored data referenced by a data type and file number */
+CW_CALLBACK CWGetPluginData(CWPluginContext context, SInt32 whichfile, CWDataType type, CWMemHandle* prefsdata);
+
+ /* Inform the IDE that a file modification date has changed. isGenerated is for use */
+ /* by compiler and linker plugins only */
+CW_CALLBACK CWSetModDate(CWPluginContext context, const CWFileSpec* filespec, CWFileTime* moddate, Boolean isGenerated);
+
+ /* Ask the IDE to add a file to the current target in the current project. isGenerated */
+ /* is for use by compiler plugins only. */
+CW_CALLBACK CWAddProjectEntry(CWPluginContext context, const CWFileSpec* fileSpec, Boolean isGenerated, const CWNewProjectEntryInfo* projectEntryInfo, SInt32* whichfile);
+
+ /* Ask the IDE to remove a file from the current target (link-order/segment/overlay) in the current project. */
+ /* If it's the last target that contains the file, it would be removed from the file list. */
+CW_CALLBACK CWRemoveProjectEntry(CWPluginContext context, const CWFileSpec* fileSpec);
+
+ /* Create a new editor window, supplying initial text and an optional document name */
+CW_CALLBACK CWCreateNewTextDocument(CWPluginContext, const CWNewTextDocumentInfo* docinfo);
+
+ /* Allocate memory. Permanent memory is not freed until the plugin is unloaded. */
+ /* Temporary memory is freed after each plugin request completes. */
+CW_CALLBACK CWAllocateMemory(CWPluginContext context, SInt32 size, Boolean isPermanent, void** ptr);
+
+ /* Free memory allocated via CWAllocateMemory */
+CW_CALLBACK CWFreeMemory(CWPluginContext context, void* ptr, Boolean isPermanent);
+
+ /* Allocate a memory handle of the requested size. All handles are automatically */
+ /* freed at the end of each compiler/linker request. useTempMemory is MacOS-specific*/
+CW_CALLBACK CWAllocMemHandle(CWPluginContext context, SInt32 size, Boolean useTempMemory, CWMemHandle* handle);
+
+ /* Free a memory handle */
+CW_CALLBACK CWFreeMemHandle(CWPluginContext context, CWMemHandle handle);
+
+ /* Return the current size of a memory handle */
+CW_CALLBACK CWGetMemHandleSize(CWPluginContext context, CWMemHandle handle, SInt32* size);
+
+ /* Resize an existing memory handle */
+CW_CALLBACK CWResizeMemHandle(CWPluginContext context, CWMemHandle handle, SInt32 newSize);
+
+ /* To obtain a pointer to the block, you must lock the handle */
+ /* moveHi is MacOS-specific */
+CW_CALLBACK CWLockMemHandle(CWPluginContext context, CWMemHandle handle, Boolean moveHi, void** ptr);
+
+ /* Unlock a memory handle, the pointer returned by locking the handle may no */
+ /* longer be valid */
+CW_CALLBACK CWUnlockMemHandle(CWPluginContext context, CWMemHandle handle);
+
+#if CWPLUGIN_HOST == CWPLUGIN_HOST_MACOS
+ /* Utility function to map MacOS error codes to a CWResult code. Plugins */
+ /* may internally generate OSErrs, but need to return CWResult to the */
+ /* CodeWarrior IDE */
+CW_CALLBACK CWMacOSErrToCWResult(CWPluginContext context, OSErr err);
+#endif
+
+ /* Turn off the built in PP window manager while the plugin displays a dialog */
+CW_CALLBACK CWPreDialog(CWPluginContext context);
+
+ /* Turn on the built in PP window manager after the plugin is through with its */
+ /* dialog */
+CW_CALLBACK CWPostDialog(CWPluginContext context);
+
+ /* Notify the IDE that the plugin will be performing actions on a file */
+CW_CALLBACK CWPreFileAction(CWPluginContext context, const CWFileSpec *theFile);
+
+ /* Notify the IDE that the plugin is finished performing actions on a file */
+CW_CALLBACK CWPostFileAction(CWPluginContext context, const CWFileSpec *theFile);
+
+CW_CALLBACK CWResolveRelativePath(CWPluginContext context, const CWRelativePath* relativePath, CWFileSpec* fileSpec, Boolean create);
+
+CW_CALLBACK CWFindLogicalDirectory(CWPluginContext context, SInt32 selector, CWFileSpec *dirSpec);
+
+CW_CALLBACK CWOpenFileInEditor(CWPluginContext context, const CWFileSpec *fileSpec);
+
+
+#if CWPLUGIN_HOST==CWPLUGIN_HOST_SOLARIS || CWPLUGIN_HOST==CWPLUGIN_HOST_LINUX
+/* Forward declarations */
+struct ICodeWarriorApp;
+struct ICodeWarriorProject;
+struct ICodeWarriorDesign;
+struct ICodeWarriorTarget;
+#endif /* CWPLUGIN_HOST==CWPLUGIN_HOST_SOLARIS || CWPLUGIN_HOST==CWPLUGIN_HOST_LINUX */
+
+
+ /* Get the IDE application COM interface. Fails if called from any thread */
+ /* other than the main IDE thread, e.g. a build thread. */
+CW_CALLBACK CWGetCOMApplicationInterface(CWPluginContext context, struct ICodeWarriorApp **app);
+
+ /* Get the current project COM interface. Adds a reference upon return. */
+ /* Only succeeds if the plugin is being called in the context of a */
+ /* particular project. Fails if called from any thread */
+ /* other than the main IDE thread, e.g. a build thread. */
+CW_CALLBACK CWGetCOMProjectInterface(CWPluginContext context, struct ICodeWarriorProject **project);
+
+ /* Get the current design COM interface. Adds a reference upon return. */
+ /* Only succeeds if the plugin is being called in the context of a */
+ /* particular target that is associated with a design. */
+ /* Fails if called from any thread other than the main IDE thread, */
+ /* e.g. a build thread. */
+CW_CALLBACK CWGetCOMDesignInterface(CWPluginContext context, struct ICodeWarriorDesign **design);
+
+ /* Get the current target COM interface. Adds a reference upon return. */
+ /* Only succeeds if the plugin is being called in the context of a */
+ /* particular target. Fails if called from any thread */
+ /* other than the main IDE thread, e.g. a build thread. */
+CW_CALLBACK CWGetCOMTargetInterface(CWPluginContext context, struct ICodeWarriorTarget **target);
+
+#if CW_USE_PRAGMA_IMPORT
+#pragma import reset
+#endif
+
+#ifdef __cplusplus
+ }
+#endif
+
+#ifdef _MSC_VER
+#pragma pack(pop)
+#endif
+
+#ifdef __MWERKS__
+#pragma options align=reset
+#endif
+
+#endif /* __CWPlugins_H__ */