home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / MACtive Desktop / Source / Sources / Main.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-25  |  4.6 KB  |  235 lines  |  [TEXT/CWIE]

  1. #include <Appearance.h>
  2. #include <Dialogs.h>
  3. #include <Fonts.h>
  4. #include <Gestalt.h>
  5. #include <TextEdit.h>
  6. #include "AppleEvent.h"
  7. #include "AppleMenu.h"
  8. #include "BaseEventManager.h"
  9. #include "BaseMenuManager.h"
  10. #include "BaseWindowManager.h"
  11. #include "EventManager.h"
  12. #include "EditMenu.h"
  13. #include "FileMenu.h"
  14. #include "MenuManager.h"
  15. #include "WindowManager.h"
  16. #include "Main.h"
  17. //#include "swarm.h"
  18. #include "Notice.h"
  19. #include "PhaseShiftNub.h"
  20.  
  21.  
  22.  
  23.  
  24. OSErr InitPSModule(long *ticks);
  25. OSErr DrawPSModule(GrafPtr deskPort, Boolean idle);
  26. void ClosePSModule(void);
  27. pascal void PhaseShiftUpdate(CGrafPtr port,RgnHandle rgn);
  28.  
  29.  
  30.  
  31.  
  32.  
  33. SystemWindowEventHandlerUPP            gSystemWindowEventHandlerProc = NULL;
  34. EventManager                        *gEventManager = NULL;
  35. MenuManager                            *gMenuManager = NULL;
  36. WindowManager                        *gWindowManager = NULL;
  37. Boolean                                gHasAppearance = false;
  38. Boolean                                gExitFlag = false;
  39.  
  40.  
  41. FileMenu                            *gFileMenu = NULL;
  42. PhaseShiftInfo                        *gPSInfo = NULL;
  43. //void                                 *gSwarmData = NULL;
  44.  
  45.  
  46.  
  47. #if GENERATINGPOWERPC
  48. RoutineDescriptor            gPhaseShiftUpdateRD = BUILD_ROUTINE_DESCRIPTOR(uppPhaseShiftUpdateProcInfo,PhaseShiftUpdate);
  49. RoutineDescriptor            *gPhaseShiftUpdateUPP = (RoutineDescriptor*)&gPhaseShiftUpdateRD;
  50. #else
  51. PhaseShiftUpdateUPP            gPhaseShiftUpdateUPP = PhaseShiftUpdate;
  52. #endif
  53.  
  54.  
  55.  
  56.  
  57.  
  58. void main(void)
  59. {
  60.     OSStatus    err;
  61.     
  62.     
  63.     InitializeToolBox();
  64.     InitializeAppleEvents();
  65.     
  66.     gSystemWindowEventHandlerProc = NewSystemWindowEventHandlerProc(SystemWindowEventHandler);
  67.     gEventManager = new BaseEventManager;
  68.     gMenuManager = new BaseMenuManager;
  69.     gWindowManager = new BaseWindowManager;
  70.     
  71.     new AppleMenu;
  72.     gFileMenu = new FileMenu;
  73.     new EditMenu;
  74.     DrawMenuBar();
  75.     
  76.     err = Gestalt(kPhaseShiftSelector,(long*)&gPSInfo);
  77.     if (!((err == noErr) && gPSInfo && gPSInfo->registerProc))
  78.     {
  79.         PostNotice(kAlertStopAlert,"\pPhaseShiftNub isn't loaded!",
  80.                 "\pYou cannot run this application without the PhaseShiftNub installed.");
  81.         ExitToShell();
  82.     }
  83.     
  84.     // CallPhaseShiftRegisterProc(gPSInfo->registerProc,gPhaseShiftUpdateUPP);
  85.     CallPhaseShiftRegisterProc(gPSInfo->registerProc,nil);
  86.     
  87.     {
  88.         WindowPtr    daport;
  89.         RgnHandle    rgn;
  90.         RGBColor    color = { 0, 0, 0 };
  91.         long        tic = 1;
  92.         
  93.         CallPhaseShiftBeginDrawProc(gPSInfo->beginDrawProc,(CGrafPtr*)&daport,&rgn);
  94.         
  95.         // RGBBackColor(&color);
  96.         // EraseRect(&daport->portRect);
  97.         
  98.         //gSwarmData = NewSwarm(200,&daport->portRect,(WindowPtr)daport);
  99.         err = InitPSModule(&tic);
  100.         
  101.         CallPhaseShiftEndDrawProc(gPSInfo->endDrawProc);
  102.         
  103.         if (err != noErr)
  104.         {
  105.             PostNotice(kAlertStopAlert,"\pInitPSModule had a problem!",
  106.                     "\pBetter luck next year.");
  107.             
  108.             // CallPhaseShiftUnregisterProc(gPSInfo->unregisterProc,gPhaseShiftUpdateUPP);
  109.             CallPhaseShiftUnregisterProc(gPSInfo->unregisterProc,nil);
  110.             ExitToShell();
  111.         }
  112.     }
  113.     
  114.     MainEventLoop();
  115.     
  116.     if (gPSInfo->unregisterProc)
  117.         // CallPhaseShiftUnregisterProc(gPSInfo->unregisterProc,gPhaseShiftUpdateUPP);
  118.         CallPhaseShiftUnregisterProc(gPSInfo->unregisterProc,nil);
  119.     
  120.     ClosePSModule();
  121.         
  122. //    if (gSwarmData)
  123. //    {
  124. //        DisposeSwarm(gSwarmData);
  125. //        gSwarmData = NULL;
  126. //    }
  127. }
  128.  
  129.  
  130.  
  131.  
  132.  
  133. void InitializeToolBox(void)
  134. {
  135.     long    result;
  136.     OSErr    err;
  137.     
  138.     
  139.     // Expand our heap to is maximum, this
  140.     // will help keep fragmentation low, etc.
  141.     MaxApplZone();
  142.     
  143.     // Init toolbox.
  144.     InitGraf(&qd.thePort);
  145.     InitFonts();
  146.     InitWindows();
  147.     InitMenus();
  148.     InitCursor();
  149.     TEInit();
  150.     FlushEvents(everyEvent,0);
  151.     InitDialogs(NULL);
  152.     
  153.     // Check for Appearance Manager.
  154.     err = Gestalt('appr',&result);
  155.     gHasAppearance = ((err == noErr) && (result & 1));
  156.     if (gHasAppearance)
  157.         RegisterAppearanceClient();
  158. }
  159.  
  160.  
  161.  
  162.  
  163.  
  164. void SubEventLoop(short eventMask)
  165. {
  166.     EventRecord    event;
  167.     Boolean        result;
  168.     
  169.     
  170.     result = WaitNextEvent(eventMask,&event,0,NULL);
  171.     gEventManager->DoDispatch(&event,false);
  172.     
  173.     //if (gSwarmData)
  174.     {
  175.         WindowPtr    daport;
  176.         RgnHandle    rgn;
  177.         // RGBColor    color = { 0, 0, 0 };
  178.         
  179.         
  180.         CallPhaseShiftBeginDrawProc(gPSInfo->beginDrawProc,(CGrafPtr*)&daport,&rgn);
  181.         
  182.         // RGBBackColor(&color);
  183.         //SwarmIdle(gSwarmData);
  184.         DrawPSModule((GrafPtr)daport,true);
  185.         
  186.         CallPhaseShiftEndDrawProc(gPSInfo->endDrawProc);
  187.     }
  188. }
  189.  
  190.  
  191.  
  192.  
  193.  
  194. void MainEventLoop(void)
  195. {
  196.     gExitFlag = false;
  197.     while(!gExitFlag)
  198.         SubEventLoop(everyEvent);
  199. }
  200.  
  201.  
  202.  
  203.  
  204.  
  205. pascal OSErr SystemWindowEventHandler(WindowPtr pWindow, EventRecord *evt, short partCode, Boolean *handled)
  206. {
  207.     gEventManager->DoDispatch(evt,true);
  208.     *handled = true;
  209.     return noErr;
  210. }
  211.  
  212.  
  213.  
  214.  
  215.  
  216. pascal void PhaseShiftUpdate(CGrafPtr port,RgnHandle rgn)
  217. {
  218.     DrawPSModule((GrafPtr)port,false);
  219.  
  220. /*
  221.     RGBColor    color = { 0, 0, 0 };
  222.     Rect        r;
  223.     
  224.     
  225.     r.left = -32766;
  226.     r.top = -32766;
  227.     r.right = 32766;
  228.     r.bottom = 32766;
  229.     
  230.     RGBBackColor(&color);
  231.     EraseRect(&r);
  232.     //DrawPSModule((GrafPtr)port,false);
  233. */
  234. }
  235.