summaryrefslogtreecommitdiffstats
path: root/Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h')
-rw-r--r--Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h716
1 files changed, 716 insertions, 0 deletions
diff --git a/Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h b/Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h
new file mode 100644
index 0000000..51d206d
--- /dev/null
+++ b/Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h
@@ -0,0 +1,716 @@
+#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);
+*/