diff options
author | Ash Wolf <ninji@wuffs.org> | 2023-01-15 21:50:41 +0000 |
---|---|---|
committer | Ash Wolf <ninji@wuffs.org> | 2023-01-15 21:50:41 +0000 |
commit | a231f5dbb93c60da240a027f2afd8a4797069541 (patch) | |
tree | a6bc68fdc2f1a1fa0000e5cd63a5189f170c226b /sdk_hdrs/CWPlugins.h | |
parent | 35d488e972a9dd75ce3867c000405f128b79c615 (diff) | |
download | MWCC-a231f5dbb93c60da240a027f2afd8a4797069541.tar.gz MWCC-a231f5dbb93c60da240a027f2afd8a4797069541.zip |
more cleanup
Diffstat (limited to 'sdk_hdrs/CWPlugins.h')
-rwxr-xr-x | sdk_hdrs/CWPlugins.h | 815 |
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__ */ |