├── .github └── FUNDING.yml ├── README.md ├── assets └── logo.png ├── development ├── ExtensionsExamples │ ├── BingWallpapers │ │ ├── BingWallpapers.cpp │ │ ├── BingWallpapers.h │ │ ├── BingWallpapers.sln │ │ ├── Extras │ │ │ └── nlohmann_json.hpp │ │ ├── GUI │ │ │ ├── IconsFontAwesome5.h │ │ │ ├── imgui.h │ │ │ ├── imgui_internal.h │ │ │ ├── imgui_shared.h │ │ │ └── imstb_textedit.h │ │ ├── Headers │ │ │ ├── BingWallpapers.h │ │ │ ├── IExtension.h │ │ │ └── pch.h │ │ ├── Helpers │ │ │ ├── StorageExtensions.cpp │ │ │ ├── StorageExtensions.h │ │ │ ├── StorageInfo.h │ │ │ ├── StoragePath.cpp │ │ │ └── StoragePath.h │ │ ├── ImmExtenTemplate.vcxproj │ │ ├── ImmExtenTemplate.vcxproj.filters │ │ ├── Libs │ │ │ ├── ARM │ │ │ │ └── ImMobile.lib │ │ │ ├── ARM64 │ │ │ │ └── ImMobile.lib │ │ │ ├── Win32 │ │ │ │ └── ImMobile.lib │ │ │ └── x64 │ │ │ │ └── ImMobile.lib │ │ ├── Others │ │ │ └── dllmain.cpp │ │ └── README.md │ ├── ImmLottie │ │ ├── Core │ │ │ ├── freetype │ │ │ │ ├── v_ft_math.cpp │ │ │ │ ├── v_ft_math.h │ │ │ │ ├── v_ft_raster.cpp │ │ │ │ ├── v_ft_raster.h │ │ │ │ ├── v_ft_stroker.cpp │ │ │ │ ├── v_ft_stroker.h │ │ │ │ └── v_ft_types.h │ │ │ ├── imlottie.h │ │ │ ├── imlottie_impl.h │ │ │ ├── imottie_renderer.cpp │ │ │ ├── rapidjson │ │ │ │ ├── allocators.h │ │ │ │ ├── cursorstreamwrapper.h │ │ │ │ ├── document.h │ │ │ │ ├── encodedstream.h │ │ │ │ ├── encodings.h │ │ │ │ ├── error │ │ │ │ │ ├── en.h │ │ │ │ │ └── error.h │ │ │ │ ├── filereadstream.h │ │ │ │ ├── filewritestream.h │ │ │ │ ├── fwd.h │ │ │ │ ├── internal │ │ │ │ │ ├── biginteger.h │ │ │ │ │ ├── clzll.h │ │ │ │ │ ├── diyfp.h │ │ │ │ │ ├── dtoa.h │ │ │ │ │ ├── ieee754.h │ │ │ │ │ ├── itoa.h │ │ │ │ │ ├── meta.h │ │ │ │ │ ├── pow10.h │ │ │ │ │ ├── regex.h │ │ │ │ │ ├── stack.h │ │ │ │ │ ├── strfunc.h │ │ │ │ │ ├── strtod.h │ │ │ │ │ └── swap.h │ │ │ │ ├── istreamwrapper.h │ │ │ │ ├── memorybuffer.h │ │ │ │ ├── memorystream.h │ │ │ │ ├── msinttypes │ │ │ │ │ ├── inttypes.h │ │ │ │ │ └── stdint.h │ │ │ │ ├── ostreamwrapper.h │ │ │ │ ├── pointer.h │ │ │ │ ├── prettywriter.h │ │ │ │ ├── rapidjson.h │ │ │ │ ├── reader.h │ │ │ │ ├── schema.h │ │ │ │ ├── stream.h │ │ │ │ ├── stringbuffer.h │ │ │ │ └── writer.h │ │ │ └── stb_image.h │ │ ├── Extras │ │ │ ├── ggml.h │ │ │ └── nlohmann_json.hpp │ │ ├── GUI │ │ │ ├── IconsFontAwesome5.h │ │ │ ├── imgui.h │ │ │ ├── imgui_internal.h │ │ │ ├── imgui_shared.h │ │ │ ├── implot.h │ │ │ ├── implot_internal.h │ │ │ └── imstb_textedit.h │ │ ├── Headers │ │ │ ├── IExtension.h │ │ │ ├── ImmApiProvider.h │ │ │ └── pch.h │ │ ├── Helpers │ │ │ ├── StorageExtensions.cpp │ │ │ ├── StorageExtensions.h │ │ │ ├── StorageInfo.h │ │ │ ├── StoragePath.cpp │ │ │ └── StoragePath.h │ │ ├── ImmApiProviderBridge.h │ │ ├── ImmExtenTemplate.vcxproj │ │ ├── ImmExtenTemplate.vcxproj.filters │ │ ├── ImmLottie.cpp │ │ ├── ImmLottie.h │ │ ├── ImmLottie.sln │ │ ├── Libs │ │ │ ├── ARM │ │ │ │ └── ImMobile.lib │ │ │ ├── ARM64 │ │ │ │ └── ImMobile.lib │ │ │ ├── Win32 │ │ │ │ └── ImMobile.lib │ │ │ └── x64 │ │ │ │ └── ImMobile.lib │ │ ├── Others │ │ │ └── dllmain.cpp │ │ └── README.md │ ├── ImmWUT │ │ ├── Extras │ │ │ ├── ggml.h │ │ │ └── nlohmann_json.hpp │ │ ├── GUI │ │ │ ├── IconsFontAwesome5.h │ │ │ ├── imgui.h │ │ │ ├── imgui_internal.h │ │ │ ├── imgui_shared.h │ │ │ ├── implot.h │ │ │ ├── implot_internal.h │ │ │ └── imstb_textedit.h │ │ ├── Headers │ │ │ ├── IExtension.h │ │ │ ├── ImmApiProvider.h │ │ │ └── pch.h │ │ ├── Helpers │ │ │ ├── StorageExtensions.cpp │ │ │ ├── StorageExtensions.h │ │ │ ├── StorageInfo.h │ │ │ ├── StoragePath.cpp │ │ │ └── StoragePath.h │ │ ├── ImmApiProviderBridge.h │ │ ├── ImmExtenTemplate.vcxproj │ │ ├── ImmExtenTemplate.vcxproj.filters │ │ ├── ImmWUT.cpp │ │ ├── ImmWUT.h │ │ ├── ImmWUT.sln │ │ ├── Libs │ │ │ ├── ARM │ │ │ │ └── ImMobile.lib │ │ │ ├── ARM64 │ │ │ │ └── ImMobile.lib │ │ │ ├── Win32 │ │ │ │ └── ImMobile.lib │ │ │ └── x64 │ │ │ │ └── ImMobile.lib │ │ ├── Others │ │ │ └── dllmain.cpp │ │ └── README.md │ └── README.md ├── ExtensionsTemplate │ ├── Extras │ │ ├── ggml.h │ │ └── nlohmann_json.hpp │ ├── GUI │ │ ├── IconsFontAwesome5.h │ │ ├── imgui.h │ │ ├── imgui_internal.h │ │ ├── imgui_shared.h │ │ ├── implot.h │ │ ├── implot_internal.h │ │ └── imstb_textedit.h │ ├── Headers │ │ ├── IExtension.h │ │ ├── ImmApiProvider.h │ │ └── pch.h │ ├── Helpers │ │ ├── StorageExtensions.cpp │ │ ├── StorageExtensions.h │ │ ├── StorageInfo.h │ │ ├── StoragePath.cpp │ │ └── StoragePath.h │ ├── ImmApiProviderBridge.h │ ├── ImmExtenTemplate.cpp │ ├── ImmExtenTemplate.h │ ├── ImmExtenTemplate.sln │ ├── ImmExtenTemplate.vcxproj │ ├── ImmExtenTemplate.vcxproj.filters │ ├── Libs │ │ ├── ARM │ │ │ └── ImMobile.lib │ │ ├── ARM64 │ │ │ └── ImMobile.lib │ │ ├── Win32 │ │ │ └── ImMobile.lib │ │ └── x64 │ │ │ └── ImMobile.lib │ ├── Others │ │ └── dllmain.cpp │ └── README.md ├── JSDemos │ ├── BingWallpaper14393+.js │ ├── README.md │ └── jsDemo.js └── README.md ├── docs └── CNAME ├── library ├── extensions │ ├── README.md │ ├── arm │ │ ├── BingWallpapers.dll │ │ ├── ImmLottie.dll │ │ ├── ImmLottieSamples.zip │ │ └── ImmWUT.dll │ ├── arm64 │ │ ├── BingWallpapers.dll │ │ ├── ImmLottie.dll │ │ └── ImmLottieSamples.zip │ ├── x64 │ │ ├── BingWallpapers.dll │ │ ├── ImmLottie.dll │ │ └── ImmLottieSamples.zip │ └── x86 │ │ ├── BingWallpapers.dll │ │ ├── ImmLottie.dll │ │ └── ImmLottieSamples.zip ├── scripts │ ├── BingWallpaper14393+.js │ └── README.md └── wallpapers │ ├── Im1.jpg │ ├── Im2.jpg │ ├── ImAbstruct.jpg │ ├── ImBlue.jpg │ ├── ImBlur.jpg │ ├── ImDark.jpg │ ├── ImDay.jpg │ ├── ImGold.jpg │ ├── ImGray.jpg │ ├── ImHP.jpg │ ├── ImIllusion.jpg │ ├── ImIntrusion.jpg │ ├── ImLandscape.jpg │ ├── ImLight.jpg │ ├── ImLunar.jpg │ ├── ImSky.jpg │ ├── ImSpring.jpg │ ├── ImSunset.jpg │ ├── ImVista.jpg │ ├── ImWindows.jpg │ ├── ImWinter.jpg │ └── landscape │ ├── Im1.jpg │ ├── Im2.jpg │ ├── ImAbstruct.jpg │ ├── ImBlue.jpg │ ├── ImBlur.jpg │ ├── ImDark.jpg │ ├── ImDay.jpg │ ├── ImGold.jpg │ ├── ImGray.jpg │ ├── ImHP.jpg │ ├── ImIllusion.jpg │ ├── ImIntrusion.jpg │ ├── ImLandscape.jpg │ ├── ImLight.jpg │ ├── ImLunar.jpg │ ├── ImSky.jpg │ ├── ImSpring.jpg │ ├── ImSunset.jpg │ ├── ImVista.jpg │ ├── ImWindows.jpg │ └── ImWinter.jpg ├── licenses ├── Dear ImGui (Main).txt ├── Dear ImGui (UWP).txt ├── ImFileDialog.txt ├── ImGuiColorTextEdit.txt ├── ImPlot.txt ├── Libraries │ ├── csv-parser.txt │ ├── dll_management.txt │ ├── gumbo-parser.txt │ ├── juce_litehtml.txt │ ├── libzip.txt │ ├── litehtml.txt │ ├── nlohmann_json.txt │ ├── pugixml.txt │ ├── quickjs-ng.txt │ ├── quickjs.txt │ ├── simpleini.txt │ ├── stb.txt │ └── zlib.txt ├── RPN Calculator.txt ├── SoundEffects.txt ├── Themes.txt ├── Wallpapers.txt ├── imgui-notify.txt └── imgui_markdown.txt └── mobile ├── ImMobile_1.0_ARM.appx ├── ImMobile_1.0_ARM.cer ├── Microsoft.VCLibs.ARM.appx └── README.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: https://paypal.me/astifan 16 | -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/assets/logo.png -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/BingWallpapers.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #pragma once 10 | 11 | #include "pch.h" 12 | #include "IExtension.h" 13 | 14 | std::string GetFileName(const std::string& fileURL) { 15 | std::string fileName = "wallpaper.jpg"; 16 | 17 | try { 18 | std::regex pattern(R"(id=([^&]+))"); 19 | std::smatch match; 20 | 21 | if (std::regex_search(fileURL, match, pattern) && match.size() > 1) { 22 | fileName = match[1].str(); 23 | } 24 | else { 25 | Imm::Logger::Normal("No filename match found."); 26 | } 27 | } 28 | catch (const std::exception& e) { 29 | Imm::Logger::Normal("Filename extraction error: " + std::string(e.what())); 30 | } 31 | 32 | Imm::Logger::Normal("Filename: " + fileName); 33 | return fileName; 34 | } 35 | 36 | 37 | void FetchBingWallpaper() { 38 | // Check if the device is currently online 39 | if (Imm::Online::IsOnline()) { 40 | 41 | // Fetch JSON metadata from Bing's wallpaper API 42 | std::string reponse = Imm::Online::GetResponse("https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"); 43 | nlohmann::json data = nlohmann::json::parse(reponse); 44 | 45 | // Extract first image entry from the response 46 | nlohmann::json imageInfo = data["images"][0]; 47 | 48 | // Construct full image URL using Bing base URL 49 | std::string baseUrl = "https://www.bing.com"; 50 | std::string wallpaperLandscape = baseUrl + imageInfo["url"].get(); 51 | 52 | // Generate portrait version by replacing resolution in URL 53 | std::string wallpaperVertical = std::regex_replace(wallpaperLandscape, std::regex(R"((\d+)x(\d+))"), "1080x1920"); 54 | 55 | // Extract copyright text for notification 56 | std::string wallpaperInfo = imageInfo["copyright"].get(); 57 | 58 | // Log the resolved URLs and metadata 59 | Imm::Logger::Warn("Landscape: " + wallpaperLandscape); 60 | Imm::Logger::Warn("Info: " + wallpaperInfo); 61 | 62 | // Prepare target folders for storing wallpapers 63 | std::string picturesFolder = Imm::Storage::Locations::PicturesFolder() + "\\BingWallpapers"; 64 | std::string picturesLandscapeFolder = picturesFolder + "\\landscape"; 65 | Imm::Storage::Manage::CreateFolder(picturesFolder, false, true); 66 | Imm::Storage::Manage::CreateFolder(picturesLandscapeFolder, false, true); 67 | 68 | // Get a clean file name from the wallpaper URL 69 | std::string imageFilename = GetFileName(wallpaperLandscape); 70 | 71 | // Define full paths for saving the images 72 | std::string wallpaperPath = picturesFolder + "\\" + imageFilename; 73 | std::string wallpaperLandscapePath = picturesLandscapeFolder + "\\" + imageFilename; 74 | 75 | // Log target path 76 | Imm::Logger::Warn("Wallpaper path: " + wallpaperPath); 77 | 78 | // Only download if the image doesn't already exist 79 | if (!Imm::Storage::Manage::IsExists(wallpaperPath)) { 80 | 81 | // Attempt to download the portrait version first 82 | if (Imm::Online::QuickDownload(wallpaperVertical, wallpaperPath, true, Imm::Online::GetDefaultDownloadClient(), false)) { 83 | 84 | // Then download the landscape version to a separate folder 85 | if (Imm::Online::QuickDownload(wallpaperLandscape, wallpaperLandscapePath, true, Imm::Online::GetDefaultDownloadClient(), false)) { 86 | 87 | // Copy the landscape image to app's internal backgrounds folder 88 | std::string backgroundLandscapeFolder = Imm::Storage::Locations::DataFolder() + "\\backgrounds\\landscape"; 89 | std::string destImage = backgroundLandscapeFolder + "\\background.jpg"; 90 | 91 | Imm::Logger::Warn("Copy wallpaper to: " + destImage); 92 | Imm::Storage::Manage::Copy(wallpaperLandscapePath, destImage); 93 | } 94 | else { 95 | // Log failure if landscape download fails 96 | Imm::Logger::Error("Failed to download: " + wallpaperLandscape); 97 | } 98 | 99 | // Apply the portrait wallpaper as the current background 100 | Imm::App::UI::CustomBackground(wallpaperPath); 101 | } 102 | else { 103 | // Log failure if portrait download fails 104 | Imm::Logger::Error("Failed to download: " + wallpaperVertical); 105 | } 106 | } 107 | else { 108 | // Skip download and notify success if file already exists 109 | Imm::Logger::Success("Wallpaper already exists and set: " + imageFilename); 110 | } 111 | 112 | // Notify user with wallpaper info after a short delay 113 | concurrency::create_task([wallpaperInfo] { 114 | Sleep(3000); 115 | Imm::Notify::Info(wallpaperInfo, 6000); 116 | Imm::Logger::Notice(wallpaperInfo); 117 | }); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/BingWallpapers.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.35319.79 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BingWallpapers", "ImmExtenTemplate.vcxproj", "{A8E9332B-BB86-470F-B72B-6A8B3359DF68}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Optimized|ARM = Optimized|ARM 11 | Optimized|ARM64 = Optimized|ARM64 12 | Optimized|x64 = Optimized|x64 13 | Optimized|x86 = Optimized|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM.ActiveCfg = Optimized|ARM 17 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM.Build.0 = Optimized|ARM 18 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM64.ActiveCfg = Optimized|ARM64 19 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM64.Build.0 = Optimized|ARM64 20 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x64.ActiveCfg = Optimized|x64 21 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x64.Build.0 = Optimized|x64 22 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x86.ActiveCfg = Optimized|Win32 23 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x86.Build.0 = Optimized|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {D2F727A7-4848-4825-8F59-98A1C134C775} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/GUI/imgui_shared.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | enum ImGuiWindowFlags_Custom { 4 | // Render even if not focused 5 | ImGuiWindowFlags_RenderAlways = 1 << 19, 6 | 7 | // Show touch pad 8 | ImGuiWindowFlags_TouchPad = 1 << 20, 9 | 10 | // Force 30 FPS (Less GPU load) 11 | ImGuiWindowFlags_30FPS = 1 << 21, 12 | 13 | // Delay render (Less CPU load) 14 | ImGuiWindowFlags_SleepFPS = 1 << 22, 15 | 16 | // Force full mode 17 | ImGuiWindowFlags_RequireFull = 1 << 29, 18 | 19 | // Don't show in task bar 20 | ImGuiWindowFlags_NoTaskBar = 1 << 31, 21 | }; 22 | 23 | enum ImGuiKeyboardFlags_Custom { 24 | ImGuiKeyboardFlags_Text, 25 | ImGuiKeyboardFlags_Number, 26 | ImGuiKeyboardFlags_URL, 27 | ImGuiKeyboardFlags_Email, 28 | ImGuiKeyboardFlags_FilePath, 29 | ImGuiKeyboardFlags_FileName, 30 | ImGuiKeyboardFlags_Digits, 31 | }; 32 | 33 | struct inputFunctions 34 | { 35 | static int inputCallback(ImGuiInputTextCallbackData* data); 36 | }; 37 | 38 | enum class NetworkLevel 39 | { 40 | None = 0, 41 | LocalAccess = 1, 42 | ConstrainedInternetAccess = 2, 43 | InternetAccess = 3, 44 | BlockByImMobile = 4, 45 | NotConnected = 5, 46 | }; 47 | 48 | enum class SaverStatus 49 | { 50 | Disabled = 0, 51 | Off = 1, 52 | On = 2, 53 | }; 54 | 55 | enum class BluetoothState 56 | { 57 | Unknown = 0, 58 | On = 1, 59 | Off = 2, 60 | Disabled = 3, 61 | }; 62 | 63 | enum class SensorsDirection 64 | { 65 | Up = 0, 66 | Down = 1, 67 | Left = 2, 68 | Right = 3, 69 | }; 70 | 71 | enum class GamePadButtons 72 | { 73 | None = 0, 74 | Menu = 0x1, 75 | View = 0x2, 76 | A = 0x4, 77 | B = 0x8, 78 | X = 0x10, 79 | Y = 0x20, 80 | DPadUp = 0x40, 81 | DPadDown = 0x80, 82 | DPadLeft = 0x100, 83 | DPadRight = 0x200, 84 | LeftShoulder = 0x400, 85 | RightShoulder = 0x800, 86 | LeftThumbstick = 0x1000, 87 | RightThumbstick = 0x2000, 88 | Paddle1 = 0x4000, 89 | Paddle2 = 0x8000, 90 | Paddle3 = 0x10000, 91 | Paddle4 = 0x20000, 92 | }; 93 | 94 | 95 | enum class TouchPadButtons 96 | { 97 | Select = 0, 98 | L3 = 1, 99 | R3 = 2, 100 | Start = 3, 101 | Up = 4, 102 | Right = 5, 103 | Down = 6, 104 | Left = 7, 105 | L2 = 8, 106 | R2 = 9, 107 | L1 = 10, 108 | R1 = 11, 109 | One = 12, 110 | Two = 13, 111 | Three = 14, 112 | Four = 15, 113 | Analog = 16, // Menu if analog disabled 114 | Count // Menu button 115 | }; 116 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Headers/IExtension.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #include "pch.h" 10 | #include "BingWallpapers.h" 11 | 12 | // Extension Interface 13 | class IExtension { 14 | public: 15 | /***************/ 16 | /* INFORMATION */ 17 | /***************/ 18 | std::string name; 19 | std::string publisher; 20 | std::string version; 21 | std::string build; 22 | 23 | /*************/ 24 | /* FUNCTIONS */ 25 | /*************/ 26 | virtual void Information() = 0; 27 | virtual void Initialize(ImmApiProvider* apiProvider) = 0; 28 | virtual void Config() = 0; 29 | virtual void Addons() = 0; 30 | virtual void Render() = 0; 31 | virtual void Register() = 0; 32 | virtual void Unloading() = 0; 33 | 34 | /**********/ 35 | /* EVENTS */ 36 | /**********/ 37 | virtual void Sensors(SensorsDirection direction, bool state) = 0; 38 | virtual void TouchPad(int port, int code, bool pressed) = 0; 39 | virtual void TouchPadAnalog(int port, float xAxis, float yAxis) = 0; 40 | virtual void GamePad(int port, int code, bool pressed) = 0; 41 | virtual void GamePadAnalog(int port, float xAxisL, float yAxisL, float xAxisR, float yAxisR) = 0; 42 | virtual void GamePadConnected(int port) = 0; 43 | virtual void GamePadRemoved(int port) = 0; 44 | virtual void Rotated(DXGI_MODE_ROTATION orientation) = 0; 45 | virtual void NetworkChanged(NetworkLevel level, bool wifi) = 0; 46 | virtual void EnergySaverChanged(SaverStatus status) = 0; 47 | virtual void BluetoothChanged(BluetoothState state) = 0; 48 | virtual void PointerPressed(int id, float x, float y, ImPointerType type) = 0; 49 | virtual void PointerMoved(int id, float x, float y, ImPointerType type) = 0; 50 | virtual void PointerReleased(int id, float x, float y, ImPointerType type) = 0; 51 | virtual void LaunchURI(std::string uri) = 0; 52 | 53 | virtual ~IExtension() {} 54 | 55 | #pragma region Reserved 56 | /***************************/ 57 | /* RESERVED (DON'T REMOVE) */ 58 | /***************************/ 59 | // Below will be assigned by ImMobile 60 | int index = 0; 61 | std::string id; 62 | std::string wd; 63 | std::string cf; 64 | bool enabled = true; 65 | bool deleted = false; 66 | bool console = false; 67 | bool visibility = false; 68 | bool sensors = false; 69 | bool touchpad = false; 70 | bool gamepad = false; 71 | bool compatible = true; 72 | bool startup = false; 73 | 74 | virtual void ToggleGUI() = 0; 75 | 76 | std::string GetConfigsSection() { 77 | return cf; 78 | } 79 | 80 | // [WINDOW] 81 | ImGuiWindowFlags flags; 82 | std::string GetWindowID() { 83 | return wd; 84 | } 85 | #pragma endregion 86 | 87 | #pragma region APIsTests 88 | /*****************************/ 89 | /* APIs TESTS (DON'T REMOVE) */ 90 | /*****************************/ 91 | API_TESTS ctest = NONE; 92 | virtual const char* GetTest() = 0; 93 | virtual void SetTest(const char* test) = 0; 94 | virtual void ImmTests(API_TESTS test) = 0; 95 | #pragma endregion 96 | 97 | }; 98 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Headers/pch.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | #ifndef WIN32_LEAN_AND_MEAN 14 | #define WIN32_LEAN_AND_MEAN 15 | #endif 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | #include 39 | 40 | #ifndef IMM_INTERNAL_INCLUDE 41 | // UWP Storage 42 | #include "StorageInfo.h" 43 | #include "StoragePath.h" 44 | 45 | // GUI 46 | #define IMGUI_ENABLE_INTERNAL 47 | #include "imgui.h" 48 | #include 49 | #include "imgui_shared.h" 50 | #include "IconsFontAwesome5.h" 51 | 52 | // Extras 53 | #include "nlohmann_json.hpp" 54 | #endif 55 | 56 | #include 57 | #include 58 | #include 59 | #include 60 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Helpers/StorageExtensions.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // Copyright (c) 2023-2024 Bashar Astifan. 3 | // Email: bashar@astifan.online 4 | // Telegram: @basharastifan 5 | // GitHub: https://github.com/basharast/UWP2Win32 6 | 7 | #pragma once 8 | 9 | /**********************************************************************************/ 10 | /* BETTER TO USE: (Imm::Utils::String) INSTEAD, FUNCTIONS ALREADY PROJECTED THERE */ 11 | /**********************************************************************************/ 12 | 13 | #include 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | 23 | typedef struct { 24 | DWORD dwDesiredAccess; 25 | DWORD dwShareMode; 26 | DWORD dwCreationDisposition; 27 | int flags; 28 | bool isWrite; 29 | bool isAppend; 30 | bool isCreate; 31 | } FILE_OPEN_UWP_MODE; 32 | 33 | bool replace(std::string& str, const std::string& from, const std::string& to); 34 | bool replaceAll(std::string& str, const std::string& from, const std::string& to); 35 | std::string replace2(const std::string str, const std::string& from, const std::string& to); 36 | std::vector split(const std::string s, char seperator); 37 | // Parent full path, child full path 38 | bool isChild(std::string parent, std::string child); 39 | // Parent full path, child full path, child name only 40 | bool isParent(std::string parent, std::string child, std::string childName); 41 | 42 | bool iequals(const std::string a, const std::string b); 43 | bool equals(const std::string a, const std::string b); 44 | bool ends_with(std::string const& value, std::string const& ending); 45 | bool starts_with(std::string str, std::string prefix); 46 | 47 | std::wstring convertToWString(const std::string input); 48 | std::string convert(std::wstring input); 49 | std::string convert(const char* input); 50 | std::wstring convert(std::string input); 51 | LPCWSTR convertToLPCWSTR(std::string input); 52 | 53 | void tolower(std::string& input); 54 | void toupper(std::string& input); 55 | 56 | void windowsPath(std::string& path); 57 | 58 | std::string merge(std::string targetFullPath, std::string subFullPath); 59 | std::string combine(std::string targetFullPath, std::string subPath); 60 | 61 | std::string& rtrim(std::string& s, const char* t = " \t\n\r\f\v"); 62 | std::string& ltrim(std::string& s, const char* t = " \t\n\r\f\v"); 63 | std::string& trim(std::string& s, const char* t = " \t\n\r\f\v"); 64 | 65 | std::string& rtrim_substr(std::string& s, const std::string& substr); 66 | std::string& ltrim_substr(std::string& s, const std::string& substr); 67 | 68 | std::string fSize(int64_t size); 69 | bool validURL(const std::string& url); 70 | 71 | template 72 | bool findInList(std::list& inputList, T& str) { 73 | return (std::find(inputList.begin(), inputList.end(), str) != inputList.end()); 74 | }; 75 | 76 | bool findInListInsensitive(std::list& inputList, const std::string& str); 77 | 78 | template 79 | inline T RandomRange(T min, T max) { 80 | T scale = rand() / (T)RAND_MAX; 81 | return min + scale * (max - min); 82 | } 83 | 84 | FILE_OPEN_UWP_MODE* GetFileMode(const char* mode); 85 | 86 | // Parent and child full path 87 | std::string getSubRoot(std::string parent, std::string child); 88 | 89 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Helpers/StorageInfo.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // For updates check: https://github.com/basharast/UWP2Win32 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | struct ItemInfoUWP { 12 | std::string name; // File name with extension 13 | std::string fullName; // Full path 14 | std::string extension; // Extension such as '.mp3' 15 | std::string extensionPreview; // Upper case extension 16 | std::string sizePreview = "---"; // Formated size 17 | 18 | bool isDirectory = false; 19 | 20 | uint64_t size = 0; 21 | uint64_t lastAccessTime = 0; 22 | uint64_t lastWriteTime = 0; 23 | uint64_t changeTime = 0; 24 | uint64_t creationTime = 0; 25 | 26 | uint64_t attributes = 0; 27 | }; -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Helpers/StoragePath.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // Based on 'Path' from PPSSPP 3 | // For updates check: https://github.com/basharast/UWP2Win32 4 | 5 | #pragma once 6 | 7 | #include 8 | 9 | #define HOST_IS_CASE_SENSITIVE 0 10 | 11 | enum class PathTypeUWP { 12 | UNDEFINED = 0, 13 | NATIVE = 1, // Can be relative. 14 | CONTENT_URI = 2, // Android only. Can only be absolute! 15 | HTTP = 3, // http://, https:// 16 | }; 17 | 18 | // Windows paths are always stored with '/' slashes in a Path. 19 | // On .ToWString(), they are flipped back to '\'. 20 | 21 | class PathUWP { 22 | private: 23 | void Init(const std::string& str); 24 | 25 | public: 26 | std::string path_; 27 | std::string extCache; 28 | bool isDirectory; // Special usage, don't depend on it 29 | 30 | PathUWP() : type_(PathTypeUWP::UNDEFINED) {} 31 | explicit PathUWP(const std::string& str); 32 | 33 | explicit PathUWP(const std::wstring& str); 34 | 35 | PathTypeUWP Type() const { 36 | return type_; 37 | } 38 | 39 | bool Valid() const { return !path_.empty(); } 40 | bool IsRoot() const { return path_ == "\\"; } // Special value - only path that can end in a slash. 41 | 42 | // Some std::string emulation for simplicity. 43 | bool empty() const { return !Valid(); } 44 | void clear() { 45 | type_ = PathTypeUWP::UNDEFINED; 46 | path_.clear(); 47 | } 48 | size_t size() const { 49 | return path_.size(); 50 | } 51 | 52 | // WARNING: Potentially unsafe usage, if it's not NATIVE. 53 | const char* c_str() const { 54 | return path_.c_str(); 55 | } 56 | 57 | bool IsAbsolute() const; 58 | 59 | // Returns a path extended with a subdirectory. 60 | PathUWP operator /(const std::string& subdir) const; 61 | 62 | // Navigates down into a subdir. 63 | void operator /=(const std::string& subdir); 64 | 65 | // File extension manipulation. 66 | PathUWP WithExtraExtension(const std::string& ext) const; 67 | PathUWP WithReplacedExtension(const std::string& oldExtension, const std::string& newExtension) const; 68 | PathUWP WithReplacedExtension(const std::string& newExtension) const; 69 | 70 | // Removes the last component. 71 | std::string GetFilename() const; // Really, GetLastComponent. Could be a file or directory. Includes the extension. 72 | std::string GetFileExtension() const; // Always lowercase return. Includes the dot. 73 | std::string GetDirectory() const; 74 | 75 | const std::string& ToString() const; 76 | 77 | std::wstring ToWString() const; 78 | 79 | std::string ToVisualString() const; 80 | 81 | bool CanNavigateUp() const; 82 | PathUWP NavigateUp() const; 83 | 84 | // Navigates as far up as possible from this path. If not possible to navigate upwards, returns the same path. 85 | // Not actually always the root of the volume, especially on systems like Mac and Linux where things are often mounted. 86 | // For Android directory trees, navigates to the root of the tree. 87 | PathUWP GetRootVolume() const; 88 | 89 | bool ComputePathTo(const PathUWP& other, std::string& path) const; 90 | 91 | bool operator ==(const PathUWP& other) const { 92 | return path_ == other.path_ && type_ == other.type_; 93 | } 94 | bool operator !=(const PathUWP& other) const { 95 | return path_ != other.path_ || type_ != other.type_; 96 | } 97 | 98 | bool FilePathContainsNoCase(const std::string& needle) const; 99 | 100 | bool StartsWith(const PathUWP& other) const; 101 | 102 | bool operator <(const PathUWP& other) const { 103 | return path_ < other.path_; 104 | } 105 | bool operator >(const PathUWP& other) const { 106 | return path_ > other.path_; 107 | } 108 | 109 | private: 110 | PathTypeUWP type_; 111 | }; 112 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/ImmExtenTemplate.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 6 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms 7 | 8 | 9 | {7d631577-2f98-4dad-a58a-81ca447fea5f} 10 | 11 | 12 | {5b8d2ab3-c2c4-4e8d-acc2-1e7f1f368654} 13 | 14 | 15 | {15495947-241d-48af-beda-d674b6821970} 16 | 17 | 18 | {2c360152-d06e-41aa-a719-ab99bd9c3433} 19 | 20 | 21 | {0849ad18-189f-4f83-948e-7dc7fa4a2737} 22 | 23 | 24 | 25 | 26 | Others 27 | 28 | 29 | Helpers 30 | 31 | 32 | Helpers 33 | 34 | 35 | 36 | 37 | 38 | GUI 39 | 40 | 41 | GUI 42 | 43 | 44 | GUI 45 | 46 | 47 | GUI 48 | 49 | 50 | Headers 51 | 52 | 53 | Headers 54 | 55 | 56 | GUI 57 | 58 | 59 | Helpers 60 | 61 | 62 | Helpers 63 | 64 | 65 | Helpers 66 | 67 | 68 | Extras 69 | 70 | 71 | 72 | Headers 73 | 74 | 75 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Libs/ARM/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/BingWallpapers/Libs/ARM/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Libs/ARM64/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/BingWallpapers/Libs/ARM64/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Libs/Win32/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/BingWallpapers/Libs/Win32/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Libs/x64/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/BingWallpapers/Libs/x64/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/Others/dllmain.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #include "pch.h" 10 | 11 | BOOL APIENTRY DllMain(HMODULE /* hModule */, DWORD ul_reason_for_call, LPVOID /* lpReserved */) 12 | { 13 | switch (ul_reason_for_call) 14 | { 15 | case DLL_PROCESS_ATTACH: 16 | case DLL_THREAD_ATTACH: 17 | case DLL_THREAD_DETACH: 18 | case DLL_PROCESS_DETACH: 19 | break; 20 | } 21 | return TRUE; 22 | } 23 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/BingWallpapers/README.md: -------------------------------------------------------------------------------- 1 | ## Extensions Template 2 | 3 | Refer to the [Wiki page](https://github.com/basharast/ImMobile/wiki/DevExtensions) for 🔌 Extensions development 4 | 5 | ## Preview 6 | 7 |
8 | Demo Video (Click Here) 9 |
10 | 11 | https://github.com/user-attachments/assets/55776ef2-7f9c-4280-9b45-8a0ad2df094b 12 | 13 |
14 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/cursorstreamwrapper.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_CURSORSTREAMWRAPPER_H_ 16 | #define RAPIDJSON_CURSORSTREAMWRAPPER_H_ 17 | 18 | #include "stream.h" 19 | 20 | #if defined(__GNUC__) 21 | RAPIDJSON_DIAG_PUSH 22 | RAPIDJSON_DIAG_OFF(effc++) 23 | #endif 24 | 25 | #if defined(_MSC_VER) && _MSC_VER <= 1800 26 | RAPIDJSON_DIAG_PUSH 27 | RAPIDJSON_DIAG_OFF(4702) // unreachable code 28 | RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated 29 | #endif 30 | 31 | RAPIDJSON_NAMESPACE_BEGIN 32 | 33 | 34 | //! Cursor stream wrapper for counting line and column number if error exists. 35 | /*! 36 | \tparam InputStream Any stream that implements Stream Concept 37 | */ 38 | template > 39 | class CursorStreamWrapper : public GenericStreamWrapper { 40 | public: 41 | typedef typename Encoding::Ch Ch; 42 | 43 | CursorStreamWrapper(InputStream& is): 44 | GenericStreamWrapper(is), line_(1), col_(0) {} 45 | 46 | // counting line and column number 47 | Ch Take() { 48 | Ch ch = this->is_.Take(); 49 | if(ch == '\n') { 50 | line_ ++; 51 | col_ = 0; 52 | } else { 53 | col_ ++; 54 | } 55 | return ch; 56 | } 57 | 58 | //! Get the error line number, if error exists. 59 | size_t GetLine() const { return line_; } 60 | //! Get the error column number, if error exists. 61 | size_t GetColumn() const { return col_; } 62 | 63 | private: 64 | size_t line_; //!< Current Line 65 | size_t col_; //!< Current Column 66 | }; 67 | 68 | #if defined(_MSC_VER) && _MSC_VER <= 1800 69 | RAPIDJSON_DIAG_POP 70 | #endif 71 | 72 | #if defined(__GNUC__) 73 | RAPIDJSON_DIAG_POP 74 | #endif 75 | 76 | RAPIDJSON_NAMESPACE_END 77 | 78 | #endif // RAPIDJSON_CURSORSTREAMWRAPPER_H_ 79 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/error/en.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_ERROR_EN_H_ 16 | #define RAPIDJSON_ERROR_EN_H_ 17 | 18 | #include "error.h" 19 | 20 | #ifdef __clang__ 21 | RAPIDJSON_DIAG_PUSH 22 | RAPIDJSON_DIAG_OFF(switch-enum) 23 | RAPIDJSON_DIAG_OFF(covered-switch-default) 24 | #endif 25 | 26 | RAPIDJSON_NAMESPACE_BEGIN 27 | 28 | //! Maps error code of parsing into error message. 29 | /*! 30 | \ingroup RAPIDJSON_ERRORS 31 | \param parseErrorCode Error code obtained in parsing. 32 | \return the error message. 33 | \note User can make a copy of this function for localization. 34 | Using switch-case is safer for future modification of error codes. 35 | */ 36 | inline const RAPIDJSON_ERROR_CHARTYPE* GetParseError_En(ParseErrorCode parseErrorCode) { 37 | switch (parseErrorCode) { 38 | case kParseErrorNone: return RAPIDJSON_ERROR_STRING("No error."); 39 | 40 | case kParseErrorDocumentEmpty: return RAPIDJSON_ERROR_STRING("The document is empty."); 41 | case kParseErrorDocumentRootNotSingular: return RAPIDJSON_ERROR_STRING("The document root must not be followed by other values."); 42 | 43 | case kParseErrorValueInvalid: return RAPIDJSON_ERROR_STRING("Invalid value."); 44 | 45 | case kParseErrorObjectMissName: return RAPIDJSON_ERROR_STRING("Missing a name for object member."); 46 | case kParseErrorObjectMissColon: return RAPIDJSON_ERROR_STRING("Missing a colon after a name of object member."); 47 | case kParseErrorObjectMissCommaOrCurlyBracket: return RAPIDJSON_ERROR_STRING("Missing a comma or '}' after an object member."); 48 | 49 | case kParseErrorArrayMissCommaOrSquareBracket: return RAPIDJSON_ERROR_STRING("Missing a comma or ']' after an array element."); 50 | 51 | case kParseErrorStringUnicodeEscapeInvalidHex: return RAPIDJSON_ERROR_STRING("Incorrect hex digit after \\u escape in string."); 52 | case kParseErrorStringUnicodeSurrogateInvalid: return RAPIDJSON_ERROR_STRING("The surrogate pair in string is invalid."); 53 | case kParseErrorStringEscapeInvalid: return RAPIDJSON_ERROR_STRING("Invalid escape character in string."); 54 | case kParseErrorStringMissQuotationMark: return RAPIDJSON_ERROR_STRING("Missing a closing quotation mark in string."); 55 | case kParseErrorStringInvalidEncoding: return RAPIDJSON_ERROR_STRING("Invalid encoding in string."); 56 | 57 | case kParseErrorNumberTooBig: return RAPIDJSON_ERROR_STRING("Number too big to be stored in double."); 58 | case kParseErrorNumberMissFraction: return RAPIDJSON_ERROR_STRING("Miss fraction part in number."); 59 | case kParseErrorNumberMissExponent: return RAPIDJSON_ERROR_STRING("Miss exponent in number."); 60 | 61 | case kParseErrorTermination: return RAPIDJSON_ERROR_STRING("Terminate parsing due to Handler error."); 62 | case kParseErrorUnspecificSyntaxError: return RAPIDJSON_ERROR_STRING("Unspecific syntax error."); 63 | 64 | default: return RAPIDJSON_ERROR_STRING("Unknown error."); 65 | } 66 | } 67 | 68 | RAPIDJSON_NAMESPACE_END 69 | 70 | #ifdef __clang__ 71 | RAPIDJSON_DIAG_POP 72 | #endif 73 | 74 | #endif // RAPIDJSON_ERROR_EN_H_ 75 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/error/error.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_ERROR_ERROR_H_ 16 | #define RAPIDJSON_ERROR_ERROR_H_ 17 | 18 | #include "../rapidjson.h" 19 | 20 | #ifdef __clang__ 21 | RAPIDJSON_DIAG_PUSH 22 | RAPIDJSON_DIAG_OFF(padded) 23 | #endif 24 | 25 | /*! \file error.h */ 26 | 27 | /*! \defgroup RAPIDJSON_ERRORS RapidJSON error handling */ 28 | 29 | /////////////////////////////////////////////////////////////////////////////// 30 | // RAPIDJSON_ERROR_CHARTYPE 31 | 32 | //! Character type of error messages. 33 | /*! \ingroup RAPIDJSON_ERRORS 34 | The default character type is \c char. 35 | On Windows, user can define this macro as \c TCHAR for supporting both 36 | unicode/non-unicode settings. 37 | */ 38 | #ifndef RAPIDJSON_ERROR_CHARTYPE 39 | #define RAPIDJSON_ERROR_CHARTYPE char 40 | #endif 41 | 42 | /////////////////////////////////////////////////////////////////////////////// 43 | // RAPIDJSON_ERROR_STRING 44 | 45 | //! Macro for converting string literial to \ref RAPIDJSON_ERROR_CHARTYPE[]. 46 | /*! \ingroup RAPIDJSON_ERRORS 47 | By default this conversion macro does nothing. 48 | On Windows, user can define this macro as \c _T(x) for supporting both 49 | unicode/non-unicode settings. 50 | */ 51 | #ifndef RAPIDJSON_ERROR_STRING 52 | #define RAPIDJSON_ERROR_STRING(x) x 53 | #endif 54 | 55 | RAPIDJSON_NAMESPACE_BEGIN 56 | 57 | /////////////////////////////////////////////////////////////////////////////// 58 | // ParseErrorCode 59 | 60 | //! Error code of parsing. 61 | /*! \ingroup RAPIDJSON_ERRORS 62 | \see GenericReader::Parse, GenericReader::GetParseErrorCode 63 | */ 64 | enum ParseErrorCode { 65 | kParseErrorNone = 0, //!< No error. 66 | 67 | kParseErrorDocumentEmpty, //!< The document is empty. 68 | kParseErrorDocumentRootNotSingular, //!< The document root must not follow by other values. 69 | 70 | kParseErrorValueInvalid, //!< Invalid value. 71 | 72 | kParseErrorObjectMissName, //!< Missing a name for object member. 73 | kParseErrorObjectMissColon, //!< Missing a colon after a name of object member. 74 | kParseErrorObjectMissCommaOrCurlyBracket, //!< Missing a comma or '}' after an object member. 75 | 76 | kParseErrorArrayMissCommaOrSquareBracket, //!< Missing a comma or ']' after an array element. 77 | 78 | kParseErrorStringUnicodeEscapeInvalidHex, //!< Incorrect hex digit after \\u escape in string. 79 | kParseErrorStringUnicodeSurrogateInvalid, //!< The surrogate pair in string is invalid. 80 | kParseErrorStringEscapeInvalid, //!< Invalid escape character in string. 81 | kParseErrorStringMissQuotationMark, //!< Missing a closing quotation mark in string. 82 | kParseErrorStringInvalidEncoding, //!< Invalid encoding in string. 83 | 84 | kParseErrorNumberTooBig, //!< Number too big to be stored in double. 85 | kParseErrorNumberMissFraction, //!< Miss fraction part in number. 86 | kParseErrorNumberMissExponent, //!< Miss exponent in number. 87 | 88 | kParseErrorTermination, //!< Parsing was terminated. 89 | kParseErrorUnspecificSyntaxError //!< Unspecific syntax error. 90 | }; 91 | 92 | //! Result of parsing (wraps ParseErrorCode) 93 | /*! 94 | \ingroup RAPIDJSON_ERRORS 95 | \code 96 | Document doc; 97 | ParseResult ok = doc.Parse("[42]"); 98 | if (!ok) { 99 | fprintf(stderr, "JSON parse error: %s (%u)", 100 | GetParseError_En(ok.Code()), ok.Offset()); 101 | exit(EXIT_FAILURE); 102 | } 103 | \endcode 104 | \see GenericReader::Parse, GenericDocument::Parse 105 | */ 106 | struct ParseResult { 107 | //!! Unspecified boolean type 108 | typedef bool (ParseResult::*BooleanType)() const; 109 | public: 110 | //! Default constructor, no error. 111 | ParseResult() : code_(kParseErrorNone), offset_(0) {} 112 | //! Constructor to set an error. 113 | ParseResult(ParseErrorCode code, size_t offset) : code_(code), offset_(offset) {} 114 | 115 | //! Get the error code. 116 | ParseErrorCode Code() const { return code_; } 117 | //! Get the error offset, if \ref IsError(), 0 otherwise. 118 | size_t Offset() const { return offset_; } 119 | 120 | //! Explicit conversion to \c bool, returns \c true, iff !\ref IsError(). 121 | operator BooleanType() const { return !IsError() ? &ParseResult::IsError : NULL; } 122 | //! Whether the result is an error. 123 | bool IsError() const { return code_ != kParseErrorNone; } 124 | 125 | bool operator==(const ParseResult& that) const { return code_ == that.code_; } 126 | bool operator==(ParseErrorCode code) const { return code_ == code; } 127 | friend bool operator==(ParseErrorCode code, const ParseResult & err) { return code == err.code_; } 128 | 129 | bool operator!=(const ParseResult& that) const { return !(*this == that); } 130 | bool operator!=(ParseErrorCode code) const { return !(*this == code); } 131 | friend bool operator!=(ParseErrorCode code, const ParseResult & err) { return err != code; } 132 | 133 | //! Reset error code. 134 | void Clear() { Set(kParseErrorNone); } 135 | //! Update error code and offset. 136 | void Set(ParseErrorCode code, size_t offset = 0) { code_ = code; offset_ = offset; } 137 | 138 | private: 139 | ParseErrorCode code_; 140 | size_t offset_; 141 | }; 142 | 143 | //! Function pointer type of GetParseError(). 144 | /*! \ingroup RAPIDJSON_ERRORS 145 | 146 | This is the prototype for \c GetParseError_X(), where \c X is a locale. 147 | User can dynamically change locale in runtime, e.g.: 148 | \code 149 | GetParseErrorFunc GetParseError = GetParseError_En; // or whatever 150 | const RAPIDJSON_ERROR_CHARTYPE* s = GetParseError(document.GetParseErrorCode()); 151 | \endcode 152 | */ 153 | typedef const RAPIDJSON_ERROR_CHARTYPE* (*GetParseErrorFunc)(ParseErrorCode); 154 | 155 | RAPIDJSON_NAMESPACE_END 156 | 157 | #ifdef __clang__ 158 | RAPIDJSON_DIAG_POP 159 | #endif 160 | 161 | #endif // RAPIDJSON_ERROR_ERROR_H_ 162 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/filereadstream.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_FILEREADSTREAM_H_ 16 | #define RAPIDJSON_FILEREADSTREAM_H_ 17 | 18 | #include "stream.h" 19 | #include 20 | 21 | #ifdef __clang__ 22 | RAPIDJSON_DIAG_PUSH 23 | RAPIDJSON_DIAG_OFF(padded) 24 | RAPIDJSON_DIAG_OFF(unreachable-code) 25 | RAPIDJSON_DIAG_OFF(missing-noreturn) 26 | #endif 27 | 28 | RAPIDJSON_NAMESPACE_BEGIN 29 | 30 | //! File byte stream for input using fread(). 31 | /*! 32 | \note implements Stream concept 33 | */ 34 | class FileReadStream { 35 | public: 36 | typedef char Ch; //!< Character type (byte). 37 | 38 | //! Constructor. 39 | /*! 40 | \param fp File pointer opened for read. 41 | \param buffer user-supplied buffer. 42 | \param bufferSize size of buffer in bytes. Must >=4 bytes. 43 | */ 44 | FileReadStream(std::FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferSize_(bufferSize), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) { 45 | RAPIDJSON_ASSERT(fp_ != 0); 46 | RAPIDJSON_ASSERT(bufferSize >= 4); 47 | Read(); 48 | } 49 | 50 | Ch Peek() const { return *current_; } 51 | Ch Take() { Ch c = *current_; Read(); return c; } 52 | size_t Tell() const { return count_ + static_cast(current_ - buffer_); } 53 | 54 | // Not implemented 55 | void Put(Ch) { RAPIDJSON_ASSERT(false); } 56 | void Flush() { RAPIDJSON_ASSERT(false); } 57 | Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } 58 | size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } 59 | 60 | // For encoding detection only. 61 | const Ch* Peek4() const { 62 | return (current_ + 4 - !eof_ <= bufferLast_) ? current_ : 0; 63 | } 64 | 65 | private: 66 | void Read() { 67 | if (current_ < bufferLast_) 68 | ++current_; 69 | else if (!eof_) { 70 | count_ += readCount_; 71 | readCount_ = std::fread(buffer_, 1, bufferSize_, fp_); 72 | bufferLast_ = buffer_ + readCount_ - 1; 73 | current_ = buffer_; 74 | 75 | if (readCount_ < bufferSize_) { 76 | buffer_[readCount_] = '\0'; 77 | ++bufferLast_; 78 | eof_ = true; 79 | } 80 | } 81 | } 82 | 83 | std::FILE* fp_; 84 | Ch *buffer_; 85 | size_t bufferSize_; 86 | Ch *bufferLast_; 87 | Ch *current_; 88 | size_t readCount_; 89 | size_t count_; //!< Number of characters read 90 | bool eof_; 91 | }; 92 | 93 | RAPIDJSON_NAMESPACE_END 94 | 95 | #ifdef __clang__ 96 | RAPIDJSON_DIAG_POP 97 | #endif 98 | 99 | #endif // RAPIDJSON_FILESTREAM_H_ 100 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/filewritestream.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_FILEWRITESTREAM_H_ 16 | #define RAPIDJSON_FILEWRITESTREAM_H_ 17 | 18 | #include "stream.h" 19 | #include 20 | 21 | #ifdef __clang__ 22 | RAPIDJSON_DIAG_PUSH 23 | RAPIDJSON_DIAG_OFF(unreachable-code) 24 | #endif 25 | 26 | RAPIDJSON_NAMESPACE_BEGIN 27 | 28 | //! Wrapper of C file stream for output using fwrite(). 29 | /*! 30 | \note implements Stream concept 31 | */ 32 | class FileWriteStream { 33 | public: 34 | typedef char Ch; //!< Character type. Only support char. 35 | 36 | FileWriteStream(std::FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferEnd_(buffer + bufferSize), current_(buffer_) { 37 | RAPIDJSON_ASSERT(fp_ != 0); 38 | } 39 | 40 | void Put(char c) { 41 | if (current_ >= bufferEnd_) 42 | Flush(); 43 | 44 | *current_++ = c; 45 | } 46 | 47 | void PutN(char c, size_t n) { 48 | size_t avail = static_cast(bufferEnd_ - current_); 49 | while (n > avail) { 50 | std::memset(current_, c, avail); 51 | current_ += avail; 52 | Flush(); 53 | n -= avail; 54 | avail = static_cast(bufferEnd_ - current_); 55 | } 56 | 57 | if (n > 0) { 58 | std::memset(current_, c, n); 59 | current_ += n; 60 | } 61 | } 62 | 63 | void Flush() { 64 | if (current_ != buffer_) { 65 | size_t result = std::fwrite(buffer_, 1, static_cast(current_ - buffer_), fp_); 66 | if (result < static_cast(current_ - buffer_)) { 67 | // failure deliberately ignored at this time 68 | // added to avoid warn_unused_result build errors 69 | } 70 | current_ = buffer_; 71 | } 72 | } 73 | 74 | // Not implemented 75 | char Peek() const { RAPIDJSON_ASSERT(false); return 0; } 76 | char Take() { RAPIDJSON_ASSERT(false); return 0; } 77 | size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } 78 | char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } 79 | size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; } 80 | 81 | private: 82 | // Prohibit copy constructor & assignment operator. 83 | FileWriteStream(const FileWriteStream&); 84 | FileWriteStream& operator=(const FileWriteStream&); 85 | 86 | std::FILE* fp_; 87 | char *buffer_; 88 | char *bufferEnd_; 89 | char *current_; 90 | }; 91 | 92 | //! Implement specialized version of PutN() with memset() for better performance. 93 | template<> 94 | inline void PutN(FileWriteStream& stream, char c, size_t n) { 95 | stream.PutN(c, n); 96 | } 97 | 98 | RAPIDJSON_NAMESPACE_END 99 | 100 | #ifdef __clang__ 101 | RAPIDJSON_DIAG_POP 102 | #endif 103 | 104 | #endif // RAPIDJSON_FILESTREAM_H_ 105 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/fwd.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_FWD_H_ 16 | #define RAPIDJSON_FWD_H_ 17 | 18 | #include "rapidjson.h" 19 | 20 | RAPIDJSON_NAMESPACE_BEGIN 21 | 22 | // encodings.h 23 | 24 | template struct UTF8; 25 | template struct UTF16; 26 | template struct UTF16BE; 27 | template struct UTF16LE; 28 | template struct UTF32; 29 | template struct UTF32BE; 30 | template struct UTF32LE; 31 | template struct ASCII; 32 | template struct AutoUTF; 33 | 34 | template 35 | struct Transcoder; 36 | 37 | // allocators.h 38 | 39 | class CrtAllocator; 40 | 41 | template 42 | class MemoryPoolAllocator; 43 | 44 | // stream.h 45 | 46 | template 47 | struct GenericStringStream; 48 | 49 | typedef GenericStringStream > StringStream; 50 | 51 | template 52 | struct GenericInsituStringStream; 53 | 54 | typedef GenericInsituStringStream > InsituStringStream; 55 | 56 | // stringbuffer.h 57 | 58 | template 59 | class GenericStringBuffer; 60 | 61 | typedef GenericStringBuffer, CrtAllocator> StringBuffer; 62 | 63 | // filereadstream.h 64 | 65 | class FileReadStream; 66 | 67 | // filewritestream.h 68 | 69 | class FileWriteStream; 70 | 71 | // memorybuffer.h 72 | 73 | template 74 | struct GenericMemoryBuffer; 75 | 76 | typedef GenericMemoryBuffer MemoryBuffer; 77 | 78 | // memorystream.h 79 | 80 | struct MemoryStream; 81 | 82 | // reader.h 83 | 84 | template 85 | struct BaseReaderHandler; 86 | 87 | template 88 | class GenericReader; 89 | 90 | typedef GenericReader, UTF8, CrtAllocator> Reader; 91 | 92 | // writer.h 93 | 94 | template 95 | class Writer; 96 | 97 | // prettywriter.h 98 | 99 | template 100 | class PrettyWriter; 101 | 102 | // document.h 103 | 104 | template 105 | class GenericMember; 106 | 107 | template 108 | class GenericMemberIterator; 109 | 110 | template 111 | struct GenericStringRef; 112 | 113 | template 114 | class GenericValue; 115 | 116 | typedef GenericValue, MemoryPoolAllocator > Value; 117 | 118 | template 119 | class GenericDocument; 120 | 121 | typedef GenericDocument, MemoryPoolAllocator, CrtAllocator> Document; 122 | 123 | // pointer.h 124 | 125 | template 126 | class GenericPointer; 127 | 128 | typedef GenericPointer Pointer; 129 | 130 | // schema.h 131 | 132 | template 133 | class IGenericRemoteSchemaDocumentProvider; 134 | 135 | template 136 | class GenericSchemaDocument; 137 | 138 | typedef GenericSchemaDocument SchemaDocument; 139 | typedef IGenericRemoteSchemaDocumentProvider IRemoteSchemaDocumentProvider; 140 | 141 | template < 142 | typename SchemaDocumentType, 143 | typename OutputHandler, 144 | typename StateAllocator> 145 | class GenericSchemaValidator; 146 | 147 | typedef GenericSchemaValidator, void>, CrtAllocator> SchemaValidator; 148 | 149 | RAPIDJSON_NAMESPACE_END 150 | 151 | #endif // RAPIDJSON_RAPIDJSONFWD_H_ 152 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/internal/clzll.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_CLZLL_H_ 16 | #define RAPIDJSON_CLZLL_H_ 17 | 18 | #include "../rapidjson.h" 19 | 20 | #if defined(_MSC_VER) 21 | #include 22 | #if defined(_WIN64) 23 | #pragma intrinsic(_BitScanReverse64) 24 | #else 25 | #pragma intrinsic(_BitScanReverse) 26 | #endif 27 | #endif 28 | 29 | RAPIDJSON_NAMESPACE_BEGIN 30 | namespace internal { 31 | 32 | inline uint32_t clzll(uint64_t x) { 33 | // Passing 0 to __builtin_clzll is UB in GCC and results in an 34 | // infinite loop in the software implementation. 35 | RAPIDJSON_ASSERT(x != 0); 36 | 37 | #if defined(_MSC_VER) 38 | unsigned long r = 0; 39 | #if defined(_WIN64) 40 | _BitScanReverse64(&r, x); 41 | #else 42 | // Scan the high 32 bits. 43 | if (_BitScanReverse(&r, static_cast(x >> 32))) 44 | return 63 - (r + 32); 45 | 46 | // Scan the low 32 bits. 47 | _BitScanReverse(&r, static_cast(x & 0xFFFFFFFF)); 48 | #endif // _WIN64 49 | 50 | return 63 - r; 51 | #elif (defined(__GNUC__) && __GNUC__ >= 4) || RAPIDJSON_HAS_BUILTIN(__builtin_clzll) 52 | // __builtin_clzll wrapper 53 | return static_cast(__builtin_clzll(x)); 54 | #else 55 | // naive version 56 | uint32_t r; 57 | while (!(x & (static_cast(1) << 63))) { 58 | x <<= 1; 59 | ++r; 60 | } 61 | 62 | return r; 63 | #endif // _MSC_VER 64 | } 65 | 66 | #define RAPIDJSON_CLZLL RAPIDJSON_NAMESPACE::internal::clzll 67 | 68 | } // namespace internal 69 | RAPIDJSON_NAMESPACE_END 70 | 71 | #endif // RAPIDJSON_CLZLL_H_ 72 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/internal/ieee754.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_IEEE754_ 16 | #define RAPIDJSON_IEEE754_ 17 | 18 | #include "../rapidjson.h" 19 | 20 | RAPIDJSON_NAMESPACE_BEGIN 21 | namespace internal { 22 | 23 | class Double { 24 | public: 25 | Double() {} 26 | Double(double d) : d_(d) {} 27 | Double(uint64_t u) : u_(u) {} 28 | 29 | double Value() const { return d_; } 30 | uint64_t Uint64Value() const { return u_; } 31 | 32 | double NextPositiveDouble() const { 33 | RAPIDJSON_ASSERT(!Sign()); 34 | return Double(u_ + 1).Value(); 35 | } 36 | 37 | bool Sign() const { return (u_ & kSignMask) != 0; } 38 | uint64_t Significand() const { return u_ & kSignificandMask; } 39 | int Exponent() const { return static_cast(((u_ & kExponentMask) >> kSignificandSize) - kExponentBias); } 40 | 41 | bool IsNan() const { return (u_ & kExponentMask) == kExponentMask && Significand() != 0; } 42 | bool IsInf() const { return (u_ & kExponentMask) == kExponentMask && Significand() == 0; } 43 | bool IsNanOrInf() const { return (u_ & kExponentMask) == kExponentMask; } 44 | bool IsNormal() const { return (u_ & kExponentMask) != 0 || Significand() == 0; } 45 | bool IsZero() const { return (u_ & (kExponentMask | kSignificandMask)) == 0; } 46 | 47 | uint64_t IntegerSignificand() const { return IsNormal() ? Significand() | kHiddenBit : Significand(); } 48 | int IntegerExponent() const { return (IsNormal() ? Exponent() : kDenormalExponent) - kSignificandSize; } 49 | uint64_t ToBias() const { return (u_ & kSignMask) ? ~u_ + 1 : u_ | kSignMask; } 50 | 51 | static int EffectiveSignificandSize(int order) { 52 | if (order >= -1021) 53 | return 53; 54 | else if (order <= -1074) 55 | return 0; 56 | else 57 | return order + 1074; 58 | } 59 | 60 | private: 61 | static const int kSignificandSize = 52; 62 | static const int kExponentBias = 0x3FF; 63 | static const int kDenormalExponent = 1 - kExponentBias; 64 | static const uint64_t kSignMask = RAPIDJSON_UINT64_C2(0x80000000, 0x00000000); 65 | static const uint64_t kExponentMask = RAPIDJSON_UINT64_C2(0x7FF00000, 0x00000000); 66 | static const uint64_t kSignificandMask = RAPIDJSON_UINT64_C2(0x000FFFFF, 0xFFFFFFFF); 67 | static const uint64_t kHiddenBit = RAPIDJSON_UINT64_C2(0x00100000, 0x00000000); 68 | 69 | union { 70 | double d_; 71 | uint64_t u_; 72 | }; 73 | }; 74 | 75 | } // namespace internal 76 | RAPIDJSON_NAMESPACE_END 77 | 78 | #endif // RAPIDJSON_IEEE754_ 79 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/internal/meta.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_INTERNAL_META_H_ 16 | #define RAPIDJSON_INTERNAL_META_H_ 17 | 18 | #include "../rapidjson.h" 19 | 20 | #ifdef __GNUC__ 21 | RAPIDJSON_DIAG_PUSH 22 | RAPIDJSON_DIAG_OFF(effc++) 23 | #endif 24 | 25 | #if defined(_MSC_VER) && !defined(__clang__) 26 | RAPIDJSON_DIAG_PUSH 27 | RAPIDJSON_DIAG_OFF(6334) 28 | #endif 29 | 30 | #if RAPIDJSON_HAS_CXX11_TYPETRAITS 31 | #include 32 | #endif 33 | 34 | //@cond RAPIDJSON_INTERNAL 35 | RAPIDJSON_NAMESPACE_BEGIN 36 | namespace internal { 37 | 38 | // Helper to wrap/convert arbitrary types to void, useful for arbitrary type matching 39 | template struct Void { typedef void Type; }; 40 | 41 | /////////////////////////////////////////////////////////////////////////////// 42 | // BoolType, TrueType, FalseType 43 | // 44 | template struct BoolType { 45 | static const bool Value = Cond; 46 | typedef BoolType Type; 47 | }; 48 | typedef BoolType TrueType; 49 | typedef BoolType FalseType; 50 | 51 | 52 | /////////////////////////////////////////////////////////////////////////////// 53 | // SelectIf, BoolExpr, NotExpr, AndExpr, OrExpr 54 | // 55 | 56 | template struct SelectIfImpl { template struct Apply { typedef T1 Type; }; }; 57 | template <> struct SelectIfImpl { template struct Apply { typedef T2 Type; }; }; 58 | template struct SelectIfCond : SelectIfImpl::template Apply {}; 59 | template struct SelectIf : SelectIfCond {}; 60 | 61 | template struct AndExprCond : FalseType {}; 62 | template <> struct AndExprCond : TrueType {}; 63 | template struct OrExprCond : TrueType {}; 64 | template <> struct OrExprCond : FalseType {}; 65 | 66 | template struct BoolExpr : SelectIf::Type {}; 67 | template struct NotExpr : SelectIf::Type {}; 68 | template struct AndExpr : AndExprCond::Type {}; 69 | template struct OrExpr : OrExprCond::Type {}; 70 | 71 | 72 | /////////////////////////////////////////////////////////////////////////////// 73 | // AddConst, MaybeAddConst, RemoveConst 74 | template struct AddConst { typedef const T Type; }; 75 | template struct MaybeAddConst : SelectIfCond {}; 76 | template struct RemoveConst { typedef T Type; }; 77 | template struct RemoveConst { typedef T Type; }; 78 | 79 | 80 | /////////////////////////////////////////////////////////////////////////////// 81 | // IsSame, IsConst, IsMoreConst, IsPointer 82 | // 83 | template struct IsSame : FalseType {}; 84 | template struct IsSame : TrueType {}; 85 | 86 | template struct IsConst : FalseType {}; 87 | template struct IsConst : TrueType {}; 88 | 89 | template 90 | struct IsMoreConst 91 | : AndExpr::Type, typename RemoveConst::Type>, 92 | BoolType::Value >= IsConst::Value> >::Type {}; 93 | 94 | template struct IsPointer : FalseType {}; 95 | template struct IsPointer : TrueType {}; 96 | 97 | /////////////////////////////////////////////////////////////////////////////// 98 | // IsBaseOf 99 | // 100 | #if RAPIDJSON_HAS_CXX11_TYPETRAITS 101 | 102 | template struct IsBaseOf 103 | : BoolType< ::std::is_base_of::value> {}; 104 | 105 | #else // simplified version adopted from Boost 106 | 107 | template struct IsBaseOfImpl { 108 | RAPIDJSON_STATIC_ASSERT(sizeof(B) != 0); 109 | RAPIDJSON_STATIC_ASSERT(sizeof(D) != 0); 110 | 111 | typedef char (&Yes)[1]; 112 | typedef char (&No) [2]; 113 | 114 | template 115 | static Yes Check(const D*, T); 116 | static No Check(const B*, int); 117 | 118 | struct Host { 119 | operator const B*() const; 120 | operator const D*(); 121 | }; 122 | 123 | enum { Value = (sizeof(Check(Host(), 0)) == sizeof(Yes)) }; 124 | }; 125 | 126 | template struct IsBaseOf 127 | : OrExpr, BoolExpr > >::Type {}; 128 | 129 | #endif // RAPIDJSON_HAS_CXX11_TYPETRAITS 130 | 131 | 132 | ////////////////////////////////////////////////////////////////////////// 133 | // EnableIf / DisableIf 134 | // 135 | template struct EnableIfCond { typedef T Type; }; 136 | template struct EnableIfCond { /* empty */ }; 137 | 138 | template struct DisableIfCond { typedef T Type; }; 139 | template struct DisableIfCond { /* empty */ }; 140 | 141 | template 142 | struct EnableIf : EnableIfCond {}; 143 | 144 | template 145 | struct DisableIf : DisableIfCond {}; 146 | 147 | // SFINAE helpers 148 | struct SfinaeTag {}; 149 | template struct RemoveSfinaeTag; 150 | template struct RemoveSfinaeTag { typedef T Type; }; 151 | 152 | #define RAPIDJSON_REMOVEFPTR_(type) \ 153 | typename ::RAPIDJSON_NAMESPACE::internal::RemoveSfinaeTag \ 154 | < ::RAPIDJSON_NAMESPACE::internal::SfinaeTag&(*) type>::Type 155 | 156 | #define RAPIDJSON_ENABLEIF(cond) \ 157 | typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \ 158 | ::Type * = NULL 159 | 160 | #define RAPIDJSON_DISABLEIF(cond) \ 161 | typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \ 162 | ::Type * = NULL 163 | 164 | #define RAPIDJSON_ENABLEIF_RETURN(cond,returntype) \ 165 | typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \ 166 | ::Type 168 | 169 | #define RAPIDJSON_DISABLEIF_RETURN(cond,returntype) \ 170 | typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \ 171 | ::Type 173 | 174 | } // namespace internal 175 | RAPIDJSON_NAMESPACE_END 176 | //@endcond 177 | 178 | #if defined(_MSC_VER) && !defined(__clang__) 179 | RAPIDJSON_DIAG_POP 180 | #endif 181 | 182 | #ifdef __GNUC__ 183 | RAPIDJSON_DIAG_POP 184 | #endif 185 | 186 | #endif // RAPIDJSON_INTERNAL_META_H_ 187 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/internal/pow10.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_POW10_ 16 | #define RAPIDJSON_POW10_ 17 | 18 | #include "../rapidjson.h" 19 | 20 | RAPIDJSON_NAMESPACE_BEGIN 21 | namespace internal { 22 | 23 | //! Computes integer powers of 10 in double (10.0^n). 24 | /*! This function uses lookup table for fast and accurate results. 25 | \param n non-negative exponent. Must <= 308. 26 | \return 10.0^n 27 | */ 28 | inline double Pow10(int n) { 29 | static const double e[] = { // 1e-0...1e308: 309 * 8 bytes = 2472 bytes 30 | 1e+0, 31 | 1e+1, 1e+2, 1e+3, 1e+4, 1e+5, 1e+6, 1e+7, 1e+8, 1e+9, 1e+10, 1e+11, 1e+12, 1e+13, 1e+14, 1e+15, 1e+16, 1e+17, 1e+18, 1e+19, 1e+20, 32 | 1e+21, 1e+22, 1e+23, 1e+24, 1e+25, 1e+26, 1e+27, 1e+28, 1e+29, 1e+30, 1e+31, 1e+32, 1e+33, 1e+34, 1e+35, 1e+36, 1e+37, 1e+38, 1e+39, 1e+40, 33 | 1e+41, 1e+42, 1e+43, 1e+44, 1e+45, 1e+46, 1e+47, 1e+48, 1e+49, 1e+50, 1e+51, 1e+52, 1e+53, 1e+54, 1e+55, 1e+56, 1e+57, 1e+58, 1e+59, 1e+60, 34 | 1e+61, 1e+62, 1e+63, 1e+64, 1e+65, 1e+66, 1e+67, 1e+68, 1e+69, 1e+70, 1e+71, 1e+72, 1e+73, 1e+74, 1e+75, 1e+76, 1e+77, 1e+78, 1e+79, 1e+80, 35 | 1e+81, 1e+82, 1e+83, 1e+84, 1e+85, 1e+86, 1e+87, 1e+88, 1e+89, 1e+90, 1e+91, 1e+92, 1e+93, 1e+94, 1e+95, 1e+96, 1e+97, 1e+98, 1e+99, 1e+100, 36 | 1e+101,1e+102,1e+103,1e+104,1e+105,1e+106,1e+107,1e+108,1e+109,1e+110,1e+111,1e+112,1e+113,1e+114,1e+115,1e+116,1e+117,1e+118,1e+119,1e+120, 37 | 1e+121,1e+122,1e+123,1e+124,1e+125,1e+126,1e+127,1e+128,1e+129,1e+130,1e+131,1e+132,1e+133,1e+134,1e+135,1e+136,1e+137,1e+138,1e+139,1e+140, 38 | 1e+141,1e+142,1e+143,1e+144,1e+145,1e+146,1e+147,1e+148,1e+149,1e+150,1e+151,1e+152,1e+153,1e+154,1e+155,1e+156,1e+157,1e+158,1e+159,1e+160, 39 | 1e+161,1e+162,1e+163,1e+164,1e+165,1e+166,1e+167,1e+168,1e+169,1e+170,1e+171,1e+172,1e+173,1e+174,1e+175,1e+176,1e+177,1e+178,1e+179,1e+180, 40 | 1e+181,1e+182,1e+183,1e+184,1e+185,1e+186,1e+187,1e+188,1e+189,1e+190,1e+191,1e+192,1e+193,1e+194,1e+195,1e+196,1e+197,1e+198,1e+199,1e+200, 41 | 1e+201,1e+202,1e+203,1e+204,1e+205,1e+206,1e+207,1e+208,1e+209,1e+210,1e+211,1e+212,1e+213,1e+214,1e+215,1e+216,1e+217,1e+218,1e+219,1e+220, 42 | 1e+221,1e+222,1e+223,1e+224,1e+225,1e+226,1e+227,1e+228,1e+229,1e+230,1e+231,1e+232,1e+233,1e+234,1e+235,1e+236,1e+237,1e+238,1e+239,1e+240, 43 | 1e+241,1e+242,1e+243,1e+244,1e+245,1e+246,1e+247,1e+248,1e+249,1e+250,1e+251,1e+252,1e+253,1e+254,1e+255,1e+256,1e+257,1e+258,1e+259,1e+260, 44 | 1e+261,1e+262,1e+263,1e+264,1e+265,1e+266,1e+267,1e+268,1e+269,1e+270,1e+271,1e+272,1e+273,1e+274,1e+275,1e+276,1e+277,1e+278,1e+279,1e+280, 45 | 1e+281,1e+282,1e+283,1e+284,1e+285,1e+286,1e+287,1e+288,1e+289,1e+290,1e+291,1e+292,1e+293,1e+294,1e+295,1e+296,1e+297,1e+298,1e+299,1e+300, 46 | 1e+301,1e+302,1e+303,1e+304,1e+305,1e+306,1e+307,1e+308 47 | }; 48 | RAPIDJSON_ASSERT(n >= 0 && n <= 308); 49 | return e[n]; 50 | } 51 | 52 | } // namespace internal 53 | RAPIDJSON_NAMESPACE_END 54 | 55 | #endif // RAPIDJSON_POW10_ 56 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/internal/strfunc.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_INTERNAL_STRFUNC_H_ 16 | #define RAPIDJSON_INTERNAL_STRFUNC_H_ 17 | 18 | #include "../stream.h" 19 | #include 20 | 21 | RAPIDJSON_NAMESPACE_BEGIN 22 | namespace internal { 23 | 24 | //! Custom strlen() which works on different character types. 25 | /*! \tparam Ch Character type (e.g. char, wchar_t, short) 26 | \param s Null-terminated input string. 27 | \return Number of characters in the string. 28 | \note This has the same semantics as strlen(), the return value is not number of Unicode codepoints. 29 | */ 30 | template 31 | inline SizeType StrLen(const Ch* s) { 32 | RAPIDJSON_ASSERT(s != 0); 33 | const Ch* p = s; 34 | while (*p) ++p; 35 | return SizeType(p - s); 36 | } 37 | 38 | template <> 39 | inline SizeType StrLen(const char* s) { 40 | return SizeType(std::strlen(s)); 41 | } 42 | 43 | template <> 44 | inline SizeType StrLen(const wchar_t* s) { 45 | return SizeType(std::wcslen(s)); 46 | } 47 | 48 | //! Returns number of code points in a encoded string. 49 | template 50 | bool CountStringCodePoint(const typename Encoding::Ch* s, SizeType length, SizeType* outCount) { 51 | RAPIDJSON_ASSERT(s != 0); 52 | RAPIDJSON_ASSERT(outCount != 0); 53 | GenericStringStream is(s); 54 | const typename Encoding::Ch* end = s + length; 55 | SizeType count = 0; 56 | while (is.src_ < end) { 57 | unsigned codepoint; 58 | if (!Encoding::Decode(is, &codepoint)) 59 | return false; 60 | count++; 61 | } 62 | *outCount = count; 63 | return true; 64 | } 65 | 66 | } // namespace internal 67 | RAPIDJSON_NAMESPACE_END 68 | 69 | #endif // RAPIDJSON_INTERNAL_STRFUNC_H_ 70 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/internal/swap.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_INTERNAL_SWAP_H_ 16 | #define RAPIDJSON_INTERNAL_SWAP_H_ 17 | 18 | #include "../rapidjson.h" 19 | 20 | #if defined(__clang__) 21 | RAPIDJSON_DIAG_PUSH 22 | RAPIDJSON_DIAG_OFF(c++98-compat) 23 | #endif 24 | 25 | RAPIDJSON_NAMESPACE_BEGIN 26 | namespace internal { 27 | 28 | //! Custom swap() to avoid dependency on C++ header 29 | /*! \tparam T Type of the arguments to swap, should be instantiated with primitive C++ types only. 30 | \note This has the same semantics as std::swap(). 31 | */ 32 | template 33 | inline void Swap(T& a, T& b) RAPIDJSON_NOEXCEPT { 34 | T tmp = a; 35 | a = b; 36 | b = tmp; 37 | } 38 | 39 | } // namespace internal 40 | RAPIDJSON_NAMESPACE_END 41 | 42 | #if defined(__clang__) 43 | RAPIDJSON_DIAG_POP 44 | #endif 45 | 46 | #endif // RAPIDJSON_INTERNAL_SWAP_H_ 47 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/istreamwrapper.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_ISTREAMWRAPPER_H_ 16 | #define RAPIDJSON_ISTREAMWRAPPER_H_ 17 | 18 | #include "stream.h" 19 | #include 20 | #include 21 | 22 | #ifdef __clang__ 23 | RAPIDJSON_DIAG_PUSH 24 | RAPIDJSON_DIAG_OFF(padded) 25 | #elif defined(_MSC_VER) 26 | RAPIDJSON_DIAG_PUSH 27 | RAPIDJSON_DIAG_OFF(4351) // new behavior: elements of array 'array' will be default initialized 28 | #endif 29 | 30 | RAPIDJSON_NAMESPACE_BEGIN 31 | 32 | //! Wrapper of \c std::basic_istream into RapidJSON's Stream concept. 33 | /*! 34 | The classes can be wrapped including but not limited to: 35 | 36 | - \c std::istringstream 37 | - \c std::stringstream 38 | - \c std::wistringstream 39 | - \c std::wstringstream 40 | - \c std::ifstream 41 | - \c std::fstream 42 | - \c std::wifstream 43 | - \c std::wfstream 44 | 45 | \tparam StreamType Class derived from \c std::basic_istream. 46 | */ 47 | 48 | template 49 | class BasicIStreamWrapper { 50 | public: 51 | typedef typename StreamType::char_type Ch; 52 | 53 | //! Constructor. 54 | /*! 55 | \param stream stream opened for read. 56 | */ 57 | BasicIStreamWrapper(StreamType &stream) : stream_(stream), buffer_(peekBuffer_), bufferSize_(4), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) { 58 | Read(); 59 | } 60 | 61 | //! Constructor. 62 | /*! 63 | \param stream stream opened for read. 64 | \param buffer user-supplied buffer. 65 | \param bufferSize size of buffer in bytes. Must >=4 bytes. 66 | */ 67 | BasicIStreamWrapper(StreamType &stream, char* buffer, size_t bufferSize) : stream_(stream), buffer_(buffer), bufferSize_(bufferSize), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) { 68 | RAPIDJSON_ASSERT(bufferSize >= 4); 69 | Read(); 70 | } 71 | 72 | Ch Peek() const { return *current_; } 73 | Ch Take() { Ch c = *current_; Read(); return c; } 74 | size_t Tell() const { return count_ + static_cast(current_ - buffer_); } 75 | 76 | // Not implemented 77 | void Put(Ch) { RAPIDJSON_ASSERT(false); } 78 | void Flush() { RAPIDJSON_ASSERT(false); } 79 | Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } 80 | size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } 81 | 82 | // For encoding detection only. 83 | const Ch* Peek4() const { 84 | return (current_ + 4 - !eof_ <= bufferLast_) ? current_ : 0; 85 | } 86 | 87 | private: 88 | BasicIStreamWrapper(); 89 | BasicIStreamWrapper(const BasicIStreamWrapper&); 90 | BasicIStreamWrapper& operator=(const BasicIStreamWrapper&); 91 | 92 | void Read() { 93 | if (current_ < bufferLast_) 94 | ++current_; 95 | else if (!eof_) { 96 | count_ += readCount_; 97 | readCount_ = bufferSize_; 98 | bufferLast_ = buffer_ + readCount_ - 1; 99 | current_ = buffer_; 100 | 101 | if (!stream_.read(buffer_, static_cast(bufferSize_))) { 102 | readCount_ = static_cast(stream_.gcount()); 103 | *(bufferLast_ = buffer_ + readCount_) = '\0'; 104 | eof_ = true; 105 | } 106 | } 107 | } 108 | 109 | StreamType &stream_; 110 | Ch peekBuffer_[4], *buffer_; 111 | size_t bufferSize_; 112 | Ch *bufferLast_; 113 | Ch *current_; 114 | size_t readCount_; 115 | size_t count_; //!< Number of characters read 116 | bool eof_; 117 | }; 118 | 119 | typedef BasicIStreamWrapper IStreamWrapper; 120 | typedef BasicIStreamWrapper WIStreamWrapper; 121 | 122 | #if defined(__clang__) || defined(_MSC_VER) 123 | RAPIDJSON_DIAG_POP 124 | #endif 125 | 126 | RAPIDJSON_NAMESPACE_END 127 | 128 | #endif // RAPIDJSON_ISTREAMWRAPPER_H_ 129 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/memorybuffer.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_MEMORYBUFFER_H_ 16 | #define RAPIDJSON_MEMORYBUFFER_H_ 17 | 18 | #include "stream.h" 19 | #include "internal/stack.h" 20 | 21 | RAPIDJSON_NAMESPACE_BEGIN 22 | 23 | //! Represents an in-memory output byte stream. 24 | /*! 25 | This class is mainly for being wrapped by EncodedOutputStream or AutoUTFOutputStream. 26 | 27 | It is similar to FileWriteBuffer but the destination is an in-memory buffer instead of a file. 28 | 29 | Differences between MemoryBuffer and StringBuffer: 30 | 1. StringBuffer has Encoding but MemoryBuffer is only a byte buffer. 31 | 2. StringBuffer::GetString() returns a null-terminated string. MemoryBuffer::GetBuffer() returns a buffer without terminator. 32 | 33 | \tparam Allocator type for allocating memory buffer. 34 | \note implements Stream concept 35 | */ 36 | template 37 | struct GenericMemoryBuffer { 38 | typedef char Ch; // byte 39 | 40 | GenericMemoryBuffer(Allocator* allocator = 0, size_t capacity = kDefaultCapacity) : stack_(allocator, capacity) {} 41 | 42 | void Put(Ch c) { *stack_.template Push() = c; } 43 | void Flush() {} 44 | 45 | void Clear() { stack_.Clear(); } 46 | void ShrinkToFit() { stack_.ShrinkToFit(); } 47 | Ch* Push(size_t count) { return stack_.template Push(count); } 48 | void Pop(size_t count) { stack_.template Pop(count); } 49 | 50 | const Ch* GetBuffer() const { 51 | return stack_.template Bottom(); 52 | } 53 | 54 | size_t GetSize() const { return stack_.GetSize(); } 55 | 56 | static const size_t kDefaultCapacity = 256; 57 | mutable internal::Stack stack_; 58 | }; 59 | 60 | typedef GenericMemoryBuffer<> MemoryBuffer; 61 | 62 | //! Implement specialized version of PutN() with memset() for better performance. 63 | template<> 64 | inline void PutN(MemoryBuffer& memoryBuffer, char c, size_t n) { 65 | std::memset(memoryBuffer.stack_.Push(n), c, n * sizeof(c)); 66 | } 67 | 68 | RAPIDJSON_NAMESPACE_END 69 | 70 | #endif // RAPIDJSON_MEMORYBUFFER_H_ 71 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/memorystream.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_MEMORYSTREAM_H_ 16 | #define RAPIDJSON_MEMORYSTREAM_H_ 17 | 18 | #include "stream.h" 19 | 20 | #ifdef __clang__ 21 | RAPIDJSON_DIAG_PUSH 22 | RAPIDJSON_DIAG_OFF(unreachable-code) 23 | RAPIDJSON_DIAG_OFF(missing-noreturn) 24 | #endif 25 | 26 | RAPIDJSON_NAMESPACE_BEGIN 27 | 28 | //! Represents an in-memory input byte stream. 29 | /*! 30 | This class is mainly for being wrapped by EncodedInputStream or AutoUTFInputStream. 31 | 32 | It is similar to FileReadBuffer but the source is an in-memory buffer instead of a file. 33 | 34 | Differences between MemoryStream and StringStream: 35 | 1. StringStream has encoding but MemoryStream is a byte stream. 36 | 2. MemoryStream needs size of the source buffer and the buffer don't need to be null terminated. StringStream assume null-terminated string as source. 37 | 3. MemoryStream supports Peek4() for encoding detection. StringStream is specified with an encoding so it should not have Peek4(). 38 | \note implements Stream concept 39 | */ 40 | struct MemoryStream { 41 | typedef char Ch; // byte 42 | 43 | MemoryStream(const Ch *src, size_t size) : src_(src), begin_(src), end_(src + size), size_(size) {} 44 | 45 | Ch Peek() const { return RAPIDJSON_UNLIKELY(src_ == end_) ? '\0' : *src_; } 46 | Ch Take() { return RAPIDJSON_UNLIKELY(src_ == end_) ? '\0' : *src_++; } 47 | size_t Tell() const { return static_cast(src_ - begin_); } 48 | 49 | Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } 50 | void Put(Ch) { RAPIDJSON_ASSERT(false); } 51 | void Flush() { RAPIDJSON_ASSERT(false); } 52 | size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } 53 | 54 | // For encoding detection only. 55 | const Ch* Peek4() const { 56 | return Tell() + 4 <= size_ ? src_ : 0; 57 | } 58 | 59 | const Ch* src_; //!< Current read position. 60 | const Ch* begin_; //!< Original head of the string. 61 | const Ch* end_; //!< End of stream. 62 | size_t size_; //!< Size of the stream. 63 | }; 64 | 65 | RAPIDJSON_NAMESPACE_END 66 | 67 | #ifdef __clang__ 68 | RAPIDJSON_DIAG_POP 69 | #endif 70 | 71 | #endif // RAPIDJSON_MEMORYBUFFER_H_ 72 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/ostreamwrapper.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_OSTREAMWRAPPER_H_ 16 | #define RAPIDJSON_OSTREAMWRAPPER_H_ 17 | 18 | #include "stream.h" 19 | #include 20 | 21 | #ifdef __clang__ 22 | RAPIDJSON_DIAG_PUSH 23 | RAPIDJSON_DIAG_OFF(padded) 24 | #endif 25 | 26 | RAPIDJSON_NAMESPACE_BEGIN 27 | 28 | //! Wrapper of \c std::basic_ostream into RapidJSON's Stream concept. 29 | /*! 30 | The classes can be wrapped including but not limited to: 31 | 32 | - \c std::ostringstream 33 | - \c std::stringstream 34 | - \c std::wpstringstream 35 | - \c std::wstringstream 36 | - \c std::ifstream 37 | - \c std::fstream 38 | - \c std::wofstream 39 | - \c std::wfstream 40 | 41 | \tparam StreamType Class derived from \c std::basic_ostream. 42 | */ 43 | 44 | template 45 | class BasicOStreamWrapper { 46 | public: 47 | typedef typename StreamType::char_type Ch; 48 | BasicOStreamWrapper(StreamType& stream) : stream_(stream) {} 49 | 50 | void Put(Ch c) { 51 | stream_.put(c); 52 | } 53 | 54 | void Flush() { 55 | stream_.flush(); 56 | } 57 | 58 | // Not implemented 59 | char Peek() const { RAPIDJSON_ASSERT(false); return 0; } 60 | char Take() { RAPIDJSON_ASSERT(false); return 0; } 61 | size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } 62 | char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } 63 | size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; } 64 | 65 | private: 66 | BasicOStreamWrapper(const BasicOStreamWrapper&); 67 | BasicOStreamWrapper& operator=(const BasicOStreamWrapper&); 68 | 69 | StreamType& stream_; 70 | }; 71 | 72 | typedef BasicOStreamWrapper OStreamWrapper; 73 | typedef BasicOStreamWrapper WOStreamWrapper; 74 | 75 | #ifdef __clang__ 76 | RAPIDJSON_DIAG_POP 77 | #endif 78 | 79 | RAPIDJSON_NAMESPACE_END 80 | 81 | #endif // RAPIDJSON_OSTREAMWRAPPER_H_ 82 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Core/rapidjson/stringbuffer.h: -------------------------------------------------------------------------------- 1 | // Tencent is pleased to support the open source community by making RapidJSON available. 2 | // 3 | // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. 4 | // 5 | // Licensed under the MIT License (the "License"); you may not use this file except 6 | // in compliance with the License. You may obtain a copy of the License at 7 | // 8 | // http://opensource.org/licenses/MIT 9 | // 10 | // Unless required by applicable law or agreed to in writing, software distributed 11 | // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 12 | // CONDITIONS OF ANY KIND, either express or implied. See the License for the 13 | // specific language governing permissions and limitations under the License. 14 | 15 | #ifndef RAPIDJSON_STRINGBUFFER_H_ 16 | #define RAPIDJSON_STRINGBUFFER_H_ 17 | 18 | #include "stream.h" 19 | #include "internal/stack.h" 20 | 21 | #if RAPIDJSON_HAS_CXX11_RVALUE_REFS 22 | #include // std::move 23 | #endif 24 | 25 | #include "internal/stack.h" 26 | 27 | #if defined(__clang__) 28 | RAPIDJSON_DIAG_PUSH 29 | RAPIDJSON_DIAG_OFF(c++98-compat) 30 | #endif 31 | 32 | RAPIDJSON_NAMESPACE_BEGIN 33 | 34 | //! Represents an in-memory output stream. 35 | /*! 36 | \tparam Encoding Encoding of the stream. 37 | \tparam Allocator type for allocating memory buffer. 38 | \note implements Stream concept 39 | */ 40 | template 41 | class GenericStringBuffer { 42 | public: 43 | typedef typename Encoding::Ch Ch; 44 | 45 | GenericStringBuffer(Allocator* allocator = 0, size_t capacity = kDefaultCapacity) : stack_(allocator, capacity) {} 46 | 47 | #if RAPIDJSON_HAS_CXX11_RVALUE_REFS 48 | GenericStringBuffer(GenericStringBuffer&& rhs) : stack_(std::move(rhs.stack_)) {} 49 | GenericStringBuffer& operator=(GenericStringBuffer&& rhs) { 50 | if (&rhs != this) 51 | stack_ = std::move(rhs.stack_); 52 | return *this; 53 | } 54 | #endif 55 | 56 | void Put(Ch c) { *stack_.template Push() = c; } 57 | void PutUnsafe(Ch c) { *stack_.template PushUnsafe() = c; } 58 | void Flush() {} 59 | 60 | void Clear() { stack_.Clear(); } 61 | void ShrinkToFit() { 62 | // Push and pop a null terminator. This is safe. 63 | *stack_.template Push() = '\0'; 64 | stack_.ShrinkToFit(); 65 | stack_.template Pop(1); 66 | } 67 | 68 | void Reserve(size_t count) { stack_.template Reserve(count); } 69 | Ch* Push(size_t count) { return stack_.template Push(count); } 70 | Ch* PushUnsafe(size_t count) { return stack_.template PushUnsafe(count); } 71 | void Pop(size_t count) { stack_.template Pop(count); } 72 | 73 | const Ch* GetString() const { 74 | // Push and pop a null terminator. This is safe. 75 | *stack_.template Push() = '\0'; 76 | stack_.template Pop(1); 77 | 78 | return stack_.template Bottom(); 79 | } 80 | 81 | //! Get the size of string in bytes in the string buffer. 82 | size_t GetSize() const { return stack_.GetSize(); } 83 | 84 | //! Get the length of string in Ch in the string buffer. 85 | size_t GetLength() const { return stack_.GetSize() / sizeof(Ch); } 86 | 87 | static const size_t kDefaultCapacity = 256; 88 | mutable internal::Stack stack_; 89 | 90 | private: 91 | // Prohibit copy constructor & assignment operator. 92 | GenericStringBuffer(const GenericStringBuffer&); 93 | GenericStringBuffer& operator=(const GenericStringBuffer&); 94 | }; 95 | 96 | //! String buffer with UTF8 encoding 97 | typedef GenericStringBuffer > StringBuffer; 98 | 99 | template 100 | inline void PutReserve(GenericStringBuffer& stream, size_t count) { 101 | stream.Reserve(count); 102 | } 103 | 104 | template 105 | inline void PutUnsafe(GenericStringBuffer& stream, typename Encoding::Ch c) { 106 | stream.PutUnsafe(c); 107 | } 108 | 109 | //! Implement specialized version of PutN() with memset() for better performance. 110 | template<> 111 | inline void PutN(GenericStringBuffer >& stream, char c, size_t n) { 112 | std::memset(stream.stack_.Push(n), c, n * sizeof(c)); 113 | } 114 | 115 | RAPIDJSON_NAMESPACE_END 116 | 117 | #if defined(__clang__) 118 | RAPIDJSON_DIAG_POP 119 | #endif 120 | 121 | #endif // RAPIDJSON_STRINGBUFFER_H_ 122 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/GUI/imgui_shared.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | enum ImGuiWindowFlags_Custom { 4 | // Render even if not focused 5 | ImGuiWindowFlags_RenderAlways = 1 << 19, 6 | 7 | // Show touch pad 8 | ImGuiWindowFlags_TouchPad = 1 << 20, 9 | 10 | // Force 30 FPS (Less GPU load) 11 | ImGuiWindowFlags_30FPS = 1 << 21, 12 | 13 | // Delay render (Less CPU load) 14 | ImGuiWindowFlags_SleepFPS = 1 << 22, 15 | 16 | // Force full mode 17 | ImGuiWindowFlags_RequireFull = 1 << 29, 18 | 19 | // Don't show in task bar 20 | ImGuiWindowFlags_NoTaskBar = 1 << 31, 21 | }; 22 | 23 | enum ImGuiKeyboardFlags_Custom { 24 | ImGuiKeyboardFlags_Text, 25 | ImGuiKeyboardFlags_Number, 26 | ImGuiKeyboardFlags_URL, 27 | ImGuiKeyboardFlags_Email, 28 | ImGuiKeyboardFlags_FilePath, 29 | ImGuiKeyboardFlags_FileName, 30 | ImGuiKeyboardFlags_Digits, 31 | }; 32 | 33 | struct inputFunctions 34 | { 35 | static int inputCallback(ImGuiInputTextCallbackData* data); 36 | }; 37 | 38 | enum class NetworkLevel 39 | { 40 | None = 0, 41 | LocalAccess = 1, 42 | ConstrainedInternetAccess = 2, 43 | InternetAccess = 3, 44 | BlockByImMobile = 4, 45 | NotConnected = 5, 46 | }; 47 | 48 | enum class SaverStatus 49 | { 50 | Disabled = 0, 51 | Off = 1, 52 | On = 2, 53 | }; 54 | 55 | enum class BluetoothState 56 | { 57 | Unknown = 0, 58 | On = 1, 59 | Off = 2, 60 | Disabled = 3, 61 | }; 62 | 63 | enum class SensorsDirection 64 | { 65 | Up = 0, 66 | Down = 1, 67 | Left = 2, 68 | Right = 3, 69 | }; 70 | 71 | enum class GamePadButtons 72 | { 73 | None = 0, 74 | Menu = 0x1, 75 | View = 0x2, 76 | A = 0x4, 77 | B = 0x8, 78 | X = 0x10, 79 | Y = 0x20, 80 | DPadUp = 0x40, 81 | DPadDown = 0x80, 82 | DPadLeft = 0x100, 83 | DPadRight = 0x200, 84 | LeftShoulder = 0x400, 85 | RightShoulder = 0x800, 86 | LeftThumbstick = 0x1000, 87 | RightThumbstick = 0x2000, 88 | Paddle1 = 0x4000, 89 | Paddle2 = 0x8000, 90 | Paddle3 = 0x10000, 91 | Paddle4 = 0x20000, 92 | }; 93 | 94 | 95 | enum class TouchPadButtons 96 | { 97 | Select = 0, 98 | L3 = 1, 99 | R3 = 2, 100 | Start = 3, 101 | Up = 4, 102 | Right = 5, 103 | Down = 6, 104 | Left = 7, 105 | L2 = 8, 106 | R2 = 9, 107 | L1 = 10, 108 | R1 = 11, 109 | One = 12, 110 | Two = 13, 111 | Three = 14, 112 | Four = 15, 113 | Analog = 16, // Menu if analog disabled 114 | Count // Menu button 115 | }; 116 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Headers/IExtension.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #include "pch.h" 10 | #include "ImmApiProvider.h" 11 | 12 | // Extension Interface 13 | class IExtension { 14 | public: 15 | /***************/ 16 | /* INFORMATION */ 17 | /***************/ 18 | std::string name; 19 | std::string publisher; 20 | std::string version; 21 | std::string build; 22 | 23 | /*************/ 24 | /* FUNCTIONS */ 25 | /*************/ 26 | virtual void Information() = 0; 27 | virtual void Initialize(ImmApiProvider* apiProvider) = 0; 28 | virtual void Config() = 0; 29 | virtual void Addons() = 0; 30 | virtual void Render() = 0; 31 | virtual void Register() = 0; 32 | virtual void Unloading() = 0; 33 | 34 | /**********/ 35 | /* EVENTS */ 36 | /**********/ 37 | virtual void Sensors(SensorsDirection direction, bool state) = 0; 38 | virtual void TouchPad(int port, int code, bool pressed) = 0; 39 | virtual void TouchPadAnalog(int port, float xAxis, float yAxis) = 0; 40 | virtual void GamePad(int port, int code, bool pressed) = 0; 41 | virtual void GamePadAnalog(int port, float xAxisL, float yAxisL, float xAxisR, float yAxisR) = 0; 42 | virtual void GamePadConnected(int port) = 0; 43 | virtual void GamePadRemoved(int port) = 0; 44 | virtual void Rotated(DXGI_MODE_ROTATION orientation) = 0; 45 | virtual void NetworkChanged(NetworkLevel level, bool wifi) = 0; 46 | virtual void EnergySaverChanged(SaverStatus status) = 0; 47 | virtual void BluetoothChanged(BluetoothState state) = 0; 48 | virtual void PointerPressed(int id, float x, float y, ImPointerType type) = 0; 49 | virtual void PointerMoved(int id, float x, float y, ImPointerType type) = 0; 50 | virtual void PointerReleased(int id, float x, float y, ImPointerType type) = 0; 51 | virtual void LaunchURI(std::string uri) = 0; 52 | 53 | virtual ~IExtension() {} 54 | 55 | #pragma region Reserved 56 | /***************************/ 57 | /* RESERVED (DON'T REMOVE) */ 58 | /***************************/ 59 | // Below will be assigned by ImMobile 60 | int index = 0; 61 | std::string id; 62 | std::string wd; 63 | std::string cf; 64 | bool enabled = true; 65 | bool deleted = false; 66 | bool console = false; 67 | bool visibility = false; 68 | bool sensors = false; 69 | bool touchpad = false; 70 | bool gamepad = false; 71 | bool compatible = true; 72 | bool startup = false; 73 | 74 | virtual void ToggleGUI() = 0; 75 | 76 | std::string GetConfigsSection() { 77 | return cf; 78 | } 79 | 80 | // [WINDOW] 81 | ImGuiWindowFlags flags; 82 | std::string GetWindowID() { 83 | return wd; 84 | } 85 | #pragma endregion 86 | 87 | #pragma region APIsTests 88 | /*****************************/ 89 | /* APIs TESTS (DON'T REMOVE) */ 90 | /*****************************/ 91 | API_TESTS ctest = NONE; 92 | virtual const char* GetTest() = 0; 93 | virtual void SetTest(const char* test) = 0; 94 | virtual void ImmTests(API_TESTS test) = 0; 95 | #pragma endregion 96 | 97 | }; 98 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Headers/pch.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | #ifndef WIN32_LEAN_AND_MEAN 14 | #define WIN32_LEAN_AND_MEAN 15 | #endif 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | 39 | #ifndef IMM_INTERNAL_INCLUDE 40 | // UWP Storage 41 | #include "StorageInfo.h" 42 | #include "StoragePath.h" 43 | 44 | // GUI 45 | #define IMGUI_ENABLE_INTERNAL 46 | #include "imgui.h" 47 | #include "implot.h" 48 | #include 49 | #include 50 | #include "imgui_shared.h" 51 | #include "IconsFontAwesome5.h" 52 | 53 | // Extras 54 | #include "ggml.h" 55 | #include "nlohmann_json.hpp" 56 | #endif 57 | 58 | #include 59 | #include 60 | #include 61 | #include 62 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Helpers/StorageExtensions.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // Copyright (c) 2023-2024 Bashar Astifan. 3 | // Email: bashar@astifan.online 4 | // Telegram: @basharastifan 5 | // GitHub: https://github.com/basharast/UWP2Win32 6 | 7 | #pragma once 8 | 9 | /**********************************************************************************/ 10 | /* BETTER TO USE: (Imm::Utils::String) INSTEAD, FUNCTIONS ALREADY PROJECTED THERE */ 11 | /**********************************************************************************/ 12 | 13 | #include 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | 23 | typedef struct { 24 | DWORD dwDesiredAccess; 25 | DWORD dwShareMode; 26 | DWORD dwCreationDisposition; 27 | int flags; 28 | bool isWrite; 29 | bool isAppend; 30 | bool isCreate; 31 | } FILE_OPEN_UWP_MODE; 32 | 33 | bool replace(std::string& str, const std::string& from, const std::string& to); 34 | bool replaceAll(std::string& str, const std::string& from, const std::string& to); 35 | std::string replace2(const std::string str, const std::string& from, const std::string& to); 36 | std::vector split(const std::string s, char seperator); 37 | // Parent full path, child full path 38 | bool isChild(std::string parent, std::string child); 39 | // Parent full path, child full path, child name only 40 | bool isParent(std::string parent, std::string child, std::string childName); 41 | 42 | bool iequals(const std::string a, const std::string b); 43 | bool equals(const std::string a, const std::string b); 44 | bool ends_with(std::string const& value, std::string const& ending); 45 | bool starts_with(std::string str, std::string prefix); 46 | 47 | std::wstring convertToWString(const std::string input); 48 | std::string convert(std::wstring input); 49 | std::string convert(const char* input); 50 | std::wstring convert(std::string input); 51 | LPCWSTR convertToLPCWSTR(std::string input); 52 | 53 | void tolower(std::string& input); 54 | void toupper(std::string& input); 55 | 56 | void windowsPath(std::string& path); 57 | 58 | std::string merge(std::string targetFullPath, std::string subFullPath); 59 | std::string combine(std::string targetFullPath, std::string subPath); 60 | 61 | std::string& rtrim(std::string& s, const char* t = " \t\n\r\f\v"); 62 | std::string& ltrim(std::string& s, const char* t = " \t\n\r\f\v"); 63 | std::string& trim(std::string& s, const char* t = " \t\n\r\f\v"); 64 | 65 | std::string& rtrim_substr(std::string& s, const std::string& substr); 66 | std::string& ltrim_substr(std::string& s, const std::string& substr); 67 | 68 | std::string fSize(int64_t size); 69 | bool validURL(const std::string& url); 70 | 71 | template 72 | bool findInList(std::list& inputList, T& str) { 73 | return (std::find(inputList.begin(), inputList.end(), str) != inputList.end()); 74 | }; 75 | 76 | bool findInListInsensitive(std::list& inputList, const std::string& str); 77 | 78 | template 79 | inline T RandomRange(T min, T max) { 80 | T scale = rand() / (T)RAND_MAX; 81 | return min + scale * (max - min); 82 | } 83 | 84 | FILE_OPEN_UWP_MODE* GetFileMode(const char* mode); 85 | 86 | // Parent and child full path 87 | std::string getSubRoot(std::string parent, std::string child); 88 | 89 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Helpers/StorageInfo.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // For updates check: https://github.com/basharast/UWP2Win32 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | struct ItemInfoUWP { 12 | std::string name; // File name with extension 13 | std::string fullName; // Full path 14 | std::string extension; // Extension such as '.mp3' 15 | std::string extensionPreview; // Upper case extension 16 | std::string sizePreview = "---"; // Formated size 17 | 18 | bool isDirectory = false; 19 | 20 | uint64_t size = 0; 21 | uint64_t lastAccessTime = 0; 22 | uint64_t lastWriteTime = 0; 23 | uint64_t changeTime = 0; 24 | uint64_t creationTime = 0; 25 | 26 | uint64_t attributes = 0; 27 | }; -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Helpers/StoragePath.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // Based on 'Path' from PPSSPP 3 | // For updates check: https://github.com/basharast/UWP2Win32 4 | 5 | #pragma once 6 | 7 | #include 8 | 9 | #define HOST_IS_CASE_SENSITIVE 0 10 | 11 | enum class PathTypeUWP { 12 | UNDEFINED = 0, 13 | NATIVE = 1, // Can be relative. 14 | CONTENT_URI = 2, // Android only. Can only be absolute! 15 | HTTP = 3, // http://, https:// 16 | }; 17 | 18 | // Windows paths are always stored with '/' slashes in a Path. 19 | // On .ToWString(), they are flipped back to '\'. 20 | 21 | class PathUWP { 22 | private: 23 | void Init(const std::string& str); 24 | 25 | public: 26 | std::string path_; 27 | std::string extCache; 28 | bool isDirectory; // Special usage, don't depend on it 29 | 30 | PathUWP() : type_(PathTypeUWP::UNDEFINED) {} 31 | explicit PathUWP(const std::string& str); 32 | 33 | explicit PathUWP(const std::wstring& str); 34 | 35 | PathTypeUWP Type() const { 36 | return type_; 37 | } 38 | 39 | bool Valid() const { return !path_.empty(); } 40 | bool IsRoot() const { return path_ == "\\"; } // Special value - only path that can end in a slash. 41 | 42 | // Some std::string emulation for simplicity. 43 | bool empty() const { return !Valid(); } 44 | void clear() { 45 | type_ = PathTypeUWP::UNDEFINED; 46 | path_.clear(); 47 | } 48 | size_t size() const { 49 | return path_.size(); 50 | } 51 | 52 | // WARNING: Potentially unsafe usage, if it's not NATIVE. 53 | const char* c_str() const { 54 | return path_.c_str(); 55 | } 56 | 57 | bool IsAbsolute() const; 58 | 59 | // Returns a path extended with a subdirectory. 60 | PathUWP operator /(const std::string& subdir) const; 61 | 62 | // Navigates down into a subdir. 63 | void operator /=(const std::string& subdir); 64 | 65 | // File extension manipulation. 66 | PathUWP WithExtraExtension(const std::string& ext) const; 67 | PathUWP WithReplacedExtension(const std::string& oldExtension, const std::string& newExtension) const; 68 | PathUWP WithReplacedExtension(const std::string& newExtension) const; 69 | 70 | // Removes the last component. 71 | std::string GetFilename() const; // Really, GetLastComponent. Could be a file or directory. Includes the extension. 72 | std::string GetFileExtension() const; // Always lowercase return. Includes the dot. 73 | std::string GetDirectory() const; 74 | 75 | const std::string& ToString() const; 76 | 77 | std::wstring ToWString() const; 78 | 79 | std::string ToVisualString() const; 80 | 81 | bool CanNavigateUp() const; 82 | PathUWP NavigateUp() const; 83 | 84 | // Navigates as far up as possible from this path. If not possible to navigate upwards, returns the same path. 85 | // Not actually always the root of the volume, especially on systems like Mac and Linux where things are often mounted. 86 | // For Android directory trees, navigates to the root of the tree. 87 | PathUWP GetRootVolume() const; 88 | 89 | bool ComputePathTo(const PathUWP& other, std::string& path) const; 90 | 91 | bool operator ==(const PathUWP& other) const { 92 | return path_ == other.path_ && type_ == other.type_; 93 | } 94 | bool operator !=(const PathUWP& other) const { 95 | return path_ != other.path_ || type_ != other.type_; 96 | } 97 | 98 | bool FilePathContainsNoCase(const std::string& needle) const; 99 | 100 | bool StartsWith(const PathUWP& other) const; 101 | 102 | bool operator <(const PathUWP& other) const { 103 | return path_ < other.path_; 104 | } 105 | bool operator >(const PathUWP& other) const { 106 | return path_ > other.path_; 107 | } 108 | 109 | private: 110 | PathTypeUWP type_; 111 | }; 112 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/ImmLottie.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #pragma once 10 | 11 | #include "pch.h" 12 | #include "IExtension.h" 13 | 14 | #include "imlottie.h" 15 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/ImmLottie.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.35319.79 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImmExtenTemplate", "ImmExtenTemplate.vcxproj", "{A8E9332B-BB86-470F-B72B-6A8B3359DF68}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Optimized|ARM = Optimized|ARM 11 | Optimized|ARM64 = Optimized|ARM64 12 | Optimized|x64 = Optimized|x64 13 | Optimized|x86 = Optimized|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM.ActiveCfg = Optimized|ARM 17 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM.Build.0 = Optimized|ARM 18 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM64.ActiveCfg = Optimized|ARM64 19 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM64.Build.0 = Optimized|ARM64 20 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x64.ActiveCfg = Optimized|x64 21 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x64.Build.0 = Optimized|x64 22 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x86.ActiveCfg = Optimized|Win32 23 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x86.Build.0 = Optimized|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {D2F727A7-4848-4825-8F59-98A1C134C775} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Libs/ARM/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/ImmLottie/Libs/ARM/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Libs/ARM64/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/ImmLottie/Libs/ARM64/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Libs/Win32/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/ImmLottie/Libs/Win32/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Libs/x64/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/ImmLottie/Libs/x64/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/Others/dllmain.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #include "pch.h" 10 | 11 | BOOL APIENTRY DllMain(HMODULE /* hModule */, DWORD ul_reason_for_call, LPVOID /* lpReserved */) 12 | { 13 | switch (ul_reason_for_call) 14 | { 15 | case DLL_PROCESS_ATTACH: 16 | case DLL_THREAD_ATTACH: 17 | case DLL_THREAD_DETACH: 18 | case DLL_PROCESS_DETACH: 19 | break; 20 | } 21 | return TRUE; 22 | } 23 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmLottie/README.md: -------------------------------------------------------------------------------- 1 | ## ImLottie Extension 2 | 3 | Extension based on [imlottie](https://github.com/dalerank/imlottie) by [dalerank](https://github.com/dalerank) 4 | 5 | 6 | ## Important 7 | 8 | Don't use this as base template, instead refer to the main template 9 | 10 | Refer to the [Wiki page](https://github.com/basharast/ImMobile/wiki/DevExtensions) for 🔌 Extensions development 11 | 12 | ## Remarks 13 | The only change I made is to use ImmApi provider to load the file instead of the fopen 14 | 15 | at `imottie_renderer.cpp`, [Line](https://github.com/basharast/ImMobile/blob/21861844f4d4d87e1a4b00d9a0ba07655f60b2e6/development/ExtensionsExamples/ImmLottie/Core/imottie_renderer.cpp#L5939) 16 | 17 | ```cpp 18 | #include "ImmApiProviderBridge.h" 19 | bool LottieLoader::load(const std::string &path, bool cachePolicy) 20 | { 21 | //... 22 | // Read contents 23 | bool state = false; 24 | std::string content= Imm::Storage::Stream::FileGetContents(state, path, "r"); 25 | if (!state) { 26 | return { }; 27 | } 28 | //... 29 | } 30 | ``` 31 | 32 | also at the main extension code I ensured that all cleaned up for correct unload 33 | 34 | at `ImmLottie.cpp`, [Line](https://github.com/basharast/ImMobile/blob/21861844f4d4d87e1a4b00d9a0ba07655f60b2e6/development/ExtensionsExamples/ImmLottie/ImmLottie.cpp#L356) 35 | 36 | ```cpp 37 | void Unloading() override { 38 | // ImMobile is unloading the extension 39 | // cleanup your stuff to avoid failing 40 | ImLottie::destroy(); 41 | } 42 | ``` 43 | 44 | ## Preview 45 | 46 |
47 | 48 | Demo Video (Click Here) 49 |
50 | 51 | https://github.com/user-attachments/assets/5cf287da-eef7-4137-8b21-23d9639d00c8 52 | 53 |
54 | 55 | 56 |
57 | 58 | On UI Preview (Click Here) 59 |
60 | 61 | 62 |
63 | 64 | ## Libraries 65 | 66 | - [FreeType](https://github.com/freetype) 67 | - [stb_image](https://github.com/nothings/stb) 68 | 69 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/GUI/imgui_shared.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | enum ImGuiWindowFlags_Custom { 4 | // Render even if not focused 5 | ImGuiWindowFlags_RenderAlways = 1 << 19, 6 | 7 | // Show touch pad 8 | ImGuiWindowFlags_TouchPad = 1 << 20, 9 | 10 | // Force 30 FPS (Less GPU load) 11 | ImGuiWindowFlags_30FPS = 1 << 21, 12 | 13 | // Delay render (Less CPU load) 14 | ImGuiWindowFlags_SleepFPS = 1 << 22, 15 | 16 | // Force full mode 17 | ImGuiWindowFlags_RequireFull = 1 << 29, 18 | 19 | // Don't show in task bar 20 | ImGuiWindowFlags_NoTaskBar = 1 << 31, 21 | }; 22 | 23 | enum ImGuiKeyboardFlags_Custom { 24 | ImGuiKeyboardFlags_Text, 25 | ImGuiKeyboardFlags_Number, 26 | ImGuiKeyboardFlags_URL, 27 | ImGuiKeyboardFlags_Email, 28 | ImGuiKeyboardFlags_FilePath, 29 | ImGuiKeyboardFlags_FileName, 30 | ImGuiKeyboardFlags_Digits, 31 | }; 32 | 33 | struct inputFunctions 34 | { 35 | static int inputCallback(ImGuiInputTextCallbackData* data); 36 | }; 37 | 38 | enum class NetworkLevel 39 | { 40 | None = 0, 41 | LocalAccess = 1, 42 | ConstrainedInternetAccess = 2, 43 | InternetAccess = 3, 44 | BlockByImMobile = 4, 45 | NotConnected = 5, 46 | }; 47 | 48 | enum class SaverStatus 49 | { 50 | Disabled = 0, 51 | Off = 1, 52 | On = 2, 53 | }; 54 | 55 | enum class BluetoothState 56 | { 57 | Unknown = 0, 58 | On = 1, 59 | Off = 2, 60 | Disabled = 3, 61 | }; 62 | 63 | enum class SensorsDirection 64 | { 65 | Up = 0, 66 | Down = 1, 67 | Left = 2, 68 | Right = 3, 69 | }; 70 | 71 | enum class GamePadButtons 72 | { 73 | None = 0, 74 | Menu = 0x1, 75 | View = 0x2, 76 | A = 0x4, 77 | B = 0x8, 78 | X = 0x10, 79 | Y = 0x20, 80 | DPadUp = 0x40, 81 | DPadDown = 0x80, 82 | DPadLeft = 0x100, 83 | DPadRight = 0x200, 84 | LeftShoulder = 0x400, 85 | RightShoulder = 0x800, 86 | LeftThumbstick = 0x1000, 87 | RightThumbstick = 0x2000, 88 | Paddle1 = 0x4000, 89 | Paddle2 = 0x8000, 90 | Paddle3 = 0x10000, 91 | Paddle4 = 0x20000, 92 | }; 93 | 94 | 95 | enum class TouchPadButtons 96 | { 97 | Select = 0, 98 | L3 = 1, 99 | R3 = 2, 100 | Start = 3, 101 | Up = 4, 102 | Right = 5, 103 | Down = 6, 104 | Left = 7, 105 | L2 = 8, 106 | R2 = 9, 107 | L1 = 10, 108 | R1 = 11, 109 | One = 12, 110 | Two = 13, 111 | Three = 14, 112 | Four = 15, 113 | Analog = 16, // Menu if analog disabled 114 | Count // Menu button 115 | }; 116 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Headers/IExtension.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #include "pch.h" 10 | #include "ImmApiProvider.h" 11 | 12 | // Extension Interface 13 | class IExtension { 14 | public: 15 | /***************/ 16 | /* INFORMATION */ 17 | /***************/ 18 | std::string name; 19 | std::string publisher; 20 | std::string version; 21 | std::string build; 22 | 23 | /*************/ 24 | /* FUNCTIONS */ 25 | /*************/ 26 | virtual void Information() = 0; 27 | virtual void Initialize(ImmApiProvider* apiProvider) = 0; 28 | virtual void Config() = 0; 29 | virtual void Addons() = 0; 30 | virtual void Render() = 0; 31 | virtual void Register() = 0; 32 | virtual void Unloading() = 0; 33 | 34 | /**********/ 35 | /* EVENTS */ 36 | /**********/ 37 | virtual void Sensors(SensorsDirection direction, bool state) = 0; 38 | virtual void TouchPad(int port, int code, bool pressed) = 0; 39 | virtual void TouchPadAnalog(int port, float xAxis, float yAxis) = 0; 40 | virtual void GamePad(int port, int code, bool pressed) = 0; 41 | virtual void GamePadAnalog(int port, float xAxisL, float yAxisL, float xAxisR, float yAxisR) = 0; 42 | virtual void GamePadConnected(int port) = 0; 43 | virtual void GamePadRemoved(int port) = 0; 44 | virtual void Rotated(DXGI_MODE_ROTATION orientation) = 0; 45 | virtual void NetworkChanged(NetworkLevel level, bool wifi) = 0; 46 | virtual void EnergySaverChanged(SaverStatus status) = 0; 47 | virtual void BluetoothChanged(BluetoothState state) = 0; 48 | virtual void PointerPressed(int id, float x, float y, ImPointerType type) = 0; 49 | virtual void PointerMoved(int id, float x, float y, ImPointerType type) = 0; 50 | virtual void PointerReleased(int id, float x, float y, ImPointerType type) = 0; 51 | virtual void LaunchURI(std::string uri) = 0; 52 | 53 | virtual ~IExtension() {} 54 | 55 | #pragma region Reserved 56 | /***************************/ 57 | /* RESERVED (DON'T REMOVE) */ 58 | /***************************/ 59 | // Below will be assigned by ImMobile 60 | int index = 0; 61 | std::string id; 62 | std::string wd; 63 | std::string cf; 64 | bool enabled = true; 65 | bool deleted = false; 66 | bool console = false; 67 | bool visibility = false; 68 | bool sensors = false; 69 | bool touchpad = false; 70 | bool gamepad = false; 71 | bool compatible = true; 72 | bool startup = false; 73 | 74 | virtual void ToggleGUI() = 0; 75 | 76 | std::string GetConfigsSection() { 77 | return cf; 78 | } 79 | 80 | // [WINDOW] 81 | ImGuiWindowFlags flags; 82 | std::string GetWindowID() { 83 | return wd; 84 | } 85 | #pragma endregion 86 | 87 | #pragma region APIsTests 88 | /*****************************/ 89 | /* APIs TESTS (DON'T REMOVE) */ 90 | /*****************************/ 91 | API_TESTS ctest = NONE; 92 | virtual const char* GetTest() = 0; 93 | virtual void SetTest(const char* test) = 0; 94 | virtual void ImmTests(API_TESTS test) = 0; 95 | #pragma endregion 96 | 97 | }; 98 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Headers/pch.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | #ifndef WIN32_LEAN_AND_MEAN 14 | #define WIN32_LEAN_AND_MEAN 15 | #endif 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | 39 | #ifndef IMM_INTERNAL_INCLUDE 40 | // UWP Storage 41 | #include "StorageInfo.h" 42 | #include "StoragePath.h" 43 | 44 | // GUI 45 | #define IMGUI_ENABLE_INTERNAL 46 | #include "imgui.h" 47 | #include "implot.h" 48 | #include 49 | #include 50 | #include "imgui_shared.h" 51 | #include "IconsFontAwesome5.h" 52 | 53 | // Extras 54 | #include "ggml.h" 55 | #include "nlohmann_json.hpp" 56 | #endif 57 | 58 | #include 59 | #include 60 | #include 61 | #include 62 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Helpers/StorageExtensions.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // Copyright (c) 2023-2024 Bashar Astifan. 3 | // Email: bashar@astifan.online 4 | // Telegram: @basharastifan 5 | // GitHub: https://github.com/basharast/UWP2Win32 6 | 7 | #pragma once 8 | 9 | /**********************************************************************************/ 10 | /* BETTER TO USE: (Imm::Utils::String) INSTEAD, FUNCTIONS ALREADY PROJECTED THERE */ 11 | /**********************************************************************************/ 12 | 13 | #include 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | 23 | typedef struct { 24 | DWORD dwDesiredAccess; 25 | DWORD dwShareMode; 26 | DWORD dwCreationDisposition; 27 | int flags; 28 | bool isWrite; 29 | bool isAppend; 30 | bool isCreate; 31 | } FILE_OPEN_UWP_MODE; 32 | 33 | bool replace(std::string& str, const std::string& from, const std::string& to); 34 | bool replaceAll(std::string& str, const std::string& from, const std::string& to); 35 | std::string replace2(const std::string str, const std::string& from, const std::string& to); 36 | std::vector split(const std::string s, char seperator); 37 | // Parent full path, child full path 38 | bool isChild(std::string parent, std::string child); 39 | // Parent full path, child full path, child name only 40 | bool isParent(std::string parent, std::string child, std::string childName); 41 | 42 | bool iequals(const std::string a, const std::string b); 43 | bool equals(const std::string a, const std::string b); 44 | bool ends_with(std::string const& value, std::string const& ending); 45 | bool starts_with(std::string str, std::string prefix); 46 | 47 | std::wstring convertToWString(const std::string input); 48 | std::string convert(std::wstring input); 49 | std::string convert(const char* input); 50 | std::wstring convert(std::string input); 51 | LPCWSTR convertToLPCWSTR(std::string input); 52 | 53 | void tolower(std::string& input); 54 | void toupper(std::string& input); 55 | 56 | void windowsPath(std::string& path); 57 | 58 | std::string merge(std::string targetFullPath, std::string subFullPath); 59 | std::string combine(std::string targetFullPath, std::string subPath); 60 | 61 | std::string& rtrim(std::string& s, const char* t = " \t\n\r\f\v"); 62 | std::string& ltrim(std::string& s, const char* t = " \t\n\r\f\v"); 63 | std::string& trim(std::string& s, const char* t = " \t\n\r\f\v"); 64 | 65 | std::string& rtrim_substr(std::string& s, const std::string& substr); 66 | std::string& ltrim_substr(std::string& s, const std::string& substr); 67 | 68 | std::string fSize(int64_t size); 69 | bool validURL(const std::string& url); 70 | 71 | template 72 | bool findInList(std::list& inputList, T& str) { 73 | return (std::find(inputList.begin(), inputList.end(), str) != inputList.end()); 74 | }; 75 | 76 | bool findInListInsensitive(std::list& inputList, const std::string& str); 77 | 78 | template 79 | inline T RandomRange(T min, T max) { 80 | T scale = rand() / (T)RAND_MAX; 81 | return min + scale * (max - min); 82 | } 83 | 84 | FILE_OPEN_UWP_MODE* GetFileMode(const char* mode); 85 | 86 | // Parent and child full path 87 | std::string getSubRoot(std::string parent, std::string child); 88 | 89 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Helpers/StorageInfo.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // For updates check: https://github.com/basharast/UWP2Win32 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | struct ItemInfoUWP { 12 | std::string name; // File name with extension 13 | std::string fullName; // Full path 14 | std::string extension; // Extension such as '.mp3' 15 | std::string extensionPreview; // Upper case extension 16 | std::string sizePreview = "---"; // Formated size 17 | 18 | bool isDirectory = false; 19 | 20 | uint64_t size = 0; 21 | uint64_t lastAccessTime = 0; 22 | uint64_t lastWriteTime = 0; 23 | uint64_t changeTime = 0; 24 | uint64_t creationTime = 0; 25 | 26 | uint64_t attributes = 0; 27 | }; -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Helpers/StoragePath.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // Based on 'Path' from PPSSPP 3 | // For updates check: https://github.com/basharast/UWP2Win32 4 | 5 | #pragma once 6 | 7 | #include 8 | 9 | #define HOST_IS_CASE_SENSITIVE 0 10 | 11 | enum class PathTypeUWP { 12 | UNDEFINED = 0, 13 | NATIVE = 1, // Can be relative. 14 | CONTENT_URI = 2, // Android only. Can only be absolute! 15 | HTTP = 3, // http://, https:// 16 | }; 17 | 18 | // Windows paths are always stored with '/' slashes in a Path. 19 | // On .ToWString(), they are flipped back to '\'. 20 | 21 | class PathUWP { 22 | private: 23 | void Init(const std::string& str); 24 | 25 | public: 26 | std::string path_; 27 | std::string extCache; 28 | bool isDirectory; // Special usage, don't depend on it 29 | 30 | PathUWP() : type_(PathTypeUWP::UNDEFINED) {} 31 | explicit PathUWP(const std::string& str); 32 | 33 | explicit PathUWP(const std::wstring& str); 34 | 35 | PathTypeUWP Type() const { 36 | return type_; 37 | } 38 | 39 | bool Valid() const { return !path_.empty(); } 40 | bool IsRoot() const { return path_ == "\\"; } // Special value - only path that can end in a slash. 41 | 42 | // Some std::string emulation for simplicity. 43 | bool empty() const { return !Valid(); } 44 | void clear() { 45 | type_ = PathTypeUWP::UNDEFINED; 46 | path_.clear(); 47 | } 48 | size_t size() const { 49 | return path_.size(); 50 | } 51 | 52 | // WARNING: Potentially unsafe usage, if it's not NATIVE. 53 | const char* c_str() const { 54 | return path_.c_str(); 55 | } 56 | 57 | bool IsAbsolute() const; 58 | 59 | // Returns a path extended with a subdirectory. 60 | PathUWP operator /(const std::string& subdir) const; 61 | 62 | // Navigates down into a subdir. 63 | void operator /=(const std::string& subdir); 64 | 65 | // File extension manipulation. 66 | PathUWP WithExtraExtension(const std::string& ext) const; 67 | PathUWP WithReplacedExtension(const std::string& oldExtension, const std::string& newExtension) const; 68 | PathUWP WithReplacedExtension(const std::string& newExtension) const; 69 | 70 | // Removes the last component. 71 | std::string GetFilename() const; // Really, GetLastComponent. Could be a file or directory. Includes the extension. 72 | std::string GetFileExtension() const; // Always lowercase return. Includes the dot. 73 | std::string GetDirectory() const; 74 | 75 | const std::string& ToString() const; 76 | 77 | std::wstring ToWString() const; 78 | 79 | std::string ToVisualString() const; 80 | 81 | bool CanNavigateUp() const; 82 | PathUWP NavigateUp() const; 83 | 84 | // Navigates as far up as possible from this path. If not possible to navigate upwards, returns the same path. 85 | // Not actually always the root of the volume, especially on systems like Mac and Linux where things are often mounted. 86 | // For Android directory trees, navigates to the root of the tree. 87 | PathUWP GetRootVolume() const; 88 | 89 | bool ComputePathTo(const PathUWP& other, std::string& path) const; 90 | 91 | bool operator ==(const PathUWP& other) const { 92 | return path_ == other.path_ && type_ == other.type_; 93 | } 94 | bool operator !=(const PathUWP& other) const { 95 | return path_ != other.path_ || type_ != other.type_; 96 | } 97 | 98 | bool FilePathContainsNoCase(const std::string& needle) const; 99 | 100 | bool StartsWith(const PathUWP& other) const; 101 | 102 | bool operator <(const PathUWP& other) const { 103 | return path_ < other.path_; 104 | } 105 | bool operator >(const PathUWP& other) const { 106 | return path_ > other.path_; 107 | } 108 | 109 | private: 110 | PathTypeUWP type_; 111 | }; 112 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/ImmExtenTemplate.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 6 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms 7 | 8 | 9 | {7d631577-2f98-4dad-a58a-81ca447fea5f} 10 | 11 | 12 | {5b8d2ab3-c2c4-4e8d-acc2-1e7f1f368654} 13 | 14 | 15 | {15495947-241d-48af-beda-d674b6821970} 16 | 17 | 18 | {2c360152-d06e-41aa-a719-ab99bd9c3433} 19 | 20 | 21 | {0849ad18-189f-4f83-948e-7dc7fa4a2737} 22 | 23 | 24 | 25 | 26 | Others 27 | 28 | 29 | Helpers 30 | 31 | 32 | Helpers 33 | 34 | 35 | 36 | 37 | 38 | GUI 39 | 40 | 41 | GUI 42 | 43 | 44 | GUI 45 | 46 | 47 | GUI 48 | 49 | 50 | GUI 51 | 52 | 53 | GUI 54 | 55 | 56 | Headers 57 | 58 | 59 | Headers 60 | 61 | 62 | Headers 63 | 64 | 65 | GUI 66 | 67 | 68 | Extras 69 | 70 | 71 | Helpers 72 | 73 | 74 | Helpers 75 | 76 | 77 | Helpers 78 | 79 | 80 | Extras 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/ImmWUT.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #pragma once 10 | 11 | #include "pch.h" 12 | #include "IExtension.h" 13 | 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/ImmWUT.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.35319.79 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImmExtenTemplate", "ImmExtenTemplate.vcxproj", "{A8E9332B-BB86-470F-B72B-6A8B3359DF68}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Optimized|ARM = Optimized|ARM 11 | Optimized|ARM64 = Optimized|ARM64 12 | Optimized|x64 = Optimized|x64 13 | Optimized|x86 = Optimized|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM.ActiveCfg = Optimized|ARM 17 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM.Build.0 = Optimized|ARM 18 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM64.ActiveCfg = Optimized|ARM64 19 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM64.Build.0 = Optimized|ARM64 20 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x64.ActiveCfg = Optimized|x64 21 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x64.Build.0 = Optimized|x64 22 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x86.ActiveCfg = Optimized|Win32 23 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x86.Build.0 = Optimized|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {D2F727A7-4848-4825-8F59-98A1C134C775} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Libs/ARM/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/ImmWUT/Libs/ARM/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Libs/ARM64/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/ImmWUT/Libs/ARM64/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Libs/Win32/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/ImmWUT/Libs/Win32/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Libs/x64/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsExamples/ImmWUT/Libs/x64/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/Others/dllmain.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #include "pch.h" 10 | 11 | BOOL APIENTRY DllMain(HMODULE /* hModule */, DWORD ul_reason_for_call, LPVOID /* lpReserved */) 12 | { 13 | switch (ul_reason_for_call) 14 | { 15 | case DLL_PROCESS_ATTACH: 16 | case DLL_THREAD_ATTACH: 17 | case DLL_THREAD_DETACH: 18 | case DLL_PROCESS_DETACH: 19 | break; 20 | } 21 | return TRUE; 22 | } 23 | -------------------------------------------------------------------------------- /development/ExtensionsExamples/ImmWUT/README.md: -------------------------------------------------------------------------------- 1 | ## Extensions Example 2 | 3 | Extension for easy WUT download and installation -------------------------------------------------------------------------------- /development/ExtensionsExamples/README.md: -------------------------------------------------------------------------------- 1 | ## Extensions Examples 2 | 3 | Here you will find open source examples for ImMobile extensions 4 | 5 | 6 | ## Note 7 | 8 | Don't use those as base template, instead refer to the main template 9 | 10 | I removed many APIs to reduce the size from those examples 11 | 12 | Refer to the [Wiki page](https://github.com/basharast/ImMobile/wiki/DevExtensions) for 🔌 Extensions development 13 | 14 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/GUI/imgui_shared.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | enum ImGuiWindowFlags_Custom { 4 | // Render even if not focused 5 | ImGuiWindowFlags_RenderAlways = 1 << 19, 6 | 7 | // Show touch pad 8 | ImGuiWindowFlags_TouchPad = 1 << 20, 9 | 10 | // Force 30 FPS (Less GPU load) 11 | ImGuiWindowFlags_30FPS = 1 << 21, 12 | 13 | // Delay render (Less CPU load) 14 | ImGuiWindowFlags_SleepFPS = 1 << 22, 15 | 16 | // Force full mode 17 | ImGuiWindowFlags_RequireFull = 1 << 29, 18 | 19 | // Don't show in task bar 20 | ImGuiWindowFlags_NoTaskBar = 1 << 31, 21 | }; 22 | 23 | enum ImGuiKeyboardFlags_Custom { 24 | ImGuiKeyboardFlags_Text, 25 | ImGuiKeyboardFlags_Number, 26 | ImGuiKeyboardFlags_URL, 27 | ImGuiKeyboardFlags_Email, 28 | ImGuiKeyboardFlags_FilePath, 29 | ImGuiKeyboardFlags_FileName, 30 | ImGuiKeyboardFlags_Digits, 31 | }; 32 | 33 | struct inputFunctions 34 | { 35 | static int inputCallback(ImGuiInputTextCallbackData* data); 36 | }; 37 | 38 | enum class NetworkLevel 39 | { 40 | None = 0, 41 | LocalAccess = 1, 42 | ConstrainedInternetAccess = 2, 43 | InternetAccess = 3, 44 | BlockByImMobile = 4, 45 | NotConnected = 5, 46 | }; 47 | 48 | enum class SaverStatus 49 | { 50 | Disabled = 0, 51 | Off = 1, 52 | On = 2, 53 | }; 54 | 55 | enum class BluetoothState 56 | { 57 | Unknown = 0, 58 | On = 1, 59 | Off = 2, 60 | Disabled = 3, 61 | }; 62 | 63 | enum class SensorsDirection 64 | { 65 | Up = 0, 66 | Down = 1, 67 | Left = 2, 68 | Right = 3, 69 | }; 70 | 71 | enum class GamePadButtons 72 | { 73 | None = 0, 74 | Menu = 0x1, 75 | View = 0x2, 76 | A = 0x4, 77 | B = 0x8, 78 | X = 0x10, 79 | Y = 0x20, 80 | DPadUp = 0x40, 81 | DPadDown = 0x80, 82 | DPadLeft = 0x100, 83 | DPadRight = 0x200, 84 | LeftShoulder = 0x400, 85 | RightShoulder = 0x800, 86 | LeftThumbstick = 0x1000, 87 | RightThumbstick = 0x2000, 88 | Paddle1 = 0x4000, 89 | Paddle2 = 0x8000, 90 | Paddle3 = 0x10000, 91 | Paddle4 = 0x20000, 92 | }; 93 | 94 | 95 | enum class TouchPadButtons 96 | { 97 | Select = 0, 98 | L3 = 1, 99 | R3 = 2, 100 | Start = 3, 101 | Up = 4, 102 | Right = 5, 103 | Down = 6, 104 | Left = 7, 105 | L2 = 8, 106 | R2 = 9, 107 | L1 = 10, 108 | R1 = 11, 109 | One = 12, 110 | Two = 13, 111 | Three = 14, 112 | Four = 15, 113 | Analog = 16, // Menu if analog disabled 114 | Count // Menu button 115 | }; 116 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Headers/IExtension.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #include "pch.h" 10 | #include "ImmApiProvider.h" 11 | 12 | // Extension Interface 13 | class IExtension { 14 | public: 15 | /***************/ 16 | /* INFORMATION */ 17 | /***************/ 18 | std::string name; 19 | std::string publisher; 20 | std::string version; 21 | std::string build; 22 | 23 | /*************/ 24 | /* FUNCTIONS */ 25 | /*************/ 26 | virtual void Information() = 0; 27 | virtual void Initialize(ImmApiProvider* apiProvider) = 0; 28 | virtual void Config() = 0; 29 | virtual void Addons() = 0; 30 | virtual void Render() = 0; 31 | virtual void Register() = 0; 32 | virtual void Unloading() = 0; 33 | 34 | /**********/ 35 | /* EVENTS */ 36 | /**********/ 37 | virtual void Sensors(SensorsDirection direction, bool state) = 0; 38 | virtual void TouchPad(int port, int code, bool pressed) = 0; 39 | virtual void TouchPadAnalog(int port, float xAxis, float yAxis) = 0; 40 | virtual void GamePad(int port, int code, bool pressed) = 0; 41 | virtual void GamePadAnalog(int port, float xAxisL, float yAxisL, float xAxisR, float yAxisR) = 0; 42 | virtual void GamePadConnected(int port) = 0; 43 | virtual void GamePadRemoved(int port) = 0; 44 | virtual void Rotated(DXGI_MODE_ROTATION orientation) = 0; 45 | virtual void NetworkChanged(NetworkLevel level, bool wifi) = 0; 46 | virtual void EnergySaverChanged(SaverStatus status) = 0; 47 | virtual void BluetoothChanged(BluetoothState state) = 0; 48 | virtual void PointerPressed(int id, float x, float y, ImPointerType type) = 0; 49 | virtual void PointerMoved(int id, float x, float y, ImPointerType type) = 0; 50 | virtual void PointerReleased(int id, float x, float y, ImPointerType type) = 0; 51 | virtual void LaunchURI(std::string uri) = 0; 52 | 53 | virtual ~IExtension() {} 54 | 55 | #pragma region Reserved 56 | /***************************/ 57 | /* RESERVED (DON'T REMOVE) */ 58 | /***************************/ 59 | // Below will be assigned by ImMobile 60 | int index = 0; 61 | std::string id; 62 | std::string wd; 63 | std::string cf; 64 | bool enabled = true; 65 | bool deleted = false; 66 | bool console = false; 67 | bool visibility = false; 68 | bool sensors = false; 69 | bool touchpad = false; 70 | bool gamepad = false; 71 | bool compatible = true; 72 | bool startup = false; 73 | 74 | virtual void ToggleGUI() = 0; 75 | 76 | std::string GetConfigsSection() { 77 | return cf; 78 | } 79 | 80 | // [WINDOW] 81 | ImGuiWindowFlags flags; 82 | std::string GetWindowID() { 83 | return wd; 84 | } 85 | #pragma endregion 86 | 87 | #pragma region APIsTests 88 | /*****************************/ 89 | /* APIs TESTS (DON'T REMOVE) */ 90 | /*****************************/ 91 | API_TESTS ctest = NONE; 92 | virtual const char* GetTest() = 0; 93 | virtual void SetTest(const char* test) = 0; 94 | virtual void ImmTests(API_TESTS test) = 0; 95 | #pragma endregion 96 | 97 | }; 98 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Headers/pch.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | #ifndef WIN32_LEAN_AND_MEAN 14 | #define WIN32_LEAN_AND_MEAN 15 | #endif 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | 39 | #ifndef IMM_INTERNAL_INCLUDE 40 | // UWP Storage 41 | #include "StorageInfo.h" 42 | #include "StoragePath.h" 43 | 44 | // GUI 45 | #define IMGUI_ENABLE_INTERNAL 46 | #include "imgui.h" 47 | #include "implot.h" 48 | #include 49 | #include 50 | #include "imgui_shared.h" 51 | #include "IconsFontAwesome5.h" 52 | 53 | // Extras 54 | #include "ggml.h" 55 | #include "nlohmann_json.hpp" 56 | #endif 57 | 58 | #include 59 | #include 60 | #include 61 | #include 62 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Helpers/StorageExtensions.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // Copyright (c) 2023-2024 Bashar Astifan. 3 | // Email: bashar@astifan.online 4 | // Telegram: @basharastifan 5 | // GitHub: https://github.com/basharast/UWP2Win32 6 | 7 | #pragma once 8 | 9 | /**********************************************************************************/ 10 | /* BETTER TO USE: (Imm::Utils::String) INSTEAD, FUNCTIONS ALREADY PROJECTED THERE */ 11 | /**********************************************************************************/ 12 | 13 | #include 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | 23 | typedef struct { 24 | DWORD dwDesiredAccess; 25 | DWORD dwShareMode; 26 | DWORD dwCreationDisposition; 27 | int flags; 28 | bool isWrite; 29 | bool isAppend; 30 | bool isCreate; 31 | } FILE_OPEN_UWP_MODE; 32 | 33 | bool replace(std::string& str, const std::string& from, const std::string& to); 34 | bool replaceAll(std::string& str, const std::string& from, const std::string& to); 35 | std::string replace2(const std::string str, const std::string& from, const std::string& to); 36 | std::vector split(const std::string s, char seperator); 37 | // Parent full path, child full path 38 | bool isChild(std::string parent, std::string child); 39 | // Parent full path, child full path, child name only 40 | bool isParent(std::string parent, std::string child, std::string childName); 41 | 42 | bool iequals(const std::string a, const std::string b); 43 | bool equals(const std::string a, const std::string b); 44 | bool ends_with(std::string const& value, std::string const& ending); 45 | bool starts_with(std::string str, std::string prefix); 46 | 47 | std::wstring convertToWString(const std::string input); 48 | std::string convert(std::wstring input); 49 | std::string convert(const char* input); 50 | std::wstring convert(std::string input); 51 | LPCWSTR convertToLPCWSTR(std::string input); 52 | 53 | void tolower(std::string& input); 54 | void toupper(std::string& input); 55 | 56 | void windowsPath(std::string& path); 57 | 58 | std::string merge(std::string targetFullPath, std::string subFullPath); 59 | std::string combine(std::string targetFullPath, std::string subPath); 60 | 61 | std::string& rtrim(std::string& s, const char* t = " \t\n\r\f\v"); 62 | std::string& ltrim(std::string& s, const char* t = " \t\n\r\f\v"); 63 | std::string& trim(std::string& s, const char* t = " \t\n\r\f\v"); 64 | 65 | std::string& rtrim_substr(std::string& s, const std::string& substr); 66 | std::string& ltrim_substr(std::string& s, const std::string& substr); 67 | 68 | std::string fSize(int64_t size); 69 | bool validURL(const std::string& url); 70 | 71 | template 72 | bool findInList(std::list& inputList, T& str) { 73 | return (std::find(inputList.begin(), inputList.end(), str) != inputList.end()); 74 | }; 75 | 76 | bool findInListInsensitive(std::list& inputList, const std::string& str); 77 | 78 | template 79 | inline T RandomRange(T min, T max) { 80 | T scale = rand() / (T)RAND_MAX; 81 | return min + scale * (max - min); 82 | } 83 | 84 | FILE_OPEN_UWP_MODE* GetFileMode(const char* mode); 85 | 86 | // Parent and child full path 87 | std::string getSubRoot(std::string parent, std::string child); 88 | 89 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Helpers/StorageInfo.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // For updates check: https://github.com/basharast/UWP2Win32 3 | 4 | #pragma once 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | struct ItemInfoUWP { 12 | std::string name; // File name with extension 13 | std::string fullName; // Full path 14 | std::string extension; // Extension such as '.mp3' 15 | std::string extensionPreview; // Upper case extension 16 | std::string sizePreview = "---"; // Formated size 17 | 18 | bool isDirectory = false; 19 | 20 | uint64_t size = 0; 21 | uint64_t lastAccessTime = 0; 22 | uint64_t lastWriteTime = 0; 23 | uint64_t changeTime = 0; 24 | uint64_t creationTime = 0; 25 | 26 | uint64_t attributes = 0; 27 | }; -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Helpers/StoragePath.h: -------------------------------------------------------------------------------- 1 | // UWP STORAGE MANAGER 2 | // Based on 'Path' from PPSSPP 3 | // For updates check: https://github.com/basharast/UWP2Win32 4 | 5 | #pragma once 6 | 7 | #include 8 | 9 | #define HOST_IS_CASE_SENSITIVE 0 10 | 11 | enum class PathTypeUWP { 12 | UNDEFINED = 0, 13 | NATIVE = 1, // Can be relative. 14 | CONTENT_URI = 2, // Android only. Can only be absolute! 15 | HTTP = 3, // http://, https:// 16 | }; 17 | 18 | // Windows paths are always stored with '/' slashes in a Path. 19 | // On .ToWString(), they are flipped back to '\'. 20 | 21 | class PathUWP { 22 | private: 23 | void Init(const std::string& str); 24 | 25 | public: 26 | std::string path_; 27 | std::string extCache; 28 | bool isDirectory; // Special usage, don't depend on it 29 | 30 | PathUWP() : type_(PathTypeUWP::UNDEFINED) {} 31 | explicit PathUWP(const std::string& str); 32 | 33 | explicit PathUWP(const std::wstring& str); 34 | 35 | PathTypeUWP Type() const { 36 | return type_; 37 | } 38 | 39 | bool Valid() const { return !path_.empty(); } 40 | bool IsRoot() const { return path_ == "\\"; } // Special value - only path that can end in a slash. 41 | 42 | // Some std::string emulation for simplicity. 43 | bool empty() const { return !Valid(); } 44 | void clear() { 45 | type_ = PathTypeUWP::UNDEFINED; 46 | path_.clear(); 47 | } 48 | size_t size() const { 49 | return path_.size(); 50 | } 51 | 52 | // WARNING: Potentially unsafe usage, if it's not NATIVE. 53 | const char* c_str() const { 54 | return path_.c_str(); 55 | } 56 | 57 | bool IsAbsolute() const; 58 | 59 | // Returns a path extended with a subdirectory. 60 | PathUWP operator /(const std::string& subdir) const; 61 | 62 | // Navigates down into a subdir. 63 | void operator /=(const std::string& subdir); 64 | 65 | // File extension manipulation. 66 | PathUWP WithExtraExtension(const std::string& ext) const; 67 | PathUWP WithReplacedExtension(const std::string& oldExtension, const std::string& newExtension) const; 68 | PathUWP WithReplacedExtension(const std::string& newExtension) const; 69 | 70 | // Removes the last component. 71 | std::string GetFilename() const; // Really, GetLastComponent. Could be a file or directory. Includes the extension. 72 | std::string GetFileExtension() const; // Always lowercase return. Includes the dot. 73 | std::string GetDirectory() const; 74 | 75 | const std::string& ToString() const; 76 | 77 | std::wstring ToWString() const; 78 | 79 | std::string ToVisualString() const; 80 | 81 | bool CanNavigateUp() const; 82 | PathUWP NavigateUp() const; 83 | 84 | // Navigates as far up as possible from this path. If not possible to navigate upwards, returns the same path. 85 | // Not actually always the root of the volume, especially on systems like Mac and Linux where things are often mounted. 86 | // For Android directory trees, navigates to the root of the tree. 87 | PathUWP GetRootVolume() const; 88 | 89 | bool ComputePathTo(const PathUWP& other, std::string& path) const; 90 | 91 | bool operator ==(const PathUWP& other) const { 92 | return path_ == other.path_ && type_ == other.type_; 93 | } 94 | bool operator !=(const PathUWP& other) const { 95 | return path_ != other.path_ || type_ != other.type_; 96 | } 97 | 98 | bool FilePathContainsNoCase(const std::string& needle) const; 99 | 100 | bool StartsWith(const PathUWP& other) const; 101 | 102 | bool operator <(const PathUWP& other) const { 103 | return path_ < other.path_; 104 | } 105 | bool operator >(const PathUWP& other) const { 106 | return path_ > other.path_; 107 | } 108 | 109 | private: 110 | PathTypeUWP type_; 111 | }; 112 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/ImmExtenTemplate.h: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #pragma once 10 | 11 | #include "pch.h" 12 | #include "IExtension.h" -------------------------------------------------------------------------------- /development/ExtensionsTemplate/ImmExtenTemplate.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.35319.79 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImmExtenTemplate", "ImmExtenTemplate.vcxproj", "{A8E9332B-BB86-470F-B72B-6A8B3359DF68}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Optimized|ARM = Optimized|ARM 11 | Optimized|ARM64 = Optimized|ARM64 12 | Optimized|x64 = Optimized|x64 13 | Optimized|x86 = Optimized|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM.ActiveCfg = Optimized|ARM 17 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM.Build.0 = Optimized|ARM 18 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM64.ActiveCfg = Optimized|ARM64 19 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|ARM64.Build.0 = Optimized|ARM64 20 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x64.ActiveCfg = Optimized|x64 21 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x64.Build.0 = Optimized|x64 22 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x86.ActiveCfg = Optimized|Win32 23 | {A8E9332B-BB86-470F-B72B-6A8B3359DF68}.Optimized|x86.Build.0 = Optimized|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {D2F727A7-4848-4825-8F59-98A1C134C775} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/ImmExtenTemplate.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 6 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms 7 | 8 | 9 | {7d631577-2f98-4dad-a58a-81ca447fea5f} 10 | 11 | 12 | {5b8d2ab3-c2c4-4e8d-acc2-1e7f1f368654} 13 | 14 | 15 | {15495947-241d-48af-beda-d674b6821970} 16 | 17 | 18 | {2c360152-d06e-41aa-a719-ab99bd9c3433} 19 | 20 | 21 | {0849ad18-189f-4f83-948e-7dc7fa4a2737} 22 | 23 | 24 | 25 | 26 | 27 | Others 28 | 29 | 30 | Helpers 31 | 32 | 33 | Helpers 34 | 35 | 36 | 37 | 38 | 39 | GUI 40 | 41 | 42 | GUI 43 | 44 | 45 | GUI 46 | 47 | 48 | GUI 49 | 50 | 51 | GUI 52 | 53 | 54 | GUI 55 | 56 | 57 | Headers 58 | 59 | 60 | Headers 61 | 62 | 63 | Headers 64 | 65 | 66 | GUI 67 | 68 | 69 | Extras 70 | 71 | 72 | Helpers 73 | 74 | 75 | Helpers 76 | 77 | 78 | Helpers 79 | 80 | 81 | Extras 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Libs/ARM/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsTemplate/Libs/ARM/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Libs/ARM64/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsTemplate/Libs/ARM64/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Libs/Win32/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsTemplate/Libs/Win32/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Libs/x64/ImMobile.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/development/ExtensionsTemplate/Libs/x64/ImMobile.lib -------------------------------------------------------------------------------- /development/ExtensionsTemplate/Others/dllmain.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 2025-Present 3 | 4 | Bashar Astifan (https://github.com/basharast): 5 | ImMobile Extension 6 | Legacy support as tested on 10240 7 | */ 8 | 9 | #include "pch.h" 10 | 11 | BOOL APIENTRY DllMain(HMODULE /* hModule */, DWORD ul_reason_for_call, LPVOID /* lpReserved */) 12 | { 13 | switch (ul_reason_for_call) 14 | { 15 | case DLL_PROCESS_ATTACH: 16 | case DLL_THREAD_ATTACH: 17 | case DLL_THREAD_DETACH: 18 | case DLL_PROCESS_DETACH: 19 | break; 20 | } 21 | return TRUE; 22 | } 23 | -------------------------------------------------------------------------------- /development/ExtensionsTemplate/README.md: -------------------------------------------------------------------------------- 1 | ## Extensions Template 2 | 3 | Refer to the [Wiki page](https://github.com/basharast/ImMobile/wiki/DevExtensions) for 🔌 Extensions development 4 | 5 | ## Important 6 | 7 | Ensure to rename the project other than the default template, the default template file is forced to replace each startup 8 | 9 | ## API Providers 10 | 11 | As non-cpp expert, I may built this in odd way for cpp developers 12 | 13 | so you cannot include `ImmApiProvider.h` in your `.cpp` files directly 14 | 15 | as solution I have provided some helpful APIs, storage and log ones specifically at `ImmApiProviderBridge.h` 16 | 17 | you can include this file and access to the APIs, if you want more you can simply expose more. 18 | 19 | ## Code Optimizaion 20 | For some cases better to keep the optimizition off 21 | 22 | however, no rule, you need to try, the main project compiled with /MDd 23 | 24 | if you want to enable optimizition from: 25 | 26 | - Project Settings 27 | - Optimizaion 28 | - Choose `/O2` (Favor Speed) 29 | 30 | then you need to adjust extra option to compile: 31 | 32 | - Project Settings 33 | - Code Generation 34 | - Set `Basic Runtime Checks` to `Default` 35 | 36 | ## C++ Language Standard 37 | 38 | In some cases you may need to use the latest std version, it will not cause any issue 39 | 40 | as example in VS 2017: 41 | 42 | - Project Settings 43 | - C/C++ -> Language 44 | - At C++ Language Standard 45 | - Select `ISO C++ Latest Draft Standard..` 46 | 47 | ## Easy Testing 48 | 49 | The project has post command to copy the dll to extensions folder if ImMobile installed and it will run the app 50 | 51 | the code below already added, you don't need to add it again 52 | 53 | ```batch 54 | if exist "%LOCALAPPDATA%\Packages\immobile-c789_eyr0bca9nc39y\LocalState\extensions" ( 55 | del "%LOCALAPPDATA%\Packages\immobile-c789_eyr0bca9nc39y\LocalState\extensions\$(TargetFileName)" >nul 2>&1 56 | xcopy "$(TargetPath)" "%LOCALAPPDATA%\Packages\immobile-c789_eyr0bca9nc39y\LocalState\extensions\" /Y /C /I 57 | start "" "imm:" 58 | ) 59 | ``` 60 | -------------------------------------------------------------------------------- /development/JSDemos/BingWallpaper14393+.js: -------------------------------------------------------------------------------- 1 | // Learn how to make ImMobile scripts at: 2 | // https://github.com/basharast/ImMobile/wiki/DevJSRuntime 3 | 4 | // BingWallpapers script by Bashar Astifan 5 | // Doing the same in Extension is far less efforts than below 6 | 7 | imm.resetRuntime(); // Ensure a clean runtime at start 8 | 9 | // Utility: Check if a file exists at the given path 10 | function isFileExists(filePath) { 11 | let handle = null; 12 | try { 13 | handle = imm.os.open(filePath, imm.os.O_RDONLY); 14 | console.log(`File handle: ${handle}`); 15 | } catch (e) { 16 | console.error("File check error:", e); 17 | } 18 | 19 | if (handle < 0) return false; 20 | 21 | imm.os.close(handle); 22 | return true; 23 | } 24 | 25 | // Utility: Copy file using raw ArrayBuffer 26 | function copyFile(sourcePath, destinationPath) { 27 | const { open, close, read, write, O_RDONLY, O_WRONLY, O_CREAT, O_TRUNC } = imm.os; 28 | const BUFFER_SIZE = 1024; 29 | const rawBuffer = new ArrayBuffer(BUFFER_SIZE); 30 | 31 | const sourceFd = open(sourcePath, O_RDONLY); 32 | if (sourceFd < 0) throw new Error(`Failed to open source file: ${sourcePath}`); 33 | 34 | const destFd = open(destinationPath, O_WRONLY | O_CREAT | O_TRUNC); 35 | if (destFd < 0) { 36 | close(sourceFd); 37 | throw new Error(`Failed to open/create destination file: ${destinationPath}`); 38 | } 39 | 40 | try { 41 | let bytesRead; 42 | while ((bytesRead = read(sourceFd, rawBuffer, 0, BUFFER_SIZE)) > 0) { 43 | write(destFd, rawBuffer, 0, bytesRead); 44 | } 45 | } finally { 46 | close(sourceFd); 47 | close(destFd); 48 | } 49 | 50 | console.log('File copied successfully.'); 51 | } 52 | 53 | // Utility: Extract file name from Bing image URL 54 | function getFileName(fileURL) { 55 | let fileName = "wallpaper.jpg"; 56 | try { 57 | const match = fileURL.match(/id=([^&]+)/); 58 | if (match && match[1]) { 59 | fileName = match[1]; 60 | } else { 61 | console.log("No filename match found."); 62 | } 63 | } catch (e) { 64 | console.error("Filename extraction error:", e); 65 | } 66 | 67 | console.log("Filename:", fileName); 68 | return fileName; 69 | } 70 | 71 | // Main logic: Fetch, download, and set Bing wallpaper 72 | async function FetchBingWallpaper() { 73 | if (!imm.isOnline()) return; 74 | 75 | // Fetch Bing image metadata 76 | const response = imm.getResponse('https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1'); 77 | const data = JSON.parse(response); 78 | const imageInfo = data.images[0]; 79 | const baseUrl = "https://www.bing.com"; 80 | 81 | // Get image URLs (both portrait and landscape) 82 | const wallpaperLandscape = `${baseUrl}${imageInfo.url}`; 83 | const wallpaperVertical = wallpaperLandscape.replace(/(\d+)x(\d+)/, '1080x1920'); 84 | const wallpaperInfo = imageInfo.copyright; 85 | 86 | console.warn(`Landscape: ${wallpaperLandscape}`); 87 | console.warn(`Info: ${wallpaperInfo}`); 88 | 89 | // Prepare folder paths and image filename 90 | const downloadsFolder = "$downloads"; 91 | const bingWallpapers = "BingWallpapers"; 92 | const imageFilename = getFileName(wallpaperLandscape); 93 | const folderPath = imm.createFolder(downloadsFolder, bingWallpapers); 94 | 95 | if (!folderPath) { 96 | console.error("Failed to create wallpapers folder"); 97 | return; 98 | } 99 | 100 | // Ensure subfolder for landscape images 101 | const folderLandscapePath = imm.createFolder(folderPath, "landscape"); 102 | const wallpaperPath = `${folderPath}\\${imageFilename}`; 103 | 104 | console.success(`Wallpaper target path: ${wallpaperPath}`); 105 | 106 | // Download and apply wallpaper if it doesn't exist 107 | if (!isFileExists(wallpaperPath)) { 108 | imm.quickDownload(wallpaperVertical, `${bingWallpapers}\\${imageFilename}`); 109 | imm.quickDownload(wallpaperLandscape, `${bingWallpapers}\\landscape\\${imageFilename}`); 110 | 111 | // After download, apply the wallpaper 112 | if (isFileExists(wallpaperPath)) { 113 | console.warn(`Applying background: ${imageFilename}`); 114 | imm.changeBackground(wallpaperPath); 115 | 116 | // Copy landscape version to backgrounds folder 117 | try { 118 | const wallpaperLandscapePath = `${folderLandscapePath}\\${imageFilename}`; 119 | const backgroundsLandscapePath = imm.createFolder("$data", "backgrounds\\landscape"); 120 | 121 | if (backgroundsLandscapePath) { 122 | const destImage = `${backgroundsLandscapePath}\\background.jpg`; 123 | console.log(`Copying image to: ${destImage}`); 124 | copyFile(wallpaperLandscapePath, destImage); 125 | } 126 | } catch (err) { 127 | console.error("Copy error:", err.message); 128 | } 129 | } else { 130 | console.error("Failed to download the image"); 131 | } 132 | } else { 133 | console.warn(`Wallpaper already exists and set: ${imageFilename}`); 134 | } 135 | 136 | // Delay + Notify 137 | await imm.sleepAsync(4000); 138 | imm.notify(wallpaperInfo, "info"); 139 | } 140 | 141 | // Kick off the process 142 | FetchBingWallpaper(); 143 | -------------------------------------------------------------------------------- /development/JSDemos/README.md: -------------------------------------------------------------------------------- 1 | ## JSRuntime Demos 2 | 3 | Refer to the [Wiki page](https://github.com/basharast/ImMobile/wiki/DevJSRuntime) for JSRuntime development -------------------------------------------------------------------------------- /development/JSDemos/jsDemo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Bashar Astifan 3 | * @copyright 2025 4 | * @description ImMobile JSRuntime Extension 5 | */ 6 | 7 | /*******************/ 8 | /* Reset JSRuntime */ 9 | /*******************/ 10 | imm.resetRuntime(); 11 | 12 | /********************/ 13 | /* JSRuntime Render */ 14 | /********************/ 15 | // Render is not supported for now (future usage) 16 | function render(visible) { 17 | // [BEGIN | DON'T REMOVE] 18 | if (imm.WindowBegin()) { 19 | 20 | /* [DRAW YOUR CONTENT HERE] */ 21 | 22 | } 23 | else { 24 | // Window is not active 25 | } 26 | 27 | // [END | DON'T REMOVE] 28 | imm.WindowEnd(); 29 | } 30 | 31 | /**************/ 32 | /* Tests Area */ 33 | /**************/ 34 | // Manual delay 35 | function delay(milliseconds) { 36 | return new Promise(resolve => { 37 | const start = Date.now(); 38 | while (Date.now() - start < milliseconds) { 39 | // Busy-waiting loop to simulate a delay 40 | } 41 | resolve(); 42 | }); 43 | } 44 | 45 | // File picker callback 46 | function fileCallback(path) { 47 | imm.notify("File: " + path, "success"); 48 | if (path.indexOf(".zip") !== -1) { 49 | imm.unZip(path, "$exts"); 50 | } else { 51 | imm.openFile(path); 52 | } 53 | } 54 | 55 | // Folder picker call back 56 | function folderCallback(path) { 57 | imm.notify("Folder: " + path, "success"); 58 | imm.zipFolder(path, "$exts/folder.zip"); 59 | } 60 | 61 | // Save picker callback 62 | function saveCallback(path) { 63 | imm.notify("Folder: " + path, "success"); 64 | var targetURL = "https://jsonplaceholder.typicode.com/todos/1"; 65 | console.warn("Response: " + targetURL); 66 | var response = imm.getResponse(targetURL); 67 | console.error(response); 68 | console.log(JSON.parse(response).title); 69 | imm.filePutContents(path, response); 70 | } 71 | 72 | function gitHubCallback(output) { 73 | console.warn(output); 74 | } 75 | 76 | // Download file test 77 | function testFileDownload() { 78 | var testURL = "https://github.com/basharast/wut/releases/download/1.5.0/WUTMini.1.5.0_ARM.7z"; 79 | var filename = imm.getOnlineFileName(testURL, "test.7z"); 80 | console.warn(filename); 81 | imm.quickDownload(testURL, filename); 82 | } 83 | 84 | // Confirm dialog callback 85 | function confirmDialogCallback(state) { 86 | if (state) { 87 | console.warn("User confirmed"); 88 | } else { 89 | console.error("User rejected"); 90 | } 91 | } 92 | 93 | // Input dialog callback 94 | function inputDialogCallback(state, input) { 95 | if (state) { 96 | console.warn("User confirmed, input: " + input); 97 | } else { 98 | console.error("User cancelled"); 99 | } 100 | } 101 | 102 | // Check extension state 103 | function extState(path) { 104 | var state = imm.isExtenLoaded(path); 105 | console.warn("Extension state: " + (state ? "loaded" : "not loaded")); 106 | 107 | return state; 108 | } 109 | 110 | // Load ImExtension 111 | function loadExt() { 112 | var demoExt = "$exts/ImmExtenTemplate.dll"; 113 | if (!extState(demoExt)) { 114 | imm.loadExten(demoExt, false, false); 115 | if (extState(demoExt)) { 116 | imm.notify("Extension loaded", "success"); 117 | } 118 | } else { 119 | imm.notify("Extension already loaded", "warn"); 120 | } 121 | } 122 | 123 | // Show extension GUI 124 | function extenGUI() { 125 | var demoExt = "$exts/ImmExtenTemplate.dll"; 126 | if (extState(demoExt)) { 127 | imm.extenToggleGUI(); 128 | } else { 129 | imm.notify("Extension not loaded", "error"); 130 | } 131 | } 132 | 133 | // Show github readme 134 | function showReadMe() { 135 | var repoURL = "https://github.com/basharast/RetroArch-ARM"; 136 | imm.showGitHubReadMeUI(repoURL); 137 | } 138 | 139 | // Random string 140 | function generateRandomString(length) { 141 | const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 142 | const charactersLength = characters.length; 143 | 144 | let result = ''; 145 | for (let i = 0; i < length; i++) { 146 | const randomIndex = Math.floor(Math.random() * charactersLength); 147 | result += characters[randomIndex]; 148 | } 149 | return result; 150 | } 151 | 152 | // Test function 153 | async function startTest() { 154 | const now = new Date(); 155 | imm.notify("Timer started", "warn"); 156 | await imm.sleepAsync(2500); 157 | var timeString = now.toLocaleTimeString(); 158 | console.error(timeString); 159 | imm.notify("Time now is: " + timeString, "success"); 160 | 161 | console.warn(Math.floor(3.14944)); 162 | console.error("test hello man".indexOf("hello")); 163 | 164 | await imm.sleepAsync(1000); 165 | //imm.toast("ImMobile JS","Script finished"); 166 | 167 | //imm.showKeyboard(true); 168 | //await imm.sleepAsync(2000); 169 | //imm.showKeyboard(false); 170 | 171 | //imm.chooseFile(fileCallback); 172 | //imm.chooseFolder(folderCallback); 173 | //imm.saveFile(saveCallback); 174 | 175 | if (imm.isOnline()) { 176 | console.warn("Online"); 177 | } else { 178 | console.error("Offline"); 179 | } 180 | 181 | //console.warn("Clipboard: " + getClipboard()); 182 | 183 | //imm.gitHubContent("basharast", "make-uwp", gitHubCallback); 184 | //imm.gitHubLatestRelease("basharast", "A2IPrompt", gitHubCallback); 185 | 186 | //testFileDownload(); 187 | 188 | //imm.confirmDialog("Test Confirm", "Confirm dialog JS test", confirmDialogCallback); 189 | //imm.inputDialog("Test Input", "Enter your name", inputDialogCallback); 190 | 191 | //imm.std.gc(); 192 | } 193 | 194 | // Update time immediately and then every second 195 | console.success("JSRuntime (index-> $jsIndex, id-> $jsID, time-> $jsTime)"); 196 | 197 | // Random string test 198 | console.warn("Random String: " + generateRandomString(10)); 199 | 200 | // Start test timer 201 | imm.notify("JSRuntime ($jsID) started"); 202 | imm.setTimeout(startTest, 2500); 203 | -------------------------------------------------------------------------------- /development/README.md: -------------------------------------------------------------------------------- 1 | ## ImMoble Sources 2 | 3 | You will find here ImMobile extension project and source for developers 4 | 5 | also I will upload later more useful stuff once I have time. 6 | 7 | ## Guide 8 | 9 | Refer to [Wiki page](https://github.com/basharast/ImMobile/wiki/ImLab) for more descriptions and examples 10 | 11 | ## Build 12 | 13 | I made it with VS 2017 not tested in other versions 14 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | imm.astifan.online -------------------------------------------------------------------------------- /library/extensions/README.md: -------------------------------------------------------------------------------- 1 | ## ImMobile Extensions 2 | 3 | Any file you download from here will auto install to ImMobile library -------------------------------------------------------------------------------- /library/extensions/arm/BingWallpapers.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/arm/BingWallpapers.dll -------------------------------------------------------------------------------- /library/extensions/arm/ImmLottie.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/arm/ImmLottie.dll -------------------------------------------------------------------------------- /library/extensions/arm/ImmLottieSamples.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/arm/ImmLottieSamples.zip -------------------------------------------------------------------------------- /library/extensions/arm/ImmWUT.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/arm/ImmWUT.dll -------------------------------------------------------------------------------- /library/extensions/arm64/BingWallpapers.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/arm64/BingWallpapers.dll -------------------------------------------------------------------------------- /library/extensions/arm64/ImmLottie.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/arm64/ImmLottie.dll -------------------------------------------------------------------------------- /library/extensions/arm64/ImmLottieSamples.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/arm64/ImmLottieSamples.zip -------------------------------------------------------------------------------- /library/extensions/x64/BingWallpapers.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/x64/BingWallpapers.dll -------------------------------------------------------------------------------- /library/extensions/x64/ImmLottie.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/x64/ImmLottie.dll -------------------------------------------------------------------------------- /library/extensions/x64/ImmLottieSamples.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/x64/ImmLottieSamples.zip -------------------------------------------------------------------------------- /library/extensions/x86/BingWallpapers.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/x86/BingWallpapers.dll -------------------------------------------------------------------------------- /library/extensions/x86/ImmLottie.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/x86/ImmLottie.dll -------------------------------------------------------------------------------- /library/extensions/x86/ImmLottieSamples.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/extensions/x86/ImmLottieSamples.zip -------------------------------------------------------------------------------- /library/scripts/BingWallpaper14393+.js: -------------------------------------------------------------------------------- 1 | // Learn how to make ImMobile scripts at: 2 | // https://github.com/basharast/ImMobile/wiki/DevJSRuntime 3 | 4 | // BingWallpapers script by Bashar Astifan 5 | // Doing the same in Extension is far less efforts than below 6 | 7 | imm.resetRuntime(); // Ensure a clean runtime at start 8 | 9 | // Utility: Check if a file exists at the given path 10 | function isFileExists(filePath) { 11 | let handle = null; 12 | try { 13 | handle = imm.os.open(filePath, imm.os.O_RDONLY); 14 | console.log(`File handle: ${handle}`); 15 | } catch (e) { 16 | console.error("File check error:", e); 17 | } 18 | 19 | if (handle < 0) return false; 20 | 21 | imm.os.close(handle); 22 | return true; 23 | } 24 | 25 | // Utility: Copy file using raw ArrayBuffer 26 | function copyFile(sourcePath, destinationPath) { 27 | const { open, close, read, write, O_RDONLY, O_WRONLY, O_CREAT, O_TRUNC } = imm.os; 28 | const BUFFER_SIZE = 1024; 29 | const rawBuffer = new ArrayBuffer(BUFFER_SIZE); 30 | 31 | const sourceFd = open(sourcePath, O_RDONLY); 32 | if (sourceFd < 0) throw new Error(`Failed to open source file: ${sourcePath}`); 33 | 34 | const destFd = open(destinationPath, O_WRONLY | O_CREAT | O_TRUNC); 35 | if (destFd < 0) { 36 | close(sourceFd); 37 | throw new Error(`Failed to open/create destination file: ${destinationPath}`); 38 | } 39 | 40 | try { 41 | let bytesRead; 42 | while ((bytesRead = read(sourceFd, rawBuffer, 0, BUFFER_SIZE)) > 0) { 43 | write(destFd, rawBuffer, 0, bytesRead); 44 | } 45 | } finally { 46 | close(sourceFd); 47 | close(destFd); 48 | } 49 | 50 | console.log('File copied successfully.'); 51 | } 52 | 53 | // Utility: Extract file name from Bing image URL 54 | function getFileName(fileURL) { 55 | let fileName = "wallpaper.jpg"; 56 | try { 57 | const match = fileURL.match(/id=([^&]+)/); 58 | if (match && match[1]) { 59 | fileName = match[1]; 60 | } else { 61 | console.log("No filename match found."); 62 | } 63 | } catch (e) { 64 | console.error("Filename extraction error:", e); 65 | } 66 | 67 | console.log("Filename:", fileName); 68 | return fileName; 69 | } 70 | 71 | // Main logic: Fetch, download, and set Bing wallpaper 72 | async function FetchBingWallpaper() { 73 | if (!imm.isOnline()) return; 74 | 75 | // Fetch Bing image metadata 76 | const response = imm.getResponse('https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1'); 77 | const data = JSON.parse(response); 78 | const imageInfo = data.images[0]; 79 | const baseUrl = "https://www.bing.com"; 80 | 81 | // Get image URLs (both portrait and landscape) 82 | const wallpaperLandscape = `${baseUrl}${imageInfo.url}`; 83 | const wallpaperVertical = wallpaperLandscape.replace(/(\d+)x(\d+)/, '1080x1920'); 84 | const wallpaperInfo = imageInfo.copyright; 85 | 86 | console.warn(`Landscape: ${wallpaperLandscape}`); 87 | console.warn(`Info: ${wallpaperInfo}`); 88 | 89 | // Prepare folder paths and image filename 90 | const downloadsFolder = "$downloads"; 91 | const bingWallpapers = "BingWallpapers"; 92 | const imageFilename = getFileName(wallpaperLandscape); 93 | const folderPath = imm.createFolder(downloadsFolder, bingWallpapers); 94 | 95 | if (!folderPath) { 96 | console.error("Failed to create wallpapers folder"); 97 | return; 98 | } 99 | 100 | // Ensure subfolder for landscape images 101 | const folderLandscapePath = imm.createFolder(folderPath, "landscape"); 102 | const wallpaperPath = `${folderPath}\\${imageFilename}`; 103 | 104 | console.success(`Wallpaper target path: ${wallpaperPath}`); 105 | 106 | // Download and apply wallpaper if it doesn't exist 107 | if (!isFileExists(wallpaperPath)) { 108 | imm.quickDownload(wallpaperVertical, `${bingWallpapers}\\${imageFilename}`); 109 | imm.quickDownload(wallpaperLandscape, `${bingWallpapers}\\landscape\\${imageFilename}`); 110 | 111 | // After download, apply the wallpaper 112 | if (isFileExists(wallpaperPath)) { 113 | console.warn(`Applying background: ${imageFilename}`); 114 | imm.changeBackground(wallpaperPath); 115 | 116 | // Copy landscape version to backgrounds folder 117 | try { 118 | const wallpaperLandscapePath = `${folderLandscapePath}\\${imageFilename}`; 119 | const backgroundsLandscapePath = imm.createFolder("$data", "backgrounds\\landscape"); 120 | 121 | if (backgroundsLandscapePath) { 122 | const destImage = `${backgroundsLandscapePath}\\background.jpg`; 123 | console.log(`Copying image to: ${destImage}`); 124 | copyFile(wallpaperLandscapePath, destImage); 125 | } 126 | } catch (err) { 127 | console.error("Copy error:", err.message); 128 | } 129 | } else { 130 | console.error("Failed to download the image"); 131 | } 132 | } else { 133 | console.warn(`Wallpaper already exists and set: ${imageFilename}`); 134 | } 135 | 136 | // Delay + Notify 137 | await imm.sleepAsync(4000); 138 | imm.notify(wallpaperInfo, "info"); 139 | } 140 | 141 | // Kick off the process 142 | FetchBingWallpaper(); 143 | -------------------------------------------------------------------------------- /library/scripts/README.md: -------------------------------------------------------------------------------- 1 | ## ImMobile Scripts 2 | 3 | Any file you download from here will auto install to ImMobile library -------------------------------------------------------------------------------- /library/wallpapers/Im1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/Im1.jpg -------------------------------------------------------------------------------- /library/wallpapers/Im2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/Im2.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImAbstruct.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImAbstruct.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImBlue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImBlue.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImBlur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImBlur.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImDark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImDark.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImDay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImDay.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImGold.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImGold.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImGray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImGray.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImHP.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImHP.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImIllusion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImIllusion.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImIntrusion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImIntrusion.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImLandscape.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImLandscape.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImLight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImLight.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImLunar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImLunar.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImSky.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImSky.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImSpring.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImSpring.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImSunset.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImSunset.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImVista.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImVista.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImWindows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImWindows.jpg -------------------------------------------------------------------------------- /library/wallpapers/ImWinter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/ImWinter.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/Im1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/Im1.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/Im2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/Im2.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImAbstruct.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImAbstruct.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImBlue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImBlue.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImBlur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImBlur.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImDark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImDark.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImDay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImDay.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImGold.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImGold.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImGray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImGray.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImHP.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImHP.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImIllusion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImIllusion.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImIntrusion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImIntrusion.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImLandscape.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImLandscape.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImLight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImLight.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImLunar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImLunar.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImSky.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImSky.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImSpring.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImSpring.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImSunset.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImSunset.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImVista.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImVista.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImWindows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImWindows.jpg -------------------------------------------------------------------------------- /library/wallpapers/landscape/ImWinter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/library/wallpapers/landscape/ImWinter.jpg -------------------------------------------------------------------------------- /licenses/Dear ImGui (Main).txt: -------------------------------------------------------------------------------- 1 | https://github.com/ocornut/imgui 2 | 3 | The MIT License (MIT) 4 | 5 | Copyright (c) 2014-2025 Omar Cornut 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /licenses/Dear ImGui (UWP).txt: -------------------------------------------------------------------------------- 1 | https://github.com/ahmed605/imgui-uwp 2 | 3 | MIT License 4 | 5 | Copyright (c) 2025 Ahmed Walid 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /licenses/ImFileDialog.txt: -------------------------------------------------------------------------------- 1 | https://github.com/dfranx/ImFileDialog 2 | 3 | MIT License 4 | 5 | Copyright (c) 2021 dfranx 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /licenses/ImGuiColorTextEdit.txt: -------------------------------------------------------------------------------- 1 | https://github.com/BalazsJako/ImGuiColorTextEdit 2 | 3 | MIT License 4 | 5 | Copyright (c) 2017 BalazsJako 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /licenses/ImPlot.txt: -------------------------------------------------------------------------------- 1 | https://github.com/epezent/implot 2 | 3 | MIT License 4 | 5 | Copyright (c) 2020 Evan Pezent 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /licenses/Libraries/csv-parser.txt: -------------------------------------------------------------------------------- 1 | https://github.com/ben-strasser/fast-cpp-csv-parser 2 | 3 | Copyright (c) 2015, ben-strasser 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of fast-cpp-csv-parser nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /licenses/Libraries/dll_management.txt: -------------------------------------------------------------------------------- 1 | https://github.com/gus33000 -------------------------------------------------------------------------------- /licenses/Libraries/juce_litehtml.txt: -------------------------------------------------------------------------------- 1 | https://github.com/Archie3d/juce_litehtml 2 | -------------------------------------------------------------------------------- /licenses/Libraries/libzip.txt: -------------------------------------------------------------------------------- 1 | https://libzip.org 2 | 3 | libzip is released under a 3-clause BSD license: 4 | 5 | Copyright (C) 1999-2022 Dieter Baron and Thomas Klausner 6 | 7 | The authors can be contacted at info@libzip.org 8 | 9 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 10 | 11 | Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 12 | 13 | Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 14 | 15 | The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS’’ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /licenses/Libraries/litehtml.txt: -------------------------------------------------------------------------------- 1 | https://github.com/litehtml/litehtml 2 | 3 | Copyright (c) 2013, Yuri Kobets (tordex) 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | * Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | * Neither the name of the nor the 14 | names of its contributors may be used to endorse or promote products 15 | derived from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 18 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 21 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /licenses/Libraries/nlohmann_json.txt: -------------------------------------------------------------------------------- 1 | https://github.com/nlohmann/json 2 | 3 | MIT License 4 | 5 | Copyright (c) 2013-2025 Niels Lohmann 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /licenses/Libraries/pugixml.txt: -------------------------------------------------------------------------------- 1 | https://pugixml.org/ 2 | 3 | This library is available to anybody free of charge, under the terms of MIT License: 4 | 5 | Copyright (c) 2006-2023 Arseny Kapoulkine 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | 13 | This means that you can freely use pugixml in your applications, both open-source and proprietary. If you use pugixml in a product, it is sufficient to add an acknowledgment like this to the product distribution: 14 | 15 | This software is based on pugixml library (http://pugixml.org). pugixml is Copyright (C) 2006-2018 Arseny Kapoulkine. -------------------------------------------------------------------------------- /licenses/Libraries/quickjs-ng.txt: -------------------------------------------------------------------------------- 1 | https://quickjs-ng.github.io/quickjs 2 | https://github.com/quickjs-ng/quickjs 3 | 4 | The MIT License (MIT) 5 | 6 | Copyright (c) 2017-2024 Fabrice Bellard 7 | Copyright (c) 2017-2024 Charlie Gordon 8 | Copyright (c) 2023-2025 Ben Noordhuis 9 | Copyright (c) 2023-2025 Saúl Ibarra Corretgé 10 | 11 | Permission is hereby granted, free of charge, to any person obtaining a copy 12 | of this software and associated documentation files (the "Software"), to deal 13 | in the Software without restriction, including without limitation the rights 14 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | copies of the Software, and to permit persons to whom the Software is 16 | furnished to do so, subject to the following conditions: 17 | 18 | The above copyright notice and this permission notice shall be included in 19 | all copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | THE SOFTWARE. -------------------------------------------------------------------------------- /licenses/Libraries/quickjs.txt: -------------------------------------------------------------------------------- 1 | https://bellard.org/quickjs 2 | https://github.com/bellard/quickjs 3 | 4 | QuickJS Javascript Engine 5 | 6 | Copyright (c) 2017-2021 Fabrice Bellard 7 | Copyright (c) 2017-2021 Charlie Gordon 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in 17 | all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | THE SOFTWARE. -------------------------------------------------------------------------------- /licenses/Libraries/simpleini.txt: -------------------------------------------------------------------------------- 1 | https://github.com/brofield/simpleini 2 | 3 | The MIT License (MIT) 4 | 5 | Copyright (c) 2006-2024 Brodie Thiesfield 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | this software and associated documentation files (the "Software"), to deal in 9 | the Software without restriction, including without limitation the rights to 10 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | the Software, and to permit persons to whom the Software is furnished to do so, 12 | subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | -------------------------------------------------------------------------------- /licenses/Libraries/stb.txt: -------------------------------------------------------------------------------- 1 | https://github.com/nothings/stb 2 | 3 | This software is available under 2 licenses -- choose whichever you prefer. 4 | ------------------------------------------------------------------------------ 5 | ALTERNATIVE A - MIT License 6 | Copyright (c) 2017 Sean Barrett 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | this software and associated documentation files (the "Software"), to deal in 9 | the Software without restriction, including without limitation the rights to 10 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 11 | of the Software, and to permit persons to whom the Software is furnished to do 12 | so, subject to the following conditions: 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | ------------------------------------------------------------------------------ 23 | ALTERNATIVE B - Public Domain (www.unlicense.org) 24 | This is free and unencumbered software released into the public domain. 25 | Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 26 | software, either in source code form or as a compiled binary, for any purpose, 27 | commercial or non-commercial, and by any means. 28 | In jurisdictions that recognize copyright laws, the author or authors of this 29 | software dedicate any and all copyright interest in the software to the public 30 | domain. We make this dedication for the benefit of the public at large and to 31 | the detriment of our heirs and successors. We intend this dedication to be an 32 | overt act of relinquishment in perpetuity of all present and future rights to 33 | this software under copyright law. 34 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 35 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 36 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 37 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 38 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 39 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /licenses/Libraries/zlib.txt: -------------------------------------------------------------------------------- 1 | https://zlib.net/ 2 | 3 | /* zlib.h -- interface of the 'zlib' general purpose compression library 4 | version 1.3.1, January 22nd, 2024 5 | 6 | Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler 7 | 8 | This software is provided 'as-is', without any express or implied 9 | warranty. In no event will the authors be held liable for any damages 10 | arising from the use of this software. 11 | 12 | Permission is granted to anyone to use this software for any purpose, 13 | including commercial applications, and to alter it and redistribute it 14 | freely, subject to the following restrictions: 15 | 16 | 1. The origin of this software must not be misrepresented; you must not 17 | claim that you wrote the original software. If you use this software 18 | in a product, an acknowledgment in the product documentation would be 19 | appreciated but is not required. 20 | 2. Altered source versions must be plainly marked as such, and must not be 21 | misrepresented as being the original software. 22 | 3. This notice may not be removed or altered from any source distribution. 23 | 24 | Jean-loup Gailly Mark Adler 25 | jloup@gzip.org madler@alumni.caltech.edu 26 | 27 | */ -------------------------------------------------------------------------------- /licenses/RPN Calculator.txt: -------------------------------------------------------------------------------- 1 | https://github.com/pthom/rpn_calculator 2 | 3 | A sample RPN calculator build with ImGui Bundle and HelloImGui -------------------------------------------------------------------------------- /licenses/SoundEffects.txt: -------------------------------------------------------------------------------- 1 | - RasoolAsaad 2 | https://pixabay.com/users/rasoolasaad-47313572/ 3 | - skyscraper_seven 4 | https://pixabay.com/users/skyscraper_seven-43500092/ -------------------------------------------------------------------------------- /licenses/Themes.txt: -------------------------------------------------------------------------------- 1 | - Omar Cornut (Default, Classic) 2 | https://github.com/ocornut 3 | - Simon Geilfus (Cinder) 4 | https://github.com/simongeilfus/Cinder-ImGui 5 | - Adobe (Spectrum) 6 | https://github.com/adobe/imgui/blob/master/imgui_spectrum.h 7 | - Chris (EnemyMouse) 8 | https://gist.github.com/enemymouse 9 | - Ole Kristensen (ledSynthMaster) 10 | https://github.com/olekristensen/ledsynthmaster 11 | - CookiePLMonster (Gold) 12 | https://github.com/CookiePLMonster 13 | - Aiekick (Green) 14 | https://github.com/aiekick 15 | - ImJC1C (Material) 16 | https://github.com/ImJC1C 17 | - rewrking (FutureDark) 18 | https://github.com/rewrking 19 | - username..was..ken (Microsoft) 20 | https://github.com/usernameiwantedwasalreadytaken 21 | - Madam Herta (Moonlight) 22 | https://github.com/Madam-Herta/ 23 | - Derrick Canfield (Photoshop) 24 | https://github.com/derydoca 25 | - Lunar (Purple Comfy) 26 | https://github.com/RegularLunar 27 | -------------------------------------------------------------------------------- /licenses/Wallpapers.txt: -------------------------------------------------------------------------------- 1 | - Iyan Sofyan: https://www.pinterest.com/iyansofyan/ 2 | - Ritvik Sharma: https://www.pinterest.com/ritvik0321/ 3 | - Pixelstalk.net: https://pixelstalk.net 4 | - Wallpapercave.com: https://wallpapercave.com -------------------------------------------------------------------------------- /licenses/imgui-notify.txt: -------------------------------------------------------------------------------- 1 | https://github.com/patrickcjk/imgui-notify 2 | 3 | MIT License 4 | 5 | Copyright (c) 2021 Patrick 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /licenses/imgui_markdown.txt: -------------------------------------------------------------------------------- 1 | https://github.com/enkisoftware/imgui_markdown 2 | 3 | https://github.com/enkisoftware 4 | 5 | Copyright (c) 2019 Juliette Foucaut and Doug Binks 6 | 7 | This software is provided 'as-is', without any express or implied 8 | warranty. In no event will the authors be held liable for any damages 9 | arising from the use of this software. 10 | 11 | Permission is granted to anyone to use this software for any purpose, 12 | including commercial applications, and to alter it and redistribute it 13 | freely, subject to the following restrictions: 14 | 15 | 1. The origin of this software must not be misrepresented; you must not 16 | claim that you wrote the original software. If you use this software 17 | in a product, an acknowledgement in the product documentation would be 18 | appreciated but is not required. 19 | 2. Altered source versions must be plainly marked as such, and must not be 20 | misrepresented as being the original software. 21 | 3. This notice may not be removed or altered from any source distribution. 22 | 23 | -------------------------------------------------------------------------------- /mobile/ImMobile_1.0_ARM.appx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/mobile/ImMobile_1.0_ARM.appx -------------------------------------------------------------------------------- /mobile/ImMobile_1.0_ARM.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/mobile/ImMobile_1.0_ARM.cer -------------------------------------------------------------------------------- /mobile/Microsoft.VCLibs.ARM.appx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/basharast/ImMobile/eb6cb0081189ddaa9c6f5d30dd40b7f7118a78d9/mobile/Microsoft.VCLibs.ARM.appx -------------------------------------------------------------------------------- /mobile/README.md: -------------------------------------------------------------------------------- 1 | ## Older browsers (ARM32) 2 | - [1- Microsoft.VCLibs (Dependencies)](https://github.com/basharast/ImMobile/raw/refs/heads/main/mobile/Microsoft.VCLibs.ARM.appx) 3 | - [2- ImMobile Package](https://github.com/basharast/ImMobile/raw/refs/heads/main/mobile/ImMobile_1.0_ARM.appx) 4 | --------------------------------------------------------------------------------