home *** CD-ROM | disk | FTP | other *** search
- /*
- * © SPDsoft, August 29, 1995
- * A Quick&Dirty™ Hack to find out about GetKeys()
- */
-
- #include <stdio.h>
-
- /* Menu items */
-
- #define kMainMBAR_ID 128
-
- #define kAppleMenu 140
- #define kFileMenu 141
- #define kEditMenu 142
-
- #define kfmQuit 1
-
- #define kemUndo 1
- #define kemCut 3
- #define kemCopy 4
- #define kemPaste 5
- #define kemClear 6
-
-
- Rect gWRect;
- WindowPtr gWindow;
- Handle gMenuBar;
- Str255 gStr="\p";
-
- void InitToolbox(void);
- static Boolean DoMouseDown(short windowPart, WindowPtr whichWindow, EventRecord *theEvent);
- Boolean EventLoop( void );
- static Boolean DoCommand( long mResult );
-
- void InitToolbox(void)
- {
- InitGraf((Ptr) &qd.thePort);
- InitFonts();
- InitWindows();
- InitMenus();
- FlushEvents(everyEvent,0);
- TEInit();
- InitDialogs(0L);
- InitCursor();
- }
-
- main(void)
- {
- InitToolbox();
-
- ClearMenuBar();
- gMenuBar = GetNewMBar( kMainMBAR_ID );
- SetMenuBar(gMenuBar);
- AddResMenu(GetMHandle(kAppleMenu), 'DRVR');
- DrawMenuBar();
-
- SetRect(&gWRect,50,50,400,85);
- gWindow = NewWindow(nil,&gWRect,"\pGetKeys()",true,0,(WindowPtr)-1,true,0);
-
- while (!EventLoop())
- ;
-
- return 0;
- }
-
- Boolean EventLoop( void )
- {
- EventRecord theEvent;
- WindowPtr twindow;
- short windowPart;
-
- Boolean done = FALSE;
- KeyMap theKeys;
- char theChar;
-
- GrafPtr savePort;
-
- while((GetNextEvent(everyEvent, &theEvent)) && !done)
- {
- switch( theEvent.what )
- {
- case keyDown:
- case autoKey:
- theChar = theEvent.message & charCodeMask;
-
- if ((theEvent.modifiers & cmdKey) != 0)
- {
- done = DoCommand( MenuKey(theChar) );
- }
-
- GetKeys(theKeys);
- GetPort(&savePort);
- SetPort(gWindow);
- InvalRect(& gWindow->portRect);
- SetPort(savePort);
- break;
-
- case mouseDown:
-
- windowPart = FindWindow(theEvent.where, &twindow);
-
- done = DoMouseDown(windowPart, twindow, &theEvent);
-
- break;
-
-
- case activateEvt:
- case updateEvt:
-
- /* (WindowPtr)theEvent.message) */
- BeginUpdate((GrafPtr)theEvent.message);
- GetPort(&savePort);
- SetPort((GrafPtr)theEvent.message);
-
- EraseRect(& ((WindowPtr)theEvent.message)->portRect);
- sprintf ( (char *) gStr, "Char: %c %#010lx %#010lx %#010lx %#010lx",
- theChar == 0x00 ? ' ' : theChar,
- theKeys[0],theKeys[1],theKeys[2],theKeys[3]);
-
- c2pstr((char*)gStr);
-
- TextFont( monaco );
- TextSize( 9 );
-
- MoveTo(20,20);
- DrawString(gStr);
-
- SetPort((GrafPtr)theEvent.message);
- EndUpdate((GrafPtr)theEvent.message);
-
- break;
-
- case diskEvt:
-
- if ((theEvent.message >> 16) != noErr)
- {
- Point myPoint={100,100};
-
- DIBadMount(myPoint, theEvent.message);
- }
-
- break;
-
- case osEvt:
- switch ((theEvent.message >> 24) & 0x0ff)
- {
- case suspendResumeMessage:
-
- if ((theEvent.message & resumeFlag) == 0) // suspend
- {
- SetCursor(&qd.arrow);
- }
- else
- { // resume
- SetCursor(&qd.arrow);
- }
- break;
-
- case mouseMovedMessage:
- break;
- }
- break;
-
- case kHighLevelEvent:
- break;
-
- default:
- break;
-
- }
- }
-
- return done;
- }
- static Boolean DoMouseDown(short windowPart, WindowPtr whichWindow, EventRecord *theEvent)
- {
- Boolean done=FALSE;
- ControlHandle WhichCtl;
-
- switch( windowPart )
- {
- case inMenuBar:
- done = DoCommand( MenuSelect(theEvent->where) );
- break;
-
- case inSysWindow:
-
- SystemClick(theEvent, whichWindow);
- break;
-
- case inDrag:
-
- if ( whichWindow != FrontWindow() )
- {
- /* don't do anything, can't drag a back window */
- SysBeep(1);
- }
- else
- {
- DragWindow(whichWindow, theEvent->where, &qd.screenBits.bounds);
- }
- break;
-
- case inContent:
-
- break;
-
- case inGrow:
- case inGoAway:
-
- done = TrackGoAway(whichWindow, theEvent->where);
- break;
-
- default:
- break;
- }
-
- return done;
- }
-
- static Boolean DoCommand( long mResult )
- {
- short theItem;
- Str255 name;
- Boolean done=FALSE;
-
-
- theItem = LoWord(mResult);
-
- switch( HiWord(mResult) )
- {
- case kAppleMenu:
- if( theItem > 2 )
- {
- GrafPtr savePort;
- GetItem(GetMHandle(kAppleMenu), theItem, name);
- GetPort(&savePort);
- OpenDeskAcc(name);
- SetPort(savePort);
- }
- else
- {
- ErrorSound(0);
- ParamText("\pSPDsoft, August 29, 1995","\p","\pspd@ivo.cps.unizar.es","\p");
- Alert(128,nil);
- }
- break;
-
- case kFileMenu:
-
- switch( theItem )
- {
- case kfmQuit:
-
- done = TRUE;
- break;
-
- default:
-
- break;
-
- }
- break;
-
- case kEditMenu:
-
- switch( theItem )
- {
- case kemCopy:
- ZeroScrap();
- PutScrap((long)*gStr,'TEXT',(Ptr)gStr+1);
- break;
- default:
- SystemEdit(theItem-1);
- break;
- }
- break;
-
- default:
- break;
-
- }
-
- HiliteMenu(0);
- return done;
- }
-