home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Add-Ons / BBEdit / MacBob 1.0ß2 / Source / BBEdit.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-29  |  20.9 KB  |  610 lines  |  [TEXT/KAHL]

  1. #pragma once
  2.  
  3. //#include <Dialogs.h>
  4. //#include <StandardFile.h>
  5.  
  6. #define    _BBEditExtention_        1
  7.  
  8. #if defined(powerc) || defined (__powerc)
  9. #pragma options align=mac68k
  10. #endif
  11.  
  12. struct ProjectEntry {
  13.     FSSpec        spec;    //    designates file on disk
  14.     long        key;    //    reserved for future expansion
  15.  
  16.     char        tree;    //    0 for absolute, 1 for project, 2 for system
  17.     Boolean    found;    //    FALSE if file couldn't be located; if so, all other info is moot
  18.  
  19.     OSType        type;    //    file type of found file
  20.     OSType        crtr;    //    signature of found file's creator
  21.     
  22.     short        spare0;    //    reserved for future expansion
  23.     long        spare1;
  24. };
  25.  
  26. enum {
  27.     kNeitherTree, kProjectTree, kSystemTree
  28. };
  29.  
  30. #define    kCurrentExternalVersion        4    //    current version of callbacks
  31.  
  32. //    Universal callback interfaces
  33.  
  34. #if USESROUTINEDESCRIPTORS
  35.  
  36. #define ExtensionUPPInfo (kPascalStackBased \
  37.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(BBCallbackPtr))) \
  38.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr))))
  39.  
  40. #define GetWindowContentsUPPInfo (kPascalStackBased \
  41.                             | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
  42.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
  43.                             
  44. #define GetSelectionUPPInfo (kPascalStackBased \
  45.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long*))) \
  46.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long*))) \
  47.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long*))))
  48.                             
  49. #define SetSelectionUPPInfo (kPascalStackBased \
  50.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \
  51.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
  52.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))))
  53.  
  54. #define GetDocInfoUPPInfo (kPascalStackBased \
  55.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \
  56.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(unsigned char*))) \
  57.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short*))) \
  58.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long*))))
  59.  
  60. #define GetModDateUPPInfo (kPascalStackBased \
  61.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  62.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
  63.                             
  64. #define CopyUPPInfo (kPascalStackBased \
  65.                             | RESULT_SIZE(SIZE_CODE(sizeof(Handle))))
  66.                             
  67. #define PasteUPPInfo (kPascalStackBased \
  68.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Handle))))
  69.                             
  70. #define GetLastLineUPPInfo (kPascalStackBased | RESULT_SIZE(SIZE_CODE(sizeof(long))))
  71.  
  72. #define GetLineNumberUPPInfo (kPascalStackBased \
  73.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  74.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  75.                             
  76. #define GetLineStartUPPInfo (kPascalStackBased \
  77.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  78.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  79.                             
  80. #define GetLineEndUPPInfo (kPascalStackBased \
  81.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  82.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  83.  
  84. #define GetLinePosUPPInfo (kPascalStackBased \
  85.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  86.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  87.  
  88. #define InsertUPPInfo (kPascalStackBased \
  89.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char*))) \
  90.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))))
  91.                             
  92. #define DeleteUPPInfo (kPascalStackBased)
  93.  
  94. #define SetWindowContentsUPPInfo (kPascalStackBased \
  95.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \
  96.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle))))
  97.                             
  98. #define ContentsChangedUPPInfo (kPascalStackBased \
  99.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))))
  100.                             
  101. #define GetFileTextUPPInfo (kPascalStackBased \
  102.                             | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
  103.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))) \
  104.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
  105.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(unsigned char*))) \
  106.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Boolean*))))
  107.                             
  108. #define GetFolderUPPInfo (kPascalStackBased \
  109.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  110.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char*))) \
  111.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short*))) \
  112.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long*))))
  113.                             
  114. #define OpenSeveralUPPInfo (kPascalStackBased \
  115.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  116.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Boolean))) \
  117.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short*))) \
  118.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(StandardFileReply***))))
  119.                             
  120. #define CenterDialogUPPInfo (kPascalStackBased \
  121.                             | RESULT_SIZE(SIZE_CODE(sizeof(DialogPtr))) \
  122.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))))
  123.                             
  124. #define StandardFilterUPPInfo uppModalFilterProcInfo
  125.                             
  126. #define FrameDialogItemUPPInfo uppUserItemProcInfo
  127.  
  128. #define NewDocumentUPPInfo    (kPascalStackBased \
  129.                             | RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr))))
  130.                             
  131. #define OpenDocumentUPPInfo    (kPascalStackBased \
  132.                             | RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr))))
  133.                             
  134. #define AllocateUPPInfo        (kPascalStackBased \
  135.                             | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \
  136.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \
  137.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean))))
  138.                             
  139. #define FindPatternUPPInfo    (kPascalStackBased \
  140.                             | RESULT_SIZE(SIZE_CODE(sizeof(long))) \
  141.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char*))) \
  142.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
  143.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \
  144.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(char*))) \
  145.                             | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))) \
  146.                             | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(Boolean))))
  147.  
  148. #define ReportOSErrorUPPInfo    (kPascalStackBased)
  149.  
  150. #define GetPreferenceUPPInfo (kPascalStackBased \
  151.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \
  152.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \
  153.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void*))) \
  154.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short*))))
  155.                             
  156. #define SetPreferenceUPPInfo (kPascalStackBased \
  157.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \
  158.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \
  159.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void*))) \
  160.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short*))))
  161.  
  162. #define StartProgressUPPInfo (kPascalStackBased \
  163.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char*))) \
  164.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \
  165.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean))))
  166.                             
  167. #define DoProgressUPPInfo    (kPascalStackBased \
  168.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  169.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))))
  170.  
  171. #define DoneProgressUPPInfo    (kPascalStackBased)
  172.  
  173. #define GetProjectListUPPInfo (kPascalStackBased \
  174.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  175.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec*))) \
  176.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short*))) \
  177.                             | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short*))) \
  178.                             | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(ProjectEntry***))))
  179.                             
  180. #define ProjectTextListUPPInfo (kPascalStackBased \
  181.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  182.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec*))) \
  183.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle*))))
  184.  
  185. #define PresetUndoUPPInfo    (kPascalStackBased \
  186.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))))
  187.                             
  188. #define SetUndoUPPInfo        (kPascalStackBased)
  189.  
  190. #define OpenFileUPPInfo        (kPascalStackBased \
  191.                             | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \
  192.                             | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec*))) \
  193.                             | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr*))))
  194.  
  195. typedef    UniversalProcPtr    GetWindowContentsProc;
  196. typedef    UniversalProcPtr    GetSelectionProc;
  197. typedef    UniversalProcPtr    SetSelectionProc;
  198. typedef    UniversalProcPtr    GetDocInfoProc;
  199. typedef    UniversalProcPtr    GetModDateProc;
  200. typedef    UniversalProcPtr    CopyProc;
  201. typedef    UniversalProcPtr    PasteProc;
  202.     
  203. typedef    UniversalProcPtr    GetLastLineProc;
  204. typedef    UniversalProcPtr    GetLineNumberProc;
  205. typedef    UniversalProcPtr    GetLineStartProc;
  206. typedef    UniversalProcPtr    GetLineEndProc;
  207. typedef    UniversalProcPtr    GetLinePosProc;
  208.     
  209. typedef    UniversalProcPtr    InsertProc;
  210. typedef    UniversalProcPtr    DeleteProc;
  211.     
  212. typedef    UniversalProcPtr    SetWindowContentsProc;
  213. typedef    UniversalProcPtr    ContentsChangedProc;
  214.     
  215. typedef    UniversalProcPtr    GetFileTextProc;
  216.  
  217. typedef    UniversalProcPtr    GetFolderProc;
  218. typedef    UniversalProcPtr    OpenSeveralProc;
  219.     
  220. typedef    UniversalProcPtr    CenterDialogProc;
  221. typedef    UniversalProcPtr    StandardFilterProc;
  222. typedef    UniversalProcPtr    FrameDialogItemProc;
  223.     
  224. typedef    UniversalProcPtr    NewDocumentProc;
  225. typedef    UniversalProcPtr    OpenDocumentProc;
  226.  
  227. typedef    UniversalProcPtr    AllocateProc;
  228. typedef    UniversalProcPtr    FindPatternProc;
  229.     
  230. typedef    UniversalProcPtr    ReportOSErrorProc;
  231.     
  232. typedef    UniversalProcPtr    GetPreferenceProc;
  233. typedef    UniversalProcPtr    SetPreferenceProc;
  234.  
  235. typedef    UniversalProcPtr    StartProgressProc;
  236. typedef    UniversalProcPtr    DoProgressProc;
  237. typedef    UniversalProcPtr    DoneProgressProc;
  238.     
  239. typedef    UniversalProcPtr    GetProjectListProc;
  240. typedef    UniversalProcPtr    ProjectTextListProc;
  241.         
  242. typedef    UniversalProcPtr    PresetUndoProc;
  243. typedef    UniversalProcPtr    SetUndoProc;
  244.     
  245. typedef    UniversalProcPtr    OpenFileProc;
  246.  
  247. #define CallGetWindowContents(proc, w) \
  248.     (Handle)(CallUniversalProc(proc, GetWindowContentsUPPInfo, (w)))
  249.     
  250. #define CallGetSelection(proc, selStart, selEnd, firstChar) \
  251.     (CallUniversalProc(proc, GetSelectionUPPInfo, (selStart), (selEnd), (firstChar)))
  252.     
  253. #define CallSetSelection(proc, selStart, selEnd, firstChar) \
  254.     (CallUniversalProc(proc, SetSelectionUPPInfo, (selStart), (selEnd), (firstChar)))
  255.     
  256. #define CallGetDocInfo(proc, w, name, vRefNum, dirID) \
  257.     (CallUniversalProc(proc, GetDocInfoUPPInfo, (w), (name), (vRefNum), (dirID))
  258.     
  259. #define CallGetModDate(proc, w) \
  260.     (CallUniversalProc(proc, GetModDateUPPInfo, (w)))
  261.     
  262. #define CallCopy(proc) \
  263.     (Handle)(CallUniversalProc(proc, CopyUPPInfo))
  264.     
  265. #define CallPaste(proc, h) \
  266.     (CallUniversalProc(proc, PasteUPPInfo, (h)))
  267.     
  268. #define CallGetLastLine(proc) \
  269.     (CallUniversalProc(proc, GetLastLineUPPInfo))
  270.     
  271. #define CallGetLineNumber(proc, sel) \
  272.     (CallUniversalProc(proc, GetLineNumberUPPInfo, (sel)))
  273.     
  274. #define CallGetLineStart(proc, sel) \
  275.     (CallUniversalProc(proc, GetLineStartUPPInfo, (sel)))
  276.  
  277. #define CallGetLineEnd(proc, sel) \
  278.     (CallUniversalProc(proc, GetLineEndUPPInfo, (sel)))
  279.  
  280. #define CallGetLinePos(proc, sel) \
  281.     (CallUniversalProc(proc, GetLinePosUPPInfo, (sel)))
  282.  
  283. #define CallInsert(proc, text, len) \
  284.     (CallUniversalProc(proc, InsertUPPInfo, (text), (len)))
  285.     
  286. #define CallDelete(proc) \
  287.     (CallUniversalProc(proc, DeleteUPPInfo))
  288.     
  289. #define CallSetWindowContents(proc, w, h) \
  290.     (CallUniversalProc(proc, SetWindowContentsUPPInfo, (w), (h)))
  291.     
  292. #define CallContentsChanged(proc, w) \
  293.     (CallUniversalProc(proc, ContentsChangedUPPInfo, (w)))
  294.     
  295. #define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \
  296.     (Handle)(CallUniversalProc(proc, GetFileTextUPPInfo, (vRefNum), (dirID), (name), (canDispose)))
  297.     
  298. #define CallGetFolder(proc, prompt, vRefNum, dirID) \
  299.     (Boolean)(CallUniversalProc(proc, GetFolderUPPInfo, (prompt), (vRefNum), (dirID)))
  300.     
  301. #define CallOpenSeveral(proc, sort, file_count, files) \
  302.     (Boolean)(CallUniversalProc(proc, OpenSeveralUPPInfo, (sort), (file_count), (files)))
  303.     
  304. #define CallCenterDialog(proc, dialogID) \
  305.     (DialogPtr)(CallUniversalProc(proc, CenterDialogUPPInfo, (dialogID)))
  306.     
  307. #define CallStandardFilter(proc, d, event, item) \
  308.     CallModalFilterProc(proc, (d), (event), (item))
  309.  
  310. #define CallFrameDialogItem(proc, d, item) \
  311.     CallUserItemProc(proc, (d), (item))
  312.     
  313. #define CallNewDocument(proc) \
  314.     (WindowPtr)(CallUniversalProc(proc, NewDocumentUPPInfo))
  315.     
  316. #define CallOpenDocument(proc) \
  317.     (WindowPtr)(CallUniversalProc(proc, OpenDocumentUPPInfo))
  318.     
  319. #define CallAllocate(proc, size, clear) \
  320.     (Handle)(CallUniversalProc(proc, AllocateUPPInfo, (size), (clear)))
  321.     
  322. #define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \
  323.     (CallUniversalProc(proc, FindPatternUPPInfo, (text), (text_len), (text_offset), \
  324.                         (pat), (pat_len), (case_sens)))
  325.                         
  326. #define CallReportOSError(proc, code) \
  327.     (CallUniversalProc(proc, ReportOSErrorUPPInfo, (code)))
  328.     
  329. #define CallGetPreference(proc, prefType, req_len, buffer, act_len) \
  330.     (CallUniversalProc(proc, GetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len)))
  331.     
  332. #define CallSetPreference(proc, prefType, req_len, buffer, act_len) \
  333.     (CallUniversalProc(proc, SetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len)))
  334.  
  335. #define CallStartProgress(proc, str, total, cancel_allowed) \
  336.     (CallUniversalProc(proc, StartProgressUPPInfo, (str), (total), (cancel_allowed)))
  337.     
  338. #define CallDoProgress(proc, done) \
  339.     (Boolean)(CallUniversalProc(proc, DoProgressUPPInfo, (done)))
  340.     
  341. #define CallDoneProgress(proc) \
  342.     (CallUniversalProc(proc, DoneProgressUPPInfo))
  343.     
  344. #define CallGetProjectList(proc, spec, kind, count, entries) \
  345.     (Boolean)(CallUniversalProc(proc, GetProjectListUPPInfo, (spec), (kind), (count), (entries)))
  346.     
  347. #define CallProjectTextList(proc, spec, text) \
  348.     (Boolean)(CallUniversalProc(proc, ProjectTextListUPPInfo, (spec), (text)))
  349.     
  350. #define CallPresetUndo(proc) \
  351.     (Boolean)(CallUniversalProc(proc, PresetUndoUPPInfo))
  352.     
  353. #define CallSetUndo(proc) \
  354.     (CallUniversalProc(proc))
  355.     
  356. #define CallOpenFile(proc, spec, w) \
  357.     (Boolean)(CallUniversalProc(proc, OpenFileUPPInfo, (spec), (w)))
  358.     
  359. #else
  360.  
  361. typedef pascal Handle    (*GetWindowContentsProc)(WindowPtr w);
  362. typedef pascal void        (*GetSelectionProc)(long* selStart, long* selEnd, long* firstChar);
  363. typedef pascal void        (*SetSelectionProc)(long selStart, long selEnd, long firstChar);
  364. typedef pascal void        (*GetDocInfoProc)(WindowPtr w, Str255 fName, short* vRefNum, long* dirID);
  365. typedef pascal long        (*GetModDateProc)(WindowPtr w);
  366. typedef pascal Handle    (*CopyProc)(void);
  367. typedef pascal void        (*PasteProc)(Handle pasteText);
  368.  
  369. typedef pascal long        (*GetLastLineProc)(void);
  370. typedef pascal long        (*GetLineNumberProc)(long selection);
  371. typedef pascal long        (*GetLineStartProc)(long selection);
  372. typedef pascal long        (*GetLineEndProc)(long selection);
  373. typedef pascal long        (*GetLinePosProc)(long line);
  374.  
  375. typedef pascal void        (*InsertProc)(char* text, long len);
  376. typedef pascal void        (*DeleteProc)(void);
  377.  
  378. typedef pascal void        (*SetWindowContentsProc)(WindowPtr w, Handle h);
  379. typedef pascal void        (*ContentsChangedProc)(WindowPtr w);
  380.  
  381. typedef pascal Handle    (*GetFileTextProc)(short vRefNum, long dirID, Str255 fName, Boolean* canDispose);
  382.  
  383. typedef pascal Boolean    (*GetFolderProc)(Str255 prompt, short* vRefNum, long* dirID);
  384. typedef pascal Boolean    (*OpenSeveralProc)(Boolean sort, short* file_count, StandardFileReply*** files);
  385.  
  386. typedef pascal DialogPtr    (*CenterDialogProc)(short dialogID);
  387. typedef pascal Boolean    (*StandardFilterProc)(DialogPtr d, EventRecord* event, short* item);
  388. typedef pascal void        (*FrameDialogItemProc)(DialogPtr d, short item);
  389.  
  390. typedef pascal WindowPtr    (*NewDocumentProc)(void);
  391. typedef pascal WindowPtr    (*OpenDocumentProc)(void);
  392.  
  393. typedef pascal Handle    (*AllocateProc)(long size, Boolean clear);
  394. typedef pascal long        (*FindPatternProc)(char* text, long text_len, long text_offset, 
  395.                              char* pat, long pat_len, Boolean case_sensitive);
  396.  
  397. typedef pascal void        (*ReportOSErrorProc)(short code);
  398.  
  399. typedef pascal void        (*GetPreferenceProc)(ResType prefType, short req_len, void* buffer, short* act_len);
  400. typedef pascal void        (*SetPreferenceProc)(ResType prefType, short req_len, void* buffer, short* act_len);
  401.  
  402. typedef pascal void        (*StartProgressProc)(Str255 str, long total, Boolean cancel_allowed);
  403. typedef pascal Boolean    (*DoProgressProc)(long done);
  404. typedef pascal void        (*DoneProgressProc)(void);
  405.  
  406. typedef pascal Boolean    (*GetProjectListProc)(FSSpec* spec, short* kind, short* count, ProjectEntry*** entries);
  407. typedef pascal Boolean    (*ProjectTextListProc)(FSSpec* spec, Handle* text);
  408.  
  409. typedef pascal Boolean    (*PresetUndoProc)(void);
  410. typedef pascal void        (*SetUndoProc)(void);
  411.  
  412. typedef pascal Boolean    (*OpenFileProc)(FSSpec* spec, WindowPtr* w);
  413.  
  414.  
  415. #define CallGetWindowContents(proc, w) \
  416.     ((GetWindowContentsProc)proc)((w))
  417.     
  418. #define CallGetSelection(proc, selStart, selEnd, firstChar) \
  419.     ((GetSelectionProc)proc)((selStart), (selEnd), (firstChar))
  420.     
  421. #define CallSetSelection(proc, selStart, selEnd, firstChar) \
  422.     ((SetSelectionProc)proc)((selStart), (selEnd), (firstChar))
  423.     
  424. #define CallGetDocInfo(proc, w, name, vRefNum, dirID) \
  425.     ((GetDocInfoProc)(proc))((w), (name), (vRefNum), (dirID))
  426.     
  427. #define CallGetModDate(proc, w) \
  428.     ((GetModDateProc)(proc))((w))
  429.     
  430. #define CallCopy(proc) \
  431.     ((CopyProc)(proc))
  432.     
  433. #define CallPaste(proc, h) \
  434.     ((PasteProc)(proc))((h))
  435.     
  436. #define CallGetLastLine(proc) \
  437.     ((GetLastLineProc)(proc))()
  438.     
  439. #define CallGetLineNumber(proc, sel) \
  440.     ((GetLineNumberProc)(proc))((sel))
  441.     
  442. #define CallGetLineStart(proc, sel) \
  443.     ((GetLineStartProc)(proc))((sel))
  444.     
  445. #define CallGetLineEnd(proc, sel) \
  446.     ((GetLineEndProc)(proc))((sel))
  447.  
  448. #define CallGetLinePos(proc, sel) \
  449.     ((GetLinePosProc)(proc))((sel))
  450.  
  451. #define CallInsert(proc, text, len) \
  452.     ((InsertProc)(proc))((text), (len))
  453.     
  454. #define CallDelete(proc) \
  455.     ((DeleteProc)(proc))()
  456.     
  457. #define CallSetWindowContents(proc, w, h) \
  458.     ((SetWindowContentsProc)(proc))((w), (h))
  459.     
  460. #define CallContentsChanged(proc, w) \
  461.     ((ContentsChangedProc)(proc))((w))
  462.     
  463. #define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \
  464.     ((GetFileTextProc)(proc))((vRefNum), (dirID), (name), (canDispose))
  465.     
  466. #define CallGetFolder(proc, prompt, vRefNum, dirID) \
  467.     ((GetFolderProc)(proc))((prompt), (vRefNum), (dirID))
  468.     
  469. #define CallOpenSeveral(proc, sort, file_count, files) \
  470.     ((OpenSeveralProc)(proc))((sort), (file_count), (files))
  471.     
  472. #define CallCenterDialog(proc, dialogID) \
  473.     ((CenterDialogProc)(proc))((dialogID))
  474.     
  475. #define CallStandardFilter(proc, d, event, item) \
  476.     ((ModalFilterProcPtr)(proc))((d), (event), (item))
  477.  
  478. #define CallFrameDialogItem(proc, d, item) \
  479.     ((UserItemProcPtr)(proc))((d), (item))
  480.     
  481. #define CallNewDocument(proc) \
  482.     ((NewDocumentProc)(proc))()
  483.     
  484. #define CallOpenDocument(proc) \
  485.     ((OpenDocumentProc)(proc))()
  486.     
  487. #define CallAllocate(proc, size, clear) \
  488.     ((AllocateProc)(proc))((size), (clear))
  489.     
  490. #define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \
  491.     ((FindPatternProc)(proc))((text), (text_len), (text_offset), (pat), (pat_len), (case_sens))
  492.                         
  493. #define CallReportOSError(proc, code) \
  494.     ((ReportOSErrorProc)(proc))((code))
  495.     
  496. #define CallGetPreference(proc, prefType, req_len, buffer, act_len) \
  497.     ((GetPreferenceProc)(proc))((prefType), (req_len), (buffer), (act_len))
  498.     
  499. #define CallSetPreference(proc, prefType, req_len, buffer, act_len) \
  500.     ((SetPreferenceProc)(proc))((prefType), (req_len), (buffer), (act_len))
  501.  
  502. #define CallStartProgress(proc, str, total, cancel_allowed) \
  503.     ((StartProgressProc)(proc))((str), (total), (cancel_allowed))
  504.     
  505. #define CallDoProgress(proc, done) \
  506.     ((DoProgressProc)(proc))((done))
  507.     
  508. #define CallDoneProgress(proc) \
  509.     ((DoneProgressProc)(proc))()
  510.     
  511. #define CallGetProjectList(proc, spec, kind, count, entries) \
  512.     ((GetProjectListProc)(proc))((spec), (kind), (count), (entries))
  513.     
  514. #define CallProjectTextList(proc, spec, text) \
  515.     ((ProjectTextListProc)(proc))((spec), (text))
  516.     
  517. #define CallPresetUndo(proc) \
  518.     ((PresetUndoProc)(proc))()
  519.     
  520. #define CallSetUndo(proc) \
  521.     ((SetUndoProc)(proc))()
  522.     
  523. #define CallOpenFile(proc, spec, w) \
  524.     ((OpenFileProc)(proc))((spec), (w))
  525.  
  526. #endif
  527.  
  528.  
  529. typedef struct {
  530.     short                    version;
  531.  
  532.     //    Version 1 callbacks
  533.  
  534.     GetWindowContentsProc    GetWindowContents;
  535.     GetSelectionProc        GetSelection;
  536.     SetSelectionProc        SetSelection;
  537.     GetDocInfoProc            GetDocInfo;
  538.     GetModDateProc            GetModDate;
  539.     CopyProc                Copy;
  540.     PasteProc                Paste;
  541.  
  542.     //    Version 2 callbacks
  543.  
  544.     //    Text-Editing stuff
  545.     GetLastLineProc            GetLastLine;
  546.     GetLineNumberProc        GetLineNumber;
  547.     GetLineStartProc        GetLineStart;
  548.     GetLineEndProc            GetLineEnd;
  549.     GetLinePosProc            GetLinePos;
  550.  
  551.     InsertProc                Insert;
  552.     DeleteProc                Delete;
  553.  
  554.     //    Getting and Setting window text
  555.     SetWindowContentsProc    SetWindowContents;
  556.     ContentsChangedProc        ContentsChanged;
  557.  
  558.     //    Reading file text
  559.     GetFileTextProc            GetFileText;
  560.  
  561.     //    Direct user-interface calls
  562.     GetFolderProc            GetFolder;
  563.     OpenSeveralProc            OpenSeveral;
  564.  
  565.     CenterDialogProc        CenterDialog;
  566.     StandardFilterProc        StandardFilter;
  567.     FrameDialogItemProc        FrameDialogItem;
  568.  
  569.     NewDocumentProc            NewDocument;
  570.     OpenDocumentProc        OpenDocument;
  571.  
  572.     //    Utility Routines
  573.     AllocateProc            Allocate;
  574.     FindPatternProc            FindPattern;
  575.  
  576.     ReportOSErrorProc        ReportOSError;
  577.  
  578.     //    Preference routines
  579.     GetPreferenceProc        GetPreference;
  580.     SetPreferenceProc        SetPreference;
  581.  
  582.     //    Progress routines
  583.     StartProgressProc        StartProgress;
  584.     DoProgressProc            DoProgress;
  585.     DoneProgressProc        DoneProgress;
  586.  
  587.     //    Version 3 callbacks
  588.  
  589.     GetProjectListProc        GetProjectList;
  590.     ProjectTextListProc        ProjectTextList;
  591.  
  592.     //    Version 4 callbacks
  593.  
  594.     PresetUndoProc            PresetUndo;
  595.     SetUndoProc                SetUndo;
  596.  
  597.     OpenFileProc            OpenFile;
  598. } *BBCallbackPtr;
  599.  
  600. #if defined(powerc) || defined (__powerc)
  601. #pragma options align=reset
  602. #endif
  603.  
  604. /*    
  605.     'main' for a BBXT is declared:
  606.  
  607. pascal void main(BBCallbackPtr* callbacks, WindowPtr w);
  608.  
  609. */
  610.