3. "6F^5D!$^q||x1UNIT ToolIntf;

{ Created 23 Nov 1983  by Rony Sebok, merged from numerous files            }
{ Modification history:                                                     }
{       10 Feb 84   RTM   First pass at inline traps                        }
{       11 Apr 84   JTC   noControl, resUser out; scrapCount, axes added    }

{ Copyright 1982, 1983, 1984 by Apple Computer, Inc.  All Rights Reserved.  }

INTERFACE

USES    {$U-}
        {$U obj/MemTypes  }  MemTypes,
        {$U obj/QuickDraw }  QuickDraw,
        {$U Obj/OsIntf    }  OsIntf;

CONST
  { for Font Manager }

  systemFont = 0;
  applFont   = 1;
  NewYork = 2;
  Geneva  = 3;
  Monaco = 4;
  Venice = 5;
  London = 6;
  Athens = 7;
  SanFran = 8;
  Toronto = 9;

  propFont = $9000;
  fixedFont = $B000;
  fontWid = $ACB0;

  {for Window Manager}

  {window messages}
  wDraw         = 0;
  wHit          = 1;
  wCalcRgns     = 2;
  wNew          = 3;
  wDispose      = 4;
  wGrow         = 5;
  wDrawGIcon    = 6;

  {types of windows}
  dialogKind  = 2;
  userKind    = 8;

  {window definition procedure IDs}
  documentProc = 0;
  dBoxProc     = 1;
  plainDBox    = 2;
  altDBoxProc  = 3;
  noGrowDocProc = 4;
  rDocProc     = 16;

  {FindWindow Result Codes}
  inDesk       = 0;
  inMenuBar    = 1;
  inSysWindow  = 2;
  inContent    = 3;
  inDrag       = 4;
  inGrow       = 5;
  inGoAway     = 6;

  {defProc hit test codes}
  wNoHit       = 0;
  wInContent   = 1;
  wInDrag      = 2;
  wInGrow      = 3;
  wInGoAway    = 4;


  {axis constraints for DragGrayRgn call}
  noConstraint = 0;
  hAxisOnly    = 1;
  vAxisOnly    = 2;

  {for TextEdit}

  teJustLeft    = 0;
  teJustRight   = -1;
  teJustCenter  = 1;


  {for Resource Manager}

  {Resource attribute byte}
  resSysRef=      128;            { Reference to system resource? }
  resSysHeap=     64;             { System or application heap?   }
  resPurgeable=   32;             { Purgeable resource?           }
  resLocked=      16;             { Load it in locked?            }
  resProtected=   8;              { Protected?                    }
  resPreload=     4;              { Load in on OpenResFile?       }
  resChanged=     2;              { Resource changed?             }

  mapReadOnly=    128;            { Resource file read-only       }
  mapCompact=     64;             { Compact resource file         }
  mapChanged=     32;             { Write map out at update       }


  resNotFound=    -192;           { Resource not found            }
  resFNotFound=   -193;           { Resource file not found       }
  addResFailed=   -194;           { AddResource failed            }
  addRefFailed=   -195;           { AddReference failed           }
  rmvResFailed=   -196;           { RmveResource failed           }
  rmvRefFailed=   -197;           { RmveReference failed          }


  {ID's for resources provided in sysResDef}

{standard cursor definitions}
iBeamCursor = 1;            {text selection cursor}
crossCursor = 2;            {for drawing graphics}
plusCursor  = 3;            {for structured selection}
watchCursor = 4;            {for indicating a long delay}

{icons}
stopIcon = 0;
noteIcon = 1;
cautionIcon = 2;

{patterns}
patternList = 0;       {ID of PAT# which contains 38 patterns}



  {for Control Manager}

  {control messages}
  drawCntl  = 0;
  testCntl  = 1;
  calcCRgns = 2;
  initCntl  = 3;
  dispCntl  = 4;
  posCntl   = 5;
  thumbCntl = 6;
  dragCntl  = 7;
  autoTrack = 8;


  {FindControl Result Codes}
  inButton     = 10;
  inCheckbox   = 11;
  inUpButton   = 20;
  inDownButton = 21;
  inPageUp     = 22;
  inPageDown   = 23;
  inThumb      = 129;

  {control definition proc ID's}
  pushButProc   = 0;
  checkBoxProc  = 1;
  radioButProc  = 2;
  scrollBarProc = 16;

  useWFont      = 8;

  {for Dialog Manager}

  userItem=     0;
  ctrlItem=     4;
    btnCtrl=    0;              { Low two bits specify what kind of control }
    chkCtrl=    1;
    radCtrl=    2;
    resCtrl=    3;

  statText=     8;              { Static text    }
  editText=     16;             { Editable text  }
  iconItem=     32;             { Icon item      }
  picItem=      64;             { Picture item   }
  itemDisable=   128;           { Disable item if set }

  OK=           1;              { OK button is first by convention }
  Cancel=       2;              { Cancel button is second by convention }


  {for Menu Manager}

  noMark      =    0;   { mark symbols for MarkItem }
  commandMark =   $11;
  checkMark   =   $12;
  diamondMark =   $13;
  appleMark   =   $14;
  TextMenuProc =  0;

  { menu defProc messages }
  mDrawMsg    = 0;
  mChooseMsg  = 1;
  mSizeMsg    = 2;


  {for Scrap Manager}

  noTypeErr = -102;

  {package manager}
  dskInit = 2;          {Disk Initializaton}
  stdFile = 3;          {Standard File}
  flPoint = 4;          {Floating-Point Arithmetic}
  trFunc = 5;           {Transcendental Functions}
  intUtil = 6;          {International Utilities}
  bdConv = 7;           {Binary/Decimal Conversion}


TYPE

  {General Utilities}

  Int64Bit =
      RECORD
          hiLong: LongInt;
          loLong: LongInt;
      END;

  CursPtr = ^Cursor;
  CursHandle = ^CursPtr;

  PatPtr = ^Pattern;
  PatHandle = ^PatPtr;


  {for Font Manager}

  FMInput = PACKED RECORD
              family:   INTEGER;
              size:     INTEGER;
              face:     Style;
              needBits: BOOLEAN;
              device:   INTEGER;
              numer:    Point;
              denom:    Point;
            END;

  FMOutPtr = ^FMOutPut;

  FMOutPut = PACKED RECORD
               errNum:     INTEGER;
               fontHandle: Handle;
               bold:       Byte;
               italic:     Byte;
               ulOffset:   Byte;
               ulShadow:   Byte;
               ulThick:    Byte;
               shadow:     Byte;
               extra:      SignedByte;
               ascent:     Byte;
               descent:    Byte;
               widMax:     Byte;
               leading:    SignedByte;
               unused:     Byte;
               numer:      Point;
               denom:      Point;
             END;


  FontRec = RECORD
              fontType: INTEGER;
              firstChar: INTEGER;
              lastChar: INTEGER;
              widMax: INTEGER;
              kernMax: INTEGER;
              nDescent: INTEGER;
              fRectMax: INTEGER;
              chHeight: INTEGER;
              owTLoc: INTEGER;
              ascent: INTEGER;
              descent: INTEGER;
              leading: INTEGER;
              rowWords: INTEGER;
             {bitImage: ARRAY[1..rowWords,1..chHeight] OF INTEGER;
              locTable: ARRAY[firstChar..lastChar+2] OF INTEGER;
              owTable: ARRAY[firstChar..lastChar+2] OF INTEGER;}
            END;

  {for Event Manager}

  {the Event Record is defined in OsIntf}

   KeyMap = ARRAY[0..3] OF LONGINT;

  {for Window Manager}

  WindowPtr    = GrafPtr;
  WindowPeek   = ^WindowRecord;
  ControlHandle = ^ControlPtr;      {for Control Manager}

  WindowRecord = RECORD
                   port:          GrafPort;
                   windowKind:    INTEGER;
                   visible:       BOOLEAN;
                   hilited:       BOOLEAN;
                   goAwayFlag:    BOOLEAN;
                   spareFlag:     BOOLEAN;
                   strucRgn:      RgnHandle;
                   contRgn:       RgnHandle;
                   updateRgn:     RgnHandle;
                   windowDefProc: Handle;
                   dataHandle:    Handle;
                   titleHandle:   StringHandle;
                   titleWidth:    INTEGER;
                   ControlList:   ControlHandle;
                   nextWindow:    WindowPeek;
                   windowPic:     PicHandle;
                   refCon:        LongInt;
                 END;


  {for TextEdit}

  TERec = RECORD
            destRect: Rect;                 {Destination rectangle}
            viewRect: Rect;                 {view rectangle}
            selRect: Rect;                  {Select rectangle}
            lineHeight: INTEGER;            {Current font lineheight}
            fontAscent: INTEGER;            {Current font ascent}
            selPoint: Point;                {Selection point(mouseLoc)}

            selStart: INTEGER;              {Selection start}
            selEnd: INTEGER;                {Selection end}

            active: INTEGER;                {<>0 if active}

            wordBreak:  ProcPtr;            {Word break routine}
            clikLoop:  ProcPtr;             {Click loop routine}

            clickTime: LONGINT;             {Time of first click}
            clickLoc: INTEGER;              {Char. location of click}

            caretTime: LONGINT;             {Time for next caret blink}
            caretState: INTEGER;            {On/active booleans}

            just: INTEGER;                  {fill style}

            TELength: INTEGER;              {Length of text below}
            hText: Handle;                  {Handle to actual text}

            recalBack: INTEGER;             {<>0 if recal in background}
            recalLines: INTEGER;            {Line being recal'ed}
            clikStuff: INTEGER;             {click stuff (internal)}

            crOnly: INTEGER;                {Set to -1 if CR line breaks only}

            txFont: INTEGER;                {Text Font}
            txFace: Style;                  {Text Face}
            txMode: INTEGER;                {Text Mode}
            txSize: INTEGER;                {Text Size}

            inPort: GrafPtr;                {Grafport}

            highHook: ProcPtr;              {Highlighting hook}
            caretHook: ProcPtr;             {Highlighting hook}

            nLines: INTEGER;                {Number of lines}
            lineStarts: ARRAY [0..16000] OF INTEGER; {Actual line starts themselves}
          END; {RECORD}
  TEPtr = ^TERec;
  TEHandle = ^TEPtr;

  CharsHandle = ^CharsPtr;
  CharsPtr = ^Chars;
  Chars = PACKED ARRAY[0..32000] OF CHAR;


  {for Resource Manager}

  ResType=PACKED ARRAY[1..4] OF CHAR;


  {for Control Manager}


  ControlPtr    = ^ControlRecord;

  ControlRecord =
     RECORD
       nextControl:        ControlHandle;
       contrlOwner:        WindowPtr;
       contrlRect:         Rect;
       contrlVis:          BOOLEAN;
       contrlHilite:       BOOLEAN;
       contrlValue:        INTEGER;
       contrlMin:          INTEGER;
       contrlMax:          INTEGER;
       contrlDefProc:      Handle;
       contrlData:         Handle;
       contrlAction:       ProcPtr;
       contrlrfCon:        LONGINT;
       contrlTitle:        Str255;
     END; {ControlRecord}


  {for Dialog Manager}

  DialogPtr=    WindowPtr;
  DialogPeek=   ^DialogRecord;
  DialogRecord= Record
                  window:      WindowRecord;
                  Items:       Handle;
                  textH:       TEHandle;
                  EditField:   Integer;
                  EditOpen:    INTEGER;
                  ADefItem:    INTEGER;
                End;

  DialogTHndl=  ^DialogTPtr;
  DialogTPtr=   ^DialogTemplate;
  DialogTemplate=RECORD
                   boundsRect:  Rect;
                   procID:      INTEGER;
                   visible:     BOOLEAN;
                   filler1:     BOOLEAN;
                   goAwayFlag:  BOOLEAN;
                   filler2:     BOOLEAN;
                   refCon:      LongInt;
                   ItemsID:     INTEGER;
                   title:       Str255;
                 END;

  StageList=    PACKED ARRAY [1..4] OF RECORD
                                         boldItem:  0..1;
                                         boxDrawn:  BOOLEAN;
                                         sound:     0..3;
                                       END;
  AlertTHndl=  ^AlertTPtr;
  AlertTPtr=   ^AlertTemplate;
  AlertTemplate=RECORD
                  boundsRect:  Rect;
                  itemsID:     INTEGER;
                  stages:      StageList;
                END;


  {for Menu Manager}

  MenuPtr = ^MenuInfo;
  MenuHandle = ^MenuPtr;
  MenuInfo = RECORD
               menuId:       INTEGER;
               menuWidth:    INTEGER;
               menuHeight:   INTEGER;
               menuProc:     Handle;
               enableFlags:  LongInt;
               menuData:     Str255;
             END;


  {for Scrap Manager}

  ScrapStuff = RECORD
      scrapSize: LONGINT;
      scrapHandle: Handle;
      scrapCount: INTEGER;
      scrapState: INTEGER;
      scrapName: StringPtr;
  END;
  pScrapStuff = ^ScrapStuff;



{General Utilities}

FUNCTION  BitAnd   (long1,long2: LongInt): LongInt;             INLINE $A858;
FUNCTION  BitOr    (long1,long2: LongInt): LongInt;             INLINE $A85B;
FUNCTION  BitXor   (long1,long2: LongInt): LongInt;             INLINE $A859;
FUNCTION  BitNot   (long: LongInt): LongInt;                    INLINE $A85A;
FUNCTION  BitShift (long: LongInt; count: INTEGER): LongInt;    INLINE $A85C;
FUNCTION  BitTst   (bytePtr: Ptr; bitNum: LongInt): BOOLEAN;    INLINE $A85D;
PROCEDURE BitSet   (bytePtr: Ptr; bitNum: LongInt);             INLINE $A85E;
PROCEDURE BitClr   (bytePtr: Ptr; bitNum: LongInt);             INLINE $A85F;
PROCEDURE LongMul  (a,b: LongInt; VAR dst: Int64Bit);           INLINE $A867;
FUNCTION  FixMul   (a,b: Fixed): Fixed;                         INLINE $A868;
FUNCTION  FixRatio (numer,denom: INTEGER): Fixed;               INLINE $A869;
FUNCTION  HiWord   (x: LongInt): INTEGER;                       INLINE $A86A;
FUNCTION  LoWord   (x: LongInt): INTEGER;                       INLINE $A86B;
FUNCTION  FixRound (x: Fixed): INTEGER;                         INLINE $A86C;
PROCEDURE PackBits   (VAR srcPtr,dstPtr: Ptr; srcBytes: INTEGER); INLINE $A8CF;
PROCEDURE UnPackBits (VAR srcPtr,dstPtr: Ptr; dstBytes: INTEGER);INLINE $A8D0;
FUNCTION SlopeFromAngle(angle: INTEGER): Fixed;                 INLINE $A8BC;
FUNCTION AngleFromSlope(slope: Fixed): INTEGER;                 INLINE $A8C4;
FUNCTION DeltaPoint(ptA,ptB: Point): LongInt;                   INLINE $A84F;


FUNCTION  NewString(theString:Str255): StringHandle;            INLINE $A906;
PROCEDURE SetString(theString:StringHandle; strNew: Str255);    INLINE $A907;
FUNCTION  GetString(stringID:  INTEGER): StringHandle;          INLINE $A9BA;
PROCEDURE GetIndString(VAR theString: str255; strListID: INTEGER;
                       index: INTEGER);

FUNCTION Munger(h: Handle; offset: LongInt; ptr1: Ptr; len1: LongInt;
                ptr2: Ptr; len2: LongInt): LongInt;             INLINE $A9E0;

FUNCTION  GetIcon(iconID:    INTEGER):  Handle;                 INLINE $A9BB;
PROCEDURE PlotIcon(theRect: Rect; theIcon: Handle);             INLINE $A94B;
FUNCTION  GetCursor (cursorID: INTEGER):  CursHandle;           INLINE $A9B9;
FUNCTION  GetPattern(patID: INTEGER):  PatHandle;               INLINE $A9B8;
FUNCTION  GetPicture(picID: INTEGER):  PicHandle;               INLINE $A9BC;
PROCEDURE GetIndPattern(VAR thePat: Pattern; patListID: INTEGER;
                       index: INTEGER);

PROCEDURE ShieldCursor(shieldRect: Rect; offsetPt: Point);      INLINE $A855;


{for Font Manager}

PROCEDURE InitFonts;                                            INLINE $A8FE;
PROCEDURE GetFontName(familyID: INTEGER; VAR theName: Str255);  INLINE $A8FF;
PROCEDURE GetFNum(theName: Str255; VAR familyID: INTEGER);      INLINE $A900;
PROCEDURE SetFontLock(lockFlag: BOOLEAN);                       INLINE $A903;
FUNCTION  FMSwapFont(inRec: FMInput): FMOutPtr;                 INLINE $A901;
FUNCTION  RealFont(famID: INTEGER; size: INTEGER): BOOLEAN;     INLINE $A902;


{for Event Manager}

FUNCTION  EventAvail(mask:INTEGER; VAR theEvent: EventRecord): BOOLEAN;
                                                                INLINE $A971;
FUNCTION  GetNextEvent(mask:INTEGER; VAR theEvent: EventRecord): BOOLEAN;
                                                                INLINE $A970;
FUNCTION  StillDown:BOOLEAN;                                    INLINE $A973;
FUNCTION  WaitMouseUp:BOOLEAN;                                  INLINE $A977;
PROCEDURE GetMouse (VAR pt: Point);                             INLINE $A972;
FUNCTION  TickCount:LongInt;                                    INLINE $A975;
FUNCTION  Button: BOOLEAN;                                      INLINE $A974;
PROCEDURE GetKeys(VAR k: keyMap);                               INLINE $A976;

FUNCTION GetDblTime: LongInt;
FUNCTION GetCaretTime: LongInt;



{for Window Manager}

PROCEDURE ClipAbove(window: WindowPeek);                        INLINE $A90B;
PROCEDURE PaintOne(window: WindowPeek; clobbered: RgnHandle);   INLINE $A90C;
PROCEDURE PaintBehind(startWindow: WindowPeek; clobbered: RgnHandle);
                                                                INLINE $A90D;
PROCEDURE SaveOld(window: WindowPeek);                          INLINE $A90E;
PROCEDURE DrawNew(window: WindowPeek; fUpdate: BOOLEAN);        INLINE $A90F;
PROCEDURE CalcVis(window: WindowPeek);                          INLINE $A909;
PROCEDURE CalcVisBehind(startWindow: WindowPeek; clobbered: RgnHandle);
                                                                INLINE $A90A;
PROCEDURE ShowHide(window: WindowPtr; showFlag: BOOLEAN);       INLINE $A908;

FUNCTION  CheckUpdate(VAR theEvent: EventRecord): BOOLEAN;      INLINE $A911;
PROCEDURE GetWMgrPort(VAR wPort: GrafPtr);                      INLINE $A910;

PROCEDURE InitWindows;                                          INLINE $A912;
FUNCTION  NewWindow(wStorage:   Ptr;
                    boundsRect: Rect;
                    title:      Str255;
                    visible:    BOOLEAN;
                    theProc:    INTEGER;
                    behind:     WindowPtr;
                    goAwayFlag: BOOLEAN;
                    refCon:     LongInt): WindowPtr;            INLINE $A913;

PROCEDURE DisposeWindow (theWindow: WindowPtr);                 INLINE $A914;
PROCEDURE CloseWindow   (theWindow: WindowPtr);                 INLINE $A92D;
PROCEDURE MoveWindow    (theWindow: WindowPtr; h,v: INTEGER; BringToFront:BOOLEAN);
                                                                INLINE $A91B;
PROCEDURE SizeWindow    (theWindow: WindowPtr; width,height: INTEGER; fUpdate: BOOLEAN);
                                                                INLINE $A91D;
FUNCTION  GrowWindow    (theWindow: windowPtr; startPt: Point; bBox: Rect): LongInt;
                                                                INLINE $A92B;
PROCEDURE DragWindow    (theWindow: WindowPtr; startPt: Point; boundsRect: Rect);
                                                                INLINE $A925;
PROCEDURE ShowWindow    (theWindow: WindowPtr);                 INLINE $A915;
PROCEDURE HideWindow    (theWindow: WindowPtr);                 INLINE $A916;
PROCEDURE SetWTitle     (theWindow: WindowPtr; title: Str255);    INLINE $A91A;
PROCEDURE GetWTitle     (theWindow: WindowPtr; VAR title: Str255); INLINE $A919;
PROCEDURE HiliteWindow  (theWindow: WindowPtr; fHiLite: BOOLEAN); INLINE $A91C;
PROCEDURE BeginUpdate   (theWindow: WindowPtr);                 INLINE $A922;
PROCEDURE EndUpdate     (theWindow: WindowPtr);                 INLINE $A923;
PROCEDURE SetWRefCon    (theWindow: WindowPtr; data: LongInt);  INLINE $A918;
FUNCTION  GetWRefCon    (theWindow: WindowPtr): LongInt;        INLINE $A917;
PROCEDURE SetWindowPic  (theWindow: WindowPtr; thePic: PicHandle); INLINE $A92E;
FUNCTION  GetWindowPic  (theWindow: WindowPtr): PicHandle;      INLINE $A92F;
PROCEDURE BringToFront  (theWindow: WindowPtr);                 INLINE $A920;
PROCEDURE SendBehind    (theWindow,behind: WindowPtr);          INLINE $A921;
FUNCTION  FrontWindow:   WindowPtr;                             INLINE $A924;
PROCEDURE SelectWindow  (theWindow: WindowPtr);                 INLINE $A91F;
FUNCTION  TrackGoAway   (theWindow: WindowPtr; thePt: Point): BOOLEAN;
                                                                INLINE $A91E;
PROCEDURE DrawGrowIcon  (theWindow: WindowPtr);                 INLINE $A904;

PROCEDURE ValidRect     (goodRect: Rect);                       INLINE $A92A;
PROCEDURE ValidRgn      (goodRgn: RgnHandle);                   INLINE $A929;
PROCEDURE InvalRect     (badRect: Rect);                        INLINE $A928;
PROCEDURE InvalRgn      (badRgn:  RgnHandle);                   INLINE $A927;
FUNCTION  FindWindow    (thePoint: Point;
                          VAR  theWindow: WindowPtr): INTEGER;  INLINE $A92C;
FUNCTION  GetNewWindow  (windowID: INTEGER; wStorage: Ptr;
                              behind: WindowPtr): WindowPtr;    INLINE $A9BD;
FUNCTION  PinRect(theRect: Rect; thePt: Point): LongInt;        INLINE $A94E;
FUNCTION  DragGrayRgn(theRgn: RgnHandle; startPt: Point; boundsRect,
                      slopRect: Rect;axis: INTEGER;
                      actionProc: ProcPtr): LongInt;            INLINE $A905;

{For TextEdit}

PROCEDURE TEActivate( h: TEHandle );                            INLINE $A9D8;
PROCEDURE TECalText( h: TEHandle );                             INLINE $A9D0;
PROCEDURE TEClick( pt: Point; extend: BOOLEAN; h: TEHandle );   INLINE $A9D4;
PROCEDURE TECopy( h: TEHandle );                                INLINE $A9D5;
PROCEDURE TECut( h: TEHandle );                                 INLINE $A9D6;
PROCEDURE TEDeActivate( h: TEHandle );                          INLINE $A9D9;
PROCEDURE TEDelete( h: TEHandle );                              INLINE $A9D7;
PROCEDURE TEDispose( h: TEHandle );                             INLINE $A9CD;
PROCEDURE TEIdle( h: TEHandle );                                INLINE $A9DA;
PROCEDURE TEInit;                                               INLINE $A9CC;
PROCEDURE TEKey( key: CHAR; h: TEHandle );                      INLINE $A9DC;
FUNCTION  TENew( dest, view: Rect ): TEHandle;                  INLINE $A9D2;
PROCEDURE TEPaste( h: TEHandle );                               INLINE $A9DB;
PROCEDURE TEScroll( dh, dv: INTEGER; h: TEHandle );             INLINE $A9DD;
PROCEDURE TESetSelect( selStart, selEnd: LONGINT; h: TEHandle  ); INLINE $A9D1;
PROCEDURE TESetText( inText: Ptr; textLength: LONGINT; h: TEHandle ); INLINE $A9CF;
PROCEDURE TEInsert( inText: Ptr; textLength: LONGINT; h: TEHandle ); INLINE $A9DE;
PROCEDURE TEUpdate( rUpdate: Rect; h: TEHandle );               INLINE $A9D3;
PROCEDURE TESetJust( just: INTEGER; h: TEHandle );              INLINE $A9DF;
FUNCTION  TEGetText( h: TEHandle ): CharsHandle;                INLINE $A9CB;

FUNCTION TEScrapHandle: Handle;
FUNCTION TEGetScrapLen: LongInt;
PROCEDURE TESetScrapLen(length: LongInt);

{Box drawing utility}
PROCEDURE TextBox( inText: Ptr; textLength: LONGINT; r: Rect; style: INTEGER );
                                                                INLINE $A9CE;


{for Resource Manager}

FUNCTION  InitResources: INTEGER;                               INLINE $A995;
PROCEDURE RsrcZoneInit;                                         INLINE $A996;
PROCEDURE CreateResFile(fileName:  Str255);                     INLINE $A9B1;
FUNCTION  OpenResFile(fileName: Str255): INTEGER;               INLINE $A997;
PROCEDURE UseResFile(refNum:  INTEGER);                         INLINE $A998;
FUNCTION  GetResFileAttrs(refNum:  INTEGER): INTEGER;           INLINE $A9F6;
PROCEDURE SetResFileAttrs(refNum:  INTEGER;  attrs:  INTEGER);  INLINE $A9F7;
PROCEDURE UpdateResFile(refNum:  INTEGER);                      INLINE $A999;
PROCEDURE CloseResFile(refNum:  INTEGER);                       INLINE $A99A;
PROCEDURE SetResPurge(install:  Boolean);                       INLINE $A993;
PROCEDURE SetResLoad(AutoLoad:  Boolean);                       INLINE $A99B;
FUNCTION  CountResources(theType:  ResType): INTEGER;           INLINE $A99C;
FUNCTION  GetIndResource(theType: ResType; index:  INTEGER): Handle;
                                                                INLINE $A99D;
FUNCTION  CountTypes:  INTEGER;                                 INLINE $A99E;
PROCEDURE GetIndType(VAR theType:  ResType; index:  INTEGER);   INLINE $A99F;
FUNCTION  UniqueID(theType:  ResType):  INTEGER;                INLINE $A9C1;
FUNCTION  GetResource(theType: ResType; ID: INTEGER): Handle;   INLINE $A9A0;
FUNCTION  GetNamedResource(theType:  ResType; name: Str255): Handle;
                                                                INLINE $A9A1;
PROCEDURE LoadResource(theResource: Handle);                    INLINE $A9A2;
PROCEDURE ReleaseResource(theResource:  Handle);                INLINE $A9A3;
PROCEDURE DetachResource(theResource:  Handle);                 INLINE $A992;
PROCEDURE ChangedResource(theResource:  Handle);                INLINE $A9AA;
PROCEDURE WriteResource(theResource:  Handle);                  INLINE $A9B0;
FUNCTION  HomeResFile(theResource: Handle): INTEGER;            INLINE $A9A4;
FUNCTION  CurResFile:  INTEGER;                                 INLINE $A994;
FUNCTION  GetResAttrs(theResource: Handle): INTEGER;            INLINE $A9A6;
PROCEDURE SetResAttrs(theResource: Handle; attrs: INTEGER);     INLINE $A9A7;
PROCEDURE GetResInfo(theResource:  Handle;
                     VAR theID:    INTEGER;
                     VAR theType:  ResType;
                     VAR name:     Str255);                     INLINE $A9A8;
PROCEDURE SetResInfo(theResource:  Handle;
                     theID:        INTEGER;
                     name:         Str255);                     INLINE $A9A9;
PROCEDURE AddResource(theResource:  Handle;
                      theType:      ResType;
                      theID:        INTEGER;
                      name:         Str255);                    INLINE $A9AB;
PROCEDURE AddReference(theResource:  Handle;
                       theID:        INTEGER;
                       name:         Str255);                   INLINE $A9AC;
PROCEDURE RmveResource(theResource:  Handle);                   INLINE $A9AD;
PROCEDURE RmveReference(theResource:  Handle);                  INLINE $A9AE;
FUNCTION SizeResource(theResource: Handle): LongInt;            INLINE $A9A5;
FUNCTION  ResError:  INTEGER;                                   INLINE $A9AF;

{for Control Manager}

FUNCTION  NewControl(curWindow:  windowPtr;
                    boundsRect: Rect;
                    title:      Str255;
                    visible:    BOOLEAN;
                    value:      INTEGER;
                    min:        INTEGER;
                    max:        INTEGER;
                    contrlProc: INTEGER;
                    refCon:     LongInt): ControlHandle;        INLINE $A954;
PROCEDURE DisposeControl (theControl: ControlHandle);           INLINE $A955;
PROCEDURE KillControls   (theWindow:  WindowPtr);               INLINE $A956;

PROCEDURE MoveControl    (theControl: ControlHandle; h,v: INTEGER); INLINE $A959;
PROCEDURE SizeControl    (theControl: ControlHandle; w,h: INTEGER); INLINE $A95C;
PROCEDURE DragControl    (theControl: ControlHandle; startPt: Point;
                          bounds: Rect; slopRect: Rect; axis:INTEGER); INLINE $A967;
PROCEDURE ShowControl    (theControl: ControlHandle);           INLINE $A957;
PROCEDURE HideControl    (theControl: ControlHandle);           INLINE $A958;
PROCEDURE SetCTitle      (theControl: ControlHandle; title: Str255); INLINE $A95F;
PROCEDURE GetCTitle      (theControl: ControlHandle; VAR title: Str255); INLINE $A95E;
PROCEDURE HiliteControl  (theControl: ControlHandle; hiliteState: INTEGER);
                                                                INLINE $A95D;
PROCEDURE SetCRefCon     (theControl: ControlHandle; data: LongInt); INLINE $A95B;
FUNCTION  GetCRefCon     (theControl: ControlHandle): LongInt;  INLINE $A95A;

PROCEDURE SetCtlValue    (theControl: ControlHandle; theValue: INTEGER); INLINE $A963;
FUNCTION  GetCtlValue    (theControl: ControlHandle): INTEGER;  INLINE $A960;

FUNCTION  GetCtlMin      (theControl: ControlHandle): INTEGER;  INLINE $A961;
FUNCTION  GetCtlMax      (theControl: ControlHandle): INTEGER;  INLINE $A962;
PROCEDURE SetCtlMin      (theControl: ControlHandle; theValue: INTEGER); INLINE $A964;
PROCEDURE SetCtlMax      (theControl: ControlHandle; theValue: INTEGER); INLINE $A965;

FUNCTION  GetCtlAction   (theControl: ControlHandle): ProcPtr;  INLINE $A96A;
PROCEDURE SetCtlAction   (theControl: ControlHandle; newProc: ProcPtr); INLINE $A96B;

FUNCTION  TestControl    (theControl: ControlHandle; thePt: Point): INTEGER;
                                                                INLINE $A966;
FUNCTION  TrackControl   (theControl:ControlHandle; thePt: Point;
                            actionProc:ProcPtr):INTEGER;        INLINE $A968;

FUNCTION  FindControl (thePoint: Point;
                       theWindow: WindowPtr;
                       VAR theControl: ControlHandle): INTEGER; INLINE $A96C;
PROCEDURE DrawControls (theWindow: WindowPtr);                  INLINE $A969;
FUNCTION  GetNewControl (controlID: INTEGER; owner: WindowPtr): ControlHandle;
                                                                INLINE $A9BE;

{for Dialog Manager}

PROCEDURE InitDialogs(restartProc: ProcPtr);                    INLINE $A97B;
FUNCTION GetNewDialog(dialogID: Integer;
                      wStorage: Ptr;
                      behind:  WindowPtr): DialogPtr;           INLINE $A97C;
FUNCTION  NewDialog(wStorage:   Ptr;
                    boundsRect: Rect;
                    title:      Str255;
                    visible:    BOOLEAN;
                    theProc:    INTEGER;
                    behind:     WindowPtr;
                    goAwayFlag: BOOLEAN;
                    refCon:     LongInt;
                    itmLstHndl: Handle): DialogPtr;             INLINE $A97D;
FUNCTION IsDialogEvent(event:   EventRecord): BOOLEAN;          INLINE $A97F;
FUNCTION DialogSelect( event:   EventRecord;
                       VAR theDialog:  DialogPtr;
                       VAR itemHit: INTEGER): BOOLEAN;          INLINE $A980;
PROCEDURE ModalDialog( filterProc: ProcPtr; VAR itemHit: INTEGER);
                                                                INLINE $A991;
PROCEDURE DrawDialog(dialog: DialogPtr);                        INLINE $A981;
PROCEDURE CloseDialog(dialog: DialogPtr);                       INLINE $A982;
PROCEDURE DisposDialog(dialog: DialogPtr);                      INLINE $A983;
FUNCTION  Alert(alertID:     Integer;
                filterProc:  ProcPtr): Integer;                 INLINE $A985;
FUNCTION  StopAlert(alertID:     Integer;
                    filterProc:  ProcPtr): Integer;             INLINE $A986;
FUNCTION  NoteAlert(alertID:     Integer;
                    filterProc:  ProcPtr): Integer;             INLINE $A987;
FUNCTION  CautionAlert(alertID:     Integer;
                       filterProc:  ProcPtr): Integer;          INLINE $A988;
PROCEDURE CouldAlert(alertID:  Integer);                        INLINE $A989;
PROCEDURE FreeAlert(alertID:   Integer);                        INLINE $A98A;
PROCEDURE CouldDialog(DlgID:  Integer);                         INLINE $A979;
PROCEDURE FreeDialog(DlgID:   Integer);                         INLINE $A97A;
PROCEDURE ParamText(cite0, cite1, cite2, cite3:  Str255);       INLINE $A98B;
PROCEDURE ErrorSound(sound: ProcPtr);                           INLINE $A98C;
PROCEDURE GetDItem(dialog:         DialogPtr;
                   itemNo:         Integer;
                   VAR kind:       Integer;
                   VAR item:       Handle;
                   VAR box:        Rect);                       INLINE $A98D;
PROCEDURE SetDItem(dialog:         DialogPtr;
                   itemNo:         Integer;
                   kind:           Integer;
                   item:           Handle;
                   box:            Rect);                       INLINE $A98E;
PROCEDURE SetIText(item:       Handle;
                   text:       Str255);                         INLINE $A98F;
PROCEDURE GetIText(item:       Handle;
                   VAR text:   Str255);                         INLINE $A990;
PROCEDURE SelIText(dialog:   DialogPtr;
                   itemNo:   Integer;
                   startSel, endSel: INTEGER );                 INLINE $A97E;

{routines designed only for use in Pascal}
FUNCTION GetAlrtStage: INTEGER;             {returns aCount}
PROCEDURE ResetAlrtStage;

PROCEDURE DlgCut(dialog: DialogPtr);
PROCEDURE DlgPaste(dialog: DialogPtr);
PROCEDURE DlgCopy(dialog: DialogPtr);
PROCEDURE DlgDelete(dialog: DialogPtr);

PROCEDURE SetDAFont(fontNum: INTEGER);

{for Desk Manager}

FUNCTION  SystemEvent(myEvent: EventRecord): BOOLEAN;           INLINE $A9B2;
PROCEDURE SystemClick(theEvent: EventRecord; theWindow: windowPtr); INLINE $A9B3;
PROCEDURE SystemTask;                                           INLINE $A9B4;
PROCEDURE SystemMenu(menuResult: LongInt);                      INLINE $A9B5;
FUNCTION  SystemEdit(editCode: INTEGER): BOOLEAN;               INLINE $A9C2;
FUNCTION  OpenDeskAcc(theAcc: Str255): INTEGER;                 INLINE $A9B6;
PROCEDURE CloseDeskAcc(refNum: INTEGER);                        INLINE $A9B7;

{for Menu Manager}

PROCEDURE InitMenus;                                            INLINE $A930;
FUNCTION  NewMenu(menuID: INTEGER; menuTitle: Str255): menuHandle; INLINE $A931;
FUNCTION  GetMenu(rsrcID:  INTEGER): MenuHandle;                INLINE $A9BF;
PROCEDURE DisposeMenu(menu: menuHandle);                        INLINE $A932;
PROCEDURE AppendMenu(menu: menuHandle; data: str255);           INLINE $A933;

PROCEDURE InsertMenu (menu: MenuHandle; beforeId: INTEGER);     INLINE $A935;
PROCEDURE DeleteMenu (menuId: INTEGER);                         INLINE $A936;
PROCEDURE DrawMenuBar;                                          INLINE $A937;
PROCEDURE ClearMenuBar;                                         INLINE $A934;

FUNCTION  GetMenuBar:Handle;                                    INLINE $A93B;
FUNCTION  GetNewMBar(menuBarID:  INTEGER): Handle;              INLINE $A9C0;
PROCEDURE SetMenuBar(menuBar: Handle);                          INLINE $A93C;

FUNCTION  MenuSelect (startPt: Point): LongInt;                 INLINE $A93D;
FUNCTION  MenuKey    (ch: CHAR): LongInt;                       INLINE $A93E;
PROCEDURE HiLiteMenu (menuId: INTEGER);                         INLINE $A938;

PROCEDURE SetItem    (menu: menuHandle; item: INTEGER; itemString: Str255);
                                                                INLINE $A947;
PROCEDURE GetItem    (menu: menuHandle; item: INTEGER; VAR itemString: Str255);
                                                                INLINE $A946;
PROCEDURE EnableItem (menu: menuHandle; item: INTEGER);         INLINE $A939;
PROCEDURE DisableItem(menu: menuHandle; item: INTEGER);         INLINE $A93A;
PROCEDURE CheckItem  (menu: menuHandle; item: INTEGER; checked: BOOLEAN);
                                                                INLINE $A945;

PROCEDURE SetItemIcon(menu: menuHandle; item: INTEGER; iconNum: Byte);
                                                                INLINE $A940;
PROCEDURE GetItemIcon(menu: menuHandle; item: INTEGER; VAR iconNum: Byte);
                                                                INLINE $A93F;
PROCEDURE SetItemStyle(menu: menuHandle; item: INTEGER; styleVal: Style);
                                                                INLINE $A942;
PROCEDURE GetItemStyle(menu: menuHandle; item: INTEGER; VAR styleVal: Style);
                                                                INLINE $A941;
PROCEDURE SetItemMark(menu: menuHandle; item: INTEGER; markChar: CHAR);
                                                                INLINE $A944;
PROCEDURE GetItemMark(menu: menuHandle; item: INTEGER; VAR markChar: CHAR);
                                                                INLINE $A943;
PROCEDURE SetMenuFlash(flashCount: INTEGER);                    INLINE $A94A;
PROCEDURE FlashMenuBar(menuID: INTEGER);                        INLINE $A94C;

FUNCTION  GetMHandle(menuID: INTEGER): menuHandle;              INLINE $A949;
FUNCTION  CountMItems(menu:  menuHandle):  INTEGER;             INLINE $A950;
PROCEDURE AddResMenu(menu: menuHandle; theType:ResType);        INLINE $A94D;
PROCEDURE InsertResMenu(menu: menuHandle; theType:ResType; afterItem: INTEGER);
                                                                INLINE $A951;
PROCEDURE CalcMenuSize(menu:menuHandle);                        INLINE $A948;

{for Scrap Manager}

FUNCTION  GetScrap( hDest: Handle; what: ResType; VAR offset: LONGINT ): LONGINT;
                                                                INLINE $A9FD;
FUNCTION  InfoScrap: pScrapStuff;                               INLINE $A9F9;
FUNCTION  LoadScrap: LONGINT;                                   INLINE $A9FA;
FUNCTION  PutScrap( length: LONGINT; what: ResType; source: Ptr  ): LONGINT;
                                                                INLINE $A9FE;
FUNCTION  UnloadScrap: LONGINT;                                 INLINE $A9FA;
FUNCTION  ZeroScrap: LONGINT;                                   INLINE $A9FC;

{package manager}
PROCEDURE InitAllPacks;                                         INLINE $A9E6;
PROCEDURE InitPack(packID: INTEGER);                            INLINE $A9E5;



IMPLEMENTATION

{for Text Edit}
FUNCTION TEScrapHndl; EXTERNAL;
FUNCTION TEGetScrapLen; EXTERNAL;
PROCEDURE TESetScrapLen; EXTERNAL;

{for Dialog Manager}
{routines designed only for use in Pascal}
FUNCTION GetAlrtStage; EXTERNAL;
PROCEDURE ResetAlrtStage; EXTERNAL;

PROCEDURE DlgCut;           EXTERNAL;
PROCEDURE DlgPaste;         EXTERNAL;
PROCEDURE DlgCopy;          EXTERNAL;
PROCEDURE DlgDelete;        EXTERNAL;

PROCEDURE SetDAFont; EXTERNAL;

{for Event Mgr}
FUNCTION GetDblTime; EXTERNAL;
FUNCTION GetCaretTime; EXTERNAL;

{for general utilities}
PROCEDURE GetIndString;EXTERNAL;
PROCEDURE GetIndPattern;EXTERNAL;


END. { of unit }
