home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Applications / GetKeys 0.1 / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-27  |  4.8 KB  |  287 lines  |  [TEXT/KAHL]

  1. /*
  2.  * © SPDsoft, August 29, 1995
  3.  * A Quick&Dirty™ Hack to find out about GetKeys()
  4.  */
  5.  
  6. #include <stdio.h>
  7.  
  8.     /* Menu items */
  9.  
  10. #define kMainMBAR_ID        128
  11.  
  12. #define kAppleMenu            140
  13. #define kFileMenu            141
  14. #define kEditMenu            142
  15.  
  16. #define    kfmQuit                1
  17.  
  18. #define kemUndo             1
  19. #define kemCut                3
  20. #define kemCopy                4
  21. #define kemPaste            5
  22. #define kemClear            6
  23.  
  24.  
  25. Rect        gWRect;
  26. WindowPtr    gWindow;
  27. Handle        gMenuBar;
  28. Str255        gStr="\p";
  29.  
  30. void InitToolbox(void);
  31. static Boolean DoMouseDown(short windowPart, WindowPtr whichWindow, EventRecord *theEvent);
  32. Boolean EventLoop( void );
  33. static Boolean DoCommand( long mResult );
  34.  
  35. void InitToolbox(void)
  36. {
  37.     InitGraf((Ptr) &qd.thePort);
  38.     InitFonts();
  39.     InitWindows();
  40.     InitMenus();
  41.     FlushEvents(everyEvent,0);
  42.     TEInit();
  43.     InitDialogs(0L);
  44.     InitCursor();
  45. }
  46.  
  47. main(void)
  48. {
  49.     InitToolbox();
  50.     
  51.     ClearMenuBar();
  52.     gMenuBar = GetNewMBar( kMainMBAR_ID );
  53.     SetMenuBar(gMenuBar);
  54.     AddResMenu(GetMHandle(kAppleMenu), 'DRVR');
  55.     DrawMenuBar();
  56.  
  57.     SetRect(&gWRect,50,50,400,85);
  58.     gWindow = NewWindow(nil,&gWRect,"\pGetKeys()",true,0,(WindowPtr)-1,true,0);
  59.  
  60.     while (!EventLoop())
  61.     ;
  62.     
  63.     return 0;
  64. }
  65.  
  66. Boolean EventLoop( void )
  67. {
  68.     EventRecord                    theEvent;
  69.     WindowPtr                    twindow;
  70.     short                        windowPart;
  71.     
  72.     Boolean                        done = FALSE;
  73.     KeyMap                        theKeys;
  74.     char                        theChar;
  75.     
  76.     GrafPtr savePort;
  77.     
  78.     while((GetNextEvent(everyEvent, &theEvent)) && !done)
  79.     {
  80.         switch( theEvent.what )
  81.         {
  82.             case keyDown:
  83.             case autoKey: 
  84.                     theChar = theEvent.message & charCodeMask;
  85.                     
  86.                     if ((theEvent.modifiers & cmdKey) != 0)
  87.                     {
  88.                         done = DoCommand( MenuKey(theChar) );
  89.                     }
  90.                     
  91.                     GetKeys(theKeys);
  92.                     GetPort(&savePort);
  93.                     SetPort(gWindow);
  94.                         InvalRect(& gWindow->portRect);
  95.                     SetPort(savePort);                                
  96.                     break;
  97.                 
  98.             case mouseDown:
  99.             
  100.                 windowPart = FindWindow(theEvent.where, &twindow);
  101.                 
  102.                 done = DoMouseDown(windowPart, twindow, &theEvent);
  103.                 
  104.                 break;
  105.                 
  106.                 
  107.             case activateEvt:
  108.             case updateEvt:
  109.             
  110.                 /* (WindowPtr)theEvent.message) */
  111.                     BeginUpdate((GrafPtr)theEvent.message);
  112.                     GetPort(&savePort);
  113.                     SetPort((GrafPtr)theEvent.message);
  114.                         
  115.                         EraseRect(& ((WindowPtr)theEvent.message)->portRect);
  116.                         sprintf ( (char *) gStr, "Char: %c    %#010lx    %#010lx    %#010lx    %#010lx",
  117.                             theChar == 0x00 ? ' ' : theChar,
  118.                             theKeys[0],theKeys[1],theKeys[2],theKeys[3]);
  119.                             
  120.                         c2pstr((char*)gStr);
  121.                         
  122.                         TextFont( monaco );
  123.                         TextSize( 9 );
  124.  
  125.                         MoveTo(20,20);
  126.                         DrawString(gStr);
  127.                         
  128.                     SetPort((GrafPtr)theEvent.message);                                
  129.                     EndUpdate((GrafPtr)theEvent.message);
  130.             
  131.                 break;
  132.                 
  133.             case diskEvt:
  134.             
  135.                 if ((theEvent.message >> 16) != noErr)
  136.                 {
  137.                     Point myPoint={100,100};
  138.                 
  139.                     DIBadMount(myPoint, theEvent.message);
  140.                 }
  141.                 
  142.                 break;
  143.  
  144.             case osEvt:
  145.                 switch ((theEvent.message >> 24) & 0x0ff)
  146.                 {
  147.                     case suspendResumeMessage:
  148.                         
  149.                         if ((theEvent.message & resumeFlag) == 0) // suspend 
  150.                         {
  151.                             SetCursor(&qd.arrow);
  152.                         }
  153.                         else
  154.                         {                                        // resume
  155.                             SetCursor(&qd.arrow);
  156.                         }
  157.                         break;
  158.                         
  159.                     case mouseMovedMessage:
  160.                         break;
  161.                 }
  162.                 break;
  163.                 
  164.             case kHighLevelEvent:
  165.                 break;
  166.  
  167.             default:
  168.                 break;
  169.  
  170.         }
  171.     }
  172.     
  173.     return done;
  174. }
  175. static Boolean DoMouseDown(short windowPart, WindowPtr whichWindow, EventRecord *theEvent)
  176. {
  177.     Boolean         done=FALSE;
  178.     ControlHandle    WhichCtl;
  179.     
  180.     switch( windowPart )
  181.     {
  182.         case inMenuBar:
  183.             done = DoCommand( MenuSelect(theEvent->where) );
  184.             break;
  185.  
  186.         case inSysWindow:
  187.         
  188.             SystemClick(theEvent, whichWindow);
  189.             break;
  190.  
  191.         case inDrag:
  192.     
  193.             if ( whichWindow != FrontWindow() )
  194.             {
  195.                 /* don't do anything, can't drag a back window */
  196.                 SysBeep(1);
  197.             }
  198.             else
  199.             {
  200.                 DragWindow(whichWindow, theEvent->where, &qd.screenBits.bounds);
  201.             }
  202.             break;
  203.                         
  204.         case inContent:
  205.                             
  206.             break;
  207.  
  208.         case inGrow:
  209.         case inGoAway:
  210.             
  211.             done = TrackGoAway(whichWindow, theEvent->where);
  212.             break;
  213.  
  214.         default:
  215.             break;
  216.     }
  217.     
  218.     return done;
  219. }
  220.  
  221. static Boolean DoCommand( long mResult )
  222. {
  223.     short    theItem;
  224.     Str255    name;
  225.     Boolean done=FALSE;
  226.     
  227.  
  228.     theItem = LoWord(mResult);
  229.     
  230.     switch( HiWord(mResult) )
  231.     {
  232.         case kAppleMenu:
  233.             if( theItem > 2 )
  234.             {
  235.                 GrafPtr savePort;
  236.                 GetItem(GetMHandle(kAppleMenu), theItem, name);
  237.                 GetPort(&savePort);
  238.                     OpenDeskAcc(name);
  239.                 SetPort(savePort);
  240.             }
  241.             else
  242.             {
  243.                 ErrorSound(0);
  244.                 ParamText("\pSPDsoft, August 29, 1995","\p","\pspd@ivo.cps.unizar.es","\p");
  245.                 Alert(128,nil);
  246.             }
  247.             break;
  248.  
  249.         case kFileMenu:
  250.         
  251.             switch( theItem )
  252.             {
  253.                 case kfmQuit:
  254.                 
  255.                     done = TRUE;
  256.                     break;
  257.         
  258.                 default:
  259.                 
  260.                     break;
  261.         
  262.             }
  263.             break;
  264.  
  265.         case kEditMenu:
  266.         
  267.             switch( theItem )
  268.             {
  269.                 case kemCopy:
  270.                     ZeroScrap();
  271.                     PutScrap((long)*gStr,'TEXT',(Ptr)gStr+1);
  272.                     break;
  273.                 default:
  274.                     SystemEdit(theItem-1);
  275.                     break;
  276.             }
  277.             break;
  278.             
  279.         default:
  280.             break;
  281.             
  282.     }
  283.  
  284.     HiliteMenu(0);
  285.     return done;
  286. }
  287.