home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 2 / MacMania 2.toast / Demo's / Tools&Utilities / Programming / ViewIt 2.24 / C Demo Projects / Metrowerks C 1.0a4 Demos / FaceProcMC.c next >
Encoding:
C/C++ Source or Header  |  1994-04-11  |  3.0 KB  |  103 lines  |  [TEXT/MMCC]

  1. /* FaceWare 2.24 Initialization & Dispatching Procedures */
  2. /* ©FaceWare 1989-94.  All Rights Reserved. */
  3.  
  4. #include "FaceStorMC.h"
  5. struct FaceRec fRec;
  6. //#ifdef powerc
  7. //    QDGlobals qd;
  8. //#endif
  9.  
  10. typedef struct HeadRec {
  11.         ProcPtr        addr;
  12.         short            baseID;
  13.         short            versID;
  14.         short            message;
  15.         short            resID;
  16.         Ptr                fPtr;
  17.     } HeadRec,    *HeadPtr;
  18.  
  19. void PrepIt (long x, long b, long v, long r, long f)
  20.     {
  21.     short i;
  22.     ((HeadPtr)x)->addr    = (ProcPtr)*GetResource('FCMD',1000);
  23.     ((HeadPtr)x)->baseID  = b;
  24.     ((HeadPtr)x)->versID  = v;
  25.     ((HeadPtr)x)->message = 0;
  26.     ((HeadPtr)x)->resID     = r;
  27.     ((HeadPtr)x)->fPtr    = (Ptr)f;
  28.     if (fRec.xEntries > 0) 
  29.      for (i = 0; i <= fRec.xEntries - 1; i++)
  30.         if (((HeadPtr)x)->baseID == fRec.xTable[i * 4])
  31.          if (((HeadPtr)x)->versID == fRec.xTable[1 + i * 4])
  32.           if (fRec.xTable[3 + i * 4] != 0)
  33.              ((HeadPtr)x)->addr = (ProcPtr)fRec.xTable[3 + i * 4];
  34.     }
  35.  
  36. #ifndef powerc
  37. pascal void fJumpIt(void* thePtr) = {0x2257,0x2051,0x4E90};
  38. #endif
  39.  
  40. void FaceIt (void* thePtr, long m1, long m2, long m3, long m4, long m5)
  41.     {
  42.     short i;
  43.     if (m1 == DoInit) {
  44.         if (m4 > -1 && !BitTst(&m4, 31L)) {
  45.             FlushEvents(62, 0);            /* ignore spurious mouse and key events */
  46.             InitGraf(&qd.thePort);    /* perform appropriate Mac initializations */
  47.             InitFonts();
  48.             InitWindows();
  49.             InitMenus();
  50.             TEInit();
  51.             InitDialogs(0L);
  52.             }
  53.         c2pstr(fRec.uName);
  54.         if (GetResource('FCMD', 1000) == 0)    /* LoadIt available? */
  55.          if (OpenResFile((StringPtr)StripAddress((Ptr)fRec.uName)) < 0)
  56.              ExitToShell();                                        /* quit if not found */
  57.         fRec.fFlags = m2;                /* store FaceIt bit flags    */
  58.         fRec.xEntries = m5;            /* store # of table entries */
  59.         thePtr = (Ptr)&fRec;    
  60.         if (m3 > -1) {                    /* call LoadIt to expand heap? */
  61.             PrepIt((long)thePtr,m3,0L,0L,(long)thePtr);
  62. #ifdef powerc
  63.             CallUniversalProc(*(UniversalProcPtr*)thePtr,192,thePtr);
  64. #else
  65.             fJumpIt(thePtr);
  66. #endif
  67.             }
  68.         PrepIt((long)thePtr,1100L,22L,0L,(long)thePtr);           /* setup fRec header    */
  69.         PrepIt((long)fRec.uHead,1210L,22L,0L,(long)thePtr);  /* setup uRec header    */
  70.         PrepIt((long)fRec.vHead,1200L,22L,0L,(long)thePtr);  /* setup vRec header    */
  71.         fRec.fHead[5] = m4;            /* store environment type    */
  72.         fRec.uHead[5] = 1;            /* store string type */
  73.         thePtr = 0L;
  74.         if (m4 < -3) return;
  75.         }
  76.     if (m1 == DoPrep)
  77.         PrepIt(m2, m3, m4, m5, (long)&fRec);
  78.     else if (m1 < 0 && m1 > -11) {
  79.         i = (4 * (-1 - m1));
  80.         fRec.xTable[i] = m2;
  81.         fRec.xTable[1 + i] = m3;
  82.         fRec.xTable[2 + i] = m4;
  83.         fRec.xTable[3 + i] = m5;}
  84.     else {
  85.         if (thePtr == 0L)                                                                    /* default module? */
  86.             thePtr = (Ptr)fRec.uHead; 
  87.         else if (((HeadPtr)thePtr)->fPtr != (Ptr)&fRec) { /* control driver? */
  88.             fRec.cControl = (ControlHandle)thePtr;
  89.             thePtr = (Ptr)fRec.vHead;}
  90.         ((HeadPtr)thePtr)->message = 0;
  91.         fRec.uCommand = m1;            /* pass Command & Params */
  92.         fRec.uParam[0] = m2;
  93.         fRec.uParam[1] = m3;
  94.         fRec.uParam[2] = m4;
  95.         fRec.uParam[3] = m5;
  96. #ifdef powerc
  97.         CallUniversalProc(*(UniversalProcPtr*)thePtr,192,thePtr);
  98. #else
  99.         fJumpIt(thePtr);                /* jump to FCMD module */
  100. #endif
  101.         }
  102.     }
  103.