SAL ƒ/SAL_Public.h

#ifndef SAL_PUBLIC_H
#define SAL_PUBLIC_H
/***************************************************************************\
|***************************************************************************|
|                                                                           |
|   SimpleApp Framework: A Simple Application Framework                     |
|       by Apple Macintosh Developer Technical Support                      |
|                                                                           |
|   File Name:  SAL_Public.h                                                |
|                                                                           |
|   Contains:   SimpleAppLib public interface                               |
|                                                                           |
|   DRI: George Warner, Apple Developer Technical Support (dts@apple.com)   |
|                                                                           |
|   Copyright:  © 1999 by Apple Computer,Inc., all rights reserved.         |
|                                                                           |
|   You may incorporate this sample code into your applications without     |
|   restriction, though the sample code has been provided "AS IS" and the   |
|   responsibility for its operation is 100% yours.  However, what you are  |
|   not permitted to do is redistribute the source as "Apple Sample Code"   |
|   after having made changes. If you're going to re-distribute the source, |
|   we require that you make it clear in the source that the code was       |
|   descended from Apple Sample Code, but that you've made changes.         |
|                                                                           |
| **************************************************************************|
|           C h a n g e     H i s t o r y (most recent first):              |
| **************************************************************************|
|       Vers      Date      Author      Description                         |
|       ----    --------    ------  ----------------------------------------|
|       2.0      8/10/99     gaw    Converted to C                          |
|       1.0      4/ 1/94     mxm    Initial version                         |
|***************************************************************************|
\***************************************************************************/
 
/************************************************************\
|*  NOTICE: This is an minimun header file for SAL;         *|
|*          It's just enough to build the sample apps.      *|
|*          SAL is a work in progress; we'll release more   *|
|*          as we write it.                                 *|
\************************************************************/
 
#if PRAGMA_ONCE
#pragma once
#endif
 
#ifdef __cplusplus
extern "C"
{
#endif
 
#if PRAGMA_IMPORT
#pragma import on
#endif
 
#if PRAGMA_STRUCT_ALIGN
#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
#pragma pack(2)
#endif
 
#include <Controls.h>
#include <Lists.h>
/**\
|**|    Typedefs, defines, enums, structs, etc.
\**/
 
enum
{
    kSAL_ErrorBase = 0,                     //  Base value for ErrorNumbers
    kSAL_StandardDebugAlert = 9999,
    kSAL_NonFatalError = 0,
    kSAL_FatalError = kSAL_ErrorBase - 1,
    kSAL_BadSelectorErr = kSAL_ErrorBase - 2,
    kSAL_BadProcPtr = kSAL_ErrorBase - 3,
    kSAL_NotOurWindowError = kSAL_ErrorBase - 4,
    kSAL_NotValidObject = kSAL_ErrorBase - 5
};
 
 
enum
{
    kSAL_UseStandardMenu = true,
    kSAL_MenuStartID = 127,
    kSAL_AppleNum = 128,
    kSAL_FileNum = 129,
    kSAL_EditNum = 130,
    kSAL_EditMenu = 3,
    kSAL_UndoItem = 1,
    //kSAL_Undefined = 2,
    kSAL_CutItem = 3,
    kSAL_CopyItem = 4,
    kSAL_PasteItem = 5,
    kSAL_ClearItem = 6
};
 
//key navigation
enum
{
    kSAL_NoKey = 0,
    kSAL_NoCommandKey = 0,
    kSAL_UpArrow = 30,
    kSAL_DownArrow = 31,
    kSAL_EnterKey = 3,
    kSAL_ReturnKey = 13,
    kSAL_TabKey = 9
};
 
//List Flags
enum
{
    kSAL_ListDrawFrame = 1,
    kSAL_ListVScroll = 2,
    kSAL_ListHScroll = 4,
    kSAL_ListCustomLDEF = 8,
    kSAL_ListDrawingOn = 16,
    kSAL_ListHasGrow = 32,
    kSAL_ListWantsDrag = 64,
    kSAL_StandardList = kSAL_ListDrawFrame + kSAL_ListVScroll + kSAL_ListDrawingOn
};
 
 
enum
{
    kSAL_MagicSig = 0x4D584D21,             // 'MXM!' our magic signature
    kSAL_MaxMenus = 20,
    kSAL_MaxMenuItems = 128,
    kSAL_MaxButtons = 128,
    kSAL_MaxEventProc = 10,
    kSAL_AppleEventLoadingErr = 129,
    kSAL_EventPassThru = true,// This lets the event pass thru to the default handler
    kSAL_EventOverRide = false,             // This overides the event and doesn't call to the default handler
    kSAL_ResultNoErr = noErr,
    kSAL_ResultPassThru = 1,
    kSAL_ResultOverride = 0,
    kSAL_DefaultStackSize = (SInt32)(24 * 1024),
    kSAL_Margin = 5
};
 
typedef Str255              StringArray[];
typedef StringArray*        StringArray_Ptr;
typedef StringArray_Ptr*    StringArray_Hdl;
 
typedef ControlHandle       ControlArray[];
typedef ControlArray*       ControlArray_Ptr;
typedef ControlArray_Ptr*   ControlArray_Hdl;
 
// Opaque references
typedef struct ButtonItem_Struct**  ButtonItemRef;
typedef struct Group_Struct**       GroupRecRef;
typedef struct ListItem_Struct**    ListItemRef;
typedef struct ObjectItem_Struct**  ObjectRef;
typedef struct WindowItem_Struct**  WindowItemRef;
 
// ProcPtr's
typedef pascal void     (*SalAction_ProcPtr)(const ControlHandle pCtrlHdl,
                                         const SInt16 pPart);
 
typedef pascal OSErr    (*SalButtonHit_ProcPtr)(const ButtonItemRef pButtonItemRef,
                                             const SInt32 pModifiers);
 
typedef pascal OSErr    (*SalButtonUpdate_ProcPtr)(const SInt32 pModifiers);
typedef pascal OSErr    (*SalEvent_ProcPtr)(const EventRecord* pEventPtr);
typedef pascal Boolean  (*SalAbout_ProcPtr)(const SInt32 pData);
 
typedef pascal OSErr    (*SalListHit_ProcPtr)(const Boolean pIsDoubleClick,
                                           const Point pCell,
                                           const Rect* pBounds,
                                           const ListItemRef pListItemRef);
 
typedef pascal OSErr    (*SalListTrack_ProcPtr)(const EventRecord* pEventPtr,
                                             const ListItemRef pListItemRef);
 
typedef pascal OSErr    (*SalListUpdate_ProcPtr)(const RgnHandle pUpdateRgn_Hdl,
                                              const ListItemRef pListItemRef);
 
typedef pascal void     (*SalListDrawCell_ProcPtr)(const Point pCell,
                                               const Rect* pBounds,
                                               const ListItemRef pListItemRef);
 
typedef pascal OSErr    (*SalListIdle_ProcPtr)(const EventRecord* pEventPtr,
                                            const ListItemRef pListItemRef);
 
typedef pascal OSErr    (*SalListKey_ProcPtr)(EventRecord* pEventPtr,
                                           ListItemRef pListItemRef);
 
typedef pascal OSErr    (*SalMenuEvent_ProcPtr)(const SInt32 pMenuResult);
typedef pascal OSErr    (*SalMenuHit_ProcPtr)(const SInt32 pModifiers);
typedef pascal OSErr    (*SalMenuUpdate_ProcPtr)(const SInt32 pModifiers);
 
typedef pascal OSErr    (*SalWindowHit_ProcPtr)(const WindowItemRef pWIR,
                                             const EventRecord* pEventPtr);
 
typedef pascal OSErr    (*SalWindowUpdate_ProcPtr)(const SInt32 pModifiers);
typedef pascal OSErr    (*SalWindowResize_ProcPtr)(const WindowPtr pWindowPtr);
 
 
typedef pascal Boolean  (*SalGroupPreHit_ProcPtr)(const SInt32 pModifiers,
                                                 const Point pPoint,
                                                 const ControlArray_Ptr pCAP,
                                                 const SInt16 pCount);
 
typedef pascal OSErr    (*SalGroupPostHit_ProcPtr)(const SInt32 pModifiers,
                                                const ControlHandle pCtrl_Hdl,
                                                const ButtonItemRef pBIR,
                                                const SInt16 pItem);
 
typedef pascal OSErr    (*SalGroupUpdate_ProcPtr)(const WindowPtr pWindowPtr,
                                               const GroupRecRef pGroupRecRef);
 
/**\
|**|    external globals
\**/
 
extern SInt16           gSAL_NumberOfWindows;
extern WindowPtr        gSAL_CurrentWindow;
extern WindowItemRef    gSAL_CurrentWindowItemRef;
extern ControlHandle    gSAL_CurrentControl;
extern ListHandle       gSAL_CurrentList;
 
extern TextStyle        gSAL_DefaultStyle;
extern TextStyle        gSAL_TextStyle;
 
extern SysEnvRec        gSAL_Mac;
 
/**\
|**|    external function prototypes
\**/
//-----------------------------------------------------------------------------
//  Application
//-----------------------------------------------------------------------------
// Initialize SimpleApp
extern pascal void SAL_InitSimpleApp(const SInt16 pMasters,
                                     const Boolean pWantsStandardMenu);
// Run
extern pascal void SAL_Run(void);
 
extern pascal OSErr SAL_AddStringToList(const ListHandle pListID,
                                        const Str255 pStr255);
 
// Get & Set the print area
extern pascal void SAL_GetPrintArea(const WindowPtr pWindowPtr,
                                    Rect* pBounds);
extern pascal void SAL_SetPrintArea(const WindowPtr pWindowPtr,
                                    const Rect* pBounds);
 
// Print no CR
extern pascal void SAL_Print(const StringPtr pStringPtr);
// Print with CR
extern pascal void SAL_PrintLine(const StringPtr pStringPtr);
// Print a buffer full of text with CR
extern pascal void SAL_PrintTextHandle(const Handle pText_Hdl);
 
extern pascal void SAL_SetCursorBusy(void);
extern pascal void SAL_DefaultCursor(void);
//-----------------------------------------------------------------------------
//  Controls
//-----------------------------------------------------------------------------
extern pascal Rect SAL_GetGroupBounds(GroupRecRef pGroupRecRef);
 
extern pascal OSErr SAL_InstallCheckBox(const SInt32 pButtonID,
                                        const WindowPtr pWindowPtr,
                                        const Str255 pName,
                                        const Rect* pRect,
                                        const UInt8 pCmdKey,
                                        const SInt16 pInitialValue,
                                        const SalButtonHit_ProcPtr pBHP,
                                        const SalButtonUpdate_ProcPtr pBUP);
 
extern pascal OSErr SAL_InstallPushButton(const SInt32 pButtonID,
                                          const WindowPtr pWindowPtr,
                                          const Str255 pName,
                                          const Rect* pRect,
                                          const UInt8 pCmdKey,
                                          const SalButtonHit_ProcPtr pBHP,
                                          const SalButtonUpdate_ProcPtr pBUP);
 
extern pascal OSErr SAL_InstallRadioGroup(const SInt32 pGroupID,
                                          const WindowPtr pWindowPtr,
                                          const SInt16 pCount,
                                          const Str255 pTitle,
                                          const StringArray_Ptr pNames,
                                          const Rect* pRect,
                                          const SInt16 pDefaultItem,
                                          const SInt16 pSpacingH,
                                          const SInt16 pSpacingV,
                                          const SInt16 pButtonHeight,
                                          const SInt16 pButtonWidth,
                                          const SalGroupPreHit_ProcPtr pPreGHP,
                                          const SalGroupPostHit_ProcPtr pPostGHP,
                                          const SalGroupUpdate_ProcPtr pGUP);
 
extern pascal void SAL_DisableMe(void);
extern pascal void SAL_EnableMe(void);
 
extern pascal void SAL_SetTitle(const StringPtr pTitle);
//-----------------------------------------------------------------------------
//  Error Unit
//-----------------------------------------------------------------------------
extern pascal void SAL_ErrorMessage(const StringPtr pMessage,
                                    const OSStatus pOSStatus,
                                    const SInt16 pFlags);
//-----------------------------------------------------------------------------
//  Lists
//-----------------------------------------------------------------------------
extern pascal OSErr SAL_InstallList(const SInt32 pListID,
                                    const WindowPtr pWindowPtr,
                                    const Point pCellSize,
                                    const Rect* pRect,
                                    const SalListHit_ProcPtr pLHP,
                                    const SalListTrack_ProcPtr pLTP,
                                    const SalListUpdate_ProcPtr pLUP,
                                    const SalListDrawCell_ProcPtr pLDCP,
                                    const ListDefUPP pLDefUPP,
                                    const SInt32 pFlags);
//-----------------------------------------------------------------------------
//  Menus
//-----------------------------------------------------------------------------
extern pascal OSErr SAL_AttachMenuToMenuItem(const SInt16 pMenuIDToAdd,
                                             const SInt16 pAttachMenuID,
                                             const SInt16 pAttachMenuItem);
 
extern pascal OSErr SAL_InstallFontMenu(const SInt16 pMenuID,
                                        const Str255 pName,
                                        const Boolean pIsHeirarchical,
                                        const SalMenuHit_ProcPtr pMHP,
                                        const SalMenuUpdate_ProcPtr pMUP);
 
extern pascal OSErr SAL_InstallMenu(const SInt16 pMenuID,
                                    const Str255 pMenuTitle,
                                    const Boolean pIsHierarchical,
                                    const SalMenuHit_ProcPtr pMHP,
                                    const SalMenuUpdate_ProcPtr pMUP);
 
extern pascal OSErr SAL_InstallMenuItem(const SInt16 pMenuID,
                                        const SInt16 pMenuItem,
                                        const Str255 pMenuTitle,
                                        const char pMarkChar,
                                        const char pCmdChar,
                                        const SalMenuHit_ProcPtr pMHP,
                                        const SalMenuUpdate_ProcPtr pMUP);
 
extern pascal OSErr SAL_InstallResourceMenu(const SInt16 pMenuID,
                                            const Str255 pMenuTitle,
                                            const OSType pResType,
                                            const Boolean pIsHiearchical,
                                            const SalMenuHit_ProcPtr pMHP,
                                            const SalMenuUpdate_ProcPtr pMUP);
//-----------------------------------------------------------------------------
//  Objects
//-----------------------------------------------------------------------------
extern pascal void SAL_DisableObject(const SInt32 pThing);
extern pascal void SAL_EnableObject(const SInt32 pThing);
 
extern pascal SInt32 SAL_GetObjectRefCon(const SInt32 pThing);
extern pascal void SAL_SetObjectRefCon(const SInt32 pThing,
                                       SInt32 pRefCon);
 
extern pascal Handle SAL_GetObjectHandle(const SInt32 pThing);
//-----------------------------------------------------------------------------
//  ProcUnit
//-----------------------------------------------------------------------------
extern pascal void SAL_InstallIdleProc(const SalEvent_ProcPtr pEventProc);
extern pascal void SAL_InstallAboutProc(const SalAbout_ProcPtr pAboutProc);
//-----------------------------------------------------------------------------
//  ScrollBars
//-----------------------------------------------------------------------------
extern pascal OSErr SAL_InstallScrollBar(const SInt32 pButtonID,
                                         const WindowPtr pWindowPtr,
                                         const Str255 pName,
                                         const Rect* pRect,
                                         const UInt8 pCmdKey,
                                         const SalAction_ProcPtr pSHP,
                                         const SalAction_ProcPtr pSBP,
                                         const SalAction_ProcPtr pSIP);
//-----------------------------------------------------------------------------
//  Utils
//-----------------------------------------------------------------------------
extern pascal SInt8 SAL_LockHandle(Handle pHandle);
extern pascal void SAL_UnlockHandle(Handle pHandle,
                                    const SInt8 pState);
 
// This Sets a rects anchor point
extern pascal void SAL_SetRectLocation(Rect* pRect,
                                       const SInt16 pH,
                                       const SInt16 pV);
 
// This Sets its size without changing its position
extern pascal void SAL_SetRectDimensions(Rect* pRect,
                                         const SInt16 pH,
                                         const SInt16 pV);
//-----------------------------------------------------------------------------
//  Windows
//-----------------------------------------------------------------------------
// Deprecated funtion do not use
extern pascal SInt16 SAL_GetDocWindow(SInt16 pResID);
extern pascal SInt16 SAL_GetDocumentWindow(const SInt16 pResID,
                                           WindowPtr* pWindowPtr);
extern pascal void SAL_SetWindowUpdateProc(const WindowPtr pWindowPtr,
                                           const SalWindowUpdate_ProcPtr pWindowUpdateProc);
extern pascal void SAL_SetWindowResizeProc(const WindowPtr pWindowPtr,
                                           const SalWindowResize_ProcPtr pWRP);
extern pascal OSErr SAL_DoWindowClose(const WindowPtr pWindowPtr);
//-----------------------------------------------------------------------------
#if PRAGMA_STRUCT_ALIGN
#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
#pragma pack()
#endif
 
#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif
 
#ifdef __cplusplus
}
#endif
 
#endif SAL_PUBLIC_H