/******************************************** general purpose application ********************************************/ #include #include "main.h" #define GPA_ACTION(name) extern void name(int action) #include "include_actions.h" #undef GPA_ACTION EventRecord GPA_event; int GPA_findWindow; WindowPtr GPA_findWindowPtr; int GPA_nextFreeMenuId = GPA_MENU_FIRST_FREE; long GPA_menuSelect; int GPA_clickCount = 0; char GPA_about[256] = ""; static WindowPtr window; static int exit = FALSE; static void do_init(void); static void do_init2(void); static void do_menu_select(void); static void mouse_click_timer(int mode,EventRecord *eventP); static void app_action(int action); extern void main(void); extern void main() { InitGraf(&thePort); InitFonts(); InitWindows(); TEInit(); InitMenus(); InitDialogs(0); InitCursor(); GPA_action(GPA_INIT); GPA_action(GPA_INIT2); GPA_action(GPA_FINDER); while (!exit) { SystemTask(); GPA_action(GPA_LOOP); if (GetNextEvent(everyEvent,&GPA_event)) { switch (GPA_event.what) { default: GPA_action(GPA_EVENT); break; case autoKey: case keyDown: if (GPA_event.modifiers & cmdKey) { GPA_menuSelect = MenuKey(GPA_event.message); GPA_action(GPA_MENU_SELECT); HiliteMenu(0); } else { GPA_action(GPA_KEYDOWN); } break; case mouseUp: mouse_click_timer(0,&GPA_event); break; case mouseDown: mouse_click_timer(1,&GPA_event), GPA_findWindow = FindWindow(GPA_event.where,&GPA_findWindowPtr); switch (GPA_findWindow) { default: GPA_action(GPA_FIND_WINDOW); break; case inMenuBar: GPA_menuSelect = MenuSelect(GPA_event.where); GPA_action(GPA_MENU_SELECT); HiliteMenu(0); break; case inSysWindow: SystemClick(&GPA_event,GPA_findWindowPtr); break; case inDrag: { Rect r; r.top = screenBits.bounds.top + 20 + 1; r.left = screenBits.bounds.left + 1; r.bottom = screenBits.bounds.bottom - 1; r.right = screenBits.bounds.right - 1; DragWindow(GPA_findWindowPtr,GPA_event.where,&r); GPA_action(GPA_FIND_WINDOW); } break; case inGoAway: if (TrackGoAway(GPA_findWindowPtr,GPA_event.where)) { GPA_action(GPA_FIND_WINDOW); } break; case inGrow: { Rect r; long size; r.top = 80; r.left = 80; r.bottom = 9999; r.right = 9999; size = GrowWindow(GPA_findWindowPtr,GPA_event.where,&r); GPA_action(GPA_FIND_WINDOW); SizeWindow(GPA_findWindowPtr,LoWord(size),HiWord(size),TRUE); GPA_action(GPA_FIND_WINDOW); } break; case inZoomIn: case inZoomOut: if (TrackBox(GPA_findWindowPtr,GPA_event.where,GPA_findWindow)) { SetPort(GPA_findWindowPtr); EraseRect(&GPA_findWindowPtr->portRect); ZoomWindow(GPA_findWindowPtr,GPA_findWindow,GPA_findWindowPtr==FrontWindow()); GPA_action(GPA_FIND_WINDOW); } break; case inContent: #ifdef GPA_DO_IMMEDIATE_FOCUS_SWITCHING if (GPA_findWindowPtr != FrontWindow()) { SelectWindow(GPA_findWindowPtr); } GPA_action(GPA_FIND_WINDOW); #else if (GPA_findWindowPtr != FrontWindow()) { SelectWindow(GPA_findWindowPtr); } else { GPA_action(GPA_FIND_WINDOW); } #endif break; } break; } } } GPA_action(GPA_EXIT); } extern void GPA_action(action) int action; { GrafPtr savePort; GetPort(&savePort); if (GPA_findWindowPtr) SetPort(GPA_findWindowPtr); switch (action) { case GPA_MENU_SELECT: do_menu_select(); break; case GPA_INIT: do_init(); break; case GPA_INIT2: do_init2(); break; case GPA_REQUEST_EXIT: exit = TRUE; break; case GPA_CANCEL_EXIT: exit = FALSE; break; } app_action(action); SetPort(savePort); } /****************************************************************/ static void do_init() { MenuHandle menu_handle; static Str255 a = {1,appleMark}; Str255 about; strcpy(GPA_about,"About "); app_action(GPA_SET_ABOUT); strcat(GPA_about,"..."); strcpy((char*)about,GPA_about); CtoPstr((char*)about); menu_handle = NewMenu(GPA_MENU_APPLE,a); InsertMenu(menu_handle,0); AppendMenu(menu_handle,about); AppendMenu(menu_handle,"\p(-"); AddResMenu(menu_handle,'DRVR'); menu_handle = NewMenu(GPA_MENU_FILE,"\pFile"); InsertMenu(menu_handle,0); } static void do_init2() { AppendMenu(GetMHandle(GPA_MENU_FILE),"\p(-"); AppendMenu(GetMHandle(GPA_MENU_FILE),"\pQuit/Q"); DrawMenuBar(); } static void do_menu_select() { Str255 name; int id = HiWord(GPA_menuSelect); int item = LoWord(GPA_menuSelect); if (id == GPA_MENU_FILE) { GetItem(GetMHandle(id),item,name); if (EqualString("\pQuit",name,1,1)) { GPA_action(GPA_REQUEST_EXIT); } } else if (id == GPA_MENU_APPLE) { /* desk accessories */ if (item == 1) { ShowWindow(window); SelectWindow(window); } else { GrafPtr savePort; GetItem(GetMHandle(id),item,name); GetPort(&savePort); OpenDeskAcc(name); SetPort(savePort); } } } extern void mouse_click_timer(mode,eventP) int mode; EventRecord *eventP; { static EventRecord lastUpEvent; static EventRecord lastDownEvent; switch (mode) { case 0: /* called on mouse up */ lastUpEvent = (*eventP); break; case 1: /* called on mouse down */ if ((lastUpEvent.when + GetDblTime() > (*eventP).when) && (lastDownEvent.where.h == (*eventP).where.h) && (lastDownEvent.where.v == (*eventP).where.v)) { GPA_clickCount++; } else { GPA_clickCount = 1; } lastDownEvent = (*eventP); break; } } static void app_action(action) int action; { switch (action) { case GPA_INIT: { WindowPtr savePort; Rect r; r = screenBits.bounds; InsetRect(&r,(r.right-r.left-300)/2,(r.bottom-r.top-140)/2); window = NewWindow(0,&r,"\p",0,altDBoxProc,(WindowPtr)-1,0,0); GetPort(&savePort); SetPort(window); PenNormal(); TextFont(systemFont); TextSize(12); TextFace(0); SetPort(savePort); } break; case GPA_FIND_WINDOW: if (GPA_findWindowPtr == window) { switch (GPA_findWindow) { case inContent: HideWindow(window); break; } } break; case GPA_EVENT: { Point p; switch (GPA_event.what) { case updateEvt: if ((WindowPtr)GPA_event.message == window) { GrafPtr savePort; GetPort(&savePort); SetPort(window); BeginUpdate(window); BackColor(cyanColor); EraseRect(&window->portRect); BackColor(whiteColor); MoveTo(4,14); app_action(GPA_ABOUT); GetPen(&p); MoveTo(p.h,p.v+7); TextFont(systemFont); TextSize(12); TextFont(times); TextSize(18); DrawString("\pŠ1996 by Bill Grundmann"); EndUpdate(window); SetPort(savePort); } break; } } break; } #define GPA_ACTION(name) name(action); #include "include_actions.h" #undef GPA_ACTION }