diff --git a/app-emulation/unreal_speccy_portable/patches/unreal_speccy_portable-0.0.86.18.patchset b/app-emulation/unreal_speccy_portable/patches/unreal_speccy_portable-0.0.86.21.patchset similarity index 84% rename from app-emulation/unreal_speccy_portable/patches/unreal_speccy_portable-0.0.86.18.patchset rename to app-emulation/unreal_speccy_portable/patches/unreal_speccy_portable-0.0.86.21.patchset index 5d9a6e5c8..6f426c087 100644 --- a/app-emulation/unreal_speccy_portable/patches/unreal_speccy_portable-0.0.86.18.patchset +++ b/app-emulation/unreal_speccy_portable/patches/unreal_speccy_portable-0.0.86.21.patchset @@ -1,11 +1,11 @@ -From df02e4c81795008e49d69d1c1defac2e31a81651 Mon Sep 17 00:00:00 2001 +From cc0a288e6be32cec310dcf31d43070385bcafdf0 Mon Sep 17 00:00:00 2001 From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Fri, 25 Jun 2021 23:44:52 +1000 +Date: Wed, 25 Oct 2023 21:07:46 +1000 Subject: Add Haiku support diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt -index bc341f7..1c44a48 100644 +index fa05f2f..1c40757 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -13,6 +13,7 @@ set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) @@ -16,7 +16,7 @@ index bc341f7..1c44a48 100644 option(USE_BENCHMARK "benchmark mode (console)" OFF) option(USE_LIBRARY "library mode" OFF) option(USE_WEB "use web sources (SDL or iOS versions)" ON) -@@ -58,7 +59,7 @@ source_group("devices\\sound" FILES ${SRCCXX_DEVICES_SOUND} ${SRCH_DEVICES_SOUND +@@ -60,7 +61,7 @@ source_group("devices\\sound" FILES ${SRCCXX_DEVICES_SOUND} ${SRCH_DEVICES_SOUND #3rdparty libs @@ -25,7 +25,7 @@ index bc341f7..1c44a48 100644 find_package(CURL REQUIRED) if(CURL_FOUND) include_directories(${CURL_INCLUDE_DIRS}) -@@ -142,7 +143,7 @@ source_group("platform\\oal" FILES ${SRCCXX_PLATFORM_OPENAL}) +@@ -144,7 +145,7 @@ source_group("platform\\oal" FILES ${SRCCXX_PLATFORM_OPENAL}) endif(USE_WX_WIDGETS OR APPLE_IOS) @@ -34,7 +34,7 @@ index bc341f7..1c44a48 100644 file(GLOB SRCCXX_UI "../../ui/*.cpp") file(GLOB SRCH_UI "../../ui/*.h") -@@ -167,7 +168,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") +@@ -169,7 +170,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") endif(NOT MSVC) endif(USE_WEB) @@ -43,7 +43,7 @@ index bc341f7..1c44a48 100644 if(USE_SDL2 OR APPLE_IOS OR ANDROID) -@@ -355,6 +356,22 @@ add_executable(${PROJECT} WIN32 ${SRCCXX} ${SRCC} ${SRCH} ${SRCRES}) +@@ -359,6 +360,22 @@ add_executable(${PROJECT} WIN32 ${SRCCXX} ${SRCC} ${SRCH} ${SRCRES}) target_link_libraries(${PROJECT} wx::core wx::base wx::adv wx::aui wx::gl) target_link_libraries(${PROJECT} ${OPENGL_LIBRARIES}) @@ -61,12 +61,12 @@ index bc341f7..1c44a48 100644 +add_platform_io_stuff() + +add_executable(${PROJECT} WIN32 ${SRCCXX} ${SRCC} ${SRCH}) -+target_link_libraries(${PROJECT} -lbe -lmedia -ldevice -lgame -ltracker -lpng) ++target_link_libraries(${PROJECT} -lbe -lmedia -ldevice -lgame -ltracker -llocalestub -lpng) + elseif(USE_SDL) #SDL -@@ -498,6 +515,24 @@ endif(APPLE_IOS) +@@ -540,6 +557,24 @@ endif(APPLE_IOS) target_link_libraries(${PROJECT} ${THIRDPARTY_LIBRARIES}) @@ -88,9 +88,9 @@ index bc341f7..1c44a48 100644 + VERBATIM) +endif(HAIKU) + - if(MSVC) + if(MSVC AND NOT UWP) set_target_properties(${PROJECT} PROPERTIES LINK_FLAGS "/MANIFEST:NO /LARGEADDRESSAWARE") - endif(MSVC) + endif(MSVC AND NOT UWP) diff --git a/platform/haiku/haiku.cpp b/platform/haiku/haiku.cpp new file mode 100644 index 0000000..6b11b13 @@ -972,10 +972,10 @@ index 0000000..ddc3bda +} diff --git a/platform/haiku/haiku_keyboard_window.cpp b/platform/haiku/haiku_keyboard_window.cpp new file mode 100644 -index 0000000..28943d1 +index 0000000..6daf943 --- /dev/null +++ b/platform/haiku/haiku_keyboard_window.cpp -@@ -0,0 +1,363 @@ +@@ -0,0 +1,366 @@ +/* +Portable ZX-Spectrum emulator. +Copyright (C) 2001-2021 SMT, Dexus, Alone Coder, deathsoft, djdron, scor, 3dEyes @@ -996,6 +996,9 @@ index 0000000..28943d1 + +#include "haiku_keyboard_window.h" + ++#undef B_TRANSLATION_CONTEXT ++#define B_TRANSLATION_CONTEXT "USPKeyboardWindow" ++ +static zxbutton zxkeymap[] = { + {100, ZXB_BUTTON, "BREAK", NULL, NULL, -1, NULL, NULL, 0x01 }, + {100, ZXB_SEPARATOR, NULL, NULL, NULL, -1, NULL, NULL, 0x00 }, @@ -1257,7 +1260,7 @@ index 0000000..28943d1 +} + +KeyboardWindow::KeyboardWindow(BRect frame, BWindow *win) -+: BWindow(frame, "Keyboard layout", B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, ++: BWindow(frame, B_TRANSLATE("Keyboard layout"), B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, + B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_WILL_ACCEPT_FIRST_CLICK), + fButtonSize(48), + fButtonSpace(1), @@ -1341,10 +1344,10 @@ index 0000000..28943d1 +} diff --git a/platform/haiku/haiku_keyboard_window.h b/platform/haiku/haiku_keyboard_window.h new file mode 100644 -index 0000000..5ba8fdf +index 0000000..79fef9a --- /dev/null +++ b/platform/haiku/haiku_keyboard_window.h -@@ -0,0 +1,81 @@ +@@ -0,0 +1,82 @@ +/* +Portable ZX-Spectrum emulator. +Copyright (C) 2001-2021 SMT, Dexus, Alone Coder, deathsoft, djdron, scor, 3dEyes @@ -1371,6 +1374,7 @@ index 0000000..5ba8fdf +#include +#include +#include ++#include + +#define ZXB_BUTTON 0 +#define ZXB_SEPARATOR 1 @@ -2182,10 +2186,10 @@ index 0000000..55ffe57 +} diff --git a/platform/haiku/haiku_web_window.cpp b/platform/haiku/haiku_web_window.cpp new file mode 100644 -index 0000000..0f3e89f +index 0000000..db87012 --- /dev/null +++ b/platform/haiku/haiku_web_window.cpp -@@ -0,0 +1,288 @@ +@@ -0,0 +1,291 @@ +/* +Portable ZX-Spectrum emulator. +Copyright (C) 2001-2021 SMT, Dexus, Alone Coder, deathsoft, djdron, scor, 3dEyes @@ -2213,6 +2217,9 @@ index 0000000..0f3e89f +#include "haiku_web_window.h" +#include "haiku_list_item.h" + ++#undef B_TRANSLATION_CONTEXT ++#define B_TRANSLATION_CONTEXT "USPWebWindow" ++ +namespace xIo +{ + eFileSelect* FileSelectWEB(const char* path); @@ -2223,7 +2230,7 @@ index 0000000..0f3e89f +{ + +WebWindow::WebWindow(BRect frame, BWindow *win) -+: BWindow(frame, "Open file from web...", B_DOCUMENT_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_CLOSE_ON_ESCAPE), ++: BWindow(frame, B_TRANSLATE("Open file from web" B_UTF8_ELLIPSIS), B_DOCUMENT_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_CLOSE_ON_ESCAPE), + fMainWindow(win) +{ + BFont font(be_plain_font); @@ -2258,10 +2265,10 @@ index 0000000..0f3e89f + fLastDownloadedPath.SetTo("/boot/home/config/settings/USP"); + + fMenuBar = new BMenuBar("menu_bar", B_ITEMS_IN_ROW, B_INVALIDATE_AFTER_LAYOUT); -+ BMenu* menu = new BMenu("File"); -+ menu->AddItem(new BMenuItem("Open", new BMessage(kFileInvocated), 'O')); -+ menu->AddItem(new BMenuItem("Download file", new BMessage(kFileDownload), 'D')); -+ menu->AddItem(new BMenuItem("Open download folder", new BMessage(kFileOpenDowloadFolder), 'J')); ++ BMenu* menu = new BMenu(B_TRANSLATE("File")); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Open"), new BMessage(kFileInvocated), 'O')); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Download file"), new BMessage(kFileDownload), 'D')); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Open download folder"), new BMessage(kFileOpenDowloadFolder), 'J')); + fMenuBar->AddItem(menu); + menu->SetTargetForItems(this); + @@ -2278,13 +2285,13 @@ index 0000000..0f3e89f + fUpButton->SetIcon(fUpIcon, 0); + fUpButton->SetFlat(true); + -+ fCancelButton = new BButton("Cancel", new BMessage(kCancelButtonPush)); -+ fOpenButton = new BButton("Open", new BMessage(kOpenButtonPush)); ++ fCancelButton = new BButton(B_TRANSLATE("Cancel"), new BMessage(kCancelButtonPush)); ++ fOpenButton = new BButton(B_TRANSLATE("Open"), new BMessage(kOpenButtonPush)); + fOpenButton->MakeDefault(true); + + BFont smallFont(be_plain_font); + smallFont.SetSize(ceilf(font.Size() * 0.75)); -+ fStatusView = new BStringView("list status", "Items"); ++ fStatusView = new BStringView("list status", B_TRANSLATE("items")); + fStatusView->SetFont(&smallFont, B_FONT_SIZE); + fStatusView->SetAlignment(B_ALIGN_LEFT); + @@ -2394,7 +2401,7 @@ index 0000000..0f3e89f + fUpButton->SetEnabled(pathList.CountStrings() != 0); + + BString statusText; -+ statusText << " " << fListView->CountItems() << " items "; ++ statusText << " " << fListView->CountItems() << " " << B_TRANSLATE("items") << " "; + fStatusView->SetText(statusText); +} + @@ -2476,10 +2483,10 @@ index 0000000..0f3e89f +} diff --git a/platform/haiku/haiku_web_window.h b/platform/haiku/haiku_web_window.h new file mode 100644 -index 0000000..2c5848b +index 0000000..fc9ddf2 --- /dev/null +++ b/platform/haiku/haiku_web_window.h -@@ -0,0 +1,76 @@ +@@ -0,0 +1,77 @@ +/* +Portable ZX-Spectrum emulator. +Copyright (C) 2001-2021 SMT, Dexus, Alone Coder, deathsoft, djdron, scor, 3dEyes @@ -2512,6 +2519,7 @@ index 0000000..2c5848b +#include +#include +#include ++#include + +const uint32 kFileInvocated = 'SINV'; +const uint32 kFileDownload = 'FDNL'; @@ -2558,10 +2566,10 @@ index 0000000..2c5848b +#endif diff --git a/platform/haiku/haiku_window.cpp b/platform/haiku/haiku_window.cpp new file mode 100644 -index 0000000..43cec2a +index 0000000..a7d3c48 --- /dev/null +++ b/platform/haiku/haiku_window.cpp -@@ -0,0 +1,1490 @@ +@@ -0,0 +1,1504 @@ +/* +Portable ZX-Spectrum emulator. +Copyright (C) 2001-2021 SMT, Dexus, Alone Coder, deathsoft, djdron, scor, 3dEyes @@ -2588,6 +2596,9 @@ index 0000000..43cec2a +#include "haiku_app.h" +#include "haiku_window.h" + ++#undef B_TRANSLATION_CONTEXT ++#define B_TRANSLATION_CONTEXT "USPWindow" ++ +namespace xPlatform +{ + @@ -2665,22 +2676,22 @@ index 0000000..43cec2a + fStateInfoTimer(0) +{ + fMenuBar = new BMenuBar("menu_bar", B_ITEMS_IN_ROW, B_INVALIDATE_AFTER_LAYOUT); -+ BMenu* menu = new BMenu("File"); -+ BMenuItem *item = new BMenuItem(BRecentFilesList::NewFileListMenu("Open" B_UTF8_ELLIPSIS, ++ BMenu* menu = new BMenu(B_TRANSLATE("File")); ++ BMenuItem *item = new BMenuItem(BRecentFilesList::NewFileListMenu(B_TRANSLATE("Open" B_UTF8_ELLIPSIS), + NULL, NULL, this, 9, true, NULL, APP_SIGNATURE), + new BMessage(kFileOpen)); + item->SetShortcut('O', 0); + menu->AddItem(item); -+ menu->AddItem(new BMenuItem("Open from web" B_UTF8_ELLIPSIS, new BMessage(kFileOpenWeb))); -+ menu->AddItem(new BMenuItem("Save" B_UTF8_ELLIPSIS, new BMessage(kFileSave), 'S')); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Open from web" B_UTF8_ELLIPSIS), new BMessage(kFileOpenWeb))); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Save" B_UTF8_ELLIPSIS), new BMessage(kFileSave), 'S')); + menu->AddSeparatorItem(); -+ menu->AddItem(new BMenuItem("Save screenshot" B_UTF8_ELLIPSIS, new BMessage(kFileSaveScreen))); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Save screenshot" B_UTF8_ELLIPSIS), new BMessage(kFileSaveScreen))); + menu->AddSeparatorItem(); -+ menu->AddItem(new BMenuItem("Quick load", new BMessage(kFileQuickOpen), 'O', B_SHIFT_KEY)); -+ fQuickSaveMenuItem = new BMenuItem("Quick save", new BMessage(kFileQuickSave), 'S', B_SHIFT_KEY); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Quick load"), new BMessage(kFileQuickOpen), 'O', B_SHIFT_KEY)); ++ fQuickSaveMenuItem = new BMenuItem(B_TRANSLATE("Quick save"), new BMessage(kFileQuickSave), 'S', B_SHIFT_KEY); + fQuickSaveMenuItem->SetEnabled(false); + menu->AddItem(fQuickSaveMenuItem); -+ fQuickSaveSlotMenu = new BMenu("Save slot"); ++ fQuickSaveSlotMenu = new BMenu(B_TRANSLATE("Save slot")); + for (int slot = 1; slot < 10; slot++) { + BMessage *message = new BMessage(kFileQuickSaveSlot); + message->AddInt32("slot", slot); @@ -2691,65 +2702,65 @@ index 0000000..43cec2a + fQuickSaveSlotMenu->SetRadioMode(true); + menu->AddItem(fQuickSaveSlotMenu); + menu->AddSeparatorItem(); -+ fAutoPlayMenuItem = new BMenuItem("Auto launch programs", new BMessage(kFileAutoPlay)); ++ fAutoPlayMenuItem = new BMenuItem(B_TRANSLATE("Auto launch programs"), new BMessage(kFileAutoPlay)); + menu->AddItem(fAutoPlayMenuItem); + menu->AddSeparatorItem(); -+ menu->AddItem(new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q')); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Quit"), new BMessage(B_QUIT_REQUESTED), 'Q')); + fMenuBar->AddItem(menu); -+ menu = new BMenu("View"); -+ menu->AddItem(new BMenuItem("100% scale", new BMessage(kViewScale1x), '1')); -+ menu->AddItem(new BMenuItem("200% scale", new BMessage(kViewScale2x), '2')); -+ menu->AddItem(new BMenuItem("300% scale", new BMessage(kViewScale3x), '3')); ++ menu = new BMenu(B_TRANSLATE("View")); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("100% scale"), new BMessage(kViewScale1x), '1')); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("200% scale"), new BMessage(kViewScale2x), '2')); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("300% scale"), new BMessage(kViewScale3x), '3')); + menu->AddSeparatorItem(); -+ fFilteringMenu = new BMenu("Filtering"); -+ fFilteringMenuItem = new BMenuItem("Bilinear", new BMessage(kViewFiltering)); ++ fFilteringMenu = new BMenu(B_TRANSLATE("Filtering")); ++ fFilteringMenuItem = new BMenuItem(B_TRANSLATE("Bilinear"), new BMessage(kViewFiltering)); + fFilteringMenu->AddItem(fFilteringMenuItem); -+ fXBRFilteringMenuItem = new BMenuItem("XBR", new BMessage(kViewXBRFiltering)); ++ fXBRFilteringMenuItem = new BMenuItem(B_TRANSLATE("XBR"), new BMessage(kViewXBRFiltering)); + fFilteringMenu->AddItem(fXBRFilteringMenuItem); + menu->AddItem(fFilteringMenu); -+ fSmartBorderScaleMenuItem = new BMenuItem("Smart border scale", new BMessage(kViewSmartBorder)); ++ fSmartBorderScaleMenuItem = new BMenuItem(B_TRANSLATE("Smart border scale"), new BMessage(kViewSmartBorder)); + menu->AddItem(fSmartBorderScaleMenuItem); + menu->AddSeparatorItem(); -+ fVirtualKeyboardMenuItem = new BMenuItem("Virtual keyboard", new BMessage(kHelpKeyboardLayout)); ++ fVirtualKeyboardMenuItem = new BMenuItem(B_TRANSLATE("Virtual keyboard"), new BMessage(kHelpKeyboardLayout)); + menu->AddItem(fVirtualKeyboardMenuItem); -+ menu->AddItem(new BMenuItem("OSD keyboard", new BMessage(kViewOnScreenKeyboard), 'K')); -+ menu->AddItem(new BMenuItem("OSD menu", new BMessage(kViewOnScreenMenu))); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("OSD keyboard"), new BMessage(kViewOnScreenKeyboard), 'K')); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("OSD menu"), new BMessage(kViewOnScreenMenu))); + menu->AddSeparatorItem(); -+ menu->AddItem(new BMenuItem("Full screen", new BMessage(kViewFullScreen), B_ENTER)); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Full screen"), new BMessage(kViewFullScreen), B_ENTER)); + fMenuBar->AddItem(menu); -+ menu = new BMenu("Device"); -+ menu->AddItem(new BMenuItem("Start / Stop tape", new BMessage(kDeviceStartStopTape))); -+ fFastTapeMenuItem = new BMenuItem("Tape fast", new BMessage(kDeviceFastTape)); ++ menu = new BMenu(B_TRANSLATE("Device")); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Start / Stop tape"), new BMessage(kDeviceStartStopTape))); ++ fFastTapeMenuItem = new BMenuItem(B_TRANSLATE("Tape fast"), new BMessage(kDeviceFastTape)); + menu->AddItem(fFastTapeMenuItem); + menu->AddSeparatorItem(); -+ fBetaDiskMenu = new BMenu("Beta disk drive"); ++ fBetaDiskMenu = new BMenu(B_TRANSLATE("Beta disk drive")); + fBetaDiskMenu->AddItem(new BMenuItem("A", new BMessage(kDeviceBetaDiskA))); + fBetaDiskMenu->AddItem(new BMenuItem("B", new BMessage(kDeviceBetaDiskB))); + fBetaDiskMenu->AddItem(new BMenuItem("C", new BMessage(kDeviceBetaDiskC))); + fBetaDiskMenu->AddItem(new BMenuItem("D", new BMessage(kDeviceBetaDiskD))); + menu->AddItem(fBetaDiskMenu); + menu->AddSeparatorItem(); -+ fSoundChipMenu = new BMenu("Sound chip"); -+ fSoundChipMenu->AddItem(new BMenuItem("AY-3-8910", new BMessage(kDeviceSoundChipAY))); -+ fSoundChipMenu->AddItem(new BMenuItem("YM2149F", new BMessage(kDeviceSoundChipYM))); ++ fSoundChipMenu = new BMenu(B_TRANSLATE("Sound chip")); ++ fSoundChipMenu->AddItem(new BMenuItem(B_TRANSLATE("AY-3-8910"), new BMessage(kDeviceSoundChipAY))); ++ fSoundChipMenu->AddItem(new BMenuItem(B_TRANSLATE("YM2149F"), new BMessage(kDeviceSoundChipYM))); + menu->AddItem(fSoundChipMenu); -+ fAYStereoMenu = new BMenu("AY Stereo"); ++ fAYStereoMenu = new BMenu(B_TRANSLATE("AY Stereo")); + fAYStereoMenu->AddItem(new BMenuItem("ABC", new BMessage(kDeviceSoundChipStereoABC))); + fAYStereoMenu->AddItem(new BMenuItem("ACB", new BMessage(kDeviceSoundChipStereoACB))); + fAYStereoMenu->AddItem(new BMenuItem("BAC", new BMessage(kDeviceSoundChipStereoBAC))); + fAYStereoMenu->AddItem(new BMenuItem("BCA", new BMessage(kDeviceSoundChipStereoBCA))); + fAYStereoMenu->AddItem(new BMenuItem("CAB", new BMessage(kDeviceSoundChipStereoCAB))); + fAYStereoMenu->AddItem(new BMenuItem("CBA", new BMessage(kDeviceSoundChipStereoCBA))); -+ fAYStereoMenu->AddItem(new BMenuItem("Mono", new BMessage(kDeviceSoundChipStereoMono))); ++ fAYStereoMenu->AddItem(new BMenuItem(B_TRANSLATE("Mono"), new BMessage(kDeviceSoundChipStereoMono))); + fAYStereoMenu->SetRadioMode(true); + menu->AddItem(fAYStereoMenu); -+ fSoundVolumeMenu = new BMenu("Volume"); ++ fSoundVolumeMenu = new BMenu(B_TRANSLATE("Volume")); + for (int volume = 0; volume <= 10; volume++) { + BMessage *message = new BMessage(kDeviceSoundVolume); + message->AddInt32("volume", volume); + BString title; + if (volume == 0) -+ title = "Mute"; ++ title = B_TRANSLATE("Mute"); + else + title << (volume * 10) << " %"; + fSoundVolumeMenu->AddItem(new BMenuItem(title, message)); @@ -2757,32 +2768,34 @@ index 0000000..43cec2a + fSoundVolumeMenu->SetRadioMode(true); + menu->AddItem(fSoundVolumeMenu); + menu->AddSeparatorItem(); -+ fJoystickMenu = new BMenu("Joystick"); -+ fJoystickMenu->AddItem(new BMenuItem("Cursor", new BMessage(kDeviceJoystickCursor))); -+ fJoystickMenu->AddItem(new BMenuItem("Cursor + Enter", new BMessage(kDeviceJoystickCursorEnter))); -+ fJoystickMenu->AddItem(new BMenuItem("Kempston", new BMessage(kDeviceJoystickKempston))); -+ fJoystickMenu->AddItem(new BMenuItem("Sinclair 2", new BMessage(kDeviceJoystickSinclair2))); -+ fJoystickMenu->AddItem(new BMenuItem("QAOPM", new BMessage(kDeviceJoystickQAOPM))); -+ fJoystickMenu->AddItem(new BMenuItem("QAOP + Space", new BMessage(kDeviceJoystickQAOPSpace))); ++ fJoystickMenu = new BMenu(B_TRANSLATE("Joystick")); ++ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("Cursor"), new BMessage(kDeviceJoystickCursor))); ++ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("Cursor + Enter"), new BMessage(kDeviceJoystickCursorEnter))); ++ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("Kempston"), new BMessage(kDeviceJoystickKempston))); ++ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("Sinclair 2"), new BMessage(kDeviceJoystickSinclair2))); ++ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("QAOPM"), new BMessage(kDeviceJoystickQAOPM))); ++ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("QAOP + Space"), new BMessage(kDeviceJoystickQAOPSpace))); + fJoystickMenu->SetRadioMode(true); + menu->AddItem(fJoystickMenu); + menu->AddSeparatorItem(); -+ fKempstonMouseGrabMenuItem = new BMenuItem("Kempson mouse grab", new BMessage(kDeviceKempsonMouse), 'G'); ++ fKempstonMouseGrabMenuItem = new BMenuItem(B_TRANSLATE("Kempson mouse grab"), new BMessage(kDeviceKempsonMouse), 'G'); + menu->AddItem(fKempstonMouseGrabMenuItem); + menu->AddSeparatorItem(); -+ f48kModeMenuItem = new BMenuItem("Mode 48k", new BMessage(kDeviceMode48k), 'M'); ++ f48kModeMenuItem = new BMenuItem(B_TRANSLATE("Mode 48k"), new BMessage(kDeviceMode48k), 'M'); + menu->AddItem(f48kModeMenuItem); + menu->AddSeparatorItem(); -+ fPauseMenuItem = new BMenuItem("Pause", new BMessage(kDevicePause), 'P'); ++ fPauseMenuItem = new BMenuItem(B_TRANSLATE("Pause"), new BMessage(kDevicePause), 'P'); + menu->AddItem(fPauseMenuItem); -+ fResetToServiceROMMenuItem = new BMenuItem("Reset to service ROM", new BMessage(kDeviceResetToServiceROM)); ++ fResetToServiceROMMenuItem = new BMenuItem(B_TRANSLATE("Reset to service ROM"), new BMessage(kDeviceResetToServiceROM)); + menu->AddItem(fResetToServiceROMMenuItem); -+ menu->AddItem(new BMenuItem("Reset", new BMessage(kDeviceReset), 'R')); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Reset"), new BMessage(kDeviceReset), 'R')); + fMenuBar->AddItem(menu); -+ menu = new BMenu("Help"); -+ menu->AddItem(new BMenuItem("Register filetypes", new BMessage(kHelpRegisterMime))); ++ menu = new BMenu(B_TRANSLATE("Help")); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Register filetypes"), new BMessage(kHelpRegisterMime))); + menu->AddSeparatorItem(); -+ menu->AddItem(new BMenuItem("About", new BMessage(B_ABOUT_REQUESTED))); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("Visit homepage"), new BMessage(kHelpOpenHomePage))); ++ menu->AddSeparatorItem(); ++ menu->AddItem(new BMenuItem(B_TRANSLATE("About"), new BMessage(B_ABOUT_REQUESTED))); + fMenuBar->AddItem(menu); + + AddShortcut('F', B_COMMAND_KEY, new BMessage(kViewFullScreen)); @@ -2794,15 +2807,15 @@ index 0000000..43cec2a + BFont font(be_plain_font); + font.SetSize(ceilf(font.Size() * 0.75)); + -+ fStatusMode = new BStringView("status", "128k"); ++ fStatusMode = new BStringView("status", B_TRANSLATE("128k")); + fStatusMode->SetFont(&font, B_FONT_SIZE); + fStatusMode->SetAlignment(B_ALIGN_LEFT); + -+ fStatusDisk = new BStringView("disk status", "[A] B C D"); ++ fStatusDisk = new BStringView("disk status", "[A] b c d"); + fStatusDisk->SetFont(&font, B_FONT_SIZE); + fStatusDisk->SetAlignment(B_ALIGN_LEFT); + -+ fStatusJoystick = new BStringView("joystick status", "Cursor"); ++ fStatusJoystick = new BStringView("joystick status", B_TRANSLATE("Cursor")); + fStatusJoystick->SetFont(&font, B_FONT_SIZE); + fStatusJoystick->SetAlignment(B_ALIGN_LEFT); + @@ -2810,7 +2823,7 @@ index 0000000..43cec2a + fStatusSound->SetFont(&font, B_FONT_SIZE); + fStatusSound->SetAlignment(B_ALIGN_LEFT); + -+ fStatusInfo = new BStringView("status info", "Ready"); ++ fStatusInfo = new BStringView("status info", B_TRANSLATE("Ready")); + fStatusInfo->SetFont(&font, B_FONT_SIZE); + fStatusInfo->SetAlignment(B_ALIGN_LEFT); + @@ -2946,9 +2959,9 @@ index 0000000..43cec2a + + // update status line + if (op_mode_48k && *op_mode_48k) -+ fStatusMode->SetText("48k"); ++ fStatusMode->SetText(B_TRANSLATE("48k")); + else -+ fStatusMode->SetText("128k"); ++ fStatusMode->SetText(B_TRANSLATE("128k")); + + if (drive == D_A)fStatusDisk->SetText("[A] b c d"); + if (drive == D_B)fStatusDisk->SetText("a [B] c d"); @@ -2967,8 +2980,9 @@ index 0000000..43cec2a + soundStatus << "ABC"; + + BString volumeTxt; -+ volumeTxt << " " << (OpVolume() * 10) << "%"; -+ soundStatus += OpVolume() == 0 ? " Mute" : volumeTxt; ++ volumeTxt << (OpVolume() * 10) << "%"; ++ soundStatus += " "; ++ soundStatus += ((OpVolume() == 0) ? B_TRANSLATE("Mute") : volumeTxt.String()); + fStatusSound->SetText(soundStatus); +} + @@ -3023,14 +3037,14 @@ index 0000000..43cec2a + BMimeType mime(_mime); + status_t ret = mime.InitCheck(); + if (ret != B_OK) { -+ fprintf(stderr, "Could not init native document mime type (%s): %s.\n", ++ fprintf(stderr, B_TRANSLATE("Could not init native document mime type (%s): %s.\n"), + _mime, strerror(ret)); + return; + } + + ret = mime.Install(); + if (ret != B_OK && ret != B_FILE_EXISTS) { -+ fprintf(stderr, "Could not install native document mime type (%s): %s.\n", ++ fprintf(stderr, B_TRANSLATE("Could not install native document mime type (%s): %s.\n"), + _mime, strerror(ret)); + return; + } @@ -3054,12 +3068,12 @@ index 0000000..43cec2a + const void* iconData = resources->LoadResource('VICN', _icon, &size); + if (iconData != NULL && size > 0) { + if (mime.SetIcon(reinterpret_cast(iconData), size) != B_OK) -+ fprintf(stderr, "Could not set vector icon of mime type.\n"); ++ fprintf(stderr, B_TRANSLATE("Could not set vector icon of mime type.\n")); + } else { -+ fprintf(stderr, "Could not find icon in app resources (data: %p, size: %ld).\n", iconData, size); ++ fprintf(stderr, B_TRANSLATE("Could not find icon in app resources (data: %p, size: %ld).\n"), iconData, size); + } + } else -+ fprintf(stderr, "Could not find app resources.\n"); ++ fprintf(stderr, B_TRANSLATE("Could not find app resources.\n")); +} + +void @@ -3074,7 +3088,7 @@ index 0000000..43cec2a + if (fStateInfoTimer > 0) { + fStateInfoTimer--; + if (fStateInfoTimer == 0) -+ SetStatusInfo("Ready"); ++ SetStatusInfo(B_TRANSLATE("Ready")); + } + break; + } @@ -3082,7 +3096,7 @@ index 0000000..43cec2a + { + if (!fOpenPanel) { + fOpenPanel = new BFilePanel(B_OPEN_PANEL, NULL, NULL, 0, true, NULL, NULL, true, true); -+ fOpenPanel->Window()->SetTitle("Open file..."); ++ fOpenPanel->Window()->SetTitle(B_TRANSLATE("Open file" B_UTF8_ELLIPSIS)); + fOpenPanel->SetTarget(this); + } + Handler()->VideoPaused(true); @@ -3105,10 +3119,10 @@ index 0000000..43cec2a + if(loadState) + loadState->Change(); + if (*loadState) { -+ SetStatusInfo("Quick load OK", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Quick load OK"), STATUS_TIME_DEFAULT); + fQuickSaveMenuItem->SetEnabled(true); + } else -+ SetStatusInfo("Quick load FAILED", STATUS_TIME_DEFAULT, B_FAILURE_COLOR); ++ SetStatusInfo(B_TRANSLATE("Quick load FAILED"), STATUS_TIME_DEFAULT, B_FAILURE_COLOR); + break; + } + case kFileQuickSave: @@ -3121,9 +3135,9 @@ index 0000000..43cec2a + Handler()->VideoPaused(false); + } + if (*saveState) -+ SetStatusInfo("Quick save OK", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Quick save OK"), STATUS_TIME_DEFAULT); + else -+ SetStatusInfo("Quick save FAILED", STATUS_TIME_DEFAULT, B_FAILURE_COLOR); ++ SetStatusInfo(B_TRANSLATE("Quick save FAILED"), STATUS_TIME_DEFAULT, B_FAILURE_COLOR); + break; + } + case kFileQuickSaveSlot: @@ -3140,7 +3154,7 @@ index 0000000..43cec2a + { + if (!fSavePanel) { + fSavePanel = new BFilePanel(B_SAVE_PANEL, NULL, NULL, 0, true, NULL, NULL, true, true); -+ fSavePanel->Window()->SetTitle("Save SNA snapshot..."); ++ fSavePanel->Window()->SetTitle(B_TRANSLATE("Save SNA snapshot" B_UTF8_ELLIPSIS)); + fSavePanel->SetTarget(this); + } + Handler()->VideoPaused(true); @@ -3152,7 +3166,7 @@ index 0000000..43cec2a + if (!fSaveScreenPanel) { + fSaveScreenPanel = new BFilePanel(B_SAVE_PANEL, NULL, NULL, 0, true, NULL, NULL, true, true); + fSaveScreenPanel->SetMessage(new BMessage(B_SAVE_SCREEN_REQUESTED)); -+ fSaveScreenPanel->Window()->SetTitle("Save screenshot..."); ++ fSaveScreenPanel->Window()->SetTitle(B_TRANSLATE("Save screenshot" B_UTF8_ELLIPSIS)); + fSaveScreenPanel->SetTarget(this); + } + Handler()->VideoPaused(true); @@ -3162,9 +3176,9 @@ index 0000000..43cec2a + case kFileAutoPlay: + { + if(UpdateBoolOption(fAutoPlayMenuItem, "auto play image", true)) { -+ SetStatusInfo("Auto launch on", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Auto launch on"), STATUS_TIME_DEFAULT); + } else { -+ SetStatusInfo("Auto launch off", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Auto launch off"), STATUS_TIME_DEFAULT); + } + UpdateMenus(); + break; @@ -3183,10 +3197,10 @@ index 0000000..43cec2a + BString text; + bool status = Handler()->OnOpenFile(path.Path()); + if (status) { -+ text << "File was successfully opened"; ++ text << B_TRANSLATE("File was successfully opened"); + fQuickSaveMenuItem->SetEnabled(true); + } else -+ text << "Could not open file"; ++ text << B_TRANSLATE("Could not open file"); + + SetStatusInfo(text.String(), STATUS_TIME_DEFAULT, status ? B_PANEL_TEXT_COLOR : B_FAILURE_COLOR); + } @@ -3205,9 +3219,9 @@ index 0000000..43cec2a + name += ".sna"; + pathname.Append(name); + if(Handler()->OnSaveFile(pathname.Path())) -+ SetStatusInfo("File save OK", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("File save OK"), STATUS_TIME_DEFAULT); + else -+ SetStatusInfo("File save FAILED", STATUS_TIME_DEFAULT, B_FAILURE_COLOR); ++ SetStatusInfo(B_TRANSLATE("File save FAILED"), STATUS_TIME_DEFAULT, B_FAILURE_COLOR); + } + } + break; @@ -3225,9 +3239,9 @@ index 0000000..43cec2a + name += ".png"; + pathname.Append(name); + if (Handler()->OnSaveFile(pathname.Path())) -+ SetStatusInfo("Screenshot save OK", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Screenshot save OK"), STATUS_TIME_DEFAULT); + else -+ SetStatusInfo("Screenshot save FAILED", STATUS_TIME_DEFAULT, B_FAILURE_COLOR); ++ SetStatusInfo(B_TRANSLATE("Screenshot save FAILED"), STATUS_TIME_DEFAULT, B_FAILURE_COLOR); + } + } + break; @@ -3263,7 +3277,7 @@ index 0000000..43cec2a + fFiltering = !fFiltering; + fView->EnableBilinear(fFiltering); + op_scale_bilinear.Set(fFiltering); -+ SetStatusInfo(fFiltering ? "Filtering enabled" : "Filtering disabled", STATUS_TIME_DEFAULT); ++ SetStatusInfo(fFiltering ? B_TRANSLATE("Filtering enabled") : B_TRANSLATE("Filtering disabled"), STATUS_TIME_DEFAULT); + UpdateMenus(); + break; + } @@ -3272,7 +3286,7 @@ index 0000000..43cec2a + fXBRFiltering = !fXBRFiltering; + fView->EnableXBR(fXBRFiltering); + op_xbr_scale.Set(fXBRFiltering); -+ SetStatusInfo(fXBRFiltering ? "XBR Filtering enabled" : "XBR Filtering disabled", STATUS_TIME_DEFAULT); ++ SetStatusInfo(fXBRFiltering ? B_TRANSLATE("XBR Filtering enabled") : B_TRANSLATE("XBR Filtering disabled"), STATUS_TIME_DEFAULT); + UpdateMenus(); + break; + } @@ -3280,7 +3294,7 @@ index 0000000..43cec2a + { + op_smart_border_disabled.Set(!op_smart_border_disabled); + fView->EnableSmartBorder(!op_smart_border_disabled); -+ SetStatusInfo(op_smart_border_disabled ? "Smart border disabled" : "Smart border enabled", STATUS_TIME_DEFAULT); ++ SetStatusInfo(op_smart_border_disabled ? B_TRANSLATE("Smart border disabled") : B_TRANSLATE("Smart border enabled"), STATUS_TIME_DEFAULT); + UpdateMenus(); + break; + } @@ -3301,16 +3315,16 @@ index 0000000..43cec2a + switch(Handler()->OnAction(A_TAPE_TOGGLE)) + { + case AR_TAPE_STARTED: -+ SetStatusInfo("Tape started", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Tape started"), STATUS_TIME_DEFAULT); + break; + case AR_TAPE_STOPPED: -+ SetStatusInfo("Tape stopped", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Tape stopped"), STATUS_TIME_DEFAULT); + break; + case AR_TAPE_NOT_INSERTED: -+ SetStatusInfo("Tape not inserted", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Tape not inserted"), STATUS_TIME_DEFAULT); + break; + default: -+ SetStatusInfo("Ready"); ++ SetStatusInfo(B_TRANSLATE("Ready")); + break; + } + break; @@ -3321,7 +3335,7 @@ index 0000000..43cec2a + eOption* op_tape_fast = eOption::Find("fast tape"); + SAFE_CALL(op_tape_fast)->Change(); + bool tape_fast = op_tape_fast && *op_tape_fast; -+ SetStatusInfo(tape_fast ? "Fast tape on" : "Fast tape off", STATUS_TIME_DEFAULT); ++ SetStatusInfo(tape_fast ? B_TRANSLATE("Fast tape on") : B_TRANSLATE("Fast tape off"), STATUS_TIME_DEFAULT); + UpdateMenus(); + break; + } @@ -3478,7 +3492,7 @@ index 0000000..43cec2a + { + fKempsonMouseGrab = !fKempsonMouseGrab; + fView->EnableMouseGrab(fKempsonMouseGrab); -+ SetStatusInfo(fKempsonMouseGrab ? "Mouse grabbed (Alt+G)" : "Ready"); ++ SetStatusInfo(fKempsonMouseGrab ? B_TRANSLATE("Mouse grabbed (Alt+G)") : B_TRANSLATE("Ready")); + UpdateMenus(); + UpdateCursor(); + break; @@ -3488,30 +3502,30 @@ index 0000000..43cec2a + bool marked = fPauseMenuItem->IsMarked(); + fPauseMenuItem->SetMarked(!marked); + Handler()->VideoPaused(!marked); -+ SetStatusInfo(marked ? "Ready" : "Paused"); ++ SetStatusInfo(marked ? B_TRANSLATE("Ready") : B_TRANSLATE("Paused")); + break; + } + case kDeviceReset: + { -+ SetStatusInfo("Reset", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Reset"), STATUS_TIME_DEFAULT); + Handler()->OnAction(A_RESET); + break; + } + case kDeviceMode48k: + { + if (UpdateBoolOption(f48kModeMenuItem, "mode 48k", true)) -+ SetStatusInfo("48k mode enabled", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("48k mode enabled"), STATUS_TIME_DEFAULT); + else -+ SetStatusInfo("128k mode enabled", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("128k mode enabled"), STATUS_TIME_DEFAULT); + UpdateMenus(); + break; + } + case kDeviceResetToServiceROM: + { + if (UpdateBoolOption(fResetToServiceROMMenuItem, "reset to service rom", true)) -+ SetStatusInfo("Reset to service ROM", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Reset to service ROM"), STATUS_TIME_DEFAULT); + else -+ SetStatusInfo("Reset to usual ROM", STATUS_TIME_DEFAULT); ++ SetStatusInfo(B_TRANSLATE("Reset to usual ROM"), STATUS_TIME_DEFAULT); + break; + } + case kHelpKeyboardLayout: @@ -3544,16 +3558,24 @@ index 0000000..43cec2a + InstallMimeType("application/x-spectrum-scl", "disk_icon", "TR-DOS floppy disk image (SCL)", "scl"); + InstallMimeType("application/x-spectrum-tap", "tape_icon", "ZX-Spectrum emulator tape data (TAP)", "tap"); + InstallMimeType("application/x-spectrum-tzx", "tape_icon", "ZX-Spectrum emulator tape data (TZX)", "tzx"); -+ BAlert *alert = new BAlert("Register filetypes", "Filetypes registered!", "OK"); ++ BAlert *alert = new BAlert(B_TRANSLATE("Register filetypes"), B_TRANSLATE("Filetypes registered!"), B_TRANSLATE("OK")); + alert->Go(NULL); + break; + } ++ case kHelpOpenHomePage: ++ { ++ entry_ref ref; ++ get_ref_for_path("/bin/open", &ref); ++ const char* args[] = { "/bin/open", "https://bitbucket.org/djdron/unrealspeccyp", NULL }; ++ be_roster->Launch(&ref, 2, args); ++ break; ++ } + case B_ABOUT_REQUESTED: + { -+ BAboutWindow* wind = new BAboutWindow("Unreal Speccy Portable", "application/x-vnd.unreal-speccy-portable"); -+ const char *backendCopyrights[]={"2021 Haiku UI by Gerasim Troeglazov (3dEyes**)\n", NULL}; ++ BAboutWindow* wind = new BAboutWindow("Unreal Speccy Portable", APP_SIGNATURE); ++ const char *backendCopyrights[]={"2021-2023 Haiku UI by Gerasim Troeglazov (3dEyes**)\n", NULL}; + wind->AddCopyright(2022, "SMT, Dexus, Alone Coder, deathsoft, djdron, scor.", (const char**)&backendCopyrights); -+ wind->SetVersion("0.0.86.18"); ++ wind->SetVersion("0.0.86.21"); + wind->AddDescription("Portable ZX Spectrum emulator."); + wind->AddExtraInfo( +"This program is free software: you can redistribute it and/or modify\n\ @@ -4054,10 +4076,10 @@ index 0000000..43cec2a +} diff --git a/platform/haiku/haiku_window.h b/platform/haiku/haiku_window.h new file mode 100644 -index 0000000..ef6b679 +index 0000000..8394024 --- /dev/null +++ b/platform/haiku/haiku_window.h -@@ -0,0 +1,173 @@ +@@ -0,0 +1,175 @@ +/* +Portable ZX-Spectrum emulator. +Copyright (C) 2001-2021 SMT, Dexus, Alone Coder, deathsoft, djdron, scor, 3dEyes @@ -4085,6 +4107,7 @@ index 0000000..ef6b679 +#include +#include +#include ++#include +#include +#include +#include @@ -4141,6 +4164,7 @@ index 0000000..ef6b679 +const uint32 kDeviceBetaDiskD = 'BD_D'; +const uint32 kDeviceKempsonMouse = 'KMOU'; +const uint32 kHelpRegisterMime = 'RMIM'; ++const uint32 kHelpOpenHomePage = 'HOME'; +const uint32 kPulseEvent = 'TIME'; +const uint32 B_SAVE_SCREEN_REQUESTED = 'SSRQ'; + @@ -4231,1244 +4255,6 @@ index 0000000..ef6b679 +} + +#endif -diff --git a/platform/haiku/resources.rdef b/platform/haiku/resources.rdef -new file mode 100644 -index 0000000..bd831f3 ---- /dev/null -+++ b/platform/haiku/resources.rdef -@@ -0,0 +1,120 @@ -+resource app_flags B_SINGLE_LAUNCH; -+ -+resource app_signature "application/x-vnd.unreal-speccy-portable"; -+ -+resource app_version { -+ major = 0, -+ middle = 0, -+ minor = 86, -+ variety = 17, -+ internal = 0, -+ short_info = "Unreal Speccy Portable", -+ long_info = "Portable ZX-Spectrum emulator" -+}; -+ -+resource file_types message { -+ "types" = "application/x-spectrum-sna", -+ "types" = "application/x-spectrum-z80", -+ "types" = "application/x-spectrum-trd", -+ "types" = "application/x-spectrum-udi", -+ "types" = "application/x-spectrum-fdi", -+ "types" = "application/x-spectrum-scl", -+ "types" = "application/x-spectrum-tap", -+ "types" = "application/x-spectrum-tzx" -+}; -+ -+resource vector_icon { -+ $"6E6369660A050003FF000003FFE9000335FF000377C9F6020016033A7CA23D5A" -+ $"7DBEF0223C2DC34B1DB3499FBD000136EEFF4602001602BCFDFBBDC23F3DB9F8" -+ $"BCF765472A854C1EE00001FF46020016023DB67E3DE576BC38853C1DC048E572" -+ $"402EE000FFFF2705FF0401690D0208303530BA6430BDCF304B30C1AD30C51A35" -+ $"50BA5D50BDDC504B50C1BB50C50A50504B50C51A50C1B7503550BDD750BA554B" -+ $"30C52130C1AF303530BDCF30BA5D300A04234E235A6647663A0A042D383B3157" -+ $"4648500804373B34393A363D380802383839390804383D3F393B3F423B080242" -+ $"3C473F0802453D3E4208044546424448404B4208024542484404053A0146484D" -+ $"434E464F454C484A4B0A04485548505646564B0A042E38484F48552E3D0C0A09" -+ $"01000241A71A00000000000041971AC8EE34C8BE340A0501000241671A000000" -+ $"00000041671AC8EE34C8EE340A010101023F381B0000000000003EA0CA41072A" -+ $"BEA70C0A020101023F381B0000000000003E81CF3F64FC4616710A030101023F" -+ $"381B0000000000003E62D43FF3BD4814BC0A040101023F381B0000000000003E" -+ $"154D4242494944690A00010012418615000000000000418615C92C2AC92C2A01" -+ $"178200040A070102024059E8000000000000403489C65D18C604D30A00080403" -+ $"05070608090A124070D6000000000000406B28C695A0C7251D01178103040A08" -+ $"08040305070608090A124059E8000000000000403489C65D18C604D301178103" -+ $"040A06010C024059E8000000000000403489C65D18C604D30A00010B024059E8" -+ $"000000000000403489C65D18C604D3" -+}; -+ -+resource(0, "disk_icon") #'VICN' array { -+ $"6E636966070101000069050102001602386AE138EB85B8EB85386AE1498F854A" -+ $"0B99007AFF1C0200160239C66636A7AEB6A7AE39C6664B6D5C48CB0A003AFF5D" -+ $"02001602B715C2BA87FF3A87FFB715C24567AE4A563D0175FEC402000602371F" -+ $"433A82A6BD80923A2D884BFDA5487CE900FFFFFFFFE8E6B60200060831F0F537" -+ $"B9D9BB38D23568794B3BC84AF95A00FF000025FF000033FFAA0062FF94007167" -+ $"FF44A435FF06B100AAFFFF00AAFF0C0605FF00424042C334C400405E40C83F40" -+ $"5E405E455E45C8C84C495AC64153C2AB5A420608FF7F43584358C400C6645A42" -+ $"C70DC3775AC0475A405AC004C5FE3C3B34C1DF38BAB6BD5FB49FC22DB7AABFC6" -+ $"B49CC2B12449B49AC2D1B8B6C5324358BCD3C7734358580607FF1F425642564A" -+ $"C5985A4052C2ABC5FE3C3B34C1DF38BAB6BD5FB49FC22DB7AABFC6B491C286B4" -+ $"77C33AB484C2E0B87EC4FD4256BC85C6C04256560606FF074258425838C77324" -+ $"492EC5322448244724482EC443425538C66442C8A5425842C8C84258580606FF" -+ $"07425942594AC6A75A4252C39A5AC0045A405AC04852C2AB42564AC59842C92E" -+ $"425942C90B4259590A04523E4C4336393B350606BA0E374D3A4A39473C48BC6D" -+ $"C25C3648334B334E314DBB94C5D508023B36463B080239383F3B0802413C483F" -+ $"020441454343BF84C25F3B463E4738453A413942BDFDBF8440403E3F42410A03" -+ $"35504D4C4356090A00010002401A05000000000000407152C0333BC6BB0D0A01" -+ $"02010A12401A05000000000000407152C0333BC6BB0D01178400040A0402020A" -+ $"02401A05000000000000407152C0333BC6BB0D0A03010402401A050000000000" -+ $"00407152C0333BC6BB0D0A02010302402B16000000000000407152C0777FC67B" -+ $"0D0A05010502401A05000000000000407152C0333BC6BB0D0A02010602401A05" -+ $"000000000000407152C0333BC6BB0D0A010309080712401A0500000000000040" -+ $"7152C0333BC6BB0D01178100040A06010B02401A05000000000000407152C033" -+ $"3BC6BB0D" -+}; -+ -+resource(1, "tape_icon") #'VICN' array { -+ $"6E636966090101000070030100000200160239C6663B870ABB870A39C666499A" -+ $"8F4A45700068FF3902001602B85851B787AE3787AEB858514A6A664BA1470050" -+ $"FF2202001602390B853BB2E1BBB2E1390B854AC58549117000AEFF7C02001602" -+ $"3AF23D3AB4CCBAB4CC3AF23D4A3828497614008EFF5A02001603BA2D6ABA1981" -+ $"38806BB898234A141B4A559E00C9ED73FF21020006082D6C4836BE03BB3F5E32" -+ $"06DF4AFFBE4A42EA00FFF8E333FF000047FFAA0071FF94008167FF44B035FF06" -+ $"C400AAFFFF00AAFF01603D0FBD0E0607FF1F465A465AC2CE5A4B5AC3775A52C7" -+ $"30604459C443CB6FC0D05840CA60C047524046404C4046C334465A46C6A7465A" -+ $"5A060ABFA207352EB8D7BAB4C047BA6F5A3EC532BD185AC0035A445AC047C773" -+ $"C400465740543D294A28482245224522C0AD3E0A0E46563F533D542A4A274722" -+ $"45223F27412A413D4A3F4D46504656465606049F465646C73046565A445A445A" -+ $"3F3E46500608BEAA223F352EB923BA73C047BA6F5A3EC532BD18C7C4C10F4750" -+ $"3F4D3D4A2A4128420A04303E41463F4C2A410606FF0737363736BB8036343834" -+ $"BC1E34BD00373ABB803ABCD23A3A383ABD003ABC1E3736BCD2363736360606FF" -+ $"0748BEB448BEB4C246BEB445BF8045BF0F45BFF048C04CC246C04CC398C04C4B" -+ $"BF804BBFF04BBF0F48BEB4C398BEB448BEB4BEB40A044140393C3D38453C0802" -+ $"3633503F0A0423412C462C4923440A042E47394D39502E4A0A043B4E45534556" -+ $"3B5102062E3B303C293932332E36372F393237313B334F3C4D3B513D5440573E" -+ $"51434B484D494B480E0A000100000A0101011001178422040A020102000A0301" -+ $"03000A040104000A050105000A07010D000A010106000A010107000A06010800" -+ $"0A0001091001178100040A08030A0B0C000A000106023EAAAA0000000000003E" -+ $"000041555548C0000A000106023EAAAA0000000000003E000046EAAA496000" -+}; -+ -+resource(2, "snapshot_icon") #'VICN' array { -+ $"6E6369660703010000010100006A0533020006023A5D2B39F8B0B9DBF03A4C0F" -+ $"48AEEA4A809100747474FF3E3D3D020016023C40A33251B1B294FA3C81FE4956" -+ $"204903D700B0FF830200160336EDEB36B94ABA0AF63A326E4A79EF4AC3E7005A" -+ $"38DCFF7E0200060A358A6B399462BB27AC371EE44AEDD24A159800D3D3D326A5" -+ $"A5A548FF060662FF000073FFAA0098FF9400B067FF44CD35FF06DC00AAFFFF00" -+ $"AAFF050A043C565A385A323C4E0A0422493C563C4E22430607AA3F422A22433C" -+ $"4E5A32512F512F50304B2F4D30492E492C482D492C0608FAFA424C3E5040513F" -+ $"C65341C6B942C7B742C74142C8A8C0F15945C8E946C61F46C71046C5A9444D45" -+ $"C52143C4BB0A073C584058425A485A4A5846564547100A010104023FCA1A0000" -+ $"00000000406BCA4906BCCA035E0A010104023FCA1A0000000000004000004814" -+ $"35C780000A010104023FCA1A00000000000040000046435EC500000A01010402" -+ $"3FCA1A00000000000040000040F2860000000A00030201001001178422040A02" -+ $"0100000A030101000A060102000A000103123FC7130000000000003F9C004907" -+ $"28C7E05901178422040A050103023FC7130000000000003F9C00490728C7E059" -+ $"0A000103123FC7130000000000003F9C00481563C6125801178422040A050103" -+ $"023FC7130000000000003F9C00481563C612580A000103123FC7130000000000" -+ $"003F9C0046473DC022C301178422040A050103023FC7130000000000003F9C00" -+ $"46473DC022C30A000103123FC7130000000000003F9C00411D99451350011784" -+ $"22040A050103023FC7130000000000003F9C00411D99451350" -+}; -diff --git a/platform/linux/io_select_linux.cpp b/platform/linux/io_select_linux.cpp -old mode 100755 -new mode 100644 -index cb3d1f0..58070b7 ---- a/platform/linux/io_select_linux.cpp -+++ b/platform/linux/io_select_linux.cpp -@@ -25,7 +25,11 @@ along with this program. If not, see . - #include - #include - #include -+#ifdef __HAIKU__ -+#include -+#else - #include -+#endif - - namespace xIo - { -@@ -73,6 +77,11 @@ bool PathIsRoot(const char* path) { return !strcmp(path, root_path); } - - bool MkDir(const char* path) - { -+#ifdef __HAIKU__ -+ struct stat st; -+ if (stat(path, &st) == 0) -+ return true; -+#endif - if(mkdir(path, 0777) != 0) - { - if(errno != EEXIST) -diff --git a/platform/platform.h b/platform/platform.h -index 63a179a..3fb042b 100644 ---- a/platform/platform.h -+++ b/platform/platform.h -@@ -24,7 +24,7 @@ along with this program. If not, see . - #pragma once - - --#if defined(_WINDOWS) || defined(_LINUX) || defined(_MAC) -+#if defined(_WINDOWS) || defined(_LINUX) || defined(_MAC) || defined(_HAIKU) - - #ifndef USE_BENCHMARK - #ifndef USE_LIBRARY -diff --git a/platform/symbian/tick.h b/platform/symbian/tick.h -old mode 100755 -new mode 100644 -diff --git a/platform/win/tick_qpc.h b/platform/win/tick_qpc.h -old mode 100755 -new mode 100644 -diff --git a/unreal_speccy_portable.rdef b/unreal_speccy_portable.rdef -new file mode 100644 -index 0000000..20c1207 ---- /dev/null -+++ b/unreal_speccy_portable.rdef -@@ -0,0 +1,38 @@ -+ -+resource app_flags B_SINGLE_LAUNCH; -+ -+resource app_version { -+ major = 0, -+ middle = 0, -+ minor = 86, -+ -+ variety = B_APPV_FINAL, -+ internal = 0, -+ -+ short_info = "Unreal Speccy Portable", -+ long_info = "A portable ZX-Spectrum emulator" -+}; -+ -+resource app_signature "application/x-vnd.unreal-speccy-portable"; -+ -+resource vector_icon { -+ $"6E6369660A050003FF000003FFE9000335FF000377C9F6020016033A7CA23D5A" -+ $"7DBEF0223C2DC34B1DB3499FBD000136EEFF4602001602BCFDFBBDC23F3DB9F8" -+ $"BCF765472A854C1EE00001FF46020016023DB67E3DE576BC38853C1DC048E572" -+ $"402EE000FFFF2705FF0401690D0208303530BA6430BDCF304B30C1AD30C51A35" -+ $"50BA5D50BDDC504B50C1BB50C50A50504B50C51A50C1B7503550BDD750BA554B" -+ $"30C52130C1AF303530BDCF30BA5D300A04234E235A6647663A0A042D383B3157" -+ $"4648500804373B34393A363D380802383839390804383D3F393B3F423B080242" -+ $"3C473F0802453D3E4208044546424448404B4208024542484404053A0146484D" -+ $"434E464F454C484A4B0A04485548505646564B0A042E38484F48552E3D0C0A09" -+ $"01000241A71A00000000000041971AC8EE34C8BE340A0501000241671A000000" -+ $"00000041671AC8EE34C8EE340A010101023F381B0000000000003EA0CA41072A" -+ $"BEA70C0A020101023F381B0000000000003E81CF3F64FC4616710A030101023F" -+ $"381B0000000000003E62D43FF3BD4814BC0A040101023F381B0000000000003E" -+ $"154D4242494944690A00010012418615000000000000418615C92C2AC92C2A01" -+ $"178200040A070102024059E8000000000000403489C65D18C604D30A00080403" -+ $"05070608090A124070D6000000000000406B28C695A0C7251D01178103040A08" -+ $"08040305070608090A124059E8000000000000403489C65D18C604D301178103" -+ $"040A06010C024059E8000000000000403489C65D18C604D30A00010B024059E8" -+ $"000000000000403489C65D18C604D3" -+}; --- -2.37.3 - - -From ddeefde6cc7a6ac35a6a809a07b481810cc63e8d Mon Sep 17 00:00:00 2001 -From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Sat, 6 May 2023 22:24:44 +1000 -Subject: Fix version - - -diff --git a/platform/haiku/resources.rdef b/platform/haiku/resources.rdef -index bd831f3..e12a1d1 100644 ---- a/platform/haiku/resources.rdef -+++ b/platform/haiku/resources.rdef -@@ -6,7 +6,7 @@ resource app_version { - major = 0, - middle = 0, - minor = 86, -- variety = 17, -+ variety = 18, - internal = 0, - short_info = "Unreal Speccy Portable", - long_info = "Portable ZX-Spectrum emulator" --- -2.37.3 - - -From 20f13456c42d16397a8531ff126385d0fd27a2cf Mon Sep 17 00:00:00 2001 -From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Sat, 6 May 2023 22:25:22 +1000 -Subject: Add LocaleKit support - - -diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt -index 1c44a48..3dec766 100644 ---- a/build/cmake/CMakeLists.txt -+++ b/build/cmake/CMakeLists.txt -@@ -370,7 +370,7 @@ source_group("platform\\haiku" FILES ${SRCCXX_PLATFORM_HAIKU}) - add_platform_io_stuff() - - add_executable(${PROJECT} WIN32 ${SRCCXX} ${SRCC} ${SRCH}) --target_link_libraries(${PROJECT} -lbe -lmedia -ldevice -lgame -ltracker -lpng) -+target_link_libraries(${PROJECT} -lbe -lmedia -ldevice -lgame -ltracker -llocalestub -lpng) - - elseif(USE_SDL) - -diff --git a/platform/haiku/haiku_keyboard_window.cpp b/platform/haiku/haiku_keyboard_window.cpp -index 28943d1..6daf943 100644 ---- a/platform/haiku/haiku_keyboard_window.cpp -+++ b/platform/haiku/haiku_keyboard_window.cpp -@@ -18,6 +18,9 @@ along with this program. If not, see . - - #include "haiku_keyboard_window.h" - -+#undef B_TRANSLATION_CONTEXT -+#define B_TRANSLATION_CONTEXT "USPKeyboardWindow" -+ - static zxbutton zxkeymap[] = { - {100, ZXB_BUTTON, "BREAK", NULL, NULL, -1, NULL, NULL, 0x01 }, - {100, ZXB_SEPARATOR, NULL, NULL, NULL, -1, NULL, NULL, 0x00 }, -@@ -279,7 +282,7 @@ ZXButton::MouseUp(BPoint where) - } - - KeyboardWindow::KeyboardWindow(BRect frame, BWindow *win) --: BWindow(frame, "Keyboard layout", B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, -+: BWindow(frame, B_TRANSLATE("Keyboard layout"), B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, - B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_WILL_ACCEPT_FIRST_CLICK), - fButtonSize(48), - fButtonSpace(1), -diff --git a/platform/haiku/haiku_keyboard_window.h b/platform/haiku/haiku_keyboard_window.h -index 5ba8fdf..79fef9a 100644 ---- a/platform/haiku/haiku_keyboard_window.h -+++ b/platform/haiku/haiku_keyboard_window.h -@@ -24,6 +24,7 @@ along with this program. If not, see . - #include - #include - #include -+#include - - #define ZXB_BUTTON 0 - #define ZXB_SEPARATOR 1 -diff --git a/platform/haiku/haiku_web_window.cpp b/platform/haiku/haiku_web_window.cpp -index 0f3e89f..db87012 100644 ---- a/platform/haiku/haiku_web_window.cpp -+++ b/platform/haiku/haiku_web_window.cpp -@@ -25,6 +25,9 @@ along with this program. If not, see . - #include "haiku_web_window.h" - #include "haiku_list_item.h" - -+#undef B_TRANSLATION_CONTEXT -+#define B_TRANSLATION_CONTEXT "USPWebWindow" -+ - namespace xIo - { - eFileSelect* FileSelectWEB(const char* path); -@@ -35,7 +38,7 @@ namespace xPlatform - { - - WebWindow::WebWindow(BRect frame, BWindow *win) --: BWindow(frame, "Open file from web...", B_DOCUMENT_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_CLOSE_ON_ESCAPE), -+: BWindow(frame, B_TRANSLATE("Open file from web" B_UTF8_ELLIPSIS), B_DOCUMENT_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_CLOSE_ON_ESCAPE), - fMainWindow(win) - { - BFont font(be_plain_font); -@@ -70,10 +73,10 @@ WebWindow::WebWindow(BRect frame, BWindow *win) - fLastDownloadedPath.SetTo("/boot/home/config/settings/USP"); - - fMenuBar = new BMenuBar("menu_bar", B_ITEMS_IN_ROW, B_INVALIDATE_AFTER_LAYOUT); -- BMenu* menu = new BMenu("File"); -- menu->AddItem(new BMenuItem("Open", new BMessage(kFileInvocated), 'O')); -- menu->AddItem(new BMenuItem("Download file", new BMessage(kFileDownload), 'D')); -- menu->AddItem(new BMenuItem("Open download folder", new BMessage(kFileOpenDowloadFolder), 'J')); -+ BMenu* menu = new BMenu(B_TRANSLATE("File")); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Open"), new BMessage(kFileInvocated), 'O')); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Download file"), new BMessage(kFileDownload), 'D')); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Open download folder"), new BMessage(kFileOpenDowloadFolder), 'J')); - fMenuBar->AddItem(menu); - menu->SetTargetForItems(this); - -@@ -90,13 +93,13 @@ WebWindow::WebWindow(BRect frame, BWindow *win) - fUpButton->SetIcon(fUpIcon, 0); - fUpButton->SetFlat(true); - -- fCancelButton = new BButton("Cancel", new BMessage(kCancelButtonPush)); -- fOpenButton = new BButton("Open", new BMessage(kOpenButtonPush)); -+ fCancelButton = new BButton(B_TRANSLATE("Cancel"), new BMessage(kCancelButtonPush)); -+ fOpenButton = new BButton(B_TRANSLATE("Open"), new BMessage(kOpenButtonPush)); - fOpenButton->MakeDefault(true); - - BFont smallFont(be_plain_font); - smallFont.SetSize(ceilf(font.Size() * 0.75)); -- fStatusView = new BStringView("list status", "Items"); -+ fStatusView = new BStringView("list status", B_TRANSLATE("items")); - fStatusView->SetFont(&smallFont, B_FONT_SIZE); - fStatusView->SetAlignment(B_ALIGN_LEFT); - -@@ -206,7 +209,7 @@ WebWindow::UpdateList(void) - fUpButton->SetEnabled(pathList.CountStrings() != 0); - - BString statusText; -- statusText << " " << fListView->CountItems() << " items "; -+ statusText << " " << fListView->CountItems() << " " << B_TRANSLATE("items") << " "; - fStatusView->SetText(statusText); - } - -diff --git a/platform/haiku/haiku_web_window.h b/platform/haiku/haiku_web_window.h -index 2c5848b..fc9ddf2 100644 ---- a/platform/haiku/haiku_web_window.h -+++ b/platform/haiku/haiku_web_window.h -@@ -30,6 +30,7 @@ along with this program. If not, see . - #include - #include - #include -+#include - - const uint32 kFileInvocated = 'SINV'; - const uint32 kFileDownload = 'FDNL'; -diff --git a/platform/haiku/haiku_window.cpp b/platform/haiku/haiku_window.cpp -index 43cec2a..7fd7e9c 100644 ---- a/platform/haiku/haiku_window.cpp -+++ b/platform/haiku/haiku_window.cpp -@@ -24,6 +24,9 @@ along with this program. If not, see . - #include "haiku_app.h" - #include "haiku_window.h" - -+#undef B_TRANSLATION_CONTEXT -+#define B_TRANSLATION_CONTEXT "USPWindow" -+ - namespace xPlatform - { - -@@ -101,22 +104,22 @@ HaikuPlatformWindow::HaikuPlatformWindow(BRect frame, int w, int h, const char* - fStateInfoTimer(0) - { - fMenuBar = new BMenuBar("menu_bar", B_ITEMS_IN_ROW, B_INVALIDATE_AFTER_LAYOUT); -- BMenu* menu = new BMenu("File"); -- BMenuItem *item = new BMenuItem(BRecentFilesList::NewFileListMenu("Open" B_UTF8_ELLIPSIS, -+ BMenu* menu = new BMenu(B_TRANSLATE("File")); -+ BMenuItem *item = new BMenuItem(BRecentFilesList::NewFileListMenu(B_TRANSLATE("Open" B_UTF8_ELLIPSIS), - NULL, NULL, this, 9, true, NULL, APP_SIGNATURE), - new BMessage(kFileOpen)); - item->SetShortcut('O', 0); - menu->AddItem(item); -- menu->AddItem(new BMenuItem("Open from web" B_UTF8_ELLIPSIS, new BMessage(kFileOpenWeb))); -- menu->AddItem(new BMenuItem("Save" B_UTF8_ELLIPSIS, new BMessage(kFileSave), 'S')); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Open from web" B_UTF8_ELLIPSIS), new BMessage(kFileOpenWeb))); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Save" B_UTF8_ELLIPSIS), new BMessage(kFileSave), 'S')); - menu->AddSeparatorItem(); -- menu->AddItem(new BMenuItem("Save screenshot" B_UTF8_ELLIPSIS, new BMessage(kFileSaveScreen))); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Save screenshot" B_UTF8_ELLIPSIS), new BMessage(kFileSaveScreen))); - menu->AddSeparatorItem(); -- menu->AddItem(new BMenuItem("Quick load", new BMessage(kFileQuickOpen), 'O', B_SHIFT_KEY)); -- fQuickSaveMenuItem = new BMenuItem("Quick save", new BMessage(kFileQuickSave), 'S', B_SHIFT_KEY); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Quick load"), new BMessage(kFileQuickOpen), 'O', B_SHIFT_KEY)); -+ fQuickSaveMenuItem = new BMenuItem(B_TRANSLATE("Quick save"), new BMessage(kFileQuickSave), 'S', B_SHIFT_KEY); - fQuickSaveMenuItem->SetEnabled(false); - menu->AddItem(fQuickSaveMenuItem); -- fQuickSaveSlotMenu = new BMenu("Save slot"); -+ fQuickSaveSlotMenu = new BMenu(B_TRANSLATE("Save slot")); - for (int slot = 1; slot < 10; slot++) { - BMessage *message = new BMessage(kFileQuickSaveSlot); - message->AddInt32("slot", slot); -@@ -127,65 +130,65 @@ HaikuPlatformWindow::HaikuPlatformWindow(BRect frame, int w, int h, const char* - fQuickSaveSlotMenu->SetRadioMode(true); - menu->AddItem(fQuickSaveSlotMenu); - menu->AddSeparatorItem(); -- fAutoPlayMenuItem = new BMenuItem("Auto launch programs", new BMessage(kFileAutoPlay)); -+ fAutoPlayMenuItem = new BMenuItem(B_TRANSLATE("Auto launch programs"), new BMessage(kFileAutoPlay)); - menu->AddItem(fAutoPlayMenuItem); - menu->AddSeparatorItem(); -- menu->AddItem(new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q')); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Quit"), new BMessage(B_QUIT_REQUESTED), 'Q')); - fMenuBar->AddItem(menu); -- menu = new BMenu("View"); -- menu->AddItem(new BMenuItem("100% scale", new BMessage(kViewScale1x), '1')); -- menu->AddItem(new BMenuItem("200% scale", new BMessage(kViewScale2x), '2')); -- menu->AddItem(new BMenuItem("300% scale", new BMessage(kViewScale3x), '3')); -+ menu = new BMenu(B_TRANSLATE("View")); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("100% scale"), new BMessage(kViewScale1x), '1')); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("200% scale"), new BMessage(kViewScale2x), '2')); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("300% scale"), new BMessage(kViewScale3x), '3')); - menu->AddSeparatorItem(); -- fFilteringMenu = new BMenu("Filtering"); -- fFilteringMenuItem = new BMenuItem("Bilinear", new BMessage(kViewFiltering)); -+ fFilteringMenu = new BMenu(B_TRANSLATE("Filtering")); -+ fFilteringMenuItem = new BMenuItem(B_TRANSLATE("Bilinear"), new BMessage(kViewFiltering)); - fFilteringMenu->AddItem(fFilteringMenuItem); -- fXBRFilteringMenuItem = new BMenuItem("XBR", new BMessage(kViewXBRFiltering)); -+ fXBRFilteringMenuItem = new BMenuItem(B_TRANSLATE("XBR"), new BMessage(kViewXBRFiltering)); - fFilteringMenu->AddItem(fXBRFilteringMenuItem); - menu->AddItem(fFilteringMenu); -- fSmartBorderScaleMenuItem = new BMenuItem("Smart border scale", new BMessage(kViewSmartBorder)); -+ fSmartBorderScaleMenuItem = new BMenuItem(B_TRANSLATE("Smart border scale"), new BMessage(kViewSmartBorder)); - menu->AddItem(fSmartBorderScaleMenuItem); - menu->AddSeparatorItem(); -- fVirtualKeyboardMenuItem = new BMenuItem("Virtual keyboard", new BMessage(kHelpKeyboardLayout)); -+ fVirtualKeyboardMenuItem = new BMenuItem(B_TRANSLATE("Virtual keyboard"), new BMessage(kHelpKeyboardLayout)); - menu->AddItem(fVirtualKeyboardMenuItem); -- menu->AddItem(new BMenuItem("OSD keyboard", new BMessage(kViewOnScreenKeyboard), 'K')); -- menu->AddItem(new BMenuItem("OSD menu", new BMessage(kViewOnScreenMenu))); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("OSD keyboard"), new BMessage(kViewOnScreenKeyboard), 'K')); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("OSD menu"), new BMessage(kViewOnScreenMenu))); - menu->AddSeparatorItem(); -- menu->AddItem(new BMenuItem("Full screen", new BMessage(kViewFullScreen), B_ENTER)); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Full screen"), new BMessage(kViewFullScreen), B_ENTER)); - fMenuBar->AddItem(menu); -- menu = new BMenu("Device"); -- menu->AddItem(new BMenuItem("Start / Stop tape", new BMessage(kDeviceStartStopTape))); -- fFastTapeMenuItem = new BMenuItem("Tape fast", new BMessage(kDeviceFastTape)); -+ menu = new BMenu(B_TRANSLATE("Device")); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Start / Stop tape"), new BMessage(kDeviceStartStopTape))); -+ fFastTapeMenuItem = new BMenuItem(B_TRANSLATE("Tape fast"), new BMessage(kDeviceFastTape)); - menu->AddItem(fFastTapeMenuItem); - menu->AddSeparatorItem(); -- fBetaDiskMenu = new BMenu("Beta disk drive"); -+ fBetaDiskMenu = new BMenu(B_TRANSLATE("Beta disk drive")); - fBetaDiskMenu->AddItem(new BMenuItem("A", new BMessage(kDeviceBetaDiskA))); - fBetaDiskMenu->AddItem(new BMenuItem("B", new BMessage(kDeviceBetaDiskB))); - fBetaDiskMenu->AddItem(new BMenuItem("C", new BMessage(kDeviceBetaDiskC))); - fBetaDiskMenu->AddItem(new BMenuItem("D", new BMessage(kDeviceBetaDiskD))); - menu->AddItem(fBetaDiskMenu); - menu->AddSeparatorItem(); -- fSoundChipMenu = new BMenu("Sound chip"); -- fSoundChipMenu->AddItem(new BMenuItem("AY-3-8910", new BMessage(kDeviceSoundChipAY))); -- fSoundChipMenu->AddItem(new BMenuItem("YM2149F", new BMessage(kDeviceSoundChipYM))); -+ fSoundChipMenu = new BMenu(B_TRANSLATE("Sound chip")); -+ fSoundChipMenu->AddItem(new BMenuItem(B_TRANSLATE("AY-3-8910"), new BMessage(kDeviceSoundChipAY))); -+ fSoundChipMenu->AddItem(new BMenuItem(B_TRANSLATE("YM2149F"), new BMessage(kDeviceSoundChipYM))); - menu->AddItem(fSoundChipMenu); -- fAYStereoMenu = new BMenu("AY Stereo"); -+ fAYStereoMenu = new BMenu(B_TRANSLATE("AY Stereo")); - fAYStereoMenu->AddItem(new BMenuItem("ABC", new BMessage(kDeviceSoundChipStereoABC))); - fAYStereoMenu->AddItem(new BMenuItem("ACB", new BMessage(kDeviceSoundChipStereoACB))); - fAYStereoMenu->AddItem(new BMenuItem("BAC", new BMessage(kDeviceSoundChipStereoBAC))); - fAYStereoMenu->AddItem(new BMenuItem("BCA", new BMessage(kDeviceSoundChipStereoBCA))); - fAYStereoMenu->AddItem(new BMenuItem("CAB", new BMessage(kDeviceSoundChipStereoCAB))); - fAYStereoMenu->AddItem(new BMenuItem("CBA", new BMessage(kDeviceSoundChipStereoCBA))); -- fAYStereoMenu->AddItem(new BMenuItem("Mono", new BMessage(kDeviceSoundChipStereoMono))); -+ fAYStereoMenu->AddItem(new BMenuItem(B_TRANSLATE("Mono"), new BMessage(kDeviceSoundChipStereoMono))); - fAYStereoMenu->SetRadioMode(true); - menu->AddItem(fAYStereoMenu); -- fSoundVolumeMenu = new BMenu("Volume"); -+ fSoundVolumeMenu = new BMenu(B_TRANSLATE("Volume")); - for (int volume = 0; volume <= 10; volume++) { - BMessage *message = new BMessage(kDeviceSoundVolume); - message->AddInt32("volume", volume); - BString title; - if (volume == 0) -- title = "Mute"; -+ title = B_TRANSLATE("Mute"); - else - title << (volume * 10) << " %"; - fSoundVolumeMenu->AddItem(new BMenuItem(title, message)); -@@ -193,32 +196,34 @@ HaikuPlatformWindow::HaikuPlatformWindow(BRect frame, int w, int h, const char* - fSoundVolumeMenu->SetRadioMode(true); - menu->AddItem(fSoundVolumeMenu); - menu->AddSeparatorItem(); -- fJoystickMenu = new BMenu("Joystick"); -- fJoystickMenu->AddItem(new BMenuItem("Cursor", new BMessage(kDeviceJoystickCursor))); -- fJoystickMenu->AddItem(new BMenuItem("Cursor + Enter", new BMessage(kDeviceJoystickCursorEnter))); -- fJoystickMenu->AddItem(new BMenuItem("Kempston", new BMessage(kDeviceJoystickKempston))); -- fJoystickMenu->AddItem(new BMenuItem("Sinclair 2", new BMessage(kDeviceJoystickSinclair2))); -- fJoystickMenu->AddItem(new BMenuItem("QAOPM", new BMessage(kDeviceJoystickQAOPM))); -- fJoystickMenu->AddItem(new BMenuItem("QAOP + Space", new BMessage(kDeviceJoystickQAOPSpace))); -+ fJoystickMenu = new BMenu(B_TRANSLATE("Joystick")); -+ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("Cursor"), new BMessage(kDeviceJoystickCursor))); -+ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("Cursor + Enter"), new BMessage(kDeviceJoystickCursorEnter))); -+ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("Kempston"), new BMessage(kDeviceJoystickKempston))); -+ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("Sinclair 2"), new BMessage(kDeviceJoystickSinclair2))); -+ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("QAOPM"), new BMessage(kDeviceJoystickQAOPM))); -+ fJoystickMenu->AddItem(new BMenuItem(B_TRANSLATE("QAOP + Space"), new BMessage(kDeviceJoystickQAOPSpace))); - fJoystickMenu->SetRadioMode(true); - menu->AddItem(fJoystickMenu); - menu->AddSeparatorItem(); -- fKempstonMouseGrabMenuItem = new BMenuItem("Kempson mouse grab", new BMessage(kDeviceKempsonMouse), 'G'); -+ fKempstonMouseGrabMenuItem = new BMenuItem(B_TRANSLATE("Kempson mouse grab"), new BMessage(kDeviceKempsonMouse), 'G'); - menu->AddItem(fKempstonMouseGrabMenuItem); - menu->AddSeparatorItem(); -- f48kModeMenuItem = new BMenuItem("Mode 48k", new BMessage(kDeviceMode48k), 'M'); -+ f48kModeMenuItem = new BMenuItem(B_TRANSLATE("Mode 48k"), new BMessage(kDeviceMode48k), 'M'); - menu->AddItem(f48kModeMenuItem); - menu->AddSeparatorItem(); -- fPauseMenuItem = new BMenuItem("Pause", new BMessage(kDevicePause), 'P'); -+ fPauseMenuItem = new BMenuItem(B_TRANSLATE("Pause"), new BMessage(kDevicePause), 'P'); - menu->AddItem(fPauseMenuItem); -- fResetToServiceROMMenuItem = new BMenuItem("Reset to service ROM", new BMessage(kDeviceResetToServiceROM)); -+ fResetToServiceROMMenuItem = new BMenuItem(B_TRANSLATE("Reset to service ROM"), new BMessage(kDeviceResetToServiceROM)); - menu->AddItem(fResetToServiceROMMenuItem); -- menu->AddItem(new BMenuItem("Reset", new BMessage(kDeviceReset), 'R')); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Reset"), new BMessage(kDeviceReset), 'R')); - fMenuBar->AddItem(menu); -- menu = new BMenu("Help"); -- menu->AddItem(new BMenuItem("Register filetypes", new BMessage(kHelpRegisterMime))); -+ menu = new BMenu(B_TRANSLATE("Help")); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Register filetypes"), new BMessage(kHelpRegisterMime))); -+ menu->AddSeparatorItem(); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("Visit homepage"), new BMessage(kHelpOpenHomePage))); - menu->AddSeparatorItem(); -- menu->AddItem(new BMenuItem("About", new BMessage(B_ABOUT_REQUESTED))); -+ menu->AddItem(new BMenuItem(B_TRANSLATE("About"), new BMessage(B_ABOUT_REQUESTED))); - fMenuBar->AddItem(menu); - - AddShortcut('F', B_COMMAND_KEY, new BMessage(kViewFullScreen)); -@@ -230,15 +235,15 @@ HaikuPlatformWindow::HaikuPlatformWindow(BRect frame, int w, int h, const char* - BFont font(be_plain_font); - font.SetSize(ceilf(font.Size() * 0.75)); - -- fStatusMode = new BStringView("status", "128k"); -+ fStatusMode = new BStringView("status", B_TRANSLATE("128k")); - fStatusMode->SetFont(&font, B_FONT_SIZE); - fStatusMode->SetAlignment(B_ALIGN_LEFT); - -- fStatusDisk = new BStringView("disk status", "[A] B C D"); -+ fStatusDisk = new BStringView("disk status", "[A] b c d"); - fStatusDisk->SetFont(&font, B_FONT_SIZE); - fStatusDisk->SetAlignment(B_ALIGN_LEFT); - -- fStatusJoystick = new BStringView("joystick status", "Cursor"); -+ fStatusJoystick = new BStringView("joystick status", B_TRANSLATE("Cursor")); - fStatusJoystick->SetFont(&font, B_FONT_SIZE); - fStatusJoystick->SetAlignment(B_ALIGN_LEFT); - -@@ -246,7 +251,7 @@ HaikuPlatformWindow::HaikuPlatformWindow(BRect frame, int w, int h, const char* - fStatusSound->SetFont(&font, B_FONT_SIZE); - fStatusSound->SetAlignment(B_ALIGN_LEFT); - -- fStatusInfo = new BStringView("status info", "Ready"); -+ fStatusInfo = new BStringView("status info", B_TRANSLATE("Ready")); - fStatusInfo->SetFont(&font, B_FONT_SIZE); - fStatusInfo->SetAlignment(B_ALIGN_LEFT); - -@@ -382,9 +387,9 @@ HaikuPlatformWindow::UpdateMenus() - - // update status line - if (op_mode_48k && *op_mode_48k) -- fStatusMode->SetText("48k"); -+ fStatusMode->SetText(B_TRANSLATE("48k")); - else -- fStatusMode->SetText("128k"); -+ fStatusMode->SetText(B_TRANSLATE("128k")); - - if (drive == D_A)fStatusDisk->SetText("[A] b c d"); - if (drive == D_B)fStatusDisk->SetText("a [B] c d"); -@@ -403,8 +408,9 @@ HaikuPlatformWindow::UpdateMenus() - soundStatus << "ABC"; - - BString volumeTxt; -- volumeTxt << " " << (OpVolume() * 10) << "%"; -- soundStatus += OpVolume() == 0 ? " Mute" : volumeTxt; -+ volumeTxt << (OpVolume() * 10) << "%"; -+ soundStatus += " "; -+ soundStatus += ((OpVolume() == 0) ? B_TRANSLATE("Mute") : volumeTxt.String()); - fStatusSound->SetText(soundStatus); - } - -@@ -459,14 +465,14 @@ HaikuPlatformWindow::InstallMimeType(const char *_mime, const char *_icon, const - BMimeType mime(_mime); - status_t ret = mime.InitCheck(); - if (ret != B_OK) { -- fprintf(stderr, "Could not init native document mime type (%s): %s.\n", -+ fprintf(stderr, B_TRANSLATE("Could not init native document mime type (%s): %s.\n"), - _mime, strerror(ret)); - return; - } - - ret = mime.Install(); - if (ret != B_OK && ret != B_FILE_EXISTS) { -- fprintf(stderr, "Could not install native document mime type (%s): %s.\n", -+ fprintf(stderr, B_TRANSLATE("Could not install native document mime type (%s): %s.\n"), - _mime, strerror(ret)); - return; - } -@@ -490,12 +496,12 @@ HaikuPlatformWindow::InstallMimeType(const char *_mime, const char *_icon, const - const void* iconData = resources->LoadResource('VICN', _icon, &size); - if (iconData != NULL && size > 0) { - if (mime.SetIcon(reinterpret_cast(iconData), size) != B_OK) -- fprintf(stderr, "Could not set vector icon of mime type.\n"); -+ fprintf(stderr, B_TRANSLATE("Could not set vector icon of mime type.\n")); - } else { -- fprintf(stderr, "Could not find icon in app resources (data: %p, size: %ld).\n", iconData, size); -+ fprintf(stderr, B_TRANSLATE("Could not find icon in app resources (data: %p, size: %ld).\n"), iconData, size); - } - } else -- fprintf(stderr, "Could not find app resources.\n"); -+ fprintf(stderr, B_TRANSLATE("Could not find app resources.\n")); - } - - void -@@ -510,7 +516,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - if (fStateInfoTimer > 0) { - fStateInfoTimer--; - if (fStateInfoTimer == 0) -- SetStatusInfo("Ready"); -+ SetStatusInfo(B_TRANSLATE("Ready")); - } - break; - } -@@ -518,7 +524,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - { - if (!fOpenPanel) { - fOpenPanel = new BFilePanel(B_OPEN_PANEL, NULL, NULL, 0, true, NULL, NULL, true, true); -- fOpenPanel->Window()->SetTitle("Open file..."); -+ fOpenPanel->Window()->SetTitle(B_TRANSLATE("Open file" B_UTF8_ELLIPSIS)); - fOpenPanel->SetTarget(this); - } - Handler()->VideoPaused(true); -@@ -541,10 +547,10 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - if(loadState) - loadState->Change(); - if (*loadState) { -- SetStatusInfo("Quick load OK", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Quick load OK"), STATUS_TIME_DEFAULT); - fQuickSaveMenuItem->SetEnabled(true); - } else -- SetStatusInfo("Quick load FAILED", STATUS_TIME_DEFAULT, B_FAILURE_COLOR); -+ SetStatusInfo(B_TRANSLATE("Quick load FAILED"), STATUS_TIME_DEFAULT, B_FAILURE_COLOR); - break; - } - case kFileQuickSave: -@@ -557,9 +563,9 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - Handler()->VideoPaused(false); - } - if (*saveState) -- SetStatusInfo("Quick save OK", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Quick save OK"), STATUS_TIME_DEFAULT); - else -- SetStatusInfo("Quick save FAILED", STATUS_TIME_DEFAULT, B_FAILURE_COLOR); -+ SetStatusInfo(B_TRANSLATE("Quick save FAILED"), STATUS_TIME_DEFAULT, B_FAILURE_COLOR); - break; - } - case kFileQuickSaveSlot: -@@ -576,7 +582,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - { - if (!fSavePanel) { - fSavePanel = new BFilePanel(B_SAVE_PANEL, NULL, NULL, 0, true, NULL, NULL, true, true); -- fSavePanel->Window()->SetTitle("Save SNA snapshot..."); -+ fSavePanel->Window()->SetTitle(B_TRANSLATE("Save SNA snapshot" B_UTF8_ELLIPSIS)); - fSavePanel->SetTarget(this); - } - Handler()->VideoPaused(true); -@@ -588,7 +594,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - if (!fSaveScreenPanel) { - fSaveScreenPanel = new BFilePanel(B_SAVE_PANEL, NULL, NULL, 0, true, NULL, NULL, true, true); - fSaveScreenPanel->SetMessage(new BMessage(B_SAVE_SCREEN_REQUESTED)); -- fSaveScreenPanel->Window()->SetTitle("Save screenshot..."); -+ fSaveScreenPanel->Window()->SetTitle(B_TRANSLATE("Save screenshot" B_UTF8_ELLIPSIS)); - fSaveScreenPanel->SetTarget(this); - } - Handler()->VideoPaused(true); -@@ -598,9 +604,9 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - case kFileAutoPlay: - { - if(UpdateBoolOption(fAutoPlayMenuItem, "auto play image", true)) { -- SetStatusInfo("Auto launch on", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Auto launch on"), STATUS_TIME_DEFAULT); - } else { -- SetStatusInfo("Auto launch off", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Auto launch off"), STATUS_TIME_DEFAULT); - } - UpdateMenus(); - break; -@@ -619,10 +625,10 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - BString text; - bool status = Handler()->OnOpenFile(path.Path()); - if (status) { -- text << "File was successfully opened"; -+ text << B_TRANSLATE("File was successfully opened"); - fQuickSaveMenuItem->SetEnabled(true); - } else -- text << "Could not open file"; -+ text << B_TRANSLATE("Could not open file"); - - SetStatusInfo(text.String(), STATUS_TIME_DEFAULT, status ? B_PANEL_TEXT_COLOR : B_FAILURE_COLOR); - } -@@ -641,9 +647,9 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - name += ".sna"; - pathname.Append(name); - if(Handler()->OnSaveFile(pathname.Path())) -- SetStatusInfo("File save OK", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("File save OK"), STATUS_TIME_DEFAULT); - else -- SetStatusInfo("File save FAILED", STATUS_TIME_DEFAULT, B_FAILURE_COLOR); -+ SetStatusInfo(B_TRANSLATE("File save FAILED"), STATUS_TIME_DEFAULT, B_FAILURE_COLOR); - } - } - break; -@@ -661,9 +667,9 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - name += ".png"; - pathname.Append(name); - if (Handler()->OnSaveFile(pathname.Path())) -- SetStatusInfo("Screenshot save OK", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Screenshot save OK"), STATUS_TIME_DEFAULT); - else -- SetStatusInfo("Screenshot save FAILED", STATUS_TIME_DEFAULT, B_FAILURE_COLOR); -+ SetStatusInfo(B_TRANSLATE("Screenshot save FAILED"), STATUS_TIME_DEFAULT, B_FAILURE_COLOR); - } - } - break; -@@ -699,7 +705,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - fFiltering = !fFiltering; - fView->EnableBilinear(fFiltering); - op_scale_bilinear.Set(fFiltering); -- SetStatusInfo(fFiltering ? "Filtering enabled" : "Filtering disabled", STATUS_TIME_DEFAULT); -+ SetStatusInfo(fFiltering ? B_TRANSLATE("Filtering enabled") : B_TRANSLATE("Filtering disabled"), STATUS_TIME_DEFAULT); - UpdateMenus(); - break; - } -@@ -708,7 +714,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - fXBRFiltering = !fXBRFiltering; - fView->EnableXBR(fXBRFiltering); - op_xbr_scale.Set(fXBRFiltering); -- SetStatusInfo(fXBRFiltering ? "XBR Filtering enabled" : "XBR Filtering disabled", STATUS_TIME_DEFAULT); -+ SetStatusInfo(fXBRFiltering ? B_TRANSLATE("XBR Filtering enabled") : B_TRANSLATE("XBR Filtering disabled"), STATUS_TIME_DEFAULT); - UpdateMenus(); - break; - } -@@ -716,7 +722,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - { - op_smart_border_disabled.Set(!op_smart_border_disabled); - fView->EnableSmartBorder(!op_smart_border_disabled); -- SetStatusInfo(op_smart_border_disabled ? "Smart border disabled" : "Smart border enabled", STATUS_TIME_DEFAULT); -+ SetStatusInfo(op_smart_border_disabled ? B_TRANSLATE("Smart border disabled") : B_TRANSLATE("Smart border enabled"), STATUS_TIME_DEFAULT); - UpdateMenus(); - break; - } -@@ -737,16 +743,16 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - switch(Handler()->OnAction(A_TAPE_TOGGLE)) - { - case AR_TAPE_STARTED: -- SetStatusInfo("Tape started", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Tape started"), STATUS_TIME_DEFAULT); - break; - case AR_TAPE_STOPPED: -- SetStatusInfo("Tape stopped", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Tape stopped"), STATUS_TIME_DEFAULT); - break; - case AR_TAPE_NOT_INSERTED: -- SetStatusInfo("Tape not inserted", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Tape not inserted"), STATUS_TIME_DEFAULT); - break; - default: -- SetStatusInfo("Ready"); -+ SetStatusInfo(B_TRANSLATE("Ready")); - break; - } - break; -@@ -757,7 +763,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - eOption* op_tape_fast = eOption::Find("fast tape"); - SAFE_CALL(op_tape_fast)->Change(); - bool tape_fast = op_tape_fast && *op_tape_fast; -- SetStatusInfo(tape_fast ? "Fast tape on" : "Fast tape off", STATUS_TIME_DEFAULT); -+ SetStatusInfo(tape_fast ? B_TRANSLATE("Fast tape on") : B_TRANSLATE("Fast tape off"), STATUS_TIME_DEFAULT); - UpdateMenus(); - break; - } -@@ -914,7 +920,7 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - { - fKempsonMouseGrab = !fKempsonMouseGrab; - fView->EnableMouseGrab(fKempsonMouseGrab); -- SetStatusInfo(fKempsonMouseGrab ? "Mouse grabbed (Alt+G)" : "Ready"); -+ SetStatusInfo(fKempsonMouseGrab ? B_TRANSLATE("Mouse grabbed (Alt+G)") : B_TRANSLATE("Ready")); - UpdateMenus(); - UpdateCursor(); - break; -@@ -924,30 +930,30 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - bool marked = fPauseMenuItem->IsMarked(); - fPauseMenuItem->SetMarked(!marked); - Handler()->VideoPaused(!marked); -- SetStatusInfo(marked ? "Ready" : "Paused"); -+ SetStatusInfo(marked ? B_TRANSLATE("Ready") : B_TRANSLATE("Paused")); - break; - } - case kDeviceReset: - { -- SetStatusInfo("Reset", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Reset"), STATUS_TIME_DEFAULT); - Handler()->OnAction(A_RESET); - break; - } - case kDeviceMode48k: - { - if (UpdateBoolOption(f48kModeMenuItem, "mode 48k", true)) -- SetStatusInfo("48k mode enabled", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("48k mode enabled"), STATUS_TIME_DEFAULT); - else -- SetStatusInfo("128k mode enabled", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("128k mode enabled"), STATUS_TIME_DEFAULT); - UpdateMenus(); - break; - } - case kDeviceResetToServiceROM: - { - if (UpdateBoolOption(fResetToServiceROMMenuItem, "reset to service rom", true)) -- SetStatusInfo("Reset to service ROM", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Reset to service ROM"), STATUS_TIME_DEFAULT); - else -- SetStatusInfo("Reset to usual ROM", STATUS_TIME_DEFAULT); -+ SetStatusInfo(B_TRANSLATE("Reset to usual ROM"), STATUS_TIME_DEFAULT); - break; - } - case kHelpKeyboardLayout: -@@ -980,14 +986,22 @@ HaikuPlatformWindow::MessageReceived(BMessage *message) - InstallMimeType("application/x-spectrum-scl", "disk_icon", "TR-DOS floppy disk image (SCL)", "scl"); - InstallMimeType("application/x-spectrum-tap", "tape_icon", "ZX-Spectrum emulator tape data (TAP)", "tap"); - InstallMimeType("application/x-spectrum-tzx", "tape_icon", "ZX-Spectrum emulator tape data (TZX)", "tzx"); -- BAlert *alert = new BAlert("Register filetypes", "Filetypes registered!", "OK"); -+ BAlert *alert = new BAlert(B_TRANSLATE("Register filetypes"), B_TRANSLATE("Filetypes registered!"), B_TRANSLATE("OK")); - alert->Go(NULL); - break; - } -+ case kHelpOpenHomePage: -+ { -+ entry_ref ref; -+ get_ref_for_path("/bin/open", &ref); -+ const char* args[] = { "/bin/open", "https://bitbucket.org/djdron/unrealspeccyp", NULL }; -+ be_roster->Launch(&ref, 2, args); -+ break; -+ } - case B_ABOUT_REQUESTED: - { -- BAboutWindow* wind = new BAboutWindow("Unreal Speccy Portable", "application/x-vnd.unreal-speccy-portable"); -- const char *backendCopyrights[]={"2021 Haiku UI by Gerasim Troeglazov (3dEyes**)\n", NULL}; -+ BAboutWindow* wind = new BAboutWindow("Unreal Speccy Portable", APP_SIGNATURE); -+ const char *backendCopyrights[]={"2021-2023 Haiku UI by Gerasim Troeglazov (3dEyes**)\n", NULL}; - wind->AddCopyright(2022, "SMT, Dexus, Alone Coder, deathsoft, djdron, scor.", (const char**)&backendCopyrights); - wind->SetVersion("0.0.86.18"); - wind->AddDescription("Portable ZX Spectrum emulator."); -diff --git a/platform/haiku/haiku_window.h b/platform/haiku/haiku_window.h -index ef6b679..8394024 100644 ---- a/platform/haiku/haiku_window.h -+++ b/platform/haiku/haiku_window.h -@@ -25,6 +25,7 @@ along with this program. If not, see . - #include - #include - #include -+#include - #include - #include - #include -@@ -81,6 +82,7 @@ const uint32 kDeviceBetaDiskC = 'BD_C'; - const uint32 kDeviceBetaDiskD = 'BD_D'; - const uint32 kDeviceKempsonMouse = 'KMOU'; - const uint32 kHelpRegisterMime = 'RMIM'; -+const uint32 kHelpOpenHomePage = 'HOME'; - const uint32 kPulseEvent = 'TIME'; - const uint32 B_SAVE_SCREEN_REQUESTED = 'SSRQ'; - -diff --git a/platform/haiku/locales/en.catkeys b/platform/haiku/locales/en.catkeys -new file mode 100644 -index 0000000..910caeb ---- /dev/null -+++ b/platform/haiku/locales/en.catkeys -@@ -0,0 +1,98 @@ -+1 English application/x-vnd.unreal-speccy-portable 2972438328 -+Could not find app resources.\n USPWindow Could not find app resources.\n -+Smart border enabled USPWindow Smart border enabled -+QAOPM USPWindow QAOPM -+Cancel USPWebWindow Cancel -+Auto launch on USPWindow Auto launch on -+Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Could not find icon in app resources (data: %p, size: %ld).\n -+OK USPWindow OK -+Quick load FAILED USPWindow Quick load FAILED -+Register filetypes USPWindow Register filetypes -+Ready USPWindow Ready -+Paused USPWindow Paused -+Filetypes registered! USPWindow Filetypes registered! -+Open from web… USPWindow Open from web… -+Volume USPWindow Volume -+Tape started USPWindow Tape started -+Fast tape off USPWindow Fast tape off -+300% scale USPWindow 300% scale -+48k mode enabled USPWindow 48k mode enabled -+XBR Filtering disabled USPWindow XBR Filtering disabled -+QAOP + Space USPWindow QAOP + Space -+48k USPWindow 48k -+Visit homepage USPWindow Visit homepage -+128k mode enabled USPWindow 128k mode enabled -+200% scale USPWindow 200% scale -+Keyboard layout USPKeyboardWindow Keyboard layout -+items USPWebWindow items -+About USPWindow About -+Save… USPWindow Save… -+Save slot USPWindow Save slot -+Could not set vector icon of mime type.\n USPWindow Could not set vector icon of mime type.\n -+Smart border scale USPWindow Smart border scale -+100% scale USPWindow 100% scale -+Filtering USPWindow Filtering -+Open file from web… USPWebWindow Open file from web… -+View USPWindow View -+Mute USPWindow Mute -+Help USPWindow Help -+Cursor + Enter USPWindow Cursor + Enter -+File save FAILED USPWindow File save FAILED -+AY Stereo USPWindow AY Stereo -+Save SNA snapshot… USPWindow Save SNA snapshot… -+AY-3-8910 USPWindow AY-3-8910 -+File USPWebWindow File -+Cursor USPWindow Cursor -+Full screen USPWindow Full screen -+Quit USPWindow Quit -+Fast tape on USPWindow Fast tape on -+Quick load USPWindow Quick load -+Sinclair 2 USPWindow Sinclair 2 -+File USPWindow File -+Mode 48k USPWindow Mode 48k -+Screenshot save FAILED USPWindow Screenshot save FAILED -+Open file… USPWindow Open file… -+128k USPWindow 128k -+File was successfully opened USPWindow File was successfully opened -+XBR USPWindow XBR -+Auto launch programs USPWindow Auto launch programs -+Joystick USPWindow Joystick -+Save screenshot… USPWindow Save screenshot… -+Filtering disabled USPWindow Filtering disabled -+Could not open file USPWindow Could not open file -+Kempson mouse grab USPWindow Kempson mouse grab -+XBR Filtering enabled USPWindow XBR Filtering enabled -+Reset to service ROM USPWindow Reset to service ROM -+OSD keyboard USPWindow OSD keyboard -+Open download folder USPWebWindow Open download folder -+Virtual keyboard USPWindow Virtual keyboard -+YM2149F USPWindow YM2149F -+Bilinear USPWindow Bilinear -+Screenshot save OK USPWindow Screenshot save OK -+Tape not inserted USPWindow Tape not inserted -+Tape stopped USPWindow Tape stopped -+Download file USPWebWindow Download file -+Filtering enabled USPWindow Filtering enabled -+Quick load OK USPWindow Quick load OK -+Quick save FAILED USPWindow Quick save FAILED -+Quick save USPWindow Quick save -+Tape fast USPWindow Tape fast -+Start / Stop tape USPWindow Start / Stop tape -+Beta disk drive USPWindow Beta disk drive -+Mono USPWindow Mono -+Open USPWebWindow Open -+Quick save OK USPWindow Quick save OK -+Open… USPWindow Open… -+Could not init native document mime type (%s): %s.\n USPWindow Could not init native document mime type (%s): %s.\n -+Reset USPWindow Reset -+Device USPWindow Device -+File save OK USPWindow File save OK -+Sound chip USPWindow Sound chip -+Pause USPWindow Pause -+Mouse grabbed (Alt+G) USPWindow Mouse grabbed (Alt+G) -+Kempston USPWindow Kempston -+Could not install native document mime type (%s): %s.\n USPWindow Could not install native document mime type (%s): %s.\n -+OSD menu USPWindow OSD menu -+Smart border disabled USPWindow Smart border disabled -+Reset to usual ROM USPWindow Reset to usual ROM -+Auto launch off USPWindow Auto launch off -diff --git a/platform/haiku/locales/ru.catkeys b/platform/haiku/locales/ru.catkeys -new file mode 100755 -index 0000000..5cbd2cc ---- /dev/null -+++ b/platform/haiku/locales/ru.catkeys -@@ -0,0 +1,98 @@ -+1 Russian application/x-vnd.unreal-speccy-portable 2972438328 -+100% scale USPWindow Масштаб 100% -+128k USPWindow 128кб -+128k mode enabled USPWindow 128кб режим включен -+200% scale USPWindow Масштаб 200% -+300% scale USPWindow Масштаб 300% -+48k USPWindow 48кб -+48k mode enabled USPWindow 48кб режим включен -+About USPWindow О программе -+Auto launch off USPWindow Автозапуск выключен -+Auto launch on USPWindow Автозапуск включен -+Auto launch programs USPWindow Автозапуск программ -+AY Stereo USPWindow AY Стерео -+AY-3-8910 USPWindow AY-3-8910 -+Beta disk drive USPWindow Дисковод -+Bilinear USPWindow Билинейное -+Could not find app resources.\n USPWindow Не могу найти файлы ресурсов программы.\n -+Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Иконка не найдена в ресурсах приложения (data: %p, size: %ld).\n -+Could not init native document mime type (%s): %s.\n USPWindow Не могу инициализировать mime-тип(%s): %s.\n -+Could not install native document mime type (%s): %s.\n USPWindow Не могу установить mime-тип (%s): %s.\n -+Could not open file USPWindow Ошибка открытия файла -+Could not set vector icon of mime type.\n USPWindow Не могу установить иконку для mime-типа.\n -+Cursor USPWindow Курсор -+Cursor + Enter USPWindow Курсор + Enter -+Device USPWindow Периферия -+Fast tape off USPWindow Быстрая загрузка с ленты выключена -+Fast tape on USPWindow Быстрая загрузка с ленты включена -+File USPWindow Файл -+File save FAILED USPWindow Ошибка сохранения файла -+File save OK USPWindow Сохранение выполнено -+File was successfully opened USPWindow Файл успешно загружен -+Filetypes registered! USPWindow Файловые типы зарегистрированы! -+Filtering USPWindow Сглаживание -+Filtering disabled USPWindow Сглаживание выключено -+Filtering enabled USPWindow Сглаживание включено -+Full screen USPWindow Полноэкранный режим -+Help USPWindow Справка -+Joystick USPWindow Джойстик -+Kempson mouse grab USPWindow Кемпстон мышь (захват) -+Kempston USPWindow Кемпстон -+Mode 48k USPWindow Режим 48кб -+Mono USPWindow Моно -+Mouse grabbed (Alt+G) USPWindow Мышь захвачена (Alt+G) -+Mute USPWindow Без звука -+OK USPWindow ОК -+Open file… USPWindow Открыть файл… -+Open from web… USPWindow Открыть из интернета… -+Open… USPWindow Открыть… -+OSD keyboard USPWindow OSD клавиатура -+OSD menu USPWindow OSD меню -+Pause USPWindow Пауза -+Paused USPWindow Пауза -+QAOP + Space USPWindow QAOP + Пробел -+QAOPM USPWindow QAOPM -+Quick load USPWindow Быстрая загрузка -+Quick load FAILED USPWindow Ошибка быстрой загрузки -+Quick load OK USPWindow Быстрая загрузка выполнена -+Quick save USPWindow Быстрое сохранение -+Quick save FAILED USPWindow Ошибка быстрого сохранения -+Quick save OK USPWindow Быстрое сохранение выполнено -+Quit USPWindow Выход -+Ready USPWindow Готов -+Register filetypes USPWindow Зарегистрировать файловые типы -+Reset USPWindow Сброс -+Reset to service ROM USPWindow Сброс в сервисное ПЗУ -+Reset to usual ROM USPWindow Сброс в стандартное ПЗУ -+Save screenshot… USPWindow Сохранить снимок экрана… -+Save slot USPWindow Сохранить в слот -+Save SNA snapshot… USPWindow Сохранить SNA снапшот… -+Save… USPWindow Сохранить… -+Screenshot save FAILED USPWindow Ошибка сохранения снимка экрана -+Screenshot save OK USPWindow Снимок экрана сохранён -+Sinclair 2 USPWindow Синклер 2 -+Smart border disabled USPWindow Умное масштабирование выключено -+Smart border enabled USPWindow Умное масштабирование включено -+Smart border scale USPWindow Умное масштабирование бордюра -+Sound chip USPWindow Звуковой чип -+Start / Stop tape USPWindow Старт / Стоп загрузки с ленты -+Tape fast USPWindow Быстрая загрузка с ленты -+Tape not inserted USPWindow Лента отсутсвует -+Tape started USPWindow Лента включена -+Tape stopped USPWindow Лента остановлена -+View USPWindow Вид -+Virtual keyboard USPWindow Виртуальная клавиатура -+Visit homepage USPWindow Открыть сайт проекта -+Volume USPWindow Громкость -+XBR USPWindow XBR -+XBR Filtering disabled USPWindow XBR сглаживание выключено -+XBR Filtering enabled USPWindow XBR сглаживание включено -+YM2149F USPWindow YM2149F -+Cancel USPWebWindow Отмена -+Download file USPWebWindow Загрузить файл -+File USPWebWindow Файл -+items USPWebWindow объектов -+Open USPWebWindow Открыть -+Open download folder USPWebWindow Открыть каталог с загрузками -+Open file from web… USPWebWindow Открыть файл из интернета… -+Keyboard layout USPKeyboardWindow Виртуальная клавиатура --- -2.37.3 - - -From 6e4dd11b56d01590625079cb0c47de964050b59a Mon Sep 17 00:00:00 2001 -From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Tue, 9 May 2023 12:50:10 +1000 -Subject: Add Turkish locale - - -diff --git a/platform/haiku/locales/tr.catkeys b/platform/haiku/locales/tr.catkeys -new file mode 100755 -index 0000000..ec0e447 ---- /dev/null -+++ b/platform/haiku/locales/tr.catkeys -@@ -0,0 +1,98 @@ -+1 Turkish application/x-vnd.unreal-speccy-portable 2972438328 -+100% scale USPWindow %100 ölçek -+128k USPWindow 128k -+128k mode enabled USPWindow 128k kipi etkin -+200% scale USPWindow %200 ölçek -+300% scale USPWindow %300 ölçek -+48k USPWindow 48k -+48k mode enabled USPWindow 48k kipi etkin -+About USPWindow Hakkında -+Auto launch off USPWindow Otomatik başlatma kapalı -+Auto launch on USPWindow Otomatik başlatma açık -+Auto launch programs USPWindow Programları otomatik başlat -+AY Stereo USPWindow AY iki kanallı -+AY-3-8910 USPWindow AY-3-8910 -+Beta disk drive USPWindow Beta disk sürücüsü -+Bilinear USPWindow İki doğrusal -+Could not find app resources.\n USPWindow Uygulama özkaynakları bulunamadı.\n -+Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Uygulama özkaynaklarında simge bulunamadı (veri: %p, boyut: %ld).\n -+Could not init native document mime type (%s): %s.\n USPWindow Yerel belge MIME türü ilklendirilemedi (%s): %s.\n -+Could not install native document mime type (%s): %s.\n USPWindow Yerel belge MIME türü kurulamadı (%s): %s.\n -+Could not open file USPWindow Dosya açılamadı -+Could not set vector icon of mime type.\n USPWindow MIME türünün vektör simgesi ayarlanamadı.\n -+Cursor USPWindow İmleç -+Cursor + Enter USPWindow İmleç + Giriş -+Device USPWindow Aygıt -+Fast tape off USPWindow Hızlı teyp kapalı -+Fast tape on USPWindow Hızlı teyp açık -+File USPWindow Dosya -+File save FAILED USPWindow Dosya kaydet BAŞARISIZ -+File save OK USPWindow Dosya kaydet BAŞARILI -+File was successfully opened USPWindow Dosya başarıyla açıldı -+Filetypes registered! USPWindow Dosya türleri kaydedildi! -+Filtering USPWindow Süzme -+Filtering disabled USPWindow Süzme devre dışı -+Filtering enabled USPWindow Süzme etkin -+Full screen USPWindow Tam ekran -+Help USPWindow Yardım -+Joystick USPWindow Oyun çubuğu -+Kempson mouse grab USPWindow Kempson fare yakalama -+Kempston USPWindow Kempston -+Mode 48k USPWindow 48k kipi -+Mono USPWindow Tek kanallı -+Mouse grabbed (Alt+G) USPWindow Fare yakalandı (Alt+G) -+Mute USPWindow Sessize al -+OK USPWindow Tamam -+Open file… USPWindow Dosya aç… -+Open from web… USPWindow İnternetten dosya aç… -+Open… USPWindow Aç… -+OSD keyboard USPWindow Ekran üzeri klavye -+OSD menu USPWindow Ekran üzeri menü -+Pause USPWindow Duraklat -+Paused USPWindow Duraklatıldı -+QAOP + Space USPWindow QAOP + Boşluk -+QAOPM USPWindow QAOPM -+Quick load USPWindow Hızlı yükle -+Quick load FAILED USPWindow Hızlı yükle BAŞARISIZ -+Quick load OK USPWindow Hızlı yükle BAŞARILI -+Quick save USPWindow Hızlı yükle -+Quick save FAILED USPWindow Hızlı kaydet BAŞARISIZ -+Quick save OK USPWindow Hızlı kaydet BAŞARILI -+Quit USPWindow Çık -+Ready USPWindow Hazır -+Register filetypes USPWindow Dosya türlerini kaydet -+Reset USPWindow Sıfırla -+Reset to service ROM USPWindow Servis ROM"una sıfırla -+Reset to usual ROM USPWindow Olağan ROM'a sıfırla -+Save screenshot… USPWindow Ekran görüntüsü kaydet… -+Save slot USPWindow Yuva kaydet -+Save SNA snapshot… USPWindow SNA ekran görüntüsü kaydet… -+Save… USPWindow Kaydet… -+Screenshot save FAILED USPWindow Ekran görüntüsü kaydet BAŞARISIZ -+Screenshot save OK USPWindow Ekran görüntüsü kaydet BAŞARILI -+Sinclair 2 USPWindow Sinclair 2 -+Smart border disabled USPWindow Akıllı kenar devre dışı -+Smart border enabled USPWindow Akıllı kenar etkin -+Smart border scale USPWindow Akıllı kenar ölçeği -+Sound chip USPWindow Ses yongası -+Start / Stop tape USPWindow Teybi başlat/durdur -+Tape fast USPWindow Hızlı teyp -+Tape not inserted USPWindow Teyp takılı değil -+Tape started USPWindow Teyp başlatıldı -+Tape stopped USPWindow Teyp durduruldu -+View USPWindow Görüntü -+Virtual keyboard USPWindow Sanal klavye -+Visit homepage USPWindow Ana sayfayı ziyaret et -+Volume USPWindow Ses düzeyi -+XBR USPWindow XBR -+XBR Filtering disabled USPWindow XBR süzme devre dışı -+XBR Filtering enabled USPWindow XBR süzme etkin -+YM2149F USPWindow YM2149F -+Cancel USPWebWindow Vazgeç -+Download file USPWebWindow Dosyayı indir -+File USPWebWindow Dosya -+items USPWebWindow ögeler -+Open USPWebWindow Aç -+Open download folder USPWebWindow İndirme klasörünü aç -+Open file from web… USPWebWindow İnternetten dosya aç… -+Keyboard layout USPKeyboardWindow Klavye dizilimi --- -2.37.3 - - -From 384ca983c819c84ea0cc9de0cea77acba1921c32 Mon Sep 17 00:00:00 2001 -From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Sun, 28 May 2023 21:16:08 +1000 -Subject: Update locales from Polyglot - - diff --git a/platform/haiku/locales/ca.catkeys b/platform/haiku/locales/ca.catkeys new file mode 100644 index 0000000..269a6ab @@ -5677,6 +4463,110 @@ index 0000000..f1c9a01 +Open download folder USPWebWindow Download-Ordner öffnen +Open file from web… USPWebWindow Datei aus Web öffnen… +Keyboard layout USPKeyboardWindow Tastatur-Layout +diff --git a/platform/haiku/locales/en.catkeys b/platform/haiku/locales/en.catkeys +new file mode 100644 +index 0000000..910caeb +--- /dev/null ++++ b/platform/haiku/locales/en.catkeys +@@ -0,0 +1,98 @@ ++1 English application/x-vnd.unreal-speccy-portable 2972438328 ++Could not find app resources.\n USPWindow Could not find app resources.\n ++Smart border enabled USPWindow Smart border enabled ++QAOPM USPWindow QAOPM ++Cancel USPWebWindow Cancel ++Auto launch on USPWindow Auto launch on ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Could not find icon in app resources (data: %p, size: %ld).\n ++OK USPWindow OK ++Quick load FAILED USPWindow Quick load FAILED ++Register filetypes USPWindow Register filetypes ++Ready USPWindow Ready ++Paused USPWindow Paused ++Filetypes registered! USPWindow Filetypes registered! ++Open from web… USPWindow Open from web… ++Volume USPWindow Volume ++Tape started USPWindow Tape started ++Fast tape off USPWindow Fast tape off ++300% scale USPWindow 300% scale ++48k mode enabled USPWindow 48k mode enabled ++XBR Filtering disabled USPWindow XBR Filtering disabled ++QAOP + Space USPWindow QAOP + Space ++48k USPWindow 48k ++Visit homepage USPWindow Visit homepage ++128k mode enabled USPWindow 128k mode enabled ++200% scale USPWindow 200% scale ++Keyboard layout USPKeyboardWindow Keyboard layout ++items USPWebWindow items ++About USPWindow About ++Save… USPWindow Save… ++Save slot USPWindow Save slot ++Could not set vector icon of mime type.\n USPWindow Could not set vector icon of mime type.\n ++Smart border scale USPWindow Smart border scale ++100% scale USPWindow 100% scale ++Filtering USPWindow Filtering ++Open file from web… USPWebWindow Open file from web… ++View USPWindow View ++Mute USPWindow Mute ++Help USPWindow Help ++Cursor + Enter USPWindow Cursor + Enter ++File save FAILED USPWindow File save FAILED ++AY Stereo USPWindow AY Stereo ++Save SNA snapshot… USPWindow Save SNA snapshot… ++AY-3-8910 USPWindow AY-3-8910 ++File USPWebWindow File ++Cursor USPWindow Cursor ++Full screen USPWindow Full screen ++Quit USPWindow Quit ++Fast tape on USPWindow Fast tape on ++Quick load USPWindow Quick load ++Sinclair 2 USPWindow Sinclair 2 ++File USPWindow File ++Mode 48k USPWindow Mode 48k ++Screenshot save FAILED USPWindow Screenshot save FAILED ++Open file… USPWindow Open file… ++128k USPWindow 128k ++File was successfully opened USPWindow File was successfully opened ++XBR USPWindow XBR ++Auto launch programs USPWindow Auto launch programs ++Joystick USPWindow Joystick ++Save screenshot… USPWindow Save screenshot… ++Filtering disabled USPWindow Filtering disabled ++Could not open file USPWindow Could not open file ++Kempson mouse grab USPWindow Kempson mouse grab ++XBR Filtering enabled USPWindow XBR Filtering enabled ++Reset to service ROM USPWindow Reset to service ROM ++OSD keyboard USPWindow OSD keyboard ++Open download folder USPWebWindow Open download folder ++Virtual keyboard USPWindow Virtual keyboard ++YM2149F USPWindow YM2149F ++Bilinear USPWindow Bilinear ++Screenshot save OK USPWindow Screenshot save OK ++Tape not inserted USPWindow Tape not inserted ++Tape stopped USPWindow Tape stopped ++Download file USPWebWindow Download file ++Filtering enabled USPWindow Filtering enabled ++Quick load OK USPWindow Quick load OK ++Quick save FAILED USPWindow Quick save FAILED ++Quick save USPWindow Quick save ++Tape fast USPWindow Tape fast ++Start / Stop tape USPWindow Start / Stop tape ++Beta disk drive USPWindow Beta disk drive ++Mono USPWindow Mono ++Open USPWebWindow Open ++Quick save OK USPWindow Quick save OK ++Open… USPWindow Open… ++Could not init native document mime type (%s): %s.\n USPWindow Could not init native document mime type (%s): %s.\n ++Reset USPWindow Reset ++Device USPWindow Device ++File save OK USPWindow File save OK ++Sound chip USPWindow Sound chip ++Pause USPWindow Pause ++Mouse grabbed (Alt+G) USPWindow Mouse grabbed (Alt+G) ++Kempston USPWindow Kempston ++Could not install native document mime type (%s): %s.\n USPWindow Could not install native document mime type (%s): %s.\n ++OSD menu USPWindow OSD menu ++Smart border disabled USPWindow Smart border disabled ++Reset to usual ROM USPWindow Reset to usual ROM ++Auto launch off USPWindow Auto launch off diff --git a/platform/haiku/locales/en_AU.catkeys b/platform/haiku/locales/en_AU.catkeys new file mode 100644 index 0000000..e703bc0 @@ -5989,6 +4879,1068 @@ index 0000000..6fc0b31 +Open download folder USPWebWindow Ouvrir le dossier de téléchargement +Open file from web… USPWebWindow Ouvrir un fichier depuis la toile... +Keyboard layout USPKeyboardWindow Disposition du clavier +diff --git a/platform/haiku/locales/ru.catkeys b/platform/haiku/locales/ru.catkeys +new file mode 100755 +index 0000000..5cbd2cc +--- /dev/null ++++ b/platform/haiku/locales/ru.catkeys +@@ -0,0 +1,98 @@ ++1 Russian application/x-vnd.unreal-speccy-portable 2972438328 ++100% scale USPWindow Масштаб 100% ++128k USPWindow 128кб ++128k mode enabled USPWindow 128кб режим включен ++200% scale USPWindow Масштаб 200% ++300% scale USPWindow Масштаб 300% ++48k USPWindow 48кб ++48k mode enabled USPWindow 48кб режим включен ++About USPWindow О программе ++Auto launch off USPWindow Автозапуск выключен ++Auto launch on USPWindow Автозапуск включен ++Auto launch programs USPWindow Автозапуск программ ++AY Stereo USPWindow AY Стерео ++AY-3-8910 USPWindow AY-3-8910 ++Beta disk drive USPWindow Дисковод ++Bilinear USPWindow Билинейное ++Could not find app resources.\n USPWindow Не могу найти файлы ресурсов программы.\n ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Иконка не найдена в ресурсах приложения (data: %p, size: %ld).\n ++Could not init native document mime type (%s): %s.\n USPWindow Не могу инициализировать mime-тип(%s): %s.\n ++Could not install native document mime type (%s): %s.\n USPWindow Не могу установить mime-тип (%s): %s.\n ++Could not open file USPWindow Ошибка открытия файла ++Could not set vector icon of mime type.\n USPWindow Не могу установить иконку для mime-типа.\n ++Cursor USPWindow Курсор ++Cursor + Enter USPWindow Курсор + Enter ++Device USPWindow Периферия ++Fast tape off USPWindow Быстрая загрузка с ленты выключена ++Fast tape on USPWindow Быстрая загрузка с ленты включена ++File USPWindow Файл ++File save FAILED USPWindow Ошибка сохранения файла ++File save OK USPWindow Сохранение выполнено ++File was successfully opened USPWindow Файл успешно загружен ++Filetypes registered! USPWindow Файловые типы зарегистрированы! ++Filtering USPWindow Сглаживание ++Filtering disabled USPWindow Сглаживание выключено ++Filtering enabled USPWindow Сглаживание включено ++Full screen USPWindow Полноэкранный режим ++Help USPWindow Справка ++Joystick USPWindow Джойстик ++Kempson mouse grab USPWindow Кемпстон мышь (захват) ++Kempston USPWindow Кемпстон ++Mode 48k USPWindow Режим 48кб ++Mono USPWindow Моно ++Mouse grabbed (Alt+G) USPWindow Мышь захвачена (Alt+G) ++Mute USPWindow Без звука ++OK USPWindow ОК ++Open file… USPWindow Открыть файл… ++Open from web… USPWindow Открыть из интернета… ++Open… USPWindow Открыть… ++OSD keyboard USPWindow OSD клавиатура ++OSD menu USPWindow OSD меню ++Pause USPWindow Пауза ++Paused USPWindow Пауза ++QAOP + Space USPWindow QAOP + Пробел ++QAOPM USPWindow QAOPM ++Quick load USPWindow Быстрая загрузка ++Quick load FAILED USPWindow Ошибка быстрой загрузки ++Quick load OK USPWindow Быстрая загрузка выполнена ++Quick save USPWindow Быстрое сохранение ++Quick save FAILED USPWindow Ошибка быстрого сохранения ++Quick save OK USPWindow Быстрое сохранение выполнено ++Quit USPWindow Выход ++Ready USPWindow Готов ++Register filetypes USPWindow Зарегистрировать файловые типы ++Reset USPWindow Сброс ++Reset to service ROM USPWindow Сброс в сервисное ПЗУ ++Reset to usual ROM USPWindow Сброс в стандартное ПЗУ ++Save screenshot… USPWindow Сохранить снимок экрана… ++Save slot USPWindow Сохранить в слот ++Save SNA snapshot… USPWindow Сохранить SNA снапшот… ++Save… USPWindow Сохранить… ++Screenshot save FAILED USPWindow Ошибка сохранения снимка экрана ++Screenshot save OK USPWindow Снимок экрана сохранён ++Sinclair 2 USPWindow Синклер 2 ++Smart border disabled USPWindow Умное масштабирование выключено ++Smart border enabled USPWindow Умное масштабирование включено ++Smart border scale USPWindow Умное масштабирование бордюра ++Sound chip USPWindow Звуковой чип ++Start / Stop tape USPWindow Старт / Стоп загрузки с ленты ++Tape fast USPWindow Быстрая загрузка с ленты ++Tape not inserted USPWindow Лента отсутсвует ++Tape started USPWindow Лента включена ++Tape stopped USPWindow Лента остановлена ++View USPWindow Вид ++Virtual keyboard USPWindow Виртуальная клавиатура ++Visit homepage USPWindow Открыть сайт проекта ++Volume USPWindow Громкость ++XBR USPWindow XBR ++XBR Filtering disabled USPWindow XBR сглаживание выключено ++XBR Filtering enabled USPWindow XBR сглаживание включено ++YM2149F USPWindow YM2149F ++Cancel USPWebWindow Отмена ++Download file USPWebWindow Загрузить файл ++File USPWebWindow Файл ++items USPWebWindow объектов ++Open USPWebWindow Открыть ++Open download folder USPWebWindow Открыть каталог с загрузками ++Open file from web… USPWebWindow Открыть файл из интернета… ++Keyboard layout USPKeyboardWindow Виртуальная клавиатура +diff --git a/platform/haiku/locales/tr.catkeys b/platform/haiku/locales/tr.catkeys +new file mode 100755 +index 0000000..ec0e447 +--- /dev/null ++++ b/platform/haiku/locales/tr.catkeys +@@ -0,0 +1,98 @@ ++1 Turkish application/x-vnd.unreal-speccy-portable 2972438328 ++100% scale USPWindow %100 ölçek ++128k USPWindow 128k ++128k mode enabled USPWindow 128k kipi etkin ++200% scale USPWindow %200 ölçek ++300% scale USPWindow %300 ölçek ++48k USPWindow 48k ++48k mode enabled USPWindow 48k kipi etkin ++About USPWindow Hakkında ++Auto launch off USPWindow Otomatik başlatma kapalı ++Auto launch on USPWindow Otomatik başlatma açık ++Auto launch programs USPWindow Programları otomatik başlat ++AY Stereo USPWindow AY iki kanallı ++AY-3-8910 USPWindow AY-3-8910 ++Beta disk drive USPWindow Beta disk sürücüsü ++Bilinear USPWindow İki doğrusal ++Could not find app resources.\n USPWindow Uygulama özkaynakları bulunamadı.\n ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Uygulama özkaynaklarında simge bulunamadı (veri: %p, boyut: %ld).\n ++Could not init native document mime type (%s): %s.\n USPWindow Yerel belge MIME türü ilklendirilemedi (%s): %s.\n ++Could not install native document mime type (%s): %s.\n USPWindow Yerel belge MIME türü kurulamadı (%s): %s.\n ++Could not open file USPWindow Dosya açılamadı ++Could not set vector icon of mime type.\n USPWindow MIME türünün vektör simgesi ayarlanamadı.\n ++Cursor USPWindow İmleç ++Cursor + Enter USPWindow İmleç + Giriş ++Device USPWindow Aygıt ++Fast tape off USPWindow Hızlı teyp kapalı ++Fast tape on USPWindow Hızlı teyp açık ++File USPWindow Dosya ++File save FAILED USPWindow Dosya kaydet BAŞARISIZ ++File save OK USPWindow Dosya kaydet BAŞARILI ++File was successfully opened USPWindow Dosya başarıyla açıldı ++Filetypes registered! USPWindow Dosya türleri kaydedildi! ++Filtering USPWindow Süzme ++Filtering disabled USPWindow Süzme devre dışı ++Filtering enabled USPWindow Süzme etkin ++Full screen USPWindow Tam ekran ++Help USPWindow Yardım ++Joystick USPWindow Oyun çubuğu ++Kempson mouse grab USPWindow Kempson fare yakalama ++Kempston USPWindow Kempston ++Mode 48k USPWindow 48k kipi ++Mono USPWindow Tek kanallı ++Mouse grabbed (Alt+G) USPWindow Fare yakalandı (Alt+G) ++Mute USPWindow Sessize al ++OK USPWindow Tamam ++Open file… USPWindow Dosya aç… ++Open from web… USPWindow İnternetten dosya aç… ++Open… USPWindow Aç… ++OSD keyboard USPWindow Ekran üzeri klavye ++OSD menu USPWindow Ekran üzeri menü ++Pause USPWindow Duraklat ++Paused USPWindow Duraklatıldı ++QAOP + Space USPWindow QAOP + Boşluk ++QAOPM USPWindow QAOPM ++Quick load USPWindow Hızlı yükle ++Quick load FAILED USPWindow Hızlı yükle BAŞARISIZ ++Quick load OK USPWindow Hızlı yükle BAŞARILI ++Quick save USPWindow Hızlı yükle ++Quick save FAILED USPWindow Hızlı kaydet BAŞARISIZ ++Quick save OK USPWindow Hızlı kaydet BAŞARILI ++Quit USPWindow Çık ++Ready USPWindow Hazır ++Register filetypes USPWindow Dosya türlerini kaydet ++Reset USPWindow Sıfırla ++Reset to service ROM USPWindow Servis ROM"una sıfırla ++Reset to usual ROM USPWindow Olağan ROM'a sıfırla ++Save screenshot… USPWindow Ekran görüntüsü kaydet… ++Save slot USPWindow Yuva kaydet ++Save SNA snapshot… USPWindow SNA ekran görüntüsü kaydet… ++Save… USPWindow Kaydet… ++Screenshot save FAILED USPWindow Ekran görüntüsü kaydet BAŞARISIZ ++Screenshot save OK USPWindow Ekran görüntüsü kaydet BAŞARILI ++Sinclair 2 USPWindow Sinclair 2 ++Smart border disabled USPWindow Akıllı kenar devre dışı ++Smart border enabled USPWindow Akıllı kenar etkin ++Smart border scale USPWindow Akıllı kenar ölçeği ++Sound chip USPWindow Ses yongası ++Start / Stop tape USPWindow Teybi başlat/durdur ++Tape fast USPWindow Hızlı teyp ++Tape not inserted USPWindow Teyp takılı değil ++Tape started USPWindow Teyp başlatıldı ++Tape stopped USPWindow Teyp durduruldu ++View USPWindow Görüntü ++Virtual keyboard USPWindow Sanal klavye ++Visit homepage USPWindow Ana sayfayı ziyaret et ++Volume USPWindow Ses düzeyi ++XBR USPWindow XBR ++XBR Filtering disabled USPWindow XBR süzme devre dışı ++XBR Filtering enabled USPWindow XBR süzme etkin ++YM2149F USPWindow YM2149F ++Cancel USPWebWindow Vazgeç ++Download file USPWebWindow Dosyayı indir ++File USPWebWindow Dosya ++items USPWebWindow ögeler ++Open USPWebWindow Aç ++Open download folder USPWebWindow İndirme klasörünü aç ++Open file from web… USPWebWindow İnternetten dosya aç… ++Keyboard layout USPKeyboardWindow Klavye dizilimi +diff --git a/platform/haiku/resources.rdef b/platform/haiku/resources.rdef +new file mode 100644 +index 0000000..919ae1b +--- /dev/null ++++ b/platform/haiku/resources.rdef +@@ -0,0 +1,120 @@ ++resource app_flags B_SINGLE_LAUNCH; ++ ++resource app_signature "application/x-vnd.unreal-speccy-portable"; ++ ++resource app_version { ++ major = 0, ++ middle = 0, ++ minor = 86, ++ variety = 21, ++ internal = 0, ++ short_info = "Unreal Speccy Portable", ++ long_info = "Portable ZX-Spectrum emulator" ++}; ++ ++resource file_types message { ++ "types" = "application/x-spectrum-sna", ++ "types" = "application/x-spectrum-z80", ++ "types" = "application/x-spectrum-trd", ++ "types" = "application/x-spectrum-udi", ++ "types" = "application/x-spectrum-fdi", ++ "types" = "application/x-spectrum-scl", ++ "types" = "application/x-spectrum-tap", ++ "types" = "application/x-spectrum-tzx" ++}; ++ ++resource vector_icon { ++ $"6E6369660A050003FF000003FFE9000335FF000377C9F6020016033A7CA23D5A" ++ $"7DBEF0223C2DC34B1DB3499FBD000136EEFF4602001602BCFDFBBDC23F3DB9F8" ++ $"BCF765472A854C1EE00001FF46020016023DB67E3DE576BC38853C1DC048E572" ++ $"402EE000FFFF2705FF0401690D0208303530BA6430BDCF304B30C1AD30C51A35" ++ $"50BA5D50BDDC504B50C1BB50C50A50504B50C51A50C1B7503550BDD750BA554B" ++ $"30C52130C1AF303530BDCF30BA5D300A04234E235A6647663A0A042D383B3157" ++ $"4648500804373B34393A363D380802383839390804383D3F393B3F423B080242" ++ $"3C473F0802453D3E4208044546424448404B4208024542484404053A0146484D" ++ $"434E464F454C484A4B0A04485548505646564B0A042E38484F48552E3D0C0A09" ++ $"01000241A71A00000000000041971AC8EE34C8BE340A0501000241671A000000" ++ $"00000041671AC8EE34C8EE340A010101023F381B0000000000003EA0CA41072A" ++ $"BEA70C0A020101023F381B0000000000003E81CF3F64FC4616710A030101023F" ++ $"381B0000000000003E62D43FF3BD4814BC0A040101023F381B0000000000003E" ++ $"154D4242494944690A00010012418615000000000000418615C92C2AC92C2A01" ++ $"178200040A070102024059E8000000000000403489C65D18C604D30A00080403" ++ $"05070608090A124070D6000000000000406B28C695A0C7251D01178103040A08" ++ $"08040305070608090A124059E8000000000000403489C65D18C604D301178103" ++ $"040A06010C024059E8000000000000403489C65D18C604D30A00010B024059E8" ++ $"000000000000403489C65D18C604D3" ++}; ++ ++resource(0, "disk_icon") #'VICN' array { ++ $"6E636966070101000069050102001602386AE138EB85B8EB85386AE1498F854A" ++ $"0B99007AFF1C0200160239C66636A7AEB6A7AE39C6664B6D5C48CB0A003AFF5D" ++ $"02001602B715C2BA87FF3A87FFB715C24567AE4A563D0175FEC402000602371F" ++ $"433A82A6BD80923A2D884BFDA5487CE900FFFFFFFFE8E6B60200060831F0F537" ++ $"B9D9BB38D23568794B3BC84AF95A00FF000025FF000033FFAA0062FF94007167" ++ $"FF44A435FF06B100AAFFFF00AAFF0C0605FF00424042C334C400405E40C83F40" ++ $"5E405E455E45C8C84C495AC64153C2AB5A420608FF7F43584358C400C6645A42" ++ $"C70DC3775AC0475A405AC004C5FE3C3B34C1DF38BAB6BD5FB49FC22DB7AABFC6" ++ $"B49CC2B12449B49AC2D1B8B6C5324358BCD3C7734358580607FF1F425642564A" ++ $"C5985A4052C2ABC5FE3C3B34C1DF38BAB6BD5FB49FC22DB7AABFC6B491C286B4" ++ $"77C33AB484C2E0B87EC4FD4256BC85C6C04256560606FF074258425838C77324" ++ $"492EC5322448244724482EC443425538C66442C8A5425842C8C84258580606FF" ++ $"07425942594AC6A75A4252C39A5AC0045A405AC04852C2AB42564AC59842C92E" ++ $"425942C90B4259590A04523E4C4336393B350606BA0E374D3A4A39473C48BC6D" ++ $"C25C3648334B334E314DBB94C5D508023B36463B080239383F3B0802413C483F" ++ $"020441454343BF84C25F3B463E4738453A413942BDFDBF8440403E3F42410A03" ++ $"35504D4C4356090A00010002401A05000000000000407152C0333BC6BB0D0A01" ++ $"02010A12401A05000000000000407152C0333BC6BB0D01178400040A0402020A" ++ $"02401A05000000000000407152C0333BC6BB0D0A03010402401A050000000000" ++ $"00407152C0333BC6BB0D0A02010302402B16000000000000407152C0777FC67B" ++ $"0D0A05010502401A05000000000000407152C0333BC6BB0D0A02010602401A05" ++ $"000000000000407152C0333BC6BB0D0A010309080712401A0500000000000040" ++ $"7152C0333BC6BB0D01178100040A06010B02401A05000000000000407152C033" ++ $"3BC6BB0D" ++}; ++ ++resource(1, "tape_icon") #'VICN' array { ++ $"6E636966090101000070030100000200160239C6663B870ABB870A39C666499A" ++ $"8F4A45700068FF3902001602B85851B787AE3787AEB858514A6A664BA1470050" ++ $"FF2202001602390B853BB2E1BBB2E1390B854AC58549117000AEFF7C02001602" ++ $"3AF23D3AB4CCBAB4CC3AF23D4A3828497614008EFF5A02001603BA2D6ABA1981" ++ $"38806BB898234A141B4A559E00C9ED73FF21020006082D6C4836BE03BB3F5E32" ++ $"06DF4AFFBE4A42EA00FFF8E333FF000047FFAA0071FF94008167FF44B035FF06" ++ $"C400AAFFFF00AAFF01603D0FBD0E0607FF1F465A465AC2CE5A4B5AC3775A52C7" ++ $"30604459C443CB6FC0D05840CA60C047524046404C4046C334465A46C6A7465A" ++ $"5A060ABFA207352EB8D7BAB4C047BA6F5A3EC532BD185AC0035A445AC047C773" ++ $"C400465740543D294A28482245224522C0AD3E0A0E46563F533D542A4A274722" ++ $"45223F27412A413D4A3F4D46504656465606049F465646C73046565A445A445A" ++ $"3F3E46500608BEAA223F352EB923BA73C047BA6F5A3EC532BD18C7C4C10F4750" ++ $"3F4D3D4A2A4128420A04303E41463F4C2A410606FF0737363736BB8036343834" ++ $"BC1E34BD00373ABB803ABCD23A3A383ABD003ABC1E3736BCD2363736360606FF" ++ $"0748BEB448BEB4C246BEB445BF8045BF0F45BFF048C04CC246C04CC398C04C4B" ++ $"BF804BBFF04BBF0F48BEB4C398BEB448BEB4BEB40A044140393C3D38453C0802" ++ $"3633503F0A0423412C462C4923440A042E47394D39502E4A0A043B4E45534556" ++ $"3B5102062E3B303C293932332E36372F393237313B334F3C4D3B513D5440573E" ++ $"51434B484D494B480E0A000100000A0101011001178422040A020102000A0301" ++ $"03000A040104000A050105000A07010D000A010106000A010107000A06010800" ++ $"0A0001091001178100040A08030A0B0C000A000106023EAAAA0000000000003E" ++ $"000041555548C0000A000106023EAAAA0000000000003E000046EAAA496000" ++}; ++ ++resource(2, "snapshot_icon") #'VICN' array { ++ $"6E6369660703010000010100006A0533020006023A5D2B39F8B0B9DBF03A4C0F" ++ $"48AEEA4A809100747474FF3E3D3D020016023C40A33251B1B294FA3C81FE4956" ++ $"204903D700B0FF830200160336EDEB36B94ABA0AF63A326E4A79EF4AC3E7005A" ++ $"38DCFF7E0200060A358A6B399462BB27AC371EE44AEDD24A159800D3D3D326A5" ++ $"A5A548FF060662FF000073FFAA0098FF9400B067FF44CD35FF06DC00AAFFFF00" ++ $"AAFF050A043C565A385A323C4E0A0422493C563C4E22430607AA3F422A22433C" ++ $"4E5A32512F512F50304B2F4D30492E492C482D492C0608FAFA424C3E5040513F" ++ $"C65341C6B942C7B742C74142C8A8C0F15945C8E946C61F46C71046C5A9444D45" ++ $"C52143C4BB0A073C584058425A485A4A5846564547100A010104023FCA1A0000" ++ $"00000000406BCA4906BCCA035E0A010104023FCA1A0000000000004000004814" ++ $"35C780000A010104023FCA1A00000000000040000046435EC500000A01010402" ++ $"3FCA1A00000000000040000040F2860000000A00030201001001178422040A02" ++ $"0100000A030101000A060102000A000103123FC7130000000000003F9C004907" ++ $"28C7E05901178422040A050103023FC7130000000000003F9C00490728C7E059" ++ $"0A000103123FC7130000000000003F9C00481563C6125801178422040A050103" ++ $"023FC7130000000000003F9C00481563C612580A000103123FC7130000000000" ++ $"003F9C0046473DC022C301178422040A050103023FC7130000000000003F9C00" ++ $"46473DC022C30A000103123FC7130000000000003F9C00411D99451350011784" ++ $"22040A050103023FC7130000000000003F9C00411D99451350" ++}; +diff --git a/platform/linux/io_select_linux.cpp b/platform/linux/io_select_linux.cpp +old mode 100755 +new mode 100644 +index cb3d1f0..58070b7 +--- a/platform/linux/io_select_linux.cpp ++++ b/platform/linux/io_select_linux.cpp +@@ -25,7 +25,11 @@ along with this program. If not, see . + #include + #include + #include ++#ifdef __HAIKU__ ++#include ++#else + #include ++#endif + + namespace xIo + { +@@ -73,6 +77,11 @@ bool PathIsRoot(const char* path) { return !strcmp(path, root_path); } + + bool MkDir(const char* path) + { ++#ifdef __HAIKU__ ++ struct stat st; ++ if (stat(path, &st) == 0) ++ return true; ++#endif + if(mkdir(path, 0777) != 0) + { + if(errno != EEXIST) +diff --git a/platform/platform.h b/platform/platform.h +index 63a179a..3fb042b 100644 +--- a/platform/platform.h ++++ b/platform/platform.h +@@ -24,7 +24,7 @@ along with this program. If not, see . + #pragma once + + +-#if defined(_WINDOWS) || defined(_LINUX) || defined(_MAC) ++#if defined(_WINDOWS) || defined(_LINUX) || defined(_MAC) || defined(_HAIKU) + + #ifndef USE_BENCHMARK + #ifndef USE_LIBRARY +diff --git a/platform/symbian/tick.h b/platform/symbian/tick.h +old mode 100755 +new mode 100644 +diff --git a/platform/win/tick_qpc.h b/platform/win/tick_qpc.h +old mode 100755 +new mode 100644 -- -2.37.3 +2.42.0 + + +From 39c474a828d53ed59069b62805628b030e59899f Mon Sep 17 00:00:00 2001 +From: Gerasim Troeglazov <3dEyes@gmail.com> +Date: Wed, 25 Oct 2023 21:17:52 +1000 +Subject: Update catkeys from Polyglot + + +diff --git a/platform/haiku/locales/es-419.catkeys b/platform/haiku/locales/es-419.catkeys +new file mode 100644 +index 0000000..ae6fe91 +--- /dev/null ++++ b/platform/haiku/locales/es-419.catkeys +@@ -0,0 +1,98 @@ ++1 Spanish (Latin American) application/x-vnd.unreal-speccy-portable 2972438328 ++100% scale USPWindow Escala 100% ++128k USPWindow 128K ++128k mode enabled USPWindow Modo 128K activado ++200% scale USPWindow Escala 200% ++300% scale USPWindow Escala 300% ++48k USPWindow 48K ++48k mode enabled USPWindow Modo 48K activado ++About USPWindow Acerca de ++Auto launch off USPWindow Auto-lanzar: desactivado ++Auto launch on USPWindow Auto-lanzar: activado ++Auto launch programs USPWindow Auto-lanzar programas ++AY Stereo USPWindow AY Estéreo ++AY-3-8910 USPWindow AY-3-8910 ++Beta disk drive USPWindow Unidad de disco Beta ++Bilinear USPWindow Bilinear ++Could not find app resources.\n USPWindow No se pudo encontrar los recursos de aplicación.\n ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow No se pudo encontrar el ícono en los recursos de aplicación (datos: %p, tamaño: %ld).\n ++Could not init native document mime type (%s): %s.\n USPWindow No se pudo inicializar el tipo MIME del documento nativo (%s): %s.\n ++Could not install native document mime type (%s): %s.\n USPWindow No se pudo instalar el tipo MIME del documento nativo (%s): %s.\n ++Could not open file USPWindow No se pudo abrir el archivo ++Could not set vector icon of mime type.\n USPWindow No se pudo establecer el ícono vectorial de tipo MIME.\n ++Cursor USPWindow Cursor ++Cursor + Enter USPWindow Cursor + Enter ++Device USPWindow Dispositivo ++Fast tape off USPWindow Cinta rápida: apagado ++Fast tape on USPWindow Cinta rápida: encendido ++File USPWindow Archivo ++File save FAILED USPWindow Guardar archivo FALLIDO ++File save OK USPWindow Guardar archivo OK ++File was successfully opened USPWindow El archivo se abrió correctamente ++Filetypes registered! USPWindow ¡Tipos de archivo registrados! ++Filtering USPWindow Filtrado ++Filtering disabled USPWindow Filtrado: desactivado ++Filtering enabled USPWindow Filtrado: activado ++Full screen USPWindow Pantalla completa ++Help USPWindow Ayuda ++Joystick USPWindow Joystick ++Kempson mouse grab USPWindow Captura de ratón Kempston ++Kempston USPWindow Kempston ++Mode 48k USPWindow Modo 48K ++Mono USPWindow Mono ++Mouse grabbed (Alt+G) USPWindow Ratón capturado (Alt+G) ++Mute USPWindow Silenciado ++OK USPWindow Aceptar ++Open file… USPWindow Abrir archivo... ++Open from web… USPWindow Abrir desde web... ++Open… USPWindow Abrir… ++OSD keyboard USPWindow Teclado OSD ++OSD menu USPWindow Menú OSD ++Pause USPWindow Pausa ++Paused USPWindow En pausa ++QAOP + Space USPWindow QAOP + Espacio ++QAOPM USPWindow QAOPM ++Quick load USPWindow Carga rápida ++Quick load FAILED USPWindow Carga rápida FALLIDA ++Quick load OK USPWindow Carga rápida OK ++Quick save USPWindow Guardado rápido ++Quick save FAILED USPWindow Guardado rápido FALLIDO ++Quick save OK USPWindow Guardado rápido OK ++Quit USPWindow Salir ++Ready USPWindow Listo ++Register filetypes USPWindow Registrar tipos de archivo ++Reset USPWindow Restablecer ++Reset to service ROM USPWindow Resetear hacia ROM de servicio ++Reset to usual ROM USPWindow Resetear hacia ROM habitual ++Save screenshot… USPWindow Guardar captura de pantalla... ++Save slot USPWindow Ranura de guardado ++Save SNA snapshot… USPWindow Guardar instantánea SNA... ++Save… USPWindow Guardar… ++Screenshot save FAILED USPWindow Captura de pantalla FALLIDA ++Screenshot save OK USPWindow Captura de pantalla OK ++Sinclair 2 USPWindow Sinclair 2 ++Smart border disabled USPWindow Borde inteligente: desactivado ++Smart border enabled USPWindow Borde inteligente: activado ++Smart border scale USPWindow Escala de borde inteligente ++Sound chip USPWindow Chip de sonido ++Start / Stop tape USPWindow Iniciar / Detener cinta ++Tape fast USPWindow Cinta rápida ++Tape not inserted USPWindow Cinta no insertada ++Tape started USPWindow Cinta iniciada ++Tape stopped USPWindow Cinta detenida ++View USPWindow Vista ++Virtual keyboard USPWindow Teclado virtual ++Visit homepage USPWindow Visitar página de inicio ++Volume USPWindow Volumen ++XBR USPWindow XBR ++XBR Filtering disabled USPWindow Filtrado XBR: desactivado ++XBR Filtering enabled USPWindow Filtrado XBR: activado ++YM2149F USPWindow YM2149F ++Cancel USPWebWindow Cancelar ++Download file USPWebWindow Descargar archivo ++File USPWebWindow Archivo ++items USPWebWindow ítems ++Open USPWebWindow Abrir ++Open download folder USPWebWindow Abrir carpeta de descarga ++Open file from web… USPWebWindow Abrir archivo desde web... ++Keyboard layout USPKeyboardWindow Disposición del teclado +diff --git a/platform/haiku/locales/es.catkeys b/platform/haiku/locales/es.catkeys +index 3a2d7a7..82c9540 100644 +--- a/platform/haiku/locales/es.catkeys ++++ b/platform/haiku/locales/es.catkeys +@@ -1,11 +1,11 @@ + 1 Spanish application/x-vnd.unreal-speccy-portable 2972438328 + 100% scale USPWindow Escala 100% + 128k USPWindow 128k +-128k mode enabled USPWindow 128k mode enabled ++128k mode enabled USPWindow Modo 128k habilitado + 200% scale USPWindow Escala 200% + 300% scale USPWindow Escala 300% + 48k USPWindow 48k +-48k mode enabled USPWindow 48k mode enabled ++48k mode enabled USPWindow Modo 48k habilitado + About USPWindow Acerca de + Auto launch off USPWindow Auto launch off + Auto launch on USPWindow Auto launch on +@@ -13,7 +13,7 @@ Auto launch programs USPWindow Auto launch programs + AY Stereo USPWindow AY Stereo + AY-3-8910 USPWindow AY-3-8910 + Beta disk drive USPWindow Beta disk drive +-Bilinear USPWindow Bilinear ++Bilinear USPWindow Bilineal + Could not find app resources.\n USPWindow Could not find app resources.\n + Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Could not find icon in app resources (data: %p, size: %ld).\n + Could not init native document mime type (%s): %s.\n USPWindow Could not init native document mime type (%s): %s.\n +@@ -26,13 +26,13 @@ Device USPWindow Dispositivo + Fast tape off USPWindow Fast tape off + Fast tape on USPWindow Fast tape on + File USPWindow Archivo +-File save FAILED USPWindow File save FAILED +-File save OK USPWindow File save OK ++File save FAILED USPWindow Error al guardar archivo ++File save OK USPWindow Archivo guardado exitosamente + File was successfully opened USPWindow El archivo se ha abierto exitosamente + Filetypes registered! USPWindow Tipos de archivo registrados. +-Filtering USPWindow Filtering +-Filtering disabled USPWindow Filtering disabled +-Filtering enabled USPWindow Filtering enabled ++Filtering USPWindow Filtrado ++Filtering disabled USPWindow Filtrado deshabilitado ++Filtering enabled USPWindow Filtrado habilitado + Full screen USPWindow Pantalla completa + Help USPWindow Ayuda + Joystick USPWindow Joystick +diff --git a/platform/haiku/locales/fr.catkeys b/platform/haiku/locales/fr.catkeys +index 6fc0b31..230b4b2 100644 +--- a/platform/haiku/locales/fr.catkeys ++++ b/platform/haiku/locales/fr.catkeys +@@ -12,30 +12,30 @@ Auto launch on USPWindow Lancement automatique activé + Auto launch programs USPWindow Lancement automatique des programmes + AY Stereo USPWindow AY Stéréo + AY-3-8910 USPWindow AY-3-8910 +-Beta disk drive USPWindow Beta disk drive ++Beta disk drive USPWindow Lecteur de disque Bêta + Bilinear USPWindow Bilinéaire +-Could not find app resources.\n USPWindow Could not find app resources.\n +-Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Could not find icon in app resources (data: %p, size: %ld).\n +-Could not init native document mime type (%s): %s.\n USPWindow Could not init native document mime type (%s): %s.\n +-Could not install native document mime type (%s): %s.\n USPWindow Could not install native document mime type (%s): %s.\n +-Could not open file USPWindow Could not open file +-Could not set vector icon of mime type.\n USPWindow Could not set vector icon of mime type.\n ++Could not find app resources.\n USPWindow Impossible de trouver les ressources de l'application.\n ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Impossible de trouver l’icône dans les ressources de l'application (donnée : %p, taille : %ld).\n ++Could not init native document mime type (%s): %s.\n USPWindow Impossible d'initialiser le type mime de document natif (%s) : %s.\n ++Could not install native document mime type (%s): %s.\n USPWindow Impossible d'installer le type mime de document natif (%s) : %s.\n ++Could not open file USPWindow Impossible d'ouvrir le fichier ++Could not set vector icon of mime type.\n USPWindow Impossible définir l’icône vectorielle du type mime.\n + Cursor USPWindow Curseur +-Cursor + Enter USPWindow Cursor + Enter +-Device USPWindow Device +-Fast tape off USPWindow Fast tape off +-Fast tape on USPWindow Fast tape on ++Cursor + Enter USPWindow Curseur + Entrée ++Device USPWindow Appareil ++Fast tape off USPWindow Défilement rapide désactivé ++Fast tape on USPWindow Défilement rapide activé + File USPWindow Fichier +-File save FAILED USPWindow File save FAILED +-File save OK USPWindow File save OK +-File was successfully opened USPWindow File was successfully opened +-Filetypes registered! USPWindow Filetypes registered! ++File save FAILED USPWindow La sauvegarde du fichier a ÉCHOUÉ ++File save OK USPWindow La sauvegarde du fichier a RÉUSSI ++File was successfully opened USPWindow Le fichier a été ouvert avec succès ++Filetypes registered! USPWindow Types de fichiers enregistrés ! + Filtering USPWindow Filtrage + Filtering disabled USPWindow Filtrage désactivé + Filtering enabled USPWindow Filtrage activé + Full screen USPWindow Plein écran + Help USPWindow Aide +-Joystick USPWindow Joystick ++Joystick USPWindow Manette de jeu + Kempson mouse grab USPWindow Capture de la souris Kempston + Kempston USPWindow Kempston + Mode 48k USPWindow Mode 48k +@@ -50,7 +50,7 @@ OSD keyboard USPWindow Clavier OSD + OSD menu USPWindow Menu OSD + Pause USPWindow Pause + Paused USPWindow En pause +-QAOP + Space USPWindow QAOP + Space ++QAOP + Space USPWindow QAOP + Espace + QAOPM USPWindow QAOPM + Quick load USPWindow Chargement rapide + Quick load FAILED USPWindow Chargement rapide ÉCHOUÉ +@@ -60,13 +60,13 @@ Quick save FAILED USPWindow Sauvegarde rapide ÉCHOUÉE + Quick save OK USPWindow Sauvegarde rapide RÉUSSIE + Quit USPWindow Quitter + Ready USPWindow Prêt +-Register filetypes USPWindow Register filetypes ++Register filetypes USPWindow Enregistrer les types de fichier + Reset USPWindow Réinitialiser +-Reset to service ROM USPWindow Reset to service ROM +-Reset to usual ROM USPWindow Reset to usual ROM ++Reset to service ROM USPWindow Réinitialiser la ROM de service ++Reset to usual ROM USPWindow Réinitialiser la ROM habituelle + Save screenshot… USPWindow Sauvegarde de capture d'écran... +-Save slot USPWindow Save slot +-Save SNA snapshot… USPWindow Save SNA snapshot… ++Save slot USPWindow Sauvegarder l'emplacement. ++Save SNA snapshot… USPWindow Sauvegarder l’instantané SNA… + Save… USPWindow Sauvegarder… + Screenshot save FAILED USPWindow Sauvegarde de la capture d'écran ÉCHOUÉE + Screenshot save OK USPWindow Sauvegarde de la capture d'écran RÉUSSIE +@@ -75,11 +75,11 @@ Smart border disabled USPWindow Bordure intelligente désactivée + Smart border enabled USPWindow Bordure intelligente activée + Smart border scale USPWindow Échelle de la bordure intelligente + Sound chip USPWindow Puce sonore +-Start / Stop tape USPWindow Start / Stop tape +-Tape fast USPWindow Tape fast +-Tape not inserted USPWindow Tape not inserted +-Tape started USPWindow Tape started +-Tape stopped USPWindow Tape stopped ++Start / Stop tape USPWindow Lancer / Arrêter le défilement ++Tape fast USPWindow Défilement rapide ++Tape not inserted USPWindow Pas de cassette insérée ++Tape started USPWindow Défilement lancé ++Tape stopped USPWindow Défilement arrêté + View USPWindow Vue + Virtual keyboard USPWindow Clavier virtuel + Visit homepage USPWindow Visiter le site +@@ -94,5 +94,5 @@ File USPWebWindow Fichier + items USPWebWindow éléments + Open USPWebWindow Ouvrir + Open download folder USPWebWindow Ouvrir le dossier de téléchargement +-Open file from web… USPWebWindow Ouvrir un fichier depuis la toile... ++Open file from web… USPWebWindow Ouvrir un fichier sur la toile... + Keyboard layout USPKeyboardWindow Disposition du clavier +diff --git a/platform/haiku/locales/fur.catkeys b/platform/haiku/locales/fur.catkeys +new file mode 100644 +index 0000000..0bcea3f +--- /dev/null ++++ b/platform/haiku/locales/fur.catkeys +@@ -0,0 +1,98 @@ ++1 Friulian application/x-vnd.unreal-speccy-portable 2972438328 ++100% scale USPWindow scjale al 100% ++128k USPWindow 128k ++128k mode enabled USPWindow modalitât 128k abilitade ++200% scale USPWindow scjale al 200% ++300% scale USPWindow scjale al 300% ++48k USPWindow 48k ++48k mode enabled USPWindow modalitât 48k abilitade ++About USPWindow Informazions ++Auto launch off USPWindow Auto inviâ disativât ++Auto launch on USPWindow Auto inviâ ativât ++Auto launch programs USPWindow Auto invie i programs ++AY Stereo USPWindow AY Stereo ++AY-3-8910 USPWindow AY-3-8910 ++Beta disk drive USPWindow Unitât disc beta ++Bilinear USPWindow Bilineâr ++Could not find app resources.\n USPWindow Impussibil cjatâ lis risorsis de aplicazion.\n ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Impussibil cjatâ la icone tes risorsis de aplicazion (dâts: %p, dimension: %ld).\n ++Could not init native document mime type (%s): %s.\n USPWindow Impussibil inizializâ il gjenar mime dal document natîf (%s): %s.\n ++Could not install native document mime type (%s): %s.\n USPWindow Impussibil instalâ il gjenar mime dal document natîf (%s): %s.\n ++Could not open file USPWindow Impussibil vierzi il file ++Could not set vector icon of mime type.\n USPWindow Impussibil configurâ la icone vetoriâl dal gjenar mime.\n ++Cursor USPWindow Cursôr ++Cursor + Enter USPWindow Cursôr + Invie ++Device USPWindow Dispositîf ++Fast tape off USPWindow Cassete svelte off ++Fast tape on USPWindow Cassete svelte on ++File USPWindow File ++File save FAILED USPWindow Salvament file FALÎT ++File save OK USPWindow Salvament file LÂT BEN ++File was successfully opened USPWindow Il file al è stât viert cun sucès ++Filetypes registered! USPWindow Gjenars di file regjistrâts! ++Filtering USPWindow Filtrament ++Filtering disabled USPWindow Filtrament disativât ++Filtering enabled USPWindow Filtrament ativât ++Full screen USPWindow Plen visôr ++Help USPWindow Jutori ++Joystick USPWindow Joystick ++Kempson mouse grab USPWindow Prese mouse Kempson ++Kempston USPWindow Kempston ++Mode 48k USPWindow Modalitât 48k ++Mono USPWindow Mono ++Mouse grabbed (Alt+G) USPWindow Mouse cjapât (Alt+G) ++Mute USPWindow Cidin ++OK USPWindow Va ben ++Open file… USPWindow Vierç file… ++Open from web… USPWindow Vierç dal web… ++Open… USPWindow Vierç… ++OSD keyboard USPWindow Tastiere su schermi ++OSD menu USPWindow Menù su schermi ++Pause USPWindow Pause ++Paused USPWindow In pause ++QAOP + Space USPWindow QAOP + Spazi ++QAOPM USPWindow QAOPM ++Quick load USPWindow Cjariament svelt ++Quick load FAILED USPWindow Cjariament svelt FALÎT ++Quick load OK USPWindow Cjariament svelt LÂT BEN ++Quick save USPWindow Salvament svelt ++Quick save FAILED USPWindow Salvament svelt FALÎT ++Quick save OK USPWindow Salvament svelt LÂT BEN ++Quit USPWindow Jes ++Ready USPWindow Pront ++Register filetypes USPWindow Regjistre gjenars di files ++Reset USPWindow Ripristine ++Reset to service ROM USPWindow Ripristine a ROM di servizi ++Reset to usual ROM USPWindow Ripristine a ROM usuâl ++Save screenshot… USPWindow Salve videade… ++Save slot USPWindow Salve fressure ++Save SNA snapshot… USPWindow Salve istantanie SNA… ++Save… USPWindow Salve… ++Screenshot save FAILED USPWindow Salvament videade FALÎT ++Screenshot save OK USPWindow Salvament videade LÂT BEN ++Sinclair 2 USPWindow Sinclair 2 ++Smart border disabled USPWindow Ôr inteligjent disativât ++Smart border enabled USPWindow Ôr inteligjent ativât ++Smart border scale USPWindow Scjale ôr inteligjent ++Sound chip USPWindow Chip audio ++Start / Stop tape USPWindow Invie / Ferme cassete ++Tape fast USPWindow Cassete svelte ++Tape not inserted USPWindow Cassete no inseride ++Tape started USPWindow Cassete inviade ++Tape stopped USPWindow Cassete fermade ++View USPWindow Visualize ++Virtual keyboard USPWindow Tastiere virtuâl ++Visit homepage USPWindow Visite pagjine principâl ++Volume USPWindow Volum ++XBR USPWindow XBR ++XBR Filtering disabled USPWindow Filtrament XBR disativât ++XBR Filtering enabled USPWindow Filtrament XBR ativât ++YM2149F USPWindow YM2149F ++Cancel USPWebWindow Anule ++Download file USPWebWindow Discjame il file ++File USPWebWindow File ++items USPWebWindow elements ++Open USPWebWindow Vierç ++Open download folder USPWebWindow Vierç cartele discjariâts ++Open file from web… USPWebWindow Vierç file dal web… ++Keyboard layout USPKeyboardWindow Disposizion tastiere +diff --git a/platform/haiku/locales/it.catkeys b/platform/haiku/locales/it.catkeys +new file mode 100644 +index 0000000..c689d03 +--- /dev/null ++++ b/platform/haiku/locales/it.catkeys +@@ -0,0 +1,98 @@ ++1 Italian application/x-vnd.unreal-speccy-portable 2972438328 ++100% scale USPWindow Ingrandimento al 100% ++128k USPWindow 128k ++128k mode enabled USPWindow Modalità 128k abilitata ++200% scale USPWindow Ingrandimento al 200% ++300% scale USPWindow Ingrandimento al 300% ++48k USPWindow 48k ++48k mode enabled USPWindow Modalità 48k abilitata ++About USPWindow Informazioni su ++Auto launch off USPWindow Avvio automatico disattivo ++Auto launch on USPWindow Avvio automatico attivo ++Auto launch programs USPWindow Avvio automatico programmi ++AY Stereo USPWindow Stereo AY ++AY-3-8910 USPWindow AY-3-8910 ++Beta disk drive USPWindow Unità disco beta ++Bilinear USPWindow Bilineare ++Could not find app resources.\n USPWindow Impossibile trovare risorse app.\n ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Impossibile trovare icona nelle risorse app (dati: %p, dimensione: %ld).\n ++Could not init native document mime type (%s): %s.\n USPWindow Impossibile inizializzare tipo documento MIME nativo (%s): %s.\n ++Could not install native document mime type (%s): %s.\n USPWindow Impossibile installare tipo documento MIME nativo (%s): %s.\n ++Could not open file USPWindow Impossibile aprire file ++Could not set vector icon of mime type.\n USPWindow Impossibile impostare icona vettoriale del tipo MIME.\n ++Cursor USPWindow Cursore ++Cursor + Enter USPWindow Cursore + Invio ++Device USPWindow Dispositivo ++Fast tape off USPWindow Avanzamento rapido nastro disattivo ++Fast tape on USPWindow Avanzamento rapido nastro attivo ++File USPWindow File ++File save FAILED USPWindow Salvataggio file KO ++File save OK USPWindow Salvataggio file OK ++File was successfully opened USPWindow Il file è stato aperto correttamente ++Filetypes registered! USPWindow Tipo di file registrato! ++Filtering USPWindow Filtro ++Filtering disabled USPWindow Filtro disattivo ++Filtering enabled USPWindow Filtro attivo ++Full screen USPWindow Schermo intero ++Help USPWindow Aiuto ++Joystick USPWindow Leva di comando ++Kempson mouse grab USPWindow Presa mouse Kempson ++Kempston USPWindow Kempston ++Mode 48k USPWindow Modalità 48k ++Mono USPWindow Mono ++Mouse grabbed (Alt+G) USPWindow Mouse preso (Alt+G) ++Mute USPWindow Silenzia ++OK USPWindow OK ++Open file… USPWindow Apri file… ++Open from web… USPWindow Apri dal web… ++Open… USPWindow Apri… ++OSD keyboard USPWindow Tastiera a schermo ++OSD menu USPWindow Menu a schermo ++Pause USPWindow Pausa ++Paused USPWindow In pausa ++QAOP + Space USPWindow QAOP + spazio ++QAOPM USPWindow QAOPM ++Quick load USPWindow Caricamento rapido ++Quick load FAILED USPWindow Caricamento rapido KO ++Quick load OK USPWindow Caricamento rapido OK ++Quick save USPWindow Salvataggio rapido ++Quick save FAILED USPWindow Salvataggio rapido KO ++Quick save OK USPWindow Salvataggio rapido OK ++Quit USPWindow Esci ++Ready USPWindow Pronto ++Register filetypes USPWindow Registra tipi di file ++Reset USPWindow Reimposta ++Reset to service ROM USPWindow Reimposta la ROM di servizio ++Reset to usual ROM USPWindow Reimposta la solita ROM ++Save screenshot… USPWindow Salva istantanea schermo… ++Save slot USPWindow Salva scomparto ++Save SNA snapshot… USPWindow Salva istantanea stato SNA… ++Save… USPWindow Salva… ++Screenshot save FAILED USPWindow Salvataggio istantanea KO ++Screenshot save OK USPWindow Salvataggio istantanea OK ++Sinclair 2 USPWindow Sinclair 2 ++Smart border disabled USPWindow Bordo intelligente disattivo ++Smart border enabled USPWindow Bordo intelligente attivo ++Smart border scale USPWindow Ridimensionamento intelligente bordi ++Sound chip USPWindow Chip sonoro ++Start / Stop tape USPWindow Avvia / ferma nastro ++Tape fast USPWindow Avanzamento rapido nastro ++Tape not inserted USPWindow Nastro non inserito ++Tape started USPWindow Nastro avviato ++Tape stopped USPWindow Nastro fermo ++View USPWindow Visualizza ++Virtual keyboard USPWindow Tastiera virtuale ++Visit homepage USPWindow Visita sito web ++Volume USPWindow Volume ++XBR USPWindow XBR ++XBR Filtering disabled USPWindow Filtro XBR disattivo ++XBR Filtering enabled USPWindow Filtro XBR attivo ++YM2149F USPWindow YM2149F ++Cancel USPWebWindow Annulla ++Download file USPWebWindow Scarica file ++File USPWebWindow File ++items USPWebWindow elementi ++Open USPWebWindow Apri ++Open download folder USPWebWindow Apri cartella scaricamenti ++Open file from web… USPWebWindow Apri file dal web… ++Keyboard layout USPKeyboardWindow Mappa tastiera +diff --git a/platform/haiku/locales/nb.catkeys b/platform/haiku/locales/nb.catkeys +new file mode 100644 +index 0000000..ca48685 +--- /dev/null ++++ b/platform/haiku/locales/nb.catkeys +@@ -0,0 +1,98 @@ ++1 Norwegian application/x-vnd.unreal-speccy-portable 2972438328 ++100% scale USPWindow 100% skala ++128k USPWindow 128k ++128k mode enabled USPWindow 128k-modus aktivert ++200% scale USPWindow 200% skala ++300% scale USPWindow 300% skala ++48k USPWindow 48k ++48k mode enabled USPWindow 48k-modus aktivert ++About USPWindow Om ++Auto launch off USPWindow Autostart av ++Auto launch on USPWindow Autostart på ++Auto launch programs USPWindow Autostart programmer ++AY Stereo USPWindow AY Stereo ++AY-3-8910 USPWindow AY-3-8910 ++Beta disk drive USPWindow Beta diskstasjon ++Bilinear USPWindow Bilinær ++Could not find app resources.\n USPWindow Kunne ikke finne appressurser.\n ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Kunne ikke finne ikon i appressurser (data: %p, størrelse: %ld).\n ++Could not init native document mime type (%s): %s.\n USPWindow Kunne ikke initiere original mime-type (%s): %s.\n ++Could not install native document mime type (%s): %s.\n USPWindow Kunne ikke installere original mime-type for dokumentet (%s): %s.\n ++Could not open file USPWindow Kunne ikke åpne filen ++Could not set vector icon of mime type.\n USPWindow Kunne ikke sette vektor-ikon for mime-typen.\n ++Cursor USPWindow Musepeker ++Cursor + Enter USPWindow Musepeker + Enter ++Device USPWindow Enhet ++Fast tape off USPWindow Fast tape off ++Fast tape on USPWindow Fast tape on ++File USPWindow Fil ++File save FAILED USPWindow Fillagring MISLYKTES ++File save OK USPWindow Fillagring OK ++File was successfully opened USPWindow Filen ble åpnet ++Filetypes registered! USPWindow Filtyper registrert! ++Filtering USPWindow Filtrering ++Filtering disabled USPWindow Filtrering deaktivert ++Filtering enabled USPWindow Filtrering aktivert ++Full screen USPWindow Fullskjerm ++Help USPWindow Hjelp ++Joystick USPWindow Joystick ++Kempson mouse grab USPWindow Kempson mouse grab ++Kempston USPWindow Kempston ++Mode 48k USPWindow 48k-modus ++Mono USPWindow Mono ++Mouse grabbed (Alt+G) USPWindow Mouse grabbed (Alt+G) ++Mute USPWindow Mute ++OK USPWindow OK ++Open file… USPWindow Åpne fil… ++Open from web… USPWindow Åpne fra nettet… ++Open… USPWindow Åpne… ++OSD keyboard USPWindow OSD keyboard ++OSD menu USPWindow OSD menu ++Pause USPWindow Pause ++Paused USPWindow Pauset ++QAOP + Space USPWindow QAOP + Space ++QAOPM USPWindow QAOPM ++Quick load USPWindow Quick load ++Quick load FAILED USPWindow Quick load FAILED ++Quick load OK USPWindow Quick load OK ++Quick save USPWindow Hurtiglagring ++Quick save FAILED USPWindow Hurtiglagring MISLYKTES ++Quick save OK USPWindow Hurtiglagring OK ++Quit USPWindow Avslutt ++Ready USPWindow Klar ++Register filetypes USPWindow Registrer filtyper ++Reset USPWindow Nullstill ++Reset to service ROM USPWindow Reset to service ROM ++Reset to usual ROM USPWindow Reset to usual ROM ++Save screenshot… USPWindow Lagre skjermbilde… ++Save slot USPWindow Save slot ++Save SNA snapshot… USPWindow Save SNA snapshot… ++Save… USPWindow Lagre… ++Screenshot save FAILED USPWindow Lagring av skjermbilde MISLYKTES ++Screenshot save OK USPWindow Lagring av skjermbilde OK ++Sinclair 2 USPWindow Sinclair 2 ++Smart border disabled USPWindow Smart ramme deaktivert ++Smart border enabled USPWindow Smart ramme aktivert ++Smart border scale USPWindow Smart ramme skala ++Sound chip USPWindow Sound chip ++Start / Stop tape USPWindow Start / Stopp bånd ++Tape fast USPWindow Tape fast ++Tape not inserted USPWindow Bånd ikke satt inn ++Tape started USPWindow Bånd startet ++Tape stopped USPWindow Bånd stoppet ++View USPWindow Vis ++Virtual keyboard USPWindow Virtual keyboard ++Visit homepage USPWindow Visit homepage ++Volume USPWindow Volume ++XBR USPWindow XBR ++XBR Filtering disabled USPWindow XBR Filtering disabled ++XBR Filtering enabled USPWindow XBR Filtering enabled ++YM2149F USPWindow YM2149F ++Cancel USPWebWindow Avbryt ++Download file USPWebWindow Last ned fil ++File USPWebWindow Fil ++items USPWebWindow elementer ++Open USPWebWindow Åpne ++Open download folder USPWebWindow Åpne nedlastingsmappe ++Open file from web… USPWebWindow Åpne fil fra nettet… ++Keyboard layout USPKeyboardWindow Tastaturoppsett +diff --git a/platform/haiku/locales/sv.catkeys b/platform/haiku/locales/sv.catkeys +new file mode 100644 +index 0000000..92c45b3 +--- /dev/null ++++ b/platform/haiku/locales/sv.catkeys +@@ -0,0 +1,98 @@ ++1 Swedish application/x-vnd.unreal-speccy-portable 2972438328 ++100% scale USPWindow 100% skala ++128k USPWindow 128k ++128k mode enabled USPWindow 128k-läge aktiverat ++200% scale USPWindow 200% skala ++300% scale USPWindow 300% skala ++48k USPWindow 48k ++48k mode enabled USPWindow 48k läge aktiverat ++About USPWindow Om ++Auto launch off USPWindow Autostart av ++Auto launch on USPWindow Automatisk start på ++Auto launch programs USPWindow Starta program automatiskt ++AY Stereo USPWindow AY Stereo ++AY-3-8910 USPWindow AY-3-8910 ++Beta disk drive USPWindow Beta diskenhet ++Bilinear USPWindow Bilinjär ++Could not find app resources.\n USPWindow Det gick inte att hitta appresurser.\n ++Could not find icon in app resources (data: %p, size: %ld).\n USPWindow Det gick inte att hitta ikonen i appresurser (data: %p, storlek: %ld).\n ++Could not init native document mime type (%s): %s.\n USPWindow Kunde inte initiera inbyggd dokumentmime-typ (%s): %s.\n ++Could not install native document mime type (%s): %s.\n USPWindow Kunde inte installera inbyggd dokumentmime-typ (%s): %s.\n ++Could not open file USPWindow Kunde inte öppna filen ++Could not set vector icon of mime type.\n USPWindow Det gick inte att ställa in vektorikon av mimetyp.\n ++Cursor USPWindow Markör ++Cursor + Enter USPWindow Markör + Enter ++Device USPWindow Enhet ++Fast tape off USPWindow Snabb tejp av ++Fast tape on USPWindow Snabb tejp på ++File USPWindow Fil ++File save FAILED USPWindow Spara fil misslyckades ++File save OK USPWindow Spara fil OK ++File was successfully opened USPWindow Filen har öppnats ++Filetypes registered! USPWindow Filtyper registrerade! ++Filtering USPWindow Filtering ++Filtering disabled USPWindow Filtrering inaktiverad ++Filtering enabled USPWindow Filtrering aktiverad ++Full screen USPWindow Fullskärm ++Help USPWindow Hjälp ++Joystick USPWindow Joystick ++Kempson mouse grab USPWindow Kempson-musgrepp ++Kempston USPWindow Kempston ++Mode 48k USPWindow Läge 48k ++Mono USPWindow Mono ++Mouse grabbed (Alt+G) USPWindow Musen greps (Alt+G) ++Mute USPWindow Tyst ++OK USPWindow OK ++Open file… USPWindow Öppna fil… ++Open from web… USPWindow Öppna från webben... ++Open… USPWindow Öppen… ++OSD keyboard USPWindow OSD-tangentbord ++OSD menu USPWindow OSD-menyn ++Pause USPWindow Paus ++Paused USPWindow Pausad ++QAOP + Space USPWindow QAOP + Mellanslag ++QAOPM USPWindow QAOPM ++Quick load USPWindow Snabb laddning ++Quick load FAILED USPWindow Snabb laddning MISSLYCKADES ++Quick load OK USPWindow Snabb laddning OK ++Quick save USPWindow Snabbspara ++Quick save FAILED USPWindow Snabbspara MISSLYCKADES ++Quick save OK USPWindow Snabbspara OK ++Quit USPWindow Avbryt ++Ready USPWindow Redo ++Register filetypes USPWindow Registrera filtyper ++Reset USPWindow Återställa ++Reset to service ROM USPWindow Återställ till service-ROM ++Reset to usual ROM USPWindow Återställ till vanligt ROM ++Save screenshot… USPWindow Spara skärmdump... ++Save slot USPWindow Spara plats ++Save SNA snapshot… USPWindow Spara SNA-ögonblicksbild... ++Save… USPWindow Spara… ++Screenshot save FAILED USPWindow Spara skärmdumpen MISSLYCKades ++Screenshot save OK USPWindow Spara skärmdump OK ++Sinclair 2 USPWindow Sinclair 2 ++Smart border disabled USPWindow Smart border inaktiverad ++Smart border enabled USPWindow Smart kantlinje aktiverad ++Smart border scale USPWindow Smart gränsskala ++Sound chip USPWindow Ljudchip ++Start / Stop tape USPWindow Starta/Stoppa band ++Tape fast USPWindow Tejpa snabbt ++Tape not inserted USPWindow Tejp inte isatt ++Tape started USPWindow Bandet startade ++Tape stopped USPWindow Bandet stannade ++View USPWindow Vy ++Virtual keyboard USPWindow Virtuellt tangentbord ++Visit homepage USPWindow Besök hemsidan ++Volume USPWindow Volym ++XBR USPWindow XBR ++XBR Filtering disabled USPWindow XBR-filtrering inaktiverad ++XBR Filtering enabled USPWindow XBR-filtrering aktiverad ++YM2149F USPWindow YM2149F ++Cancel USPWebWindow Avbryt ++Download file USPWebWindow Nedladdning fil ++File USPWebWindow Fil ++items USPWebWindow enheter ++Open USPWebWindow Öppen ++Open download folder USPWebWindow Öppna nedladdningsmappen ++Open file from web… USPWebWindow Öppna fil från webben... ++Keyboard layout USPKeyboardWindow Tangentbordslayout +-- +2.42.0 diff --git a/app-emulation/unreal_speccy_portable/unreal_speccy_portable-0.0.86.18.recipe b/app-emulation/unreal_speccy_portable/unreal_speccy_portable-0.0.86.21.recipe similarity index 95% rename from app-emulation/unreal_speccy_portable/unreal_speccy_portable-0.0.86.18.recipe rename to app-emulation/unreal_speccy_portable/unreal_speccy_portable-0.0.86.21.recipe index 8aa553afe..af00862cb 100644 --- a/app-emulation/unreal_speccy_portable/unreal_speccy_portable-0.0.86.18.recipe +++ b/app-emulation/unreal_speccy_portable/unreal_speccy_portable-0.0.86.21.recipe @@ -5,9 +5,9 @@ Supported formats: sna, z80, szx, rzx, tap, tzx, csw, trd, scl, fdi, td0, udi, z HOMEPAGE="https://bitbucket.org/djdron/unrealspeccyp" COPYRIGHT="2014-2023 SMT, Dexus, Alone Coder, deathsoft, djdron, scor, 3dEyes" LICENSE="GNU GPL v3" -REVISION="4" +REVISION="1" SOURCE_URI="https://github.com/djdron/UnrealSpeccyP/archive/refs/tags/v$portVersion.tar.gz" -CHECKSUM_SHA256="bfab2463a7eb8e720770eaea9bc50cdc70bbbda190af2ff6b5bd8a970b9fa8c0" +CHECKSUM_SHA256="32b299666cb7a039990c56c5ae4fd7b37b4047cafd63a307d578b8ce0e91b216" SOURCE_DIR="UnrealSpeccyP-$portVersion" PATCHES="unreal_speccy_portable-$portVersion.patchset"