home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Libraries / SAT 2.4.0 / SAT 2.4.0 update 2 / SAT.h < prev   
Encoding:
C/C++ Source or Header  |  1997-03-31  |  10.5 KB  |  295 lines  |  [TEXT/KAHL]

  1. /* #include file for SAT */
  2.  
  3. #ifndef __SAT__
  4.  
  5. #define __SAT__
  6.  
  7. #pragma once
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11.  
  12. #ifdef __MWERKS__
  13. #pragma options align=mac68k
  14. #endif
  15.  
  16. #ifndef true
  17. #define true 1
  18. #endif
  19.  
  20. #ifndef false
  21. #define false 0
  22. #endif
  23.  
  24. #ifndef nil
  25. #define nil 0L
  26. #endif
  27.  
  28.     typedef struct SATPort {
  29.         GrafPtr        port;
  30.         GDHandle    device;
  31.         Ptr                rows;
  32.         Rect            bounds;
  33.         Ptr                baseAddr;
  34.         short            rowBytes;
  35.     } SATPort;
  36.     
  37.     typedef struct Sprite *SpritePtr;    // Pre-declare for the drawProc below.
  38.  
  39.     typedef struct Face {
  40.         char            *colorData;
  41.         short            resNum;
  42.         BitMap            iconMask;
  43.         short            rowBytes; /* Note! No flags in the highest bits!*/
  44.         struct Face        *next;
  45.         RgnHandle        maskRgn;
  46.         Ptr    rows, maskRows;
  47.         pascal void (*redrawProc)(struct Face *, short);    //Called on depth changes, not needed if the face is loaded from a cicn}
  48.         pascal void (*drawProc)(struct Face *, SpritePtr, SATPort *, Point srcPt, Point dstPt, short width, short height); // Untested from C so far!
  49.         } Face, *FacePtr;
  50.  
  51.     typedef struct Sprite {
  52. /* Variables that you should change as appropriate */
  53.         short            kind;
  54.         Point            position;
  55.         Rect            hotRect, hotRect2;    // Only change hotRect, SAT handles hotRect2
  56.         FacePtr            face;
  57.         pascal void        (*task) (struct Sprite *);
  58.         pascal void        (*hitTask) (struct Sprite *, struct Sprite *);
  59.         pascal void        (*destructTask) (struct Sprite *);
  60.         RgnHandle        clip; /* Clip region to be used when this sprite is drawn. */
  61. /* SAT variables that you shouldn't change: */
  62.         Point            oldpos;
  63.         struct Sprite    *next, *prev;
  64.         Rect            r, oldr;
  65.         FacePtr        oldFace;            //Used by RunSAT2
  66.         Boolean        dirty;        //Used by RunSAT2
  67. /* Variables for free use by the application: */
  68.         short        layer;
  69. #ifdef SATCPP_H
  70.         Ptr            spriteBegin;
  71. #else
  72.         Point            speed;
  73.         short        mode;
  74.         Ptr            appPtr;
  75.         long            appLong;
  76. #endif
  77.         } Sprite;
  78.  
  79. typedef struct{
  80.         short    patternType;     /* 1 = Pattern, PatHandle, 2 = PixPat, PixPatHandle */
  81.         PixPatHandle    thePat;         /* or PatHandle */
  82.         }    SATPattern, *SATPatPtr, **SATPatHandle;
  83.  
  84. #define    UpdatePtr    Ptr
  85.  
  86. typedef struct {
  87.         SATPort        wind;
  88.         short            offSizeH, offSizeV;
  89.         SATPort        offScreen, backScreen;
  90.         long            ox, oy;
  91.         short            pict, bwpict;
  92.         Boolean        fitThePICTs;
  93.         short            sorting, collision, searchWidth;
  94.         PixMapHandle    screen;
  95.         Rect            bounds;
  96.         short            initDepth;
  97.         pascal Boolean    (*synchHook) ();
  98.         SpritePtr        sRoot;
  99.         UpdatePtr        updateRoot;
  100.         Boolean        anyMonsters;
  101.  
  102.         CGrafPtr        ditherOff;
  103.         GDHandle        ditherOffGD;
  104.         SATPort            iconPort;
  105.         SATPort            iconPort2;
  106.         GrafPtr            bwIconPort;
  107.  
  108. /* Environment-independent globals: */
  109.         FacePtr            faceRoot;    /* Face list */
  110.         Boolean            colorFlag; /* Is this Mac color capable? */
  111. /*Blitters! You should not change these fields yourself. (Possibly for installing a blitter in your program code.)*/
  112.         ProcPtr    rectBlit1, maskBlit1;                //{Supplied - this is either RBlt/MBlt 0 or 1}
  113.         ProcPtr    rectBlit2, maskBlit2;                //{Will probably never be used}
  114.         ProcPtr    rectBlit4, maskBlit4;                //{Supplied}
  115.         ProcPtr    rectBlit8, maskBlit8;                //{Supplied}
  116.         ProcPtr    rectBlit16, maskBlit16;            //{Not supplied}
  117.         ProcPtr    rectBlit32, maskBlit32;            //{Not supplied}
  118.         ProcPtr    curRectBlit, curMaskBlit;        //{Currently selected fast blitter}
  119.  
  120.         Rect    screenLocalDrawingArea;
  121.         SpritePtr    trashList;
  122.         } SATglobalsRec;
  123.  
  124. /* Constants for SATConfigure */
  125.     enum{kVPositionSort=0, kLayerSort, kNoSort};
  126.     enum{kKindCollision=0, kForwardCollision, kBackwardCollision, kNoCollision, kForwardOneCollision};
  127.  
  128. // For CodeWarrior C, 68k (due to capitalization problems):
  129. // Note: If you have link problems associated with gSAT, you may have
  130. // to activate or deactivate this #define!
  131. #ifdef __MWERKS__
  132. #ifndef powerc
  133. #define gSAT GSAT
  134. #endif
  135. #endif
  136.  
  137. /* Global variables */
  138.     extern SATglobalsRec    gSAT;    /* Most globals */
  139.     extern pascal void        (*gSoundErrorProc)(OSErr); /* Sound errors reported here */
  140.  
  141. /* SAT routines */
  142.  
  143.     typedef pascal void (*TaskPtr)(SpritePtr);
  144.     typedef pascal Boolean (*SynchPtr)(void);
  145.     typedef pascal void (*EmergencyPtr)(void);
  146.  
  147. /* Initialization */
  148.     pascal void SATConfigure(Boolean, short, short, short);
  149.     pascal void SATInit (short, short, short, short);
  150.     pascal void SATCustomInit (short, short, Rect *, WindowPtr, GDHandle, Boolean, Boolean, Boolean, Boolean, Boolean);
  151. /* Maintainance, background manipulation etc. */
  152.     pascal Boolean SATDepthChangeTest(void);
  153.     pascal void SATDrawPICTs (short, short);
  154.     pascal void SATRedraw(void);
  155. /* Drawing */
  156.     pascal void SATPlotFace(FacePtr, SATPort*, Point, Boolean); /*Draw a Face (icon).*/
  157.     pascal void SATPlotFaceToScreen(FacePtr, Point, Boolean);
  158.     pascal void SATCopyBits(SATPort*, SATPort*, GDHandle, Rect*, Rect*, Boolean);
  159.     pascal void SATCopyBitsToScreen(SATPort*, Rect*, Rect*, Boolean);
  160.     pascal void SATBackChanged (Rect *); /*Tell SAT about changes in BackScreen*/
  161. /* SetPort replacements */
  162.     pascal void SATGetPort (SATPort*);
  163.     pascal void SATSetPort (SATPort*);
  164.     pascal void SATSetPortOffScreen(void); /*Use before Quick-Drawing on offScreen*/
  165.     pascal void SATSetPortBackScreen(void); /*Use before Quick-Drawing on BackScreen*/
  166.     pascal void SATSetPortScreen(void); /*Use to restore after drawing off/backscreen*/
  167. /* Sprite handling */
  168.     pascal FacePtr SATGetFace (short);
  169.     pascal void SATDisposeFace (FacePtr);
  170.     pascal SpritePtr SATNewSprite (short,short,short, TaskPtr); // (*void)(SpritePtr));
  171.     pascal SpritePtr SATNewSpriteAfter (SpritePtr,short,short,short, TaskPtr);
  172.     pascal void SATKillSprite (SpritePtr);
  173. /* Animating */
  174.     pascal void SATRun (Boolean);
  175.     pascal void    SATRun2 (Boolean); //Alternate routine for allowing resting sprites}
  176. /* Advanced special-purpose calls */
  177.     pascal void SATInstallSynch (SynchPtr);
  178.     pascal void SATInstallEmergency (EmergencyPtr);
  179.     pascal void SATSetSpriteRecSize (long);
  180.     pascal void SATSkip(void);
  181.     pascal void SATKill(void); /*Dispose of offscreen buffers to allow re-init*/
  182.     pascal void SATWindMoved(void);            /* For programs with moveable animation window and fast animation */
  183. /* Offscreen - use only if you need an *extra* offscreen buffer. These calls are likely to change in the future!*/
  184.     pascal void SATMakeOffscreen (SATPort*, Rect*);    /*Make offscreen buffer in current screen depth and CLUT.*/
  185.     pascal void SATDisposeOffScreen (SATPort*);        /*Get rid of offscreen*/
  186.     pascal OSErr CreateOffScreen (Rect*, short, CTabHandle, CGrafPtr*, GDHandle*); /*From Principia Offscreen*/
  187.     pascal void DisposeOffScreen (CGrafPtr, GDHandle);            /*From Principia Offscreen*/
  188. /* Face manipulation */
  189.     pascal void SATSetPortMask (FacePtr);
  190.     pascal void SATSetPortFace (FacePtr);
  191.     pascal void SATSetPortFace2 (FacePtr);
  192.     pascal FacePtr SATNewFace (Rect*);
  193.     pascal void SATChangedFace (FacePtr);
  194.  
  195. /* Most common old names, uncomment for compatibility with old programs */
  196. // #define ConfigureSAT        SATConfigure
  197. // #define InitSAT            SATInit
  198. // #define CustomInitSAT    SATCustomInit
  199. // #define KillSAT            SATKill
  200. // #define RunSAT            SATRun
  201. // #define SkipSAT            SATSkip
  202. // #define GetFace            SATGetFace
  203. // #define DisposeFace        SATDisposeFace
  204. // #define NewSprite        SATNewSprite
  205. // #define NewSpriteAfter    SATNewSpriteAfter
  206. // #define KillSprite        SATKillSprite
  207. // #define NewFace            SATNewFace
  208. // #define ChangedFace        SATChangedFace
  209. // #define PeekOffscreen    SATRedraw
  210.  
  211. // "Safe" blitter routines, using QuickDraw.
  212. pascal void SATSafeRectBlit(SATPort *srcPort, SATPort *dstPort, Rect *r);
  213. pascal void SATSafeMaskBlit(FacePtr face, SpritePtr theSprite, SATPort *dstPort, Point srcPt,Point dstPt,short width,short height);
  214.  
  215. /* New procedures, EXPERIMENTAL, intended for making a C++ interface */
  216.     pascal SpritePtr SATNewSpritePP(SpritePtr, Ptr, short, short, short, TaskPtr);
  217.     pascal void SATCopySprite(SpritePtr, const Sprite *);
  218. //    pascal void SATCopySprite(SpritePtr, SpritePtr);
  219.     pascal FacePtr SATNewFacePP(Rect*, Ptr);
  220.     pascal FacePtr SATGetFacePP (short, Ptr);
  221.     pascal void SATCopyFace(FacePtr, const Face *);
  222. //    pascal void SATCopyFace(FacePtr, FacePtr);
  223.     pascal void SATDisposeFacePP (FacePtr);
  224.  
  225. /* Cicn utilities */
  226.     pascal CIconHandle SATGetCicn (short);
  227.     pascal void SATPlotCicn (CIconHandle, GrafPtr, GDHandle, Rect*);
  228.     pascal void SATDisposeCicn (CIconHandle);
  229.  
  230. /*Utilities*/
  231.     pascal void SATSetStrings (Str255, Str255, Str255, Str255, Str255, Str255, Str255, Str255);
  232.     pascal Boolean SATTrapAvailable (short);
  233.     pascal void SATDrawInt (short);
  234.     pascal void SATDrawLong (long);
  235.     pascal short SATRand (short);
  236.     pascal short SATRand10(void);
  237.     pascal short SATRand100(void);
  238.     pascal void SATReportStr (Str255);
  239.     pascal Boolean SATQuestionStr(Str255);
  240.     pascal void CheckNoMem (Ptr); /*If the Ptr is nil, out of memory emergency exit*/
  241.     pascal short SATFakeAlert (Str255, Str255, Str255, Str255, short, short, short, Str255, Str255, Str255);
  242.     pascal void SATSetMouse (Point);
  243.     pascal void SATInitToolbox(void);
  244.     pascal void SATGetVersion(Str255 versionString);
  245. /* Pattern utilities */
  246.     pascal void SATPenPat (SATPatHandle);
  247.     pascal void SATBackPat (SATPatHandle);
  248.     pascal SATPatHandle SATGetPat (short);
  249.     pascal void SATDisposePat (SATPatHandle);
  250. /* Menu bar utilities */
  251.     pascal void SATShowMBar(WindowPtr);
  252.     pascal void SATHideMBar(WindowPtr);
  253. /* PICT utilities */
  254.     pascal void SATGetandDrawPICTRes (short id);
  255.     pascal void SATGetandDrawPICTResInRect (short id, Rect *frame);
  256.     pascal void SATGetandCenterPICTResInRect (short id, Rect *frame);
  257. /*Sound*/
  258.     pascal void SATInitSound(void);            /* No longer necessary */
  259.     pascal void SATSoundPlay (Handle, short, Boolean);    /* Play sounds with priority handling */
  260.     pascal void SATSoundShutup(void);        /*Silence, dispose of sound channel*/
  261.     pascal void SATSoundEvents(void);        /* Call this once in a while when not calling RunSAT often */
  262.     pascal Boolean SATSoundDone(void);    /* Any sound going on?*/
  263.     pascal Handle SATGetSound (short);
  264.     pascal Handle SATGetNamedSound (Str255);
  265.     pascal void SATDisposeSound (Handle);
  266.     pascal void SATSoundOn(void);
  267.     pascal void SATSoundOff(void);
  268. /* Multi-channel sound routines */
  269.     pascal short SATSoundInitChannels (short);
  270.     pascal Boolean SATSoundDoneChannel (short);
  271.     pascal void SATSoundPlayChannel (Handle, short);
  272.     pascal void SATSoundReserveChannel (short, Boolean);
  273.     pascal void SATSoundShutupChannel (short);
  274.     pascal void SATPreloadChannels(void);
  275. /* Experimental, likely to be renamed/removed/changed: */
  276.     pascal void SATSoundPlay2 (Handle, short, Boolean,Boolean);
  277.     pascal void SATSoundPlayEasy (Handle, Boolean);
  278. /* More multi-channel: */
  279.     pascal int SATGetNumChannels(void);
  280.     pascal Ptr SATGetChannel (int);
  281. /* Customization */
  282.     pascal void SATSetSoundInitParams (long);
  283. /* Step-scrolling */
  284.     pascal Boolean SATStepScroll (Point viewPoint, short marginH, short marginV, short scrollSpeed);
  285.  
  286. #ifdef __MWERKS__
  287. #pragma options align=reset
  288. #endif
  289.  
  290. #ifdef __cplusplus
  291. }
  292. #endif
  293.  
  294. #endif
  295.