diff --git a/mac-cpp-source/Iomega Tester.rsrc.bin b/mac-cpp-source/Iomega Tester.rsrc.bin index d925f64..8bf07a3 100644 Binary files a/mac-cpp-source/Iomega Tester.rsrc.bin and b/mac-cpp-source/Iomega Tester.rsrc.bin differ diff --git a/mac-cpp-source/Iomega Tester.µ.bin b/mac-cpp-source/Iomega Tester.µ.bin index b877811..dc5e463 100644 Binary files a/mac-cpp-source/Iomega Tester.µ.bin and b/mac-cpp-source/Iomega Tester.µ.bin differ diff --git a/mac-cpp-source/tip/tip_aspi.cpp b/mac-cpp-source/tip/tip_aspi.cpp index 859634e..b0e5299 100644 --- a/mac-cpp-source/tip/tip_aspi.cpp +++ b/mac-cpp-source/tip/tip_aspi.cpp @@ -274,7 +274,8 @@ long EnumerateIomegaDevices(uint8_t *DrivesSkipped) { // On the Mac, we want to ignore drives that have media in them at // program entry, as this means the volume is mounted in Mac OS - const bool driveEmpty = GetCartridgeStatus(Device) == DISK_NOT_PRESENT; + JazDrive = isJaz; + const bool driveEmpty = (GetCartridgeStatus(Device) == DISK_NOT_PRESENT); if(driveEmpty) { DriveArray[DriveCount].flags = flags; DriveArray[DriveCount].scsi_id = Device; diff --git a/mac-cpp-source/tip/tip_main.cpp b/mac-cpp-source/tip/tip_main.cpp index 8376ebd..1b20221 100644 --- a/mac-cpp-source/tip/tip_main.cpp +++ b/mac-cpp-source/tip/tip_main.cpp @@ -5,9 +5,11 @@ #include #include +#include #include #include +#include "TrapAvail.h" #include "pstring.h" #include "LaunchLib.h" #include "mac_vol.h" @@ -34,7 +36,8 @@ void DisposeTipWindow(); void AddTipMenus(); void RunCommandLine(); void DoEvent(EventRecord &event, RgnHandle *cursorRgn); -void DoMenuEvent(EventRecord &event); +void DoMenuEventPostSIOUX(EventRecord &event); +bool DoMenuSelection(long choice); void DoUpdate(WindowPtr window); void DoMouseDown(EventRecord &event); void DoMouseMove(EventRecord &event, RgnHandle *cursorRegion); @@ -144,6 +147,13 @@ void NewTipWindow() { } void AddTipMenus() { + if(!TrapAvailable(0xAA66)) { + // If MenuChoice is available, we can let SIOUX handle the menus, + // otherwise we have to handle it ourselves + SIOUXSettings.setupmenus = FALSE; + } + + // Add our menu tipMenu = GetMenu(128); InsertMenu(tipMenu, 0); DrawMenuBar(); @@ -204,36 +214,54 @@ void DoEvent(EventRecord &event, RgnHandle *cursorRgn) { case osEvt: DoMouseMove(event, cursorRgn); break; } } else { // Trap unhandled SIOUX menu events - DoMenuEvent(event); + DoMenuEventPostSIOUX(event); } } -void DoMenuEvent(EventRecord &event) { - // SIOUX will handle the menu event, but we can check after the fact - // to see whether the user selected one of our menus +void DoMenuEventPostSIOUX(EventRecord &event) { + if(!SIOUXSettings.setupmenus) return; + + /* If MenuChoice is available, it is best to let SIOUX handle the menu + * event so Copy and Paste will work. We can check after the fact + * to see whether the user selected one of our menus using MenuChoice. + * However, if that trap is not available, we must handle the menu + * ourselves and certain menu items will not work + */ WindowPtr thisWindow; - if(event.what == mouseDown && FindWindow(event.where, &thisWindow) == inMenuBar) { - long int choice = MenuChoice(); - int menuId = HiWord(choice); - int itemId = LoWord(choice); - switch(menuId) { - case 32000: // Apple menu - SysBeep(10); - break; - case 32001: // File menu - if (itemId == 9) { - WndProc(WM_COMMAND, IDB_QUIT); - } - break; - case 32002: // Edit menu - case 128: // TIP menu - switch(itemId) { - case 1: HiliteMenu(0); RunCommandLine(); break; - } - } + if((event.what == mouseDown) && (FindWindow(event.where, &thisWindow) == inMenuBar)) { + DoMenuSelection(MenuChoice()); + } +} + +bool DoMenuSelection(long choice) { + bool handled = false; + int menuId = HiWord(choice); + int itemId = LoWord(choice); + //printf("Menu choice: %d, %d\n", menuId, itemId); + switch(menuId) { + case 32000: // Apple menu SysBeep(10); + break; + case 32001: // File menu + if (itemId == 9) { // Quit + WndProc(WM_COMMAND, IDB_QUIT); + handled = true; + } + break; + case 32002: // Edit menu + break; + case 128: // TIP menu + switch(itemId) { + case 1: // Run Command Line... + HiliteMenu(0); + RunCommandLine(); + handled = true; + break; + } + break; } HiliteMenu(0); + return handled; } void DoUpdate(WindowPtr window) { @@ -257,6 +285,7 @@ void DoUpdate(WindowPtr window) { DrawEdge(&(*richText)->frame, BDR_SUNKENOUTER, BF_RECT); ReleaseDC(hExplainWnd); + SetColor(BLACK_COLOR); UpdateControls(window, window->visRgn); EndUpdate(window); @@ -311,6 +340,14 @@ void DoMouseDown(EventRecord &event) { gDone = true; } break; + case inMenuBar: + if(!DoMenuSelection(MenuSelect(event.where))) { + SysBeep(10); + } + break; + case inDrag: + DragWindow(thisWindow, event.where, &(*GetGrayRgn())->rgnBBox); + break; } }