home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 2.0 Developer Kit / QuickTime 2.0 Developer Kit.iso / mac / MAC / Programming Stuff / Interfaces / CIncludes / TextEdit.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-11  |  28.1 KB  |  693 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        TextEdit.h
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a3  ETO #16, MPW prerelease.  Friday, November 11, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. */
  16.  
  17. #ifndef __TEXTEDIT__
  18. #define __TEXTEDIT__
  19.  
  20.  
  21. #ifndef __QUICKDRAW__
  22. #include <Quickdraw.h>
  23. #endif
  24. /*    #include <Types.h>                                            */
  25. /*        #include <ConditionalMacros.h>                            */
  26. /*    #include <MixedMode.h>                                        */
  27. /*    #include <QuickdrawText.h>                                    */
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. #if GENERATINGPOWERPC
  34. #pragma options align=mac68k
  35. #endif
  36.  
  37. #ifdef __CFM68K__
  38. #pragma lib_export on
  39. #endif
  40.  
  41. typedef struct TERec TERec, *TEPtr, **TEHandle;
  42.  
  43. /*
  44.     The following ProcPtrs cannot be written in or called from a high-level 
  45.     language without the help of mixed mode or assembly glue because they 
  46.     use the following parameter-passing conventions:
  47.  
  48.     typedef pascal void (*HighHookProcPtr)(const Rect *r, TEPtr pTE);
  49.     typedef pascal void (*CaretHookProcPtr)(const Rect *r, TEPtr pTE);
  50.  
  51.         In:
  52.             =>     r                        on stack
  53.             =>    pTE                        A3.L
  54.         Out:
  55.             none
  56.  
  57.     typedef pascal Boolean (*EOLHookProcPtr)(char theChar, TEPtr pTE, TEHandle hTE);
  58.  
  59.         In:
  60.             =>     theChar                    D0.B
  61.             =>    pTE                        A3.L
  62.             =>    hTE                        A4.L
  63.         Out:
  64.             <=    Boolean                    Z bit of the CCR
  65.  
  66.     typedef pascal unsigned short (*WidthHookProcPtr)(unsigned short textLen,
  67.      unsigned short textOffset, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  68.     typedef pascal unsigned short (*TextWidthHookProcPtr)(unsigned short textLen,
  69.      unsigned short textOffset, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  70.  
  71.         In:
  72.             =>     textLen                    D0.W
  73.             =>    textOffset                D1.W
  74.             =>    textBufferPtr            A0.L
  75.             =>    pTE                        A3.L
  76.             =>    hTE                        A4.L
  77.         Out:
  78.             <=    unsigned short            D1.W
  79.  
  80.     typedef pascal unsigned short (*NWidthHookProcPtr)(unsigned short styleRunLen,
  81.      unsigned short styleRunOffset, short slop, short direction, void *textBufferPtr, 
  82.      short *lineStart, TEPtr pTE, TEHandle hTE);
  83.  
  84.         In:
  85.             =>     styleRunLen                D0.W
  86.             =>    styleRunOffset            D1.W
  87.             =>    slop                    D2.W (low)
  88.             =>    direction                D2.W (high)
  89.             =>    textBufferPtr            A0.L
  90.             =>    lineStart                A2.L
  91.             =>    pTE                        A3.L
  92.             =>    hTE                        A4.L
  93.         Out:
  94.             <=    unsigned short            D1.W
  95.  
  96.     typedef pascal void (*DrawHookProcPtr)(unsigned short textOffset, unsigned short drawLen,
  97.      void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  98.  
  99.         In:
  100.             =>     textOffset                D0.W
  101.             =>    drawLen                    D1.W
  102.             =>    textBufferPtr            A0.L
  103.             =>    pTE                        A3.L
  104.             =>    hTE                        A4.L
  105.         Out:
  106.             none
  107.  
  108.     typedef pascal Boolean (*HitTestHookProcPtr)(unsigned short styleRunLen,
  109.      unsigned short styleRunOffset, unsigned short slop, void *textBufferPtr,
  110.      TEPtr pTE, TEHandle hTE, unsigned short *pixelWidth, unsigned short *charOffset, 
  111.      Boolean *pixelInChar);
  112.  
  113.         In:
  114.             =>     styleRunLen                D0.W
  115.             =>    styleRunOffset            D1.W
  116.             =>    slop                    D2.W
  117.             =>    textBufferPtr            A0.L
  118.             =>    pTE                        A3.L
  119.             =>    hTE                        A4.L
  120.         Out:
  121.             <=    pixelWidth                D0.W (low)
  122.             <=    Boolean                    D0.W (high)
  123.             <=    charOffset                D1.W
  124.             <=    pixelInChar                D2.W
  125.  
  126.     typedef pascal void (*TEFindWordProcPtr)(unsigned short currentPos, short caller, 
  127.      TEPtr pTE, TEHandle hTE, unsigned short *wordStart, unsigned short *wordEnd);
  128.  
  129.         In:
  130.             =>     currentPos                D0.W
  131.             =>    caller                    D2.W
  132.             =>    pTE                        A3.L
  133.             =>    hTE                        A4.L
  134.         Out:
  135.             <=    wordStart                D0.W
  136.             <=    wordEnd                    D1.W
  137.  
  138.     typedef pascal void (*TERecalcProcPtr)(TEPtr pTE, unsigned short changeLength,
  139.        unsigned short *lineStart, unsigned short *firstChar, unsigned short *lastChar);
  140.  
  141.         In:
  142.             =>     pTE                        A3.L
  143.             =>    changeLength            D7.W
  144.         Out:
  145.             <=    lineStart                D2.W
  146.             <=    firstChar                D3.W
  147.             <=    lastChar                D4.W
  148.  
  149.     typedef pascal void (*TEDoTextProcPtr)(TEPtr pTE, unsigned short firstChar, unsigned short lastChar,
  150.                          short selector, GrafPtr *currentGrafPort, short *charPosition);
  151.  
  152.         In:
  153.             =>     pTE                        A3.L
  154.             =>    firstChar                D3.W
  155.             =>    lastChar                D4.W
  156.             =>    selector                D7.W
  157.         Out:
  158.             <=    currentGrafPort            A0.L
  159.             <=    charPosition            D0.W
  160.             
  161. */
  162. typedef pascal void (*HighHookProcPtr)(const Rect *r, TEPtr pTE);
  163. typedef pascal Boolean (*EOLHookProcPtr)(char theChar, TEPtr pTE, TEHandle hTE);
  164. typedef pascal void (*CaretHookProcPtr)(const Rect *r, TEPtr pTE);
  165. typedef pascal unsigned short (*WidthHookProcPtr)(unsigned short textLen, unsigned short textOffset, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  166. typedef pascal unsigned short (*TextWidthHookProcPtr)(unsigned short textLen, unsigned short textOffset, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  167. typedef pascal unsigned short (*NWidthHookProcPtr)(unsigned short styleRunLen, unsigned short styleRunOffset, short slop, short direction, void *textBufferPtr, short *lineStart, TEPtr pTE, TEHandle hTE);
  168. typedef pascal void (*DrawHookProcPtr)(unsigned short textOffset, unsigned short drawLen, void *textBufferPtr, TEPtr pTE, TEHandle hTE);
  169. typedef pascal Boolean (*HitTestHookProcPtr)(unsigned short styleRunLen, unsigned short styleRunOffset, unsigned short slop, void *textBufferPtr, TEPtr pTE, TEHandle hTE, unsigned short *pixelWidth, unsigned short *charOffset, Boolean *pixelInChar);
  170. typedef pascal void (*TEFindWordProcPtr)(unsigned short currentPos, short caller, TEPtr pTE, TEHandle hTE, unsigned short *wordStart, unsigned short *wordEnd);
  171. typedef pascal void (*TERecalcProcPtr)(TEPtr pTE, unsigned short changeLength, unsigned short *lineStart, unsigned short *firstChar, unsigned short *lastChar);
  172. typedef pascal void (*TEDoTextProcPtr)(TEPtr pTE, unsigned short firstChar, unsigned short lastChar, short selector, GrafPtr *currentGrafPort, short *charPosition);
  173. /*
  174.         TEClickLoopProcPtr uses register based parameters on the 68k and cannot
  175.         be written in or called from a high-level language without the help of
  176.         mixed mode or assembly glue.
  177.  
  178.         In:
  179.          => pTE             A3.L
  180.         Out:
  181.          <= return value    Z bit of Status Register
  182. */
  183. /*
  184.         WordBreakProcPtr uses register based parameters on the 68k and cannot
  185.         be written in or called from a high-level language without the help of
  186.         mixed mode or assembly glue.
  187.  
  188.         In:
  189.          => text            A0.L
  190.          => charPos         D0.W
  191.         Out:
  192.          <= return value    Z bit of Status Register
  193. */
  194.  
  195. #if GENERATINGCFM
  196. typedef UniversalProcPtr HighHookUPP;
  197. typedef UniversalProcPtr EOLHookUPP;
  198. typedef UniversalProcPtr CaretHookUPP;
  199. typedef UniversalProcPtr WidthHookUPP;
  200. typedef UniversalProcPtr TextWidthHookUPP;
  201. typedef UniversalProcPtr NWidthHookUPP;
  202. typedef UniversalProcPtr DrawHookUPP;
  203. typedef UniversalProcPtr HitTestHookUPP;
  204. typedef UniversalProcPtr TEFindWordUPP;
  205. typedef UniversalProcPtr TERecalcUPP;
  206. typedef UniversalProcPtr TEDoTextUPP;
  207. typedef UniversalProcPtr TEClickLoopUPP;
  208. typedef UniversalProcPtr WordBreakUPP;
  209. #else
  210. typedef Register68kProcPtr HighHookUPP;
  211. typedef Register68kProcPtr EOLHookUPP;
  212. typedef Register68kProcPtr CaretHookUPP;
  213. typedef Register68kProcPtr WidthHookUPP;
  214. typedef Register68kProcPtr TextWidthHookUPP;
  215. typedef Register68kProcPtr NWidthHookUPP;
  216. typedef Register68kProcPtr DrawHookUPP;
  217. typedef Register68kProcPtr HitTestHookUPP;
  218. typedef Register68kProcPtr TEFindWordUPP;
  219. typedef Register68kProcPtr TERecalcUPP;
  220. typedef Register68kProcPtr TEDoTextUPP;
  221. typedef Register68kProcPtr TEClickLoopUPP;
  222. typedef Register68kProcPtr WordBreakUPP;
  223. #endif
  224.  
  225. struct TERec {
  226.     Rect                            destRect;
  227.     Rect                            viewRect;
  228.     Rect                            selRect;
  229.     short                            lineHeight;
  230.     short                            fontAscent;
  231.     Point                            selPoint;
  232.     short                            selStart;
  233.     short                            selEnd;
  234.     short                            active;
  235.     WordBreakUPP                    wordBreak;
  236.     TEClickLoopUPP                    clickLoop;
  237.     long                            clickTime;
  238.     short                            clickLoc;
  239.     long                            caretTime;
  240.     short                            caretState;
  241.     short                            just;
  242.     short                            teLength;
  243.     Handle                            hText;
  244.     long                            hDispatchRec;                /* added to replace recalBack & recalLines.  it's a handle anyway */
  245.     short                            clikStuff;
  246.     short                            crOnly;
  247.     short                            txFont;
  248.     Style                            txFace;                        /*txFace is unpacked byte*/
  249.     SInt8                            filler;
  250.     short                            txMode;
  251.     short                            txSize;
  252.     GrafPtr                            inPort;
  253.     HighHookUPP                        highHook;
  254.     CaretHookUPP                    caretHook;
  255.     short                            nLines;
  256.     short                            lineStarts[16001];
  257. };
  258.  
  259. enum {
  260. /* Justification (word alignment) styles */
  261.     teJustLeft                    = 0,
  262.     teJustCenter                = 1,
  263.     teJustRight                    = -1,
  264.     teForceLeft                    = -2,
  265. /* new names for the Justification (word alignment) styles */
  266.     teFlushDefault                = 0,                            /*flush according to the line direction */
  267.     teCenter                    = 1,                            /*center justify (word alignment) */
  268.     teFlushRight                = -1,                            /*flush right for all scripts */
  269.     teFlushLeft                    = -2,                            /*flush left for all scripts */
  270. /* Set/Replace style modes */
  271.     fontBit                        = 0,                            /*set font*/
  272.     faceBit                        = 1,                            /*set face*/
  273.     sizeBit                        = 2,                            /*set size*/
  274.     clrBit                        = 3,                            /*set color*/
  275.     addSizeBit                    = 4,                            /*add size mode*/
  276.     toggleBit                    = 5,                            /*set faces in toggle mode*/
  277.     toglBit                        = 5,                            /* obsolete.  use toggleBit */
  278. /* TESetStyle/TEContinuousStyle modes */
  279.     doFont                        = 1,                            /* set font (family) number*/
  280.     doFace                        = 2,                            /*set character style*/
  281.     doSize                        = 4,                            /*set type size*/
  282.     doColor                        = 8,                            /*set color*/
  283.     doAll                        = 15,                            /*set all attributes*/
  284.     addSize                        = 16                            /*adjust type size*/
  285. };
  286.  
  287. enum {
  288.     doToggle                    = 32,                            /*toggle mode for TESetStyle*/
  289. /* offsets into TEDispatchRec */
  290.     EOLHook                        = 0,                            /*[UniversalProcPtr] TEEOLHook*/
  291.     DRAWHook                    = 4,                            /*[UniversalProcPtr] TEWidthHook*/
  292.     WIDTHHook                    = 8,                            /*[UniversalProcPtr] TEDrawHook*/
  293.     HITTESTHook                    = 12,                            /*[UniversalProcPtr] TEHitTestHook*/
  294.     nWIDTHHook                    = 24,                            /*[UniversalProcPtr] nTEWidthHook*/
  295.     TextWidthHook                = 28,                            /*[UniversalProcPtr] TETextWidthHook*/
  296. /* selectors for TECustomHook */
  297.     intEOLHook                    = 0,                            /*TEIntHook value*/
  298.     intDrawHook                    = 1,                            /*TEIntHook value*/
  299.     intWidthHook                = 2,                            /*TEIntHook value*/
  300.     intHitTestHook                = 3,                            /*TEIntHook value*/
  301.     intNWidthHook                = 6,                            /*TEIntHook value for new version of WidthHook*/
  302.     intTextWidthHook            = 7,                            /*TEIntHook value for new TextWidthHook*/
  303. /* feature or bit definitions for TEFeatureFlag */
  304.     teFAutoScroll                = 0,                            /*00000001b*/
  305.     teFAutoScr                    = 0,                            /*00000001b  obsolete. use teFAutoScroll*/
  306.     teFTextBuffering            = 1,                            /*00000010b*/
  307.     teFOutlineHilite            = 2,                            /*00000100b*/
  308.     teFInlineInput                = 3,                            /*00001000b */
  309.     teFUseTextServices            = 4                                /*00010000b */
  310. };
  311.  
  312. enum {
  313. /* action for the new "bit (un)set" interface, TEFeatureFlag */
  314.     teBitClear                    = 0,
  315.     teBitSet                    = 1,                            /*set the selector bit*/
  316.     teBitTest                    = -1,                            /*no change; just return the current setting*/
  317. /*constants for identifying the routine that called FindWord */
  318.     teWordSelect                = 4,                            /*clickExpand to select word*/
  319.     teWordDrag                    = 8,                            /*clickExpand to drag new word*/
  320.     teFromFind                    = 12,                            /*FindLine called it ($0C)*/
  321.     teFromRecal                    = 16,                            /*RecalLines called it ($10)      obsolete */
  322. /*constants for identifying TEDoText selectors */
  323.     teFind                        = 0,                            /*TEDoText called for searching*/
  324.     teHighlight                    = 1,                            /*TEDoText called for highlighting*/
  325.     teDraw                        = -1,                            /*TEDoText called for drawing text*/
  326.     teCaret                        = -2                            /*TEDoText called for drawing the caret*/
  327. };
  328.  
  329. #if OLDROUTINENAMES
  330. enum {
  331.     TEBitClear                    = 0,
  332.     TEBitSet                    = 1,                            /*set the selector bit*/
  333.     TEBitTest                    = -1                            /*no change; just return the current setting*/
  334. };
  335.  
  336. #endif
  337. typedef char Chars[32001];
  338.  
  339. typedef char *CharsPtr;
  340.  
  341. typedef CharsPtr *CharsHandle;
  342.  
  343. struct StyleRun {
  344.     short                            startChar;                    /*starting character position*/
  345.     short                            styleIndex;                    /*index in style table*/
  346. };
  347. typedef struct StyleRun StyleRun;
  348.  
  349. struct STElement {
  350.     short                            stCount;                    /*number of runs in this style*/
  351.     short                            stHeight;                    /*line height*/
  352.     short                            stAscent;                    /*font ascent*/
  353.     short                            stFont;                        /*font (family) number*/
  354.     Style                            stFace;                        /*character Style*/
  355.     SInt8                            filler;                        /*stFace is unpacked byte*/
  356.     short                            stSize;                        /*size in points*/
  357.     RGBColor                        stColor;                    /*absolute (RGB) color*/
  358. };
  359. typedef struct STElement STElement;
  360.  
  361. typedef STElement TEStyleTable[1777];
  362.  
  363. typedef STElement *STPtr, **STHandle;
  364.  
  365. struct LHElement {
  366.     short                            lhHeight;                    /*maximum height in line*/
  367.     short                            lhAscent;                    /*maximum ascent in line*/
  368. };
  369. typedef struct LHElement LHElement;
  370.  
  371. typedef LHElement LHTable[8001];
  372.  
  373. typedef LHElement *LHPtr, **LHHandle;
  374.  
  375. struct ScrpSTElement {
  376.     long                            scrpStartChar;                /*starting character position*/
  377.     short                            scrpHeight;                    /*starting character position*/
  378.     short                            scrpAscent;
  379.     short                            scrpFont;
  380.     Style                            scrpFace;                    /*unpacked byte*/
  381.     SInt8                            filler;                        /*scrpFace is unpacked byte*/
  382.     short                            scrpSize;
  383.     RGBColor                        scrpColor;
  384. };
  385. typedef struct ScrpSTElement ScrpSTElement;
  386.  
  387. /* ARRAY [0..1600] OF ScrpSTElement */
  388. typedef ScrpSTElement ScrpSTTable[1601];
  389.  
  390. struct StScrpRec {
  391.     short                            scrpNStyles;                /*number of styles in scrap*/
  392.     ScrpSTTable                        scrpStyleTab;                /*table of styles for scrap*/
  393. };
  394. typedef struct StScrpRec StScrpRec;
  395.  
  396. typedef StScrpRec *StScrpPtr, **StScrpHandle;
  397.  
  398. struct NullStRec {
  399.     long                            teReserved;                    /*reserved for future expansion*/
  400.     StScrpHandle                    nullScrap;                    /*handle to scrap style table*/
  401. };
  402. typedef struct NullStRec NullStRec;
  403.  
  404. typedef NullStRec *NullStPtr, **NullStHandle;
  405.  
  406. struct TEStyleRec {
  407.     short                            nRuns;                        /*number of style runs*/
  408.     short                            nStyles;                    /*size of style table*/
  409.     STHandle                        styleTab;                    /*handle to style table*/
  410.     LHHandle                        lhTab;                        /*handle to line-height table*/
  411.     long                            teRefCon;                    /*reserved for application use*/
  412.     NullStHandle                    nullStyle;                    /*Handle to style set at null selection*/
  413.     StyleRun                        runs[8001];                    /*ARRAY [0..8000] OF StyleRun*/
  414. };
  415. typedef struct TEStyleRec TEStyleRec;
  416.  
  417. typedef TEStyleRec *TEStylePtr, **TEStyleHandle;
  418.  
  419. struct TextStyle {
  420.     short                            tsFont;                        /*font (family) number*/
  421.     Style                            tsFace;                        /*character Style*/
  422.     SInt8                            filler;                        /*tsFace is unpacked byte*/
  423.     short                            tsSize;                        /*size in point*/
  424.     RGBColor                        tsColor;                    /*absolute (RGB) color*/
  425. };
  426. typedef struct TextStyle TextStyle;
  427.  
  428. typedef TextStyle *TextStylePtr, **TextStyleHandle;
  429.  
  430. typedef short TEIntHook;
  431.  
  432.  
  433. #if GENERATINGCFM
  434. #else
  435. #endif
  436.  
  437. enum {
  438.     uppHighHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseHighHook ),
  439.     uppEOLHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseEOLHook ),
  440.     uppCaretHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseCaretHook ),
  441.     uppWidthHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseWidthHook ),
  442.     uppTextWidthHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseTextWidthHook ),
  443.     uppNWidthHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseNWidthHook ),
  444.     uppDrawHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseDrawHook ),
  445.     uppHitTestHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseHitTestHook ),
  446.     uppTEFindWordProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseTEFindWord ),
  447.     uppTERecalcProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseTERecalc ),
  448.     uppTEDoTextProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseTEDoText ),
  449.     uppTEClickLoopProcInfo = kRegisterBased
  450.          | RESULT_SIZE(SIZE_CODE(0))
  451.          | REGISTER_RESULT_LOCATION(kCCRegisterZBit)
  452.          | REGISTER_ROUTINE_PARAMETER(1, kRegisterA3, SIZE_CODE(sizeof(TEPtr))),
  453.     uppWordBreakProcInfo = kRegisterBased
  454.          | RESULT_SIZE(SIZE_CODE(0))
  455.          | REGISTER_RESULT_LOCATION(kCCRegisterZBit)
  456.          | REGISTER_ROUTINE_PARAMETER(1, kRegisterA0, SIZE_CODE(sizeof(Ptr)))
  457.          | REGISTER_ROUTINE_PARAMETER(2, kRegisterD0, SIZE_CODE(sizeof(short)))
  458. };
  459.  
  460. #if GENERATINGCFM
  461. #define NewHighHookProc(userRoutine)        \
  462.         (HighHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppHighHookProcInfo, GetCurrentArchitecture())
  463. #define NewEOLHookProc(userRoutine)        \
  464.         (EOLHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppEOLHookProcInfo, GetCurrentArchitecture())
  465. #define NewCaretHookProc(userRoutine)        \
  466.         (CaretHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppCaretHookProcInfo, GetCurrentArchitecture())
  467. #define NewWidthHookProc(userRoutine)        \
  468.         (WidthHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppWidthHookProcInfo, GetCurrentArchitecture())
  469. #define NewTextWidthHookProc(userRoutine)        \
  470.         (TextWidthHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTextWidthHookProcInfo, GetCurrentArchitecture())
  471. #define NewNWidthHookProc(userRoutine)        \
  472.         (NWidthHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppNWidthHookProcInfo, GetCurrentArchitecture())
  473. #define NewDrawHookProc(userRoutine)        \
  474.         (DrawHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDrawHookProcInfo, GetCurrentArchitecture())
  475. #define NewHitTestHookProc(userRoutine)        \
  476.         (HitTestHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppHitTestHookProcInfo, GetCurrentArchitecture())
  477. #define NewTEFindWordProc(userRoutine)        \
  478.         (TEFindWordUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTEFindWordProcInfo, GetCurrentArchitecture())
  479. #define NewTERecalcProc(userRoutine)        \
  480.         (TERecalcUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTERecalcProcInfo, GetCurrentArchitecture())
  481. #define NewTEDoTextProc(userRoutine)        \
  482.         (TEDoTextUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTEDoTextProcInfo, GetCurrentArchitecture())
  483. #define NewTEClickLoopProc(userRoutine)        \
  484.         (TEClickLoopUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTEClickLoopProcInfo, GetCurrentArchitecture())
  485. #define NewWordBreakProc(userRoutine)        \
  486.         (WordBreakUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppWordBreakProcInfo, GetCurrentArchitecture())
  487. #else
  488. #define NewHighHookProc(userRoutine)        \
  489.         ((HighHookUPP) (userRoutine))
  490. #define NewEOLHookProc(userRoutine)        \
  491.         ((EOLHookUPP) (userRoutine))
  492. #define NewCaretHookProc(userRoutine)        \
  493.         ((CaretHookUPP) (userRoutine))
  494. #define NewWidthHookProc(userRoutine)        \
  495.         ((WidthHookUPP) (userRoutine))
  496. #define NewTextWidthHookProc(userRoutine)        \
  497.         ((TextWidthHookUPP) (userRoutine))
  498. #define NewNWidthHookProc(userRoutine)        \
  499.         ((NWidthHookUPP) (userRoutine))
  500. #define NewDrawHookProc(userRoutine)        \
  501.         ((DrawHookUPP) (userRoutine))
  502. #define NewHitTestHookProc(userRoutine)        \
  503.         ((HitTestHookUPP) (userRoutine))
  504. #define NewTEFindWordProc(userRoutine)        \
  505.         ((TEFindWordUPP) (userRoutine))
  506. #define NewTERecalcProc(userRoutine)        \
  507.         ((TERecalcUPP) (userRoutine))
  508. #define NewTEDoTextProc(userRoutine)        \
  509.         ((TEDoTextUPP) (userRoutine))
  510. #define NewTEClickLoopProc(userRoutine)        \
  511.         ((TEClickLoopUPP) (userRoutine))
  512. #define NewWordBreakProc(userRoutine)        \
  513.         ((WordBreakUPP) (userRoutine))
  514. #endif
  515.  
  516. #if GENERATINGCFM
  517. #define CallHighHookProc(userRoutine, r, pTE)        \
  518.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppHighHookProcInfo, (r), (pTE))
  519. #define CallEOLHookProc(userRoutine, theChar, pTE, hTE)        \
  520.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppEOLHookProcInfo, (theChar), (pTE), (hTE))
  521. #define CallCaretHookProc(userRoutine, r, pTE)        \
  522.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppCaretHookProcInfo, (r), (pTE))
  523. #define CallWidthHookProc(userRoutine, textLen, textOffset, textBufferPtr, pTE, hTE)        \
  524.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppWidthHookProcInfo, (textLen), (textOffset), (textBufferPtr), (pTE), (hTE))
  525. #define CallTextWidthHookProc(userRoutine, textLen, textOffset, textBufferPtr, pTE, hTE)        \
  526.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTextWidthHookProcInfo, (textLen), (textOffset), (textBufferPtr), (pTE), (hTE))
  527. #define CallNWidthHookProc(userRoutine, styleRunLen, styleRunOffset, slop, direction, textBufferPtr, lineStart, pTE, hTE)        \
  528.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppNWidthHookProcInfo, (styleRunLen), (styleRunOffset), (slop), (direction), (textBufferPtr), (lineStart), (pTE), (hTE))
  529. #define CallDrawHookProc(userRoutine, textOffset, drawLen, textBufferPtr, pTE, hTE)        \
  530.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDrawHookProcInfo, (textOffset), (drawLen), (textBufferPtr), (pTE), (hTE))
  531. #define CallHitTestHookProc(userRoutine, styleRunLen, styleRunOffset, slop, textBufferPtr, pTE, hTE, pixelWidth, charOffset, pixelInChar)        \
  532.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppHitTestHookProcInfo, (styleRunLen), (styleRunOffset), (slop), (textBufferPtr), (pTE), (hTE), (pixelWidth), (charOffset), (pixelInChar))
  533. #define CallTEFindWordProc(userRoutine, currentPos, caller, pTE, hTE, wordStart, wordEnd)        \
  534.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTEFindWordProcInfo, (currentPos), (caller), (pTE), (hTE), (wordStart), (wordEnd))
  535. #define CallTERecalcProc(userRoutine, pTE, changeLength, lineStart, firstChar, lastChar)        \
  536.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTERecalcProcInfo, (pTE), (changeLength), (lineStart), (firstChar), (lastChar))
  537. #define CallTEDoTextProc(userRoutine, pTE, firstChar, lastChar, selector, currentGrafPort, charPosition)        \
  538.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTEDoTextProcInfo, (pTE), (firstChar), (lastChar), (selector), (currentGrafPort), (charPosition))
  539. #define CallTEClickLoopProc(userRoutine, pTE)        \
  540.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTEClickLoopProcInfo, (pTE))
  541. #define CallWordBreakProc(userRoutine, text, charPos)        \
  542.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppWordBreakProcInfo, (text), (charPos))
  543. #else
  544. /* (*HighHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  545. /* (*EOLHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  546. /* (*CaretHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  547. /* (*WidthHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  548. /* (*TextWidthHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  549. /* (*NWidthHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  550. /* (*DrawHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  551. /* (*HitTestHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  552. /* (*TEFindWordProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  553. /* (*TERecalcProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  554. /* (*TEDoTextProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  555. /* (*TEClickLoopProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  556. /* (*WordBreakProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  557. #endif
  558.  
  559. extern pascal Handle TEScrapHandle( void )
  560.     TWOWORDINLINE( 0x2EB8, 0x0AB4 ); /* MOVE.L $0AB4,(SP) */
  561. #if GENERATINGCFM
  562. extern pascal long TEGetScrapLength(void);
  563. #else
  564. #define TEGetScrapLength() ((long) * (unsigned short *) 0x0AB0)
  565. #endif
  566. extern pascal void TEInit(void)
  567.  ONEWORDINLINE(0xA9CC);
  568. extern pascal TEHandle TENew(const Rect *destRect, const Rect *viewRect)
  569.  ONEWORDINLINE(0xA9D2);
  570. extern pascal void TEDispose(TEHandle hTE)
  571.  ONEWORDINLINE(0xA9CD);
  572. extern pascal void TESetText(const void *text, long length, TEHandle hTE)
  573.  ONEWORDINLINE(0xA9CF);
  574. extern pascal CharsHandle TEGetText(TEHandle hTE)
  575.  ONEWORDINLINE(0xA9CB);
  576. extern pascal void TEIdle(TEHandle hTE)
  577.  ONEWORDINLINE(0xA9DA);
  578. extern pascal void TESetSelect(long selStart, long selEnd, TEHandle hTE)
  579.  ONEWORDINLINE(0xA9D1);
  580. extern pascal void TEActivate(TEHandle hTE)
  581.  ONEWORDINLINE(0xA9D8);
  582. extern pascal void TEDeactivate(TEHandle hTE)
  583.  ONEWORDINLINE(0xA9D9);
  584. extern pascal void TEKey(short key, TEHandle hTE)
  585.  ONEWORDINLINE(0xA9DC);
  586. extern pascal void TECut(TEHandle hTE)
  587.  ONEWORDINLINE(0xA9D6);
  588. extern pascal void TECopy(TEHandle hTE)
  589.  ONEWORDINLINE(0xA9D5);
  590. extern pascal void TEPaste(TEHandle hTE)
  591.  ONEWORDINLINE(0xA9DB);
  592. extern pascal void TEDelete(TEHandle hTE)
  593.  ONEWORDINLINE(0xA9D7);
  594. extern pascal void TEInsert(const void *text, long length, TEHandle hTE)
  595.  ONEWORDINLINE(0xA9DE);
  596. extern pascal void TESetAlignment(short just, TEHandle hTE)
  597.  ONEWORDINLINE(0xA9DF);
  598. extern pascal void TEUpdate(const Rect *rUpdate, TEHandle hTE)
  599.  ONEWORDINLINE(0xA9D3);
  600. extern pascal void TETextBox(const void *text, long length, const Rect *box, short just)
  601.  ONEWORDINLINE(0xA9CE);
  602. extern pascal void TEScroll(short dh, short dv, TEHandle hTE)
  603.  ONEWORDINLINE(0xA9DD);
  604. extern pascal void TESelView(TEHandle hTE)
  605.  ONEWORDINLINE(0xA811);
  606. extern pascal void TEPinScroll(short dh, short dv, TEHandle hTE)
  607.  ONEWORDINLINE(0xA812);
  608. extern pascal void TEAutoView(Boolean fAuto, TEHandle hTE)
  609.  ONEWORDINLINE(0xA813);
  610. extern pascal void TECalText(TEHandle hTE)
  611.  ONEWORDINLINE(0xA9D0);
  612. extern pascal short TEGetOffset(Point pt, TEHandle hTE)
  613.  ONEWORDINLINE(0xA83C);
  614. extern pascal Point TEGetPoint(short offset, TEHandle hTE)
  615.  THREEWORDINLINE(0x3F3C, 0x0008, 0xA83D);
  616. extern pascal void TEClick(Point pt, Boolean fExtend, TEHandle h)
  617.  ONEWORDINLINE(0xA9D4);
  618. extern pascal TEHandle TEStyleNew(const Rect *destRect, const Rect *viewRect)
  619.  ONEWORDINLINE(0xA83E);
  620. extern pascal void TESetStyleHandle(TEStyleHandle theHandle, TEHandle hTE)
  621.  THREEWORDINLINE(0x3F3C, 0x0005, 0xA83D);
  622. extern pascal TEStyleHandle TEGetStyleHandle(TEHandle hTE)
  623.  THREEWORDINLINE(0x3F3C, 0x0004, 0xA83D);
  624. extern pascal void TEGetStyle(short offset, TextStyle *theStyle, short *lineHeight, short *fontAscent, TEHandle hTE)
  625.  THREEWORDINLINE(0x3F3C, 0x0003, 0xA83D);
  626. extern pascal void TEStylePaste(TEHandle hTE)
  627.  THREEWORDINLINE(0x3F3C, 0x0000, 0xA83D);
  628. extern pascal void TESetStyle(short mode, const TextStyle *newStyle, Boolean fRedraw, TEHandle hTE)
  629.  THREEWORDINLINE(0x3F3C, 0x0001, 0xA83D);
  630. extern pascal void TEReplaceStyle(short mode, const TextStyle *oldStyle, const TextStyle *newStyle, Boolean fRedraw, TEHandle hTE)
  631.  THREEWORDINLINE(0x3F3C, 0x0002, 0xA83D);
  632. extern pascal StScrpHandle TEGetStyleScrapHandle(TEHandle hTE)
  633.  THREEWORDINLINE(0x3F3C, 0x0006, 0xA83D);
  634. extern pascal void TEStyleInsert(const void *text, long length, StScrpHandle hST, TEHandle hTE)
  635.  THREEWORDINLINE(0x3F3C, 0x0007, 0xA83D);
  636. extern pascal long TEGetHeight(long endLine, long startLine, TEHandle hTE)
  637.  THREEWORDINLINE(0x3F3C, 0x0009, 0xA83D);
  638. extern pascal Boolean TEContinuousStyle(short *mode, TextStyle *aStyle, TEHandle hTE)
  639.  THREEWORDINLINE(0x3F3C, 0x000A, 0xA83D);
  640. extern pascal void TEUseStyleScrap(long rangeStart, long rangeEnd, StScrpHandle newStyles, Boolean fRedraw, TEHandle hTE)
  641.  THREEWORDINLINE(0x3F3C, 0x000B, 0xA83D);
  642. extern pascal void TECustomHook(TEIntHook which, UniversalProcPtr *addr, TEHandle hTE)
  643.  THREEWORDINLINE(0x3F3C, 0x000C, 0xA83D);
  644. extern pascal long TENumStyles(long rangeStart, long rangeEnd, TEHandle hTE)
  645.  THREEWORDINLINE(0x3F3C, 0x000D, 0xA83D);
  646. extern pascal short TEFeatureFlag(short feature, short action, TEHandle hTE)
  647.  THREEWORDINLINE(0x3F3C, 0x000E, 0xA83D);
  648. extern pascal OSErr TEGetHiliteRgn(RgnHandle region, TEHandle hTE)
  649.  THREEWORDINLINE(0x3F3C, 0x000F, 0xA83D);
  650. extern pascal void TESetScrapLength(long length);
  651. extern pascal OSErr TEFromScrap(void);
  652. extern pascal OSErr TEToScrap(void);
  653. extern pascal void TESetClickLoop(TEClickLoopUPP clikProc, TEHandle hTE);
  654. extern pascal void TESetWordBreak(WordBreakUPP wBrkProc, TEHandle hTE);
  655. #if CGLUESUPPORTED
  656. extern void teclick(Point *pt, Boolean fExtend, TEHandle h);
  657. #endif
  658. #if OLDROUTINENAMES
  659. #define TESetJust(just, hTE) TESetAlignment(just, hTE)
  660. #define TextBox(text, length, box, just) TETextBox(text, length, box, just)
  661. #define TEStylNew(destRect, viewRect) TEStyleNew(destRect, viewRect)
  662. #define SetStylHandle(theHandle, hTE) TESetStyleHandle(theHandle, hTE)
  663. #define SetStyleHandle(theHandle, hTE) TESetStyleHandle (theHandle, hTE)
  664. #define GetStylHandle(hTE) TEGetStyleHandle(hTE)
  665. #define GetStyleHandle(hTE) TEGetStyleHandle(hTE)
  666. #define TEStylPaste(hTE) TEStylePaste(hTE)
  667. #define GetStylScrap(hTE) TEGetStyleScrapHandle(hTE)
  668. #define GetStyleScrap(hTE) TEGetStyleScrapHandle(hTE)
  669. #define SetStylScrap(rangeStart, rangeEnd, newStyles, redraw, hTE)  \
  670.     TEUseStyleScrap(rangeStart, rangeEnd, newStyles, redraw, hTE)
  671. #define SetStyleScrap(rangeStart, rangeEnd, newStyles, redraw, hTE)  \
  672.     TEUseStyleScrap(rangeStart, rangeEnd, newStyles, redraw, hTE)
  673. #define TEStylInsert(text, length, hST, hTE) TEStyleInsert(text, length, hST, hTE)
  674. #define TESetScrapLen(length) TESetScrapLength(length)
  675. #define TEGetScrapLen() TEGetScrapLength()
  676. #define SetClikLoop(clikProc, hTE) TESetClickLoop(clikProc, hTE)
  677. #define SetWordBreak(wBrkProc, hTE) TESetWordBreak(wBrkProc, hTE)
  678. #endif
  679.  
  680. #ifdef __CFM68K__
  681. #pragma lib_export off
  682. #endif
  683.  
  684. #if GENERATINGPOWERPC
  685. #pragma options align=reset
  686. #endif
  687.  
  688. #ifdef __cplusplus
  689. }
  690. #endif
  691.  
  692. #endif /* __TEXTEDIT__ */
  693.