cpython/Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h

717 lines
24 KiB
C

#pragma once
#include <MixedMode.h>
#include <Dialogs.h>
#include <Files.h>
#include <Windows.h>
#include <AppleEvents.h>
#include <StandardFile.h>
#if defined(powerc) || defined (__powerc)
#pragma options align=mac68k
#endif
typedef struct
{
FSSpec spec; // designates file on disk
long key; // reserved for future expansion
char tree; // 0 for absolute, 1 for project, 2 for system
Boolean found; // FALSE if file couldn't be located; if so, all other info is moot
OSType type; // file type of found file
OSType crtr; // signature of found file's creator
short spare0; // reserved for future expansion
long spare1;
} ProjectEntry;
enum
{
kNeitherTree,
kProjectTree,
kSystemTree
};
enum
{
kTHINKCProject,
kTHINKPascalProject,
kCodeWarriorProject
};
// masks for the "flags" argument to new-convention interfaces
#define xfWindowOpen 0x00000001
#define xfWindowChangeable 0x00000002
#define xfHasSelection 0x00000004
#define xfUseDefaults 0x00000008
#define xfIsBBEditLite 0x00000040
#define xfIsBBEditDemo 0x00000080
typedef struct
{
FSSpec spec;
OSType key;
short error_kind;
long line_number;
Str255 message;
} ErrorEntry;
typedef enum
{
kNote = 0,
kError,
kWarning
} ErrorKind;
#define kCurrentExternalVersion 5 // current version of callbacks
// Universal callback interfaces
#if USESROUTINEDESCRIPTORS
#define ExtensionUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ExternalCallbackBlock *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr))))
#define NewExtensionUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(OSErr))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ExternalCallbackBlock *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(AppleEvent *))) \
| STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(AppleEvent *))))
#define GetWindowContentsUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
#define GetSelectionUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long *))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long *))))
#define SetSelectionUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))))
#define GetDocInfoUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(unsigned char *))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long *))))
#define GetModDateUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
#define CopyUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Handle))))
#define PasteUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Handle))))
#define GetLastLineUPPInfo (kPascalStackBased | RESULT_SIZE(SIZE_CODE(sizeof(long))))
#define GetLineNumberUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
#define GetLineStartUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
#define GetLineEndUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
#define GetLinePosUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
#define InsertUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))))
#define DeleteUPPInfo (kPascalStackBased)
#define SetWindowContentsUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle))))
#define ContentsChangedUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
#define GetFileTextUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(unsigned char *))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Boolean *))))
#define GetFolderUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long *))))
#define OpenSeveralUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(StandardFileReply ***))))
#define CenterDialogUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(DialogPtr))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))))
#define StandardFilterUPPInfo uppModalFilterProcInfo
#define FrameDialogItemUPPInfo uppUserItemProcInfo
#define NewDocumentUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr))))
#define OpenDocumentUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr))))
#define AllocateUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean))))
#define FindPatternUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(char *))) \
| STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(Boolean))))
#define ReportOSErrorUPPInfo (kPascalStackBased)
#define GetPreferenceUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short *))))
#define SetPreferenceUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short *))))
#define StartProgressUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean))))
#define DoProgressUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
#define DoneProgressUPPInfo (kPascalStackBased)
#define GetProjectListUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(ProjectEntry***))))
#define ProjectTextListUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle *))))
#define PresetUndoUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))))
#define SetUndoUPPInfo (kPascalStackBased)
#define OpenFileUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr *))))
#define PrepareUndoUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long))))
#define CommitUndoUPPInfo (kPascalStackBased \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
#define CreateResultsUPPInfo (kPascalStackBased \
| RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Handle))) \
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(WindowPtr *))))
typedef UniversalProcPtr GetWindowContentsProc;
typedef UniversalProcPtr GetSelectionProc;
typedef UniversalProcPtr SetSelectionProc;
typedef UniversalProcPtr GetDocInfoProc;
typedef UniversalProcPtr GetModDateProc;
typedef UniversalProcPtr CopyProc;
typedef UniversalProcPtr PasteProc;
typedef UniversalProcPtr GetLastLineProc;
typedef UniversalProcPtr GetLineNumberProc;
typedef UniversalProcPtr GetLineStartProc;
typedef UniversalProcPtr GetLineEndProc;
typedef UniversalProcPtr GetLinePosProc;
typedef UniversalProcPtr InsertProc;
typedef UniversalProcPtr DeleteProc;
typedef UniversalProcPtr SetWindowContentsProc;
typedef UniversalProcPtr ContentsChangedProc;
typedef UniversalProcPtr GetFileTextProc;
typedef UniversalProcPtr GetFolderProc;
typedef UniversalProcPtr OpenSeveralProc;
typedef UniversalProcPtr CenterDialogProc;
typedef UniversalProcPtr StandardFilterProc;
typedef UniversalProcPtr FrameDialogItemProc;
typedef UniversalProcPtr NewDocumentProc;
typedef UniversalProcPtr OpenDocumentProc;
typedef UniversalProcPtr AllocateProc;
typedef UniversalProcPtr FindPatternProc;
typedef UniversalProcPtr ReportOSErrorProc;
typedef UniversalProcPtr GetPreferenceProc;
typedef UniversalProcPtr SetPreferenceProc;
typedef UniversalProcPtr StartProgressProc;
typedef UniversalProcPtr DoProgressProc;
typedef UniversalProcPtr DoneProgressProc;
typedef UniversalProcPtr GetProjectListProc;
typedef UniversalProcPtr ProjectTextListProc;
typedef UniversalProcPtr PresetUndoProc;
typedef UniversalProcPtr SetUndoProc;
typedef UniversalProcPtr OpenFileProc;
typedef UniversalProcPtr PrepareUndoProc;
typedef UniversalProcPtr CommitUndoProc;
typedef UniversalProcPtr CreateResultsProc;
#define CallGetWindowContents(proc, w) \
(Handle)(CallUniversalProc(proc, GetWindowContentsUPPInfo, (w)))
#define CallGetSelection(proc, selStart, selEnd, firstChar) \
(CallUniversalProc(proc, GetSelectionUPPInfo, (selStart), (selEnd), (firstChar)))
#define CallSetSelection(proc, selStart, selEnd, firstChar) \
(CallUniversalProc(proc, SetSelectionUPPInfo, (selStart), (selEnd), (firstChar)))
#define CallGetDocInfo(proc, w, name, vRefNum, dirID) \
(CallUniversalProc(proc, GetDocInfoUPPInfo, (w), (name), (vRefNum), (dirID)))
#define CallGetModDate(proc, w) \
(CallUniversalProc(proc, GetModDateUPPInfo, (w)))
#define CallCopy(proc) \
(Handle)(CallUniversalProc(proc, CopyUPPInfo))
#define CallPaste(proc, h) \
(CallUniversalProc(proc, PasteUPPInfo, (h)))
#define CallGetLastLine(proc) \
(CallUniversalProc(proc, GetLastLineUPPInfo))
#define CallGetLineNumber(proc, sel) \
(CallUniversalProc(proc, GetLineNumberUPPInfo, (sel)))
#define CallGetLineStart(proc, sel) \
(CallUniversalProc(proc, GetLineStartUPPInfo, (sel)))
#define CallGetLineEnd(proc, sel) \
(CallUniversalProc(proc, GetLineEndUPPInfo, (sel)))
#define CallGetLinePos(proc, sel) \
(CallUniversalProc(proc, GetLinePosUPPInfo, (sel)))
#define CallInsert(proc, text, len) \
(CallUniversalProc(proc, InsertUPPInfo, (text), (len)))
#define CallDelete(proc) \
(CallUniversalProc(proc, DeleteUPPInfo))
#define CallSetWindowContents(proc, w, h) \
(CallUniversalProc(proc, SetWindowContentsUPPInfo, (w), (h)))
#define CallContentsChanged(proc, w) \
(CallUniversalProc(proc, ContentsChangedUPPInfo, (w)))
#define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \
(Handle)(CallUniversalProc(proc, GetFileTextUPPInfo, (vRefNum), (dirID), (name), (canDispose)))
#define CallGetFolder(proc, prompt, vRefNum, dirID) \
(Boolean)(CallUniversalProc(proc, GetFolderUPPInfo, (prompt), (vRefNum), (dirID)))
#define CallOpenSeveral(proc, sort, file_count, files) \
(Boolean)(CallUniversalProc(proc, OpenSeveralUPPInfo, (sort), (file_count), (files)))
#define CallCenterDialog(proc, dialogID) \
(DialogPtr)(CallUniversalProc(proc, CenterDialogUPPInfo, (dialogID)))
#define CallStandardFilter(proc, d, event, item) \
CallModalFilterProc(proc, (d), (event), (item))
#define CallFrameDialogItem(proc, d, item) \
CallUserItemProc(proc, (d), (item))
#define CallNewDocument(proc) \
(WindowPtr)(CallUniversalProc(proc, NewDocumentUPPInfo))
#define CallOpenDocument(proc) \
(WindowPtr)(CallUniversalProc(proc, OpenDocumentUPPInfo))
#define CallAllocate(proc, size, clear) \
(Handle)(CallUniversalProc(proc, AllocateUPPInfo, (size), (clear)))
#define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \
(CallUniversalProc(proc, FindPatternUPPInfo, (text), (text_len), (text_offset), \
(pat), (pat_len), (case_sens)))
#define CallReportOSError(proc, code) \
(CallUniversalProc(proc, ReportOSErrorUPPInfo, (code)))
#define CallGetPreference(proc, prefType, req_len, buffer, act_len) \
(CallUniversalProc(proc, GetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len)))
#define CallSetPreference(proc, prefType, req_len, buffer, act_len) \
(CallUniversalProc(proc, SetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len)))
#define CallStartProgress(proc, str, total, cancel_allowed) \
(CallUniversalProc(proc, StartProgressUPPInfo, (str), (total), (cancel_allowed)))
#define CallDoProgress(proc, done) \
(Boolean)(CallUniversalProc(proc, DoProgressUPPInfo, (done)))
#define CallDoneProgress(proc) \
(CallUniversalProc(proc, DoneProgressUPPInfo))
#define CallGetProjectList(proc, spec, kind, count, entries) \
(Boolean)(CallUniversalProc(proc, GetProjectListUPPInfo, (spec), (kind), (count), (entries)))
#define CallProjectTextList(proc, spec, text) \
(Boolean)(CallUniversalProc(proc, ProjectTextListUPPInfo, (spec), (text)))
#define CallPresetUndo(proc) \
(Boolean)(CallUniversalProc(proc, PresetUndoUPPInfo))
#define CallSetUndo(proc) \
(CallUniversalProc(proc, SetUndoUPPInfo))
#define CallOpenFile(proc, spec, w) \
(Boolean)(CallUniversalProc(proc, OpenFileUPPInfo, (spec), (w)))
#define CallPrepareUndo(proc, undo_start, undo_end, sel_start, sel_end) \
(Boolean)(CallUniversalProc(proc, PrepareUndoUPPInfo, (undo_start), (undo_end), \
(sel_start), (sel_end)))
#define CallCommitUndo(proc, new_end) \
(CallUniversalProc(proc, CommitUndoUPPInfo, (new_end)))
#define CallCreateResults(proc, title, count, results, w) \
(Boolean)(CallUniversalProc(proc, CreateResultsUPPInfo, (title), (count), (results), (w)))
#else
typedef pascal Handle (*GetWindowContentsProc)(WindowPtr w);
typedef pascal void (*GetSelectionProc)(long *selStart, long *selEnd, long *firstChar);
typedef pascal void (*SetSelectionProc)(long selStart, long selEnd, long firstChar);
typedef pascal void (*GetDocInfoProc)(WindowPtr w, Str255 fName, short *vRefNum, long *dirID);
typedef pascal long (*GetModDateProc)(WindowPtr w);
typedef pascal Handle (*CopyProc)(void);
typedef pascal void (*PasteProc)(Handle pasteText);
typedef pascal long (*GetLastLineProc)(void);
typedef pascal long (*GetLineNumberProc)(long selection);
typedef pascal long (*GetLineStartProc)(long selection);
typedef pascal long (*GetLineEndProc)(long selection);
typedef pascal long (*GetLinePosProc)(long line);
typedef pascal void (*InsertProc)(char *text, long len);
typedef pascal void (*DeleteProc)(void);
typedef pascal void (*SetWindowContentsProc)(WindowPtr w, Handle h);
typedef pascal void (*ContentsChangedProc)(WindowPtr w);
typedef pascal Handle (*GetFileTextProc)(short vRefNum, long dirID, Str255 fName, Boolean *canDispose);
typedef pascal Boolean (*GetFolderProc)(Str255 prompt, short *vRefNum, long *dirID);
typedef pascal Boolean (*OpenSeveralProc)(Boolean sort, short *file_count, StandardFileReply ***files);
typedef pascal DialogPtr (*CenterDialogProc)(short dialogID);
typedef pascal Boolean (*StandardFilterProc)(DialogPtr d, EventRecord *event, short *item);
typedef pascal void (*FrameDialogItemProc)(DialogPtr d, short item);
typedef pascal WindowPtr (*NewDocumentProc)(void);
typedef pascal WindowPtr (*OpenDocumentProc)(void);
typedef pascal Handle (*AllocateProc)(long size, Boolean clear);
typedef pascal long (*FindPatternProc)(char *text, long text_len, long text_offset,
char *pat, long pat_len,
Boolean case_sensitive);
typedef pascal void (*ReportOSErrorProc)(short code);
typedef pascal void (*GetPreferenceProc)(ResType prefType, short req_len, void *buffer, short *act_len);
typedef pascal void (*SetPreferenceProc)(ResType prefType, short req_len, void *buffer, short *act_len);
typedef pascal void (*StartProgressProc)(Str255 str, long total, Boolean cancel_allowed);
typedef pascal Boolean (*DoProgressProc)(long done);
typedef pascal void (*DoneProgressProc)(void);
typedef pascal Boolean (*GetProjectListProc)(FSSpec *spec, short *kind, short *count, ProjectEntry ***entries);
typedef pascal Boolean (*ProjectTextListProc)(FSSpec *spec, Handle *text);
typedef pascal Boolean (*PresetUndoProc)(void);
typedef pascal void (*SetUndoProc)(void);
typedef pascal Boolean (*OpenFileProc)(FSSpec *spec, WindowPtr *w);
typedef pascal Boolean (*PrepareUndoProc)(long undo_start, long undo_end,
long sel_start, long sel_end);
typedef pascal void (*CommitUndoProc)(long new_end);
typedef pascal Boolean (*CreateResultsProc)(Str255 title, short count, Handle results, WindowPtr *w);
#define CallGetWindowContents(proc, w) \
((proc))((w))
#define CallGetSelection(proc, selStart, selEnd, firstChar) \
((proc))((selStart), (selEnd), (firstChar))
#define CallSetSelection(proc, selStart, selEnd, firstChar) \
((proc))((selStart), (selEnd), (firstChar))
#define CallGetDocInfo(proc, w, name, vRefNum, dirID) \
((proc))((w), (name), (vRefNum), (dirID))
#define CallGetModDate(proc, w) \
((proc))((w))
#define CallCopy(proc) \
((proc))()
#define CallPaste(proc, h) \
((proc))((h))
#define CallGetLastLine(proc) \
((proc))()
#define CallGetLineNumber(proc, sel) \
((proc))((sel))
#define CallGetLineStart(proc, sel) \
((proc))((sel))
#define CallGetLineEnd(proc, sel) \
((proc))((sel))
#define CallGetLinePos(proc, sel) \
((proc))((sel))
#define CallInsert(proc, text, len) \
((proc))((text), (len))
#define CallDelete(proc) \
((proc))()
#define CallSetWindowContents(proc, w, h) \
((proc))((w), (h))
#define CallContentsChanged(proc, w) \
((proc))((w))
#define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \
((proc))((vRefNum), (dirID), (name), (canDispose))
#define CallGetFolder(proc, prompt, vRefNum, dirID) \
((proc))((prompt), (vRefNum), (dirID))
#define CallOpenSeveral(proc, sort, file_count, files) \
((proc))((sort), (file_count), (files))
#define CallCenterDialog(proc, dialogID) \
((proc))((dialogID))
#define CallStandardFilter(proc, d, event, item) \
((proc))((d), (event), (item))
#define CallFrameDialogItem(proc, d, item) \
((proc))((d), (item))
#define CallNewDocument(proc) \
((proc))()
#define CallOpenDocument(proc) \
((proc))()
#define CallAllocate(proc, size, clear) \
((proc))((size), (clear))
#define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \
((proc))((text), (text_len), (text_offset), (pat), (pat_len), (case_sens))
#define CallReportOSError(proc, code) \
((proc))((code))
#define CallGetPreference(proc, prefType, req_len, buffer, act_len) \
((proc))((prefType), (req_len), (buffer), (act_len))
#define CallSetPreference(proc, prefType, req_len, buffer, act_len) \
((proc))((prefType), (req_len), (buffer), (act_len))
#define CallStartProgress(proc, str, total, cancel_allowed) \
((proc))((str), (total), (cancel_allowed))
#define CallDoProgress(proc, done) \
((proc))((done))
#define CallDoneProgress(proc) \
((proc))()
#define CallGetProjectList(proc, spec, kind, count, entries) \
((proc))((spec), (kind), (count), (entries))
#define CallProjectTextList(proc, spec, text) \
((proc))((spec), (text))
#define CallPresetUndo(proc) \
((proc))()
#define CallSetUndo(proc) \
((proc))()
#define CallOpenFile(proc, spec, w) \
((proc))((spec), (w))
#define CallPrepareUndo(proc, undo_start, undo_end, sel_start, sel_end) \
((proc))((undo_start), (undo_end), (sel_start), (sel_end))
#define CallCommitUndo(proc, new_end) \
((proc))((new_end))
#define CallCreateResults(proc, title, count, results, w) \
((proc))((title), (count), (results), (w))
#endif
typedef struct
{
short version;
// version 1 callbacks
GetWindowContentsProc GetWindowContents;
GetSelectionProc GetSelection;
SetSelectionProc SetSelection;
GetDocInfoProc GetDocInfo;
GetModDateProc GetModDate;
CopyProc Copy;
PasteProc Paste;
// version 2 callbacks
/* Text-Editing stuff */
GetLastLineProc GetLastLine;
GetLineNumberProc GetLineNumber;
GetLineStartProc GetLineStart;
GetLineEndProc GetLineEnd;
GetLinePosProc GetLinePos;
InsertProc Insert;
DeleteProc Delete;
/* Getting and Setting window text */
SetWindowContentsProc SetWindowContents;
ContentsChangedProc ContentsChanged;
/* Reading file text */
GetFileTextProc GetFileText;
/* Direct user-interface calls */
GetFolderProc GetFolder;
OpenSeveralProc OpenSeveral;
CenterDialogProc CenterDialog;
StandardFilterProc StandardFilter;
FrameDialogItemProc FrameDialogItem;
NewDocumentProc NewDocument;
OpenDocumentProc OpenDocument;
/* Utility Routines */
AllocateProc Allocate;
FindPatternProc FindPattern;
ReportOSErrorProc ReportOSError;
/* Preference routines */
GetPreferenceProc GetPreference;
SetPreferenceProc SetPreference;
/* Progress routines */
StartProgressProc StartProgress;
DoProgressProc DoProgress;
DoneProgressProc DoneProgress;
// Version 3 callbacks
GetProjectListProc GetProjectList;
ProjectTextListProc ProjectTextList;
// version 4 callbacks
PresetUndoProc PresetUndo;
SetUndoProc SetUndo;
OpenFileProc OpenFile;
// version 5 callbacks
PrepareUndoProc PrepareUndo;
CommitUndoProc CommitUndo;
CreateResultsProc CreateResults;
} ExternalCallbackBlock;
#if defined(powerc) || defined (__powerc)
#pragma options align=reset
#endif
/*
'main' for a BBXT is declared:
pascal void main(ExternalCallbackBlock *callbacks, WindowPtr w); [C]
The 'new' calling convention, which passes more information
and allows scriptability, is this:
pascal OSErr main(ExternalCallbackBlock *callbacks, WindowPtr w, long flags, AppleEvent *event, AppleEvent *reply);
*/