mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-11-14 02:03:27 -08:00
split shell operation abstraction from graphical window manager abstraction - do basic integration of common linux utilities for implementing shell operations - also add 'sh_install_or_uninstall_self' for doing shell-specific operations related to installing or uninstalling an application. hook up to config state in raddbg
This commit is contained in:
1 parent
32ef9095e0
commit
867b64f7a2
26 files changed
+551
-201
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
+1
-1
@@ -68,7 +68,7 @@ commands =
|
||||
// .f1 = { .win = "raddbg_stable --ipc kill_all && build radbin", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
|
||||
//- rjf: running target
|
||||
.f3 = { .win = "raddbg_stable --ipc run", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
.f3 = { .win = "raddbg_stable --ipc run", .linux = "cd build && ./raddbg && cd ..", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
// .f3 = { .win = "build torture", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
// .f3 = { .win = "wsl ./build/raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
// .f3 = { .win = "pushd build && raddbg --user:dev.raddbg_user && popd", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
|
||||
@@ -29,7 +29,7 @@ internal Arena *
|
||||
arena_alloc_(ArenaParams *params)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
|
||||
|
||||
U64 reserve_size = params->reserve_size;
|
||||
U64 commit_size = params->commit_size;
|
||||
|
||||
@@ -69,13 +69,13 @@ arena_alloc_(ArenaParams *params)
|
||||
}
|
||||
|
||||
// rjf: panic on arena creation failure
|
||||
#if OS_FEATURE_GRAPHICAL
|
||||
if(Unlikely(base == 0))
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
|
||||
#if defined(SHELL_H)
|
||||
sh_message(1, s("Fatal Allocation Failure"), s("Unexpected memory allocation failure."));
|
||||
#endif
|
||||
abort_self(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
// rjf: extract arena header & fill
|
||||
AsanUnpoisonMemoryRegion(base, ARENA_HEADER_SIZE);
|
||||
@@ -143,7 +143,7 @@ internal void
|
||||
arena_release(Arena *arena)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
|
||||
|
||||
#if PROFILE_TELEMETRY
|
||||
{
|
||||
Arena *base_arena = arena;
|
||||
@@ -176,7 +176,7 @@ arena_release(Arena *arena)
|
||||
AsanUnpoisonMemoryRegion(n, n->cmt);
|
||||
release_memory(n, n->res);
|
||||
}
|
||||
|
||||
|
||||
ProfEnd();
|
||||
}
|
||||
|
||||
@@ -295,13 +295,13 @@ arena_push(Arena *arena, U64 size, U64 align, B32 zero)
|
||||
#endif
|
||||
|
||||
// rjf: panic on failure
|
||||
#if OS_FEATURE_GRAPHICAL
|
||||
if(Unlikely(result == 0))
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
|
||||
#if defined(SHELL_H)
|
||||
sh_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
|
||||
#endif
|
||||
abort_self(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
#ifndef LINUX_SHELL_META_H
|
||||
#define LINUX_SHELL_META_H
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
read_only global U8 lnx_sh_logo_file_bytes__data[] =
|
||||
{
|
||||
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x08,0x06,0x00,0x00,0x00,0x5c,0x72,0xa8,0x66,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,0x00,0xb1,0x8f,0x0b,0xfc,0x61,0x05,0x00,0x00,0x00,0x01,0x73,0x52,0x47,0x42,0x01,0xd9,0xc9,0x2c,0x7f,0x00,0x00,
|
||||
0x00,0x20,0x63,0x48,0x52,0x4d,0x00,0x00,0x7a,0x26,0x00,0x00,0x80,0x84,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0xe8,0x00,0x00,0x75,0x30,0x00,0x00,0xea,0x60,0x00,0x00,0x3a,0x98,0x00,0x00,0x17,0x70,0x9c,0xba,0x51,0x3c,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00,0xff,0x00,0xff,0x00,0xff,0xa0,0xbd,0xa7,0x93,0x00,0x00,0x00,0x09,
|
||||
0x70,0x48,0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01,0x00,0x9a,0x9c,0x18,0x00,0x00,0x1a,0xec,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9d,0x79,0x98,0x14,0xd5,0xb9,0xc6,0x7f,0xdd,0x3d,0xdd,0x3d,0x03,0x33,0x30,0x33,0x0c,0xab,0xa0,0x8e,0x48,0xa3,0xa0,0x2c,0x83,0x02,0xea,0xd5,0x28,0xa5,0xa2,0x46,0xdc,0x35,0xee,0x1a,
|
||||
0xe5,0x46,0x13,0x13,0xd1,0x18,0xcd,0xd5,0xa8,0x31,0x06,0x90,0x5c,0x35,0x41,0x8d,0x7a,0xd5,0xa8,0xb8,0x80,0x5b,0xcc,0xe3,0x86,0xa2,0xa6,0x5d,0x40,0x0c,0x11,0x45,0x01,0x09,0x5a,0xa0,0xb8,0x81,0xc0,0x00,0x33,0xc0,0x30,0xd0,0xb3,0x74,0xdf,0x3f,0xba,0xd4,0x51,0x01,0xa7,0xe9,0xee,0x5a,0xba,0xde,0xdf,0xf3,0xcc,0x33,0x2c,0xd3,
|
||||
0x53,0xa7,0xbe,0xf3,0xbd,0x6f,0x7d,0xe7,0x54,0xd5,0x39,0x20,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0xef,0x12,0x50,0x08,0x0a,0x9b,0x78,0x8c,0x32,0xa0,0x02,0x28,0x6f,0xf3,0xbd,0xed,0x9f,0x01,0xea,0x81,0x3a,0xeb,0x7b,0xdb,0x3f,0xd7,0x19,0x26,
|
||||
0x1b,0x15,0x45,0x19,0x80,0x70,0x9f,0xb0,0xbb,0x02,0xc3,0x80,0xa1,0xc0,0x6e,0x5b,0x11,0x76,0x05,0xd0,0x19,0x08,0x65,0x79,0xa8,0x56,0x60,0x7d,0x5b,0x53,0x68,0x63,0x14,0x1f,0x03,0xef,0x02,0xef,0x18,0x26,0xb5,0xea,0x15,0x19,0x80,0xc8,0x8f,0xd8,0xfb,0x00,0x35,0x96,0xd8,0x6b,0xac,0xaf,0x9d,0x5c,0xd6,0xcc,0xe5,0xc0,0xbc,0xb6,
|
||||
0x5f,0x86,0xc9,0x17,0xea,0x3d,0x19,0x80,0x68,0xbf,0xd0,0x03,0xd6,0xd5,0xbc,0xa6,0xcd,0xd7,0x50,0xa0,0xab,0x47,0x4f,0xa9,0xd6,0xaa,0x10,0xda,0x9a,0xc2,0x47,0xea,0x69,0x19,0x80,0xf8,0xbe,0xf8,0x9f,0x02,0x0e,0xb6,0xca,0xf6,0x42,0x66,0x3d,0xf0,0x9a,0x61,0x72,0x9c,0x7a,0x5d,0x06,0x20,0xd2,0xe2,0xaf,0xb6,0xc6,0xd3,0x7e,0xa2,
|
||||
0xda,0x30,0xf9,0x44,0xbd,0xef,0x2c,0x41,0x85,0xc0,0x15,0x8c,0xd2,0x39,0x0b,0x19,0x80,0x0c,0x40,0xe7,0x2c,0x64,0x00,0x3e,0xe4,0x10,0x9d,0xb3,0x90,0x01,0xf8,0x73,0xfc,0xbf,0x07,0xd0,0xd3,0x87,0xa7,0xde,0x2b,0x1e,0xa3,0xbf,0x32,0x40,0x06,0xa0,0xf2,0x5f,0xe7,0x2e,0x64,0x00,0x12,0x81,0xce,0x5d,0xd8,0x8d,0x6e,0x03,0x3a,0x5b,
|
||||
0xfe,0x07,0x48,0x3f,0x2c,0xd3,0xc5,0xa7,0x21,0x58,0x03,0x74,0x33,0x4c,0x52,0xca,0x06,0x55,0x00,0x7e,0x64,0x90,0x8f,0xc5,0x0f,0x50,0x05,0xec,0xad,0x34,0x90,0x01,0xa8,0x04,0x56,0x0c,0x84,0x0c,0x40,0xc9,0xaf,0x18,0x08,0xcd,0x01,0xf8,0x63,0xfc,0x1f,0x02,0xd6,0x01,0x9d,0x7c,0x1e,0x8a,0xf5,0x40,0x17,0xc3,0xa4,0x55,0x59,0xa1,
|
||||
0x0a,0xc0,0x4f,0x0c,0x93,0xf8,0x81,0xf4,0xcb,0x4f,0x35,0x0a,0x83,0x0c,0x40,0xa5,0xaf,0x62,0x21,0x64,0x00,0x4a,0x7a,0xc5,0x42,0x68,0x0e,0xa0,0xb0,0xc7,0xff,0x11,0xd2,0x4b,0x6b,0x75,0x50,0x34,0x00,0x68,0x04,0xca,0x0d,0x93,0x66,0x85,0x42,0x15,0x80,0x1f,0x18,0x21,0xf1,0x7f,0x8b,0x0e,0x56,0x4c,0x84,0x0c,0x40,0x25,0xaf,0x62,
|
||||
0x22,0x64,0x00,0x4a,0x76,0xc5,0x44,0x68,0x0e,0xa0,0x00,0xc7,0xff,0x25,0xa4,0x97,0xd4,0x8e,0x28,0x1a,0xdf,0x22,0x01,0x54,0x18,0x26,0x9b,0x15,0x0a,0x55,0x00,0x85,0xcc,0x01,0x12,0xff,0x56,0x89,0x02,0xfb,0x2b,0x0c,0x32,0x00,0x95,0xba,0x8a,0x8d,0x90,0x01,0x28,0xc9,0x15,0x1b,0xa1,0x39,0x80,0xc2,0x1a,0xff,0x77,0x22,0xfd,0xfc,
|
||||
0x7f,0x48,0xd1,0xd8,0x2a,0x2d,0x40,0xa5,0xf6,0x23,0x54,0x05,0x50,0xa8,0x1c,0x28,0xf1,0x6f,0x97,0x22,0x2b,0x46,0x42,0x15,0x40,0x41,0x5d,0xf9,0x8b,0x81,0x9f,0x01,0xbf,0x05,0x7a,0x29,0x22,0xdb,0x65,0x05,0x30,0x09,0xb8,0xc7,0x30,0xd9,0xa2,0x70,0xc8,0x00,0xbc,0x2c,0xfc,0x12,0xe0,0x42,0xe0,0x0a,0xa0,0x87,0x22,0x92,0x11,0x5f,
|
||||
0x02,0x37,0x02,0xff,0xa7,0x5b,0x83,0x32,0x00,0xaf,0x09,0xbf,0x23,0xf0,0x0b,0xe0,0x32,0xa0,0xbb,0x22,0x92,0x15,0xab,0x80,0x9b,0x80,0x3b,0x0d,0x93,0x4d,0x0a,0x87,0x0c,0xc0,0xcd,0xc2,0x2f,0x05,0x7e,0x09,0xfc,0x1a,0xef,0xee,0xe8,0xeb,0x56,0x6a,0x81,0x3f,0x03,0x7f,0x35,0x4c,0x1a,0x14,0x0e,0x19,0x80,0x9b,0x84,0xdf,0x09,0xb8,
|
||||
0x18,0xb8,0x04,0x7f,0x2f,0xf2,0x69,0x07,0x6b,0x81,0xc9,0xc0,0xad,0x86,0xc9,0x06,0x85,0xc3,0x47,0x06,0x10,0x8f,0x11,0x04,0xfe,0x00,0x2c,0x03,0x66,0x18,0x26,0x2b,0x1c,0x6e,0x4f,0x04,0xb8,0x1c,0xf8,0x0d,0x50,0xae,0x74,0xb2,0x95,0x3a,0xe0,0x66,0xe0,0x46,0xc3,0xa4,0xc9,0xe1,0x3c,0xe8,0x05,0x1c,0x01,0xec,0x0a,0x5c,0x67,0x98,
|
||||
0x24,0x65,0x00,0xf9,0x09,0xf4,0x64,0x60,0x5c,0x9b,0x7f,0x7a,0x1f,0x98,0x01,0xbc,0x08,0xcc,0x32,0x4c,0x12,0x36,0xb6,0xa5,0x06,0x98,0x82,0x96,0xb5,0x76,0x9a,0x85,0xc0,0x39,0x86,0xc9,0xbb,0x36,0xf6,0x7d,0x94,0xf4,0xed,0xca,0xd1,0x96,0xf0,0xf7,0x6a,0xf3,0xdf,0x93,0x0d,0x93,0x4b,0x65,0x00,0xb9,0x0f,0xfa,0x38,0xab,0xf4,0xdb,
|
||||
0x16,0x8d,0xc0,0x6b,0x5f,0x19,0x82,0x61,0x62,0xe6,0xa9,0x1d,0x61,0xe0,0x1a,0xe0,0x4a,0xd2,0xf7,0xad,0x85,0xf3,0xb4,0x00,0x37,0x00,0x7f,0xcc,0xd7,0xa2,0x22,0xf1,0x18,0xb1,0x36,0x82,0x3f,0x98,0xed,0xaf,0xe7,0x30,0xce,0x30,0xb9,0x55,0x06,0x90,0xbb,0xe0,0x1f,0x07,0x3c,0x49,0x66,0x0f,0x2e,0x2d,0xb3,0x2a,0x83,0x19,0xc0,0x2b,
|
||||
0xb9,0x78,0xba,0x2c,0x1e,0x63,0xa8,0x75,0xd5,0x1f,0x24,0xcd,0xb9,0x92,0x05,0xc0,0xb9,0xb9,0xa8,0x06,0xe2,0x31,0xca,0x00,0xc3,0x12,0xfd,0x68,0xa0,0x3a,0x83,0x8f,0x27,0x81,0x13,0x0c,0x93,0xa7,0x65,0x00,0xd9,0x77,0xc4,0x70,0xeb,0xca,0x5e,0x92,0xc5,0xaf,0x69,0x06,0xde,0x6c,0x63,0x08,0xef,0x65,0xb2,0x1d,0x95,0x75,0xd5,0xbf,
|
||||
0x1a,0xb8,0x4a,0x57,0x7d,0xd7,0xd3,0x0c,0x4c,0x04,0x26,0x64,0x52,0x0d,0x58,0xdb,0xb4,0x0d,0x6d,0x73,0x95,0xdf,0x0f,0x08,0x67,0xd1,0x8e,0x46,0xe0,0x60,0xc3,0x64,0xae,0x0c,0x60,0xc7,0xc5,0x5f,0x0d,0xcc,0x01,0xba,0xe5,0xf8,0x57,0xaf,0x02,0x5e,0xb2,0x0c,0xe1,0x25,0xc3,0xa4,0x76,0x3b,0x6d,0x18,0x62,0x5d,0xf5,0x07,0x4b,0x5b,
|
||||
0x9e,0x62,0xbe,0x35,0x37,0x30,0x7f,0x3b,0x7d,0xdb,0x15,0x38,0xdc,0x12,0xfc,0x61,0xe4,0xfe,0x99,0x8d,0xd5,0xc0,0x48,0xc3,0x64,0x99,0x0c,0x20,0x73,0xf1,0x57,0x58,0x57,0xed,0x3d,0xf2,0x7c,0xa8,0x14,0x30,0xaf,0x4d,0x75,0xf0,0x2f,0xc3,0xa4,0xc5,0xba,0xea,0xff,0xce,0xba,0xea,0x87,0xa5,0x27,0xcf,0x56,0x03,0x13,0x80,0x89,0x86,
|
||||
0x49,0x73,0x3c,0x46,0x91,0x75,0x65,0x3f,0xc2,0xba,0xd2,0xd7,0xd8,0xa0,0x81,0x0f,0x80,0xfd,0x0d,0x93,0x3a,0x19,0x40,0xfb,0xc5,0x1f,0xb5,0xae,0xd0,0x07,0x39,0x70,0xf8,0x0d,0x40,0xdc,0x1a,0xf3,0x0d,0x91,0x86,0x0a,0x82,0xf7,0x48,0xcf,0x09,0x19,0x38,0xb3,0x19,0xcb,0x4c,0xe0,0x30,0xa7,0x6f,0x57,0x7a,0xc2,0x00,0xac,0xb1,0xd8,
|
||||
0x54,0xe0,0x34,0xe5,0xad,0x28,0x20,0xa6,0x01,0x67,0xba,0x6d,0x2b,0x74,0x37,0xbe,0x0e,0x3c,0x5e,0xe2,0x17,0x05,0xc8,0xe9,0xc0,0x1f,0x55,0x01,0x6c,0xff,0xea,0x3f,0x16,0xb8,0x47,0xb9,0x22,0x0a,0x98,0xb1,0x86,0xc9,0xbd,0x32,0x80,0xef,0x8b,0xff,0x50,0xe0,0x05,0x74,0x9b,0x4d,0x14,0x36,0x2d,0xc0,0x91,0x86,0xc9,0x3f,0x65,0x00,
|
||||
0xdf,0x88,0xbf,0x02,0x58,0x04,0xf4,0x54,0x7e,0x08,0x1f,0xf0,0x25,0x30,0xd0,0x0d,0x77,0x06,0xdc,0x32,0x07,0x70,0xab,0xc4,0x2f,0x7c,0x44,0x4f,0xe0,0x16,0x55,0x00,0xe9,0xab,0xff,0x18,0xe0,0x19,0xe5,0x84,0xf0,0x21,0x63,0x0c,0x93,0xe7,0x7c,0x6b,0x00,0x2a,0xfd,0x85,0x86,0x02,0xce,0x0e,0x05,0x9c,0x1e,0x02,0xdc,0x22,0xf1,0x0b,
|
||||
0x9f,0x0f,0x05,0x26,0xfb,0xb2,0x02,0x50,0xe9,0x2f,0x84,0xf3,0x43,0x81,0x80,0x43,0xe2,0x57,0xe9,0x2f,0xc4,0x37,0xac,0xb0,0x86,0x02,0xf5,0x7e,0x19,0x02,0xa8,0xf4,0x17,0xe2,0x1b,0x7a,0xe1,0xd0,0x5d,0x01,0xdb,0x2b,0x00,0x95,0xfe,0x42,0xb8,0x67,0x28,0x10,0xb0,0x59,0xfc,0x2a,0xfd,0x85,0x70,0xd1,0x50,0xc0,0xee,0x21,0x80,0x4a,
|
||||
0x7f,0x21,0x5c,0x34,0x14,0xb0,0xad,0x02,0x88,0xc7,0x38,0x1a,0x78,0x56,0x7d,0x2c,0x84,0x7b,0x86,0x02,0x01,0x9b,0xc4,0x1f,0x05,0x96,0x00,0x7d,0xd4,0xb7,0x42,0xfc,0x20,0x9f,0x03,0xbb,0xdb,0xb1,0x80,0x88,0x5d,0x43,0x80,0xf3,0x25,0x7e,0x21,0xda,0x4d,0x1f,0x4b,0x33,0xde,0xaf,0x00,0xac,0xdd,0x73,0x96,0xca,0x00,0x84,0xc8,0x88,
|
||||
0xcf,0x80,0x7e,0xf9,0xae,0x02,0xec,0xa8,0x00,0x7e,0x2a,0xf1,0x0b,0x91,0x31,0x3b,0x03,0xe7,0x7a,0xba,0x02,0xb0,0x56,0xd6,0x5d,0x02,0xec,0xa2,0xfe,0x14,0x22,0x63,0x3e,0xb5,0xaa,0x80,0xe6,0x7c,0x1d,0x20,0xdf,0x15,0xc0,0x39,0x12,0xbf,0x10,0x3b,0xcc,0x2e,0xc0,0xd9,0x9e,0xac,0x00,0xac,0x35,0xd8,0x4d,0x32,0xdb,0x52,0x49,0x08,
|
||||
0xf1,0x6d,0x96,0x01,0x31,0xc3,0xa4,0xc5,0x6b,0x15,0xc0,0xd9,0x12,0xbf,0x10,0x59,0x53,0x0d,0x9c,0xe5,0xa9,0x0a,0xc0,0xba,0xfa,0x7f,0x08,0xec,0xa6,0xfe,0x13,0x22,0x6b,0x3e,0x02,0xfa,0x1b,0x26,0xad,0x5e,0xa9,0x00,0xce,0x90,0xf8,0x85,0xc8,0x19,0x7d,0x2d,0x4d,0xb9,0xbf,0x02,0x88,0xc7,0x08,0x91,0xde,0x0f,0x6d,0x77,0xf5,0x9b,
|
||||
0x10,0x39,0x63,0x09,0xb0,0x67,0xae,0xab,0x80,0x7c,0xac,0xc1,0x7f,0xba,0xc4,0xff,0x03,0x65,0x57,0x38,0x42,0x97,0x51,0x63,0xe8,0x75,0xf2,0x58,0x2a,0xf6,0xfd,0x11,0x00,0xa9,0x54,0x0a,0x48,0x41,0x32,0x99,0xfe,0xb3,0xf5,0x95,0x4a,0x25,0xbf,0xfe,0x33,0xa9,0x14,0xa9,0x64,0x32,0xfd,0x73,0xa9,0x54,0xfa,0xe7,0xda,0xfe,0x3c,0xd6,
|
||||
0xff,0x6f,0xe3,0xf3,0x5f,0xfd,0x3c,0xa4,0xbe,0xf9,0xcc,0xb7,0x8e,0xf7,0x9d,0x63,0x6f,0xe5,0x58,0xa4,0x52,0xa4,0xd8,0xda,0x67,0xdb,0xd7,0xd6,0xb6,0x9f,0x5f,0xf9,0xf4,0xc3,0xac,0x79,0x45,0x6f,0x86,0xb7,0x93,0x7e,0xa4,0x77,0xcc,0x7a,0xd8,0xb5,0x15,0x40,0x3c,0x46,0x10,0x58,0x0c,0xc4,0xd4,0x5f,0xed,0xa3,0xc3,0x2e,0xfd,0xe8,
|
||||
0x79,0xca,0x58,0x7a,0x1e,0x7f,0x2e,0x91,0x2e,0xdd,0x7c,0x75,0xee,0xa9,0x96,0x66,0x16,0x5c,0x78,0x0c,0x6b,0x67,0xcd,0x50,0x22,0xb4,0x8f,0x0f,0x81,0x01,0x86,0x49,0xd2,0xad,0x06,0x70,0x2a,0xf0,0x88,0xfa,0x69,0x07,0xab,0x82,0x43,0x8e,0x66,0xe7,0xf3,0x7e,0x43,0xe7,0xa1,0xfb,0xf9,0xe6,0xbc,0x93,0x89,0x2d,0xcc,0x1f,0x7b,0x24,
|
||||
0x75,0x6f,0xbd,0xa6,0x24,0x68,0x1f,0xa7,0x19,0x26,0x8f,0xe6,0x2c,0xef,0x72,0xdc,0xb8,0xf3,0xd5,0x3f,0x3b,0x28,0x84,0xe6,0x26,0x6a,0x5f,0xfa,0x07,0xf3,0xce,0x38,0x90,0x25,0x37,0xfc,0x9a,0x64,0x62,0x8b,0x3f,0x8c,0x2f,0x5a,0xcc,0xa0,0xbb,0x9f,0xa3,0xd3,0x90,0x91,0x4a,0x82,0xf6,0x71,0x9e,0x2b,0x87,0x00,0xf1,0x18,0xdd,0x48,
|
||||
0xaf,0x68,0x12,0x52,0x1f,0xe5,0x60,0x68,0xb0,0xdb,0x1e,0x0c,0x98,0x34,0x85,0x4e,0x83,0x47,0xf8,0xe2,0x7c,0x5b,0x36,0xd4,0x33,0xef,0xec,0x43,0x68,0x58,0xfc,0x9e,0x3a,0x7f,0xfb,0xb4,0x02,0x3d,0x0d,0x93,0x5a,0xb7,0x55,0x00,0x27,0x4b,0xfc,0xb9,0xa3,0xf1,0xe3,0x0f,0x78,0xe7,0xb4,0xff,0xe2,0xa3,0x9b,0xaf,0x24,0xd9,0xdc,0x54,
|
||||
0xf0,0xe7,0x5b,0xd4,0xa9,0x9c,0xa1,0xf7,0xbf,0x4c,0xc7,0xdd,0x07,0xa8,0xf3,0xb7,0x4f,0xc8,0xd2,0x9a,0xeb,0x86,0x00,0xa7,0xaa,0x6f,0x72,0x4b,0xaa,0xb5,0x85,0x4f,0xef,0x9e,0xc4,0xdc,0xe3,0x87,0xd1,0xb8,0xec,0xc3,0x82,0x3f,0xdf,0x70,0x45,0x15,0x43,0xa7,0xfc,0x93,0x92,0x9d,0xfb,0xaa,0xf3,0x6d,0xd2,0x5a,0x4e,0x86,0x00,0xf1,
|
||||
0x18,0xbd,0x49,0xbf,0xbf,0x1c,0x50,0xdf,0xe4,0x87,0x68,0xf7,0x9d,0xa8,0x99,0x36,0x8b,0x92,0xde,0x85,0xff,0x74,0xf5,0x96,0x15,0x9f,0x32,0xef,0x8c,0x83,0xd8,0xb2,0xe2,0x33,0x75,0xfc,0x36,0xae,0x0d,0x40,0x1f,0xc3,0x64,0xb9,0x5b,0x0c,0xe0,0x32,0xe0,0x26,0xbf,0xf5,0x42,0x51,0x69,0x80,0x8a,0xbd,0x22,0x14,0x77,0x0d,0x11,0xad,
|
||||
0x08,0x12,0xa9,0x08,0x12,0xad,0x0c,0x12,0x0c,0x07,0x48,0xac,0x4b,0xd2,0xb4,0x2e,0x49,0xa2,0xae,0x95,0xc4,0xda,0x24,0xf5,0x8b,0x9b,0xd9,0x52,0x9b,0xdd,0x33,0x1c,0x25,0xbd,0xab,0xa9,0x99,0x36,0x8b,0x68,0xf7,0x9d,0x0a,0x7f,0x08,0xf4,0xe9,0x12,0xe6,0x9d,0x7e,0x10,0x4d,0x6b,0x56,0x4a,0xee,0x5b,0xe7,0x32,0xc3,0xe4,0xcf,0x6e,
|
||||
0x31,0x80,0xb9,0xc0,0x3e,0x7e,0x88,0x7a,0x71,0x55,0x88,0xaa,0xe1,0x11,0xba,0x0e,0x8f,0x52,0x3e,0x20,0x42,0x20,0x83,0x59,0x8f,0x86,0x65,0x2d,0xd4,0xbe,0x95,0xa0,0x76,0x6e,0x82,0x86,0x4f,0x5a,0xd2,0x3e,0x9e,0x21,0x1d,0xaa,0xfb,0x53,0x33,0x75,0xa6,0x2f,0x9e,0x19,0xd8,0xb4,0x64,0x11,0xf3,0xce,0x3a,0x98,0xe6,0xba,0x35,0x92,
|
||||
0xfb,0xf7,0x99,0x6b,0x98,0x0c,0x77,0xdc,0x00,0xe2,0x31,0xfa,0x92,0x5e,0xf2,0xab,0xa0,0xe9,0xd0,0x2b,0x44,0xdf,0x33,0x4b,0xe9,0x3a,0x22,0x9a,0x93,0xdf,0xb7,0xf1,0xa3,0x16,0x96,0x3e,0xd4,0x40,0xdd,0xc2,0xcc,0x27,0xf8,0x4a,0xfb,0x0f,0xa2,0xe6,0xe1,0xd7,0x28,0xea,0x54,0x51,0xf0,0x59,0xbe,0x71,0xd1,0x3c,0xde,0x3d,0x67,0x14,
|
||||
0x2d,0x1b,0xd7,0x4b,0xf2,0xdf,0xa7,0xaf,0x61,0xf2,0x71,0x36,0xbf,0x20,0x17,0x93,0x80,0x05,0x3d,0xf9,0x17,0xa9,0x08,0xd2,0xff,0x82,0x32,0x46,0xdc,0xd2,0x25,0x67,0xe2,0x07,0x28,0xeb,0x5b,0xc4,0xd0,0xeb,0xca,0x19,0x72,0x4d,0x39,0xa5,0xbb,0x66,0xf6,0x44,0x76,0xc3,0x87,0x0b,0x78,0xef,0xfc,0x23,0x7c,0xf1,0xac,0x40,0xd9,0xc0,
|
||||
0x1a,0x06,0xdf,0xf3,0x3c,0xa1,0x0e,0xa5,0x92,0x7b,0x1e,0xb4,0x97,0xf5,0x6d,0xbb,0x73,0xba,0x70,0x07,0x50,0x90,0xf5,0x68,0xf7,0xff,0x2a,0x66,0xe8,0x75,0xe5,0x74,0xee,0x1f,0x26,0x90,0xa7,0xe9,0xcd,0x92,0x1e,0x21,0x76,0x3a,0xbc,0x84,0x60,0x24,0x40,0xfd,0xfb,0x4d,0xed,0x1e,0x16,0x24,0x56,0x2d,0x87,0x40,0x80,0x8a,0x91,0xa3,
|
||||
0x0a,0x7f,0xd8,0xd5,0xb3,0x0f,0x9d,0x87,0x8c,0x64,0xf5,0x8c,0x27,0x48,0xb5,0xb4,0x48,0xf6,0xdf,0xd0,0xed,0xc1,0xb5,0xdc,0xe9,0xd8,0x10,0x20,0x1e,0x63,0x20,0xf0,0x7e,0xa1,0x45,0x35,0x10,0x80,0xea,0xd3,0x3a,0xb2,0xeb,0x89,0x1d,0x6d,0x3d,0xee,0xda,0x77,0x9a,0x58,0xf4,0x97,0xf5,0xb4,0x6c,0x6e,0x9f,0x0b,0x04,0x23,0x51,0x86,
|
||||
0x3f,0xb7,0x90,0x0e,0xbb,0xf4,0xf3,0x45,0xb6,0xaf,0x7d,0xfd,0x79,0x16,0x5e,0x74,0xbc,0x2f,0x9e,0x8b,0xc8,0x80,0x81,0x86,0xc9,0x7f,0x9c,0x1a,0x02,0x14,0x5c,0xf9,0x1f,0x2a,0x0e,0xb0,0xd7,0x15,0x9d,0x6d,0x17,0x3f,0x40,0x97,0x61,0x11,0x86,0x4d,0xaa,0xa0,0xa4,0x7b,0xfb,0x0a,0xb3,0x64,0x53,0x02,0xf3,0xfa,0x5f,0xfa,0x26,0xd3,
|
||||
0xbb,0xfc,0xe8,0x28,0x06,0xdc,0x3c,0x95,0x40,0xa8,0x48,0xb2,0xcf,0x91,0x06,0xb3,0x35,0x80,0x9f,0x14,0xd4,0x95,0x3f,0x04,0x83,0xae,0xec,0x4c,0xd7,0xe1,0x51,0xc7,0xda,0xd0,0xb1,0x77,0x11,0x35,0xe3,0x2b,0x88,0x56,0xb6,0xaf,0x6b,0xd6,0xbd,0xf1,0x12,0xab,0x67,0x3c,0xe1,0x9f,0x9a,0x77,0xf4,0x49,0xec,0x79,0xc3,0x7d,0x04,0x82,
|
||||
0x41,0x49,0x3f,0x07,0x1a,0xdc,0xe1,0x28,0xc6,0x63,0xd4,0x90,0x7e,0x47,0xb9,0x60,0x88,0x9d,0x5f,0x46,0xc5,0x5e,0x11,0xc7,0xdb,0x11,0xad,0x0c,0xb2,0xf7,0x6f,0x3b,0x13,0x8c,0xb4,0x6f,0x84,0xb6,0x64,0xe2,0xa5,0xb4,0x36,0x36,0xf8,0x26,0xe3,0x7b,0x1c,0x7b,0x16,0xb1,0x6b,0x6f,0x27,0x6f,0x13,0x33,0x1e,0x4b,0x5b,0x4b,0x8b,0x3b,
|
||||
0x56,0xf1,0xee,0xe8,0x07,0xcf,0xe9,0x42,0x23,0x70,0x08,0xd0,0xbb,0x10,0xa2,0xb8,0xd3,0x11,0x25,0x54,0x9f,0xd2,0xd1,0x35,0xed,0x89,0x56,0x86,0x28,0xe9,0x1e,0xa2,0xf6,0xdf,0x89,0x1f,0xfc,0xd9,0xd6,0x4d,0x1b,0x69,0x5e,0xbb,0x9a,0x50,0x59,0x27,0x9a,0x56,0xaf,0xa0,0x79,0xed,0x2a,0x9a,0xeb,0xd6,0xd0,0xb2,0xa1,0x8e,0x96,0x86,
|
||||
0x0d,0x24,0x37,0x6f,0x22,0x99,0xd8,0x42,0xaa,0xa5,0x99,0x54,0x32,0x49,0x20,0x18,0xf0,0xfc,0x15,0xb4,0xd3,0xde,0xfb,0x10,0xea,0x58,0xc6,0xba,0xd9,0x2f,0xfb,0xdd,0x00,0xe6,0x00,0xb7,0x3d,0xb8,0x96,0xc4,0x8e,0x7c,0x38,0xdb,0x49,0xc0,0x4e,0xc0,0x0b,0xc0,0xfe,0x9e,0x4e,0xa6,0x58,0x98,0x61,0x13,0x2a,0x08,0xb8,0x50,0x13,0x4b,
|
||||
0xee,0x6b,0xe0,0xf3,0xe9,0x8d,0xb9,0x1f,0xee,0x04,0x83,0x04,0x8a,0xc2,0x04,0xc2,0x11,0x82,0xe1,0xc8,0xd7,0xdf,0x83,0xe1,0x08,0x81,0xc8,0xb7,0xff,0x6d,0x5b,0x3f,0x13,0x28,0x0a,0x7f,0xf3,0x77,0xeb,0x7b,0xb8,0xbc,0x0b,0x3b,0x9d,0x71,0x11,0x81,0x90,0x3d,0xef,0x85,0x2d,0xb8,0x70,0x0c,0x6b,0x5e,0x7d,0xce,0xaf,0xe2,0x9f,0x0d,
|
||||
0x1c,0x69,0x98,0x6c,0xdc,0xd1,0x5f,0x90,0xd5,0x6c,0x8a,0x61,0xb2,0x21,0x1e,0x63,0x34,0x30,0x1d,0x38,0xc8,0x9b,0x03,0x7f,0xe8,0x77,0x6e,0xa9,0x2b,0xc5,0x0f,0x50,0x7d,0x6a,0x47,0x56,0xce,0xdc,0x42,0xf3,0xc6,0x64,0x4e,0x7f,0x6f,0x2a,0x99,0x24,0xd5,0x94,0x80,0xa6,0x44,0xce,0x16,0x99,0x8b,0x76,0xeb,0xc5,0xe0,0xbb,0xa7,0xdb,
|
||||
0x26,0xfe,0x2f,0x1e,0xba,0x8d,0x35,0xaf,0x4d,0xf7,0xab,0xf8,0x5f,0x07,0x8e,0x36,0x4c,0xb2,0x1a,0xfb,0x65,0x9d,0xf6,0x56,0x03,0x8e,0x04,0x5e,0xf1,0x62,0x14,0xbb,0x0e,0x8f,0xd2,0xb9,0x7f,0xd8,0xb5,0xed,0x2b,0xea,0x10,0x60,0x97,0x13,0x3b,0xb8,0x3e,0x8e,0x1d,0xfb,0xed,0xc5,0xb0,0xc7,0xe7,0x50,0xba,0xe7,0x10,0xdb,0xc4,0x6f,
|
||||
0x4e,0x18,0x67,0xad,0x85,0xe8,0x3b,0xe2,0xc0,0x51,0xd9,0x8a,0x3f,0x27,0x06,0x60,0x99,0x40,0x23,0x70,0x34,0xf0,0x92,0xa7,0x2e,0xfe,0x21,0xe8,0x7b,0xa6,0xfb,0x9f,0x30,0xeb,0x7d,0x64,0x09,0xc5,0xdd,0xdc,0xbb,0xd4,0x42,0xc5,0x7e,0x06,0xc3,0x1e,0x9d,0x4d,0x71,0xcf,0x3e,0x12,0x7f,0xfe,0x79,0x11,0x18,0x63,0x69,0x0e,0x57,0x18,
|
||||
0x80,0x65,0x02,0x9b,0x81,0x63,0x80,0xe7,0xbd,0x12,0xc9,0xee,0x07,0x16,0xd3,0xa1,0x97,0xfb,0xd7,0x30,0x09,0x16,0x05,0xd8,0xf5,0x04,0x77,0x56,0x01,0x3d,0x8e,0x3b,0x9b,0x21,0xf7,0xce,0xa0,0xa8,0xb4,0x93,0xc4,0x9f,0x7f,0xa6,0x03,0xc7,0x5a,0x5a,0xc3,0x55,0x06,0x60,0x99,0x40,0x02,0x38,0x1e,0xf0,0xc4,0x5a,0xcf,0xdd,0xf6,0x8b,
|
||||
0x7a,0xa6,0xe7,0xbb,0x8e,0x8c,0x66,0xf4,0xe6,0x61,0xfe,0xcb,0xa7,0x00,0xd5,0x17,0x5d,0xcb,0x80,0x3f,0x3d,0x60,0xdb,0x83,0x39,0x3e,0x17,0xff,0xd3,0xc0,0x09,0x96,0xc6,0x70,0xa5,0x01,0x58,0x26,0xd0,0x04,0x9c,0x04,0x3c,0xe9,0xe6,0x68,0x86,0x8a,0x03,0x54,0x0e,0x8e,0x78,0xa6,0xf7,0xc3,0x65,0x41,0xd7,0xcc,0x55,0x04,0x8a,0xc2,
|
||||
0xec,0x39,0xe1,0x5e,0xaa,0x2f,0xfe,0x83,0x6d,0xc7,0xf4,0xb9,0xf8,0x9f,0x04,0x4e,0xb6,0xb4,0x85,0xab,0x0d,0xc0,0x32,0x81,0x66,0xd2,0x8f,0x28,0x3e,0xee,0xd6,0x88,0x56,0x0e,0x89,0x10,0x0c,0x7b,0xeb,0x41,0x12,0x27,0x9f,0x50,0xfc,0x8a,0xa2,0xd2,0x4e,0x0c,0xbe,0x7b,0x3a,0x3d,0x4f,0xfc,0xa9,0xc4,0x6f,0x0f,0x8f,0x01,0xa7,0x5a,
|
||||
0x9a,0xc2,0x13,0x06,0x60,0x99,0x40,0x0b,0xe9,0x5d,0x82,0xa6,0xba,0x31,0xaa,0x55,0xfb,0x46,0x3d,0x97,0x09,0x55,0x0e,0x1b,0x40,0xb4,0x47,0x6f,0x6a,0xa6,0xcd,0xa2,0xf2,0x80,0xc3,0x24,0x7e,0x7b,0x78,0x18,0x38,0x23,0x5f,0x5b,0x83,0xe7,0xd5,0x00,0x2c,0x13,0x68,0x25,0xbd,0x4d,0xf8,0x14,0xb7,0x45,0xb6,0xb4,0x8f,0xf7,0x5e,0x28,
|
||||
0x29,0xe9,0x1e,0x6a,0xf7,0xe3,0xc1,0x39,0x8f,0x57,0xff,0x41,0xec,0xf3,0xf8,0x1c,0x4a,0xfb,0x0f,0x92,0xf8,0xed,0xe1,0x7e,0xe0,0x9c,0x7c,0xec,0x08,0x6c,0x9b,0x01,0x58,0x26,0x90,0x24,0xbd,0x99,0xc1,0x3d,0x6e,0x8a,0x6e,0x7b,0x5f,0xb6,0x71,0x1b,0xd1,0x0a,0xfb,0xdb,0x5d,0x79,0xc0,0x61,0x0c,0x7b,0xe4,0x0d,0x5b,0xd7,0x22,0xf4,
|
||||
0xb9,0xf8,0xef,0x01,0xce,0xcf,0xe5,0x16,0x60,0x8e,0x19,0x80,0x65,0x02,0x29,0xe0,0x02,0xe0,0x0e,0x37,0x44,0x37,0x10,0x82,0x70,0xb9,0x47,0x0d,0xc0,0x66,0xe3,0xea,0x79,0xe2,0x4f,0xd3,0x2b,0xf2,0x74,0x2c,0x93,0xf8,0xed,0xe1,0x0e,0xe0,0x02,0x4b,0x33,0x79,0xc7,0xb6,0x3a,0xd8,0x3a,0xa1,0x8b,0xe2,0x31,0x9a,0x81,0x71,0x4e,0x46,
|
||||
0x38,0xd2,0x39,0xe8,0xd9,0x17,0xc9,0x22,0x76,0x55,0x00,0x81,0x00,0xd5,0xbf,0xba,0x8e,0xea,0x8b,0xae,0xb5,0xf5,0xfc,0x7c,0x2e,0xfe,0xc9,0x86,0xc9,0xa5,0x76,0x1e,0xd0,0xf6,0xcb,0xa0,0x61,0x72,0x09,0x0e,0x2f,0x21,0x1e,0x2e,0xf3,0xee,0x9b,0x70,0xe1,0x4e,0xf9,0x6f,0x7b,0x30,0x1c,0x61,0xc0,0xa4,0x29,0x12,0xbf,0xbd,0xdc,0x68,
|
||||
0xb7,0xf8,0x1d,0x31,0x00,0xcb,0x04,0x2e,0x07,0x6e,0x70,0x2a,0xd2,0xb9,0x7e,0xb1,0xc6,0xd6,0xb6,0x6f,0xc8,0x6f,0xdb,0x8b,0xca,0x3a,0x33,0xf8,0x6f,0x2f,0xd0,0xe3,0xb8,0xb3,0x25,0x7e,0xfb,0x98,0x68,0x98,0x5c,0xe1,0xc4,0x81,0x1d,0xbb,0x14,0x1a,0x26,0x57,0x01,0xd7,0x3b,0x71,0xec,0xa6,0xf5,0x49,0xf0,0x68,0x9e,0x35,0xd5,0xe5,
|
||||
0xcf,0x00,0x8a,0x7b,0xf6,0x61,0xd8,0x23,0x6f,0xd8,0xbe,0xd0,0xa8,0xcf,0xc5,0xff,0x07,0xc3,0xe4,0x77,0x4e,0x1d,0xdc,0xd1,0x5a,0xd8,0x30,0xf9,0x3d,0x70,0x8d,0xdd,0xc7,0x4d,0xb5,0x5a,0x26,0xe0,0x41,0x12,0x79,0x32,0x80,0xd2,0x3d,0x87,0x30,0xec,0xf1,0x39,0x74,0xec,0xb7,0x97,0xc4,0x6f,0x1f,0x57,0x1b,0x26,0xd7,0x39,0xd9,0x00,
|
||||
0xc7,0x07,0xc3,0x86,0xc9,0x78,0xe0,0x16,0xdb,0x85,0xb4,0xce,0x9b,0x06,0x90,0x8f,0x0a,0xa0,0xcb,0x81,0x47,0x30,0x6c,0xda,0x2c,0xa2,0xdd,0x7a,0x49,0xfc,0xf6,0x31,0xd9,0x30,0x99,0xe0,0x74,0x23,0xdc,0x32,0x1b,0xf6,0xb9,0xdd,0x07,0xdc,0xf4,0x85,0xf7,0xd6,0x97,0xdf,0xb2,0xba,0x95,0xd6,0x44,0x6e,0xc5,0xd2,0xeb,0xe4,0xb1,0x0c,
|
||||
0xba,0xeb,0x39,0xdb,0x37,0xde,0xf0,0xb9,0xf8,0x1d,0xc9,0x79,0x37,0x1b,0x40,0xb9,0xdd,0x07,0x5c,0x33,0x37,0xe1,0xb9,0x8c,0x59,0x33,0x37,0x87,0xef,0x82,0x04,0x02,0xec,0x76,0xc9,0x78,0xf6,0x18,0x7f,0x8f,0x6d,0x2b,0xf8,0x48,0xfc,0xce,0xe6,0xfc,0xd6,0x70,0xcb,0xf3,0xb0,0xb6,0x6f,0x72,0xb7,0xf6,0xdd,0x26,0x92,0x2d,0x29,0x82,
|
||||
0x45,0xde,0x79,0x20,0xa0,0xf6,0xad,0xdc,0x98,0x56,0x30,0x1c,0x61,0x8f,0x89,0xf7,0xd2,0xe3,0x98,0x33,0x6d,0x3f,0x07,0x89,0xdf,0xb9,0x9c,0x77,0x73,0x05,0x60,0x7b,0x30,0x5a,0x37,0xa7,0xa8,0x5b,0xd0,0xec,0x99,0x6c,0x69,0x69,0x48,0x51,0xbf,0x38,0xfb,0x0a,0xa0,0xa8,0x53,0x39,0x83,0xef,0x9d,0x21,0xf1,0xcb,0x00,0xfc,0x6d,0x00,
|
||||
0x00,0xab,0xff,0xe5,0x9d,0xcd,0x35,0x6b,0xdf,0x4a,0x90,0xca,0xf2,0xb5,0x90,0xe2,0x5e,0xbb,0x30,0xec,0x91,0xd9,0x54,0x8c,0x38,0x44,0xe2,0x97,0x01,0xf8,0x7b,0x0e,0x00,0x60,0xd5,0xcc,0x04,0x9b,0x57,0xb6,0xba,0x3e,0x53,0x52,0xad,0xf0,0xc9,0xdf,0x37,0x65,0xf5,0x3b,0xca,0x06,0xd6,0xb0,0xcf,0x13,0x73,0xe8,0xb8,0xfb,0x00,0x89,
|
||||
0x5f,0x73,0x00,0xaa,0x00,0x00,0x92,0x2d,0x29,0x3e,0x9a,0xea,0xfe,0x1d,0x75,0x96,0xcf,0xd8,0xcc,0xe6,0x55,0x3b,0x6e,0x54,0x5d,0x7e,0x74,0x14,0x35,0x53,0x67,0x12,0xa9,0xea,0x21,0xf1,0xab,0x02,0x90,0x01,0x7c,0x7b,0x18,0x90,0x60,0xc3,0x52,0xf7,0xce,0x05,0xb4,0x6e,0x4e,0xb1,0x2c,0x8b,0xab,0x7f,0xaf,0x9f,0xfc,0x8c,0x41,0x77,
|
||||
0x3e,0x43,0xa8,0xa4,0xa3,0xc4,0x2f,0x03,0xd0,0x10,0xe0,0xfb,0xf5,0x35,0x2c,0x9d,0xd2,0xe0,0xda,0x1c,0x5d,0xf6,0xc4,0xa6,0x1d,0x7a,0xfe,0x3f,0x10,0x0c,0xd2,0xf7,0xd7,0x13,0xd9,0xe3,0xfa,0xbb,0x6c,0xbf,0xcd,0x27,0xf1,0xcb,0x00,0xda,0x4d,0x3c,0x46,0x09,0xe0,0xe8,0x5a,0x57,0xf5,0x8b,0x9b,0x59,0x3a,0xc5,0x7d,0x43,0x81,0xd5,
|
||||
0xff,0x4a,0xf0,0xf9,0x33,0x99,0x2f,0xff,0x1e,0x8c,0x44,0x19,0x70,0xe3,0xc3,0xec,0x72,0xc1,0x95,0x8e,0xb4,0x5b,0xe2,0x6f,0x17,0xd1,0x78,0x8c,0x62,0x55,0x00,0x2e,0x71,0xc2,0xcf,0xa7,0x37,0xf2,0xe5,0x2b,0xee,0xb9,0x2b,0xb0,0x71,0x59,0x0b,0x8b,0x6f,0xdb,0x90,0xb1,0x86,0xc2,0x9d,0x2b,0x19,0x72,0xdf,0x4b,0x74,0x3f,0xfa,0x34,
|
||||
0x89,0x5f,0x55,0x80,0x0c,0x20,0x93,0xa1,0xc0,0x87,0x77,0x6f,0xa4,0x7e,0xb1,0xf3,0xf3,0x01,0x4d,0xf5,0x49,0x16,0x4e,0x5a,0x9f,0xf1,0x63,0xbf,0x25,0xbd,0xab,0x19,0xf6,0xe8,0x6c,0xca,0xf7,0x3d,0x48,0xe2,0x97,0x01,0x78,0x6a,0x0e,0xc0,0x15,0x24,0x9b,0x53,0x2c,0x98,0x58,0xcf,0xda,0x79,0x4d,0x8e,0xb5,0xa1,0xf1,0xcb,0x56,0xe6,
|
||||
0x5d,0x5b,0xc7,0x96,0x35,0x99,0xcd,0xfa,0x97,0xed,0xb5,0x0f,0xc3,0x1e,0x9f,0x43,0x87,0xdd,0xf6,0x90,0xf8,0x85,0xa7,0x0c,0xa0,0xce,0x4d,0x01,0x69,0x69,0x4c,0xb1,0xe0,0x86,0x7a,0x3e,0x7b,0xa6,0xd1,0xf6,0x63,0xaf,0x9b,0xdf,0xc4,0xdb,0xff,0xb3,0x8e,0xc6,0xe5,0x99,0x89,0xbf,0x6a,0xd4,0x18,0x6a,0x1e,0x7e,0x9d,0x48,0x97,0x6e,
|
||||
0x12,0xbf,0xb7,0xa8,0x93,0x01,0xb8,0xcc,0x00,0x00,0x52,0x49,0x58,0xfa,0x40,0x03,0x8b,0xff,0xba,0x81,0x64,0xb3,0x3d,0x49,0xfd,0xf9,0xf4,0x46,0xe6,0x4f,0xa8,0xa7,0xa5,0x21,0xb3,0xe3,0xed,0x74,0xfa,0x2f,0xd8,0xfb,0xf6,0xa7,0x08,0x95,0x38,0xb3,0x77,0xe0,0xca,0xa7,0x1e,0x94,0xf8,0x3d,0x9c,0xfb,0xae,0x78,0x13,0x26,0x1e,0x63,
|
||||
0x0b,0x0e,0xdf,0x09,0xd8,0x16,0xc5,0x55,0x21,0xaa,0x4f,0xed,0x48,0xcf,0x83,0x8b,0xf3,0x12,0xad,0xfa,0x45,0xcd,0x2c,0x7d,0xa8,0x81,0x0d,0x4b,0x32,0x9b,0x7b,0x08,0x04,0x83,0xf4,0xbd,0x6c,0x12,0x3b,0x8f,0xbd,0xdc,0xd9,0xf9,0x8a,0x35,0x2b,0x99,0x77,0xd6,0x21,0x34,0x7e,0xfc,0x81,0xe4,0x9c,0x19,0x09,0xc3,0x74,0xfe,0x2e,0x80,
|
||||
0x5b,0x0c,0x60,0x25,0xd0,0xdd,0xcd,0xbd,0x55,0xba,0x4b,0x11,0x7d,0xcf,0x2c,0xa5,0x4b,0x4d,0x6e,0xf6,0x13,0xdc,0xf4,0x59,0x0b,0x4b,0x1f,0x6a,0x60,0xed,0xbb,0x4d,0x19,0x2f,0x4f,0x16,0x8c,0x16,0x33,0xe0,0x4f,0x0f,0xd0,0xed,0xc8,0x53,0x5c,0x11,0x1b,0x99,0xc0,0x8e,0x15,0x4f,0x86,0x49,0x4f,0x19,0x40,0xda,0x00,0x16,0x03,0x7b,
|
||||
0x78,0xa1,0xd7,0x3a,0xf4,0x0a,0x51,0xb5,0x6f,0x94,0xae,0xc3,0xa3,0xe9,0xcd,0x3a,0x33,0x88,0x60,0xe3,0xf2,0x56,0x6a,0xdf,0x4a,0x50,0xfb,0x56,0x82,0x8d,0x4b,0x9a,0x77,0xa8,0x6a,0x2e,0x2a,0xeb,0xcc,0xa0,0x3b,0x9f,0x71,0x6c,0xa6,0x5f,0x26,0x90,0x33,0x16,0x1b,0x26,0x03,0x64,0x00,0x69,0x03,0x78,0x13,0xd8,0xcf,0x6b,0x3d,0x18,
|
||||
0x29,0x0f,0x52,0x39,0x28,0x42,0xb4,0x2a,0x48,0xb4,0x32,0x44,0xb4,0x22,0x48,0xa4,0x22,0x48,0x30,0x1c,0x20,0xb1,0xae,0x95,0xa6,0xba,0x24,0x89,0x75,0x49,0x12,0x75,0x49,0xea,0x17,0x35,0xd1,0xb8,0x22,0xbb,0x17,0x8f,0xc2,0x15,0x55,0x0c,0xb9,0xf7,0x45,0xca,0x06,0xd6,0xb8,0x32,0x1e,0x32,0x81,0x8c,0x78,0xd3,0x30,0x39,0xc0,0xe9,
|
||||
0x46,0xb8,0x65,0x41,0x90,0x7a,0x2f,0xf6,0x60,0x53,0x7d,0x92,0x95,0x33,0xed,0x79,0x78,0x28,0xda,0xad,0x17,0x43,0xee,0x7f,0xd9,0x91,0xb7,0xf9,0xda,0x6d,0x88,0x55,0x3d,0xa8,0x79,0xe8,0x55,0x99,0x80,0x87,0x72,0xde,0x2d,0xcf,0x01,0xd4,0x29,0x1f,0xb6,0x4d,0x49,0xef,0x6a,0x6a,0xa6,0xcd,0x72,0xb5,0xf8,0xbf,0x6b,0x02,0x4e,0x3d,
|
||||
0x8f,0xe0,0x21,0xea,0x64,0x00,0x32,0x80,0x1f,0x18,0xa0,0x05,0xe8,0x7e,0xd4,0x4f,0xd8,0xe7,0xc9,0xb9,0x94,0xf4,0xd9,0xcd,0x3b,0x43,0x23,0x99,0x80,0x0c,0x40,0x06,0x90,0x1d,0xe1,0xca,0xae,0xec,0x75,0xcb,0xe3,0x0c,0xfc,0xcb,0xa3,0x84,0xcb,0xbb,0x78,0xae,0xfd,0x32,0x01,0x19,0x40,0xc1,0xcf,0x01,0xe4,0x8b,0xae,0xa3,0x4f,0x64,
|
||||
0xe4,0xf4,0x45,0x74,0x1b,0x7d,0x92,0xa7,0xcf,0x43,0x26,0xa0,0x39,0x80,0xf6,0xd2,0xc7,0xf7,0xd5,0x7e,0x30,0x48,0xd5,0xa8,0x63,0xa8,0x99,0x36,0x8b,0xbd,0x6f,0xfd,0x3b,0xe1,0xca,0xae,0x05,0x71,0x5e,0x32,0x01,0x77,0xe7,0xbc,0xe3,0xb7,0x01,0xe3,0x31,0xae,0xc1,0xa1,0x3d,0x02,0x5d,0xe1,0xc0,0xd1,0x62,0x7a,0x1c,0x77,0x36,0x3b,
|
||||
0x9f,0x77,0x19,0x1d,0x76,0x8d,0x15,0xec,0x79,0xea,0x16,0xe1,0x56,0xb9,0xc6,0xda,0x19,0xcb,0x9f,0x06,0x10,0x8f,0x71,0x3d,0x0e,0xec,0x0d,0xe8,0xf8,0xf8,0xbe,0xa2,0x8a,0x8a,0x11,0x87,0x50,0xb9,0xff,0xa1,0x54,0x1d,0x7a,0x9c,0x63,0x2f,0xf1,0xc8,0x04,0x5c,0xc1,0xf5,0xd6,0x1e,0x99,0xfe,0x32,0x80,0x78,0x8c,0x89,0xc0,0x95,0x9e,
|
||||
0xee,0xba,0x40,0xa0,0xdd,0x2f,0xc1,0x04,0x42,0x21,0xca,0x06,0xd4,0x50,0xb1,0xff,0xa1,0x94,0xed,0x39,0x24,0xfd,0xd9,0xaf,0x7e,0xc7,0xf7,0x3a,0x25,0xb0,0xf5,0x63,0x6d,0xe5,0xdf,0x02,0xa1,0x10,0x81,0x70,0x84,0x60,0x51,0x38,0xfd,0x3d,0x1c,0xb1,0xbe,0x7f,0xe7,0xef,0xdf,0xf9,0x7f,0x27,0x96,0x09,0x93,0x09,0x6c,0x93,0x89,0x4e,
|
||||
0xed,0x10,0x1c,0x70,0x48,0xfc,0x37,0x01,0x97,0xa9,0xdf,0x9d,0x9d,0x73,0x08,0xb4,0x31,0x85,0x8a,0x91,0xa3,0x18,0xf8,0xe7,0x69,0x04,0x42,0x45,0x32,0x01,0x67,0xb8,0xc9,0x30,0xb9,0xbc,0xe0,0x0d,0x20,0x1e,0xe3,0x16,0xe0,0x62,0xf5,0xb7,0xfb,0xa8,0x32,0x8e,0x65,0xef,0xdb,0xfe,0x2e,0x13,0x70,0x8e,0x5b,0x0c,0x93,0x4b,0x0a,0xd2,
|
||||
0x00,0xe2,0x31,0x02,0xc0,0xed,0xc0,0xcf,0xd5,0xcf,0x32,0x01,0x99,0xc0,0x36,0xb9,0x03,0xf8,0xa5,0x61,0x92,0x2a,0x18,0x03,0x88,0xc7,0x08,0x02,0x77,0x01,0x63,0xd5,0xbf,0x32,0x01,0x99,0xc0,0x0f,0x72,0x0f,0x70,0x81,0x1d,0x26,0x10,0xb0,0x49,0xfc,0xf7,0x01,0xe7,0xa8,0x5f,0x65,0x02,0x32,0x81,0x76,0x33,0x05,0x38,0xdf,0x30,0x49,
|
||||
0x7a,0xd6,0x00,0xe2,0x31,0x42,0xc0,0x03,0xc0,0x19,0xea,0x4f,0x99,0x80,0x4c,0x20,0x63,0xa6,0x02,0xe7,0x18,0x26,0xad,0x9e,0x33,0x80,0x78,0x8c,0x22,0xeb,0x04,0x4e,0x51,0x3f,0xca,0x04,0x64,0x02,0x3b,0xcc,0x63,0xc0,0x99,0x86,0x49,0x8b,0x67,0x0c,0x20,0x1e,0x23,0x0c,0x3c,0x0a,0x9c,0xa0,0xfe,0x93,0x09,0xc8,0x04,0xb2,0xe6,0x49,
|
||||
0xe0,0x34,0xc3,0xa4,0xd9,0xf5,0x06,0x10,0x8f,0x11,0x01,0x9e,0x00,0x8e,0x51,0xbf,0xc9,0x04,0x64,0x02,0x39,0xe3,0x69,0xe0,0x14,0xc3,0xa4,0xc9,0xb5,0x06,0x10,0x8f,0x11,0x05,0xfe,0x01,0x1c,0xa5,0xfe,0x92,0x09,0xc8,0x04,0x72,0xce,0x74,0xe0,0x44,0xc3,0x24,0xe1,0x3a,0x03,0xb0,0x36,0xf9,0x7c,0x0a,0x38,0x5c,0xfd,0x24,0x13,0x90,
|
||||
0x09,0xe4,0x8d,0x97,0x80,0xe3,0x0c,0x93,0xcd,0xae,0x31,0x80,0x78,0x8c,0x0e,0xc0,0xb3,0xc0,0x28,0xf5,0x8f,0x4c,0x40,0x26,0x90,0x77,0x5e,0x01,0xc6,0x18,0x26,0x8d,0x8e,0x1b,0x40,0x3c,0x46,0xa9,0x55,0x9a,0x1c,0xa4,0x7e,0x91,0x09,0xc8,0x04,0x6c,0x63,0x26,0xf0,0x63,0xc3,0xa4,0xc1,0x31,0x03,0x88,0xc7,0xe8,0x04,0xbc,0x00,0xec,
|
||||
0xaf,0xfe,0x90,0x09,0xc8,0x04,0x6c,0x67,0x36,0x70,0xa4,0x61,0xb2,0xd1,0x76,0x03,0x88,0xc7,0xe8,0x0c,0xbc,0x08,0x8c,0x50,0x3f,0xc8,0x04,0x64,0x02,0x8e,0xf1,0x6f,0x60,0xb4,0x61,0xb2,0x7e,0x47,0x3e,0x9c,0xcd,0x92,0x60,0x7d,0x25,0x7e,0xb1,0x26,0xfe,0x34,0x0b,0x7f,0x75,0x12,0xa9,0xd6,0x96,0xbc,0x1f,0x4b,0xcb,0x8b,0x6d,0x95,
|
||||
0x11,0x96,0x16,0x1d,0x19,0x02,0x98,0x40,0x3f,0xf5,0x81,0x50,0x25,0xe0,0x18,0xa6,0x61,0xd2,0x7f,0x47,0x3f,0x9c,0xed,0xa2,0xa0,0x8f,0x29,0xfe,0x42,0x95,0x80,0xa3,0x64,0xa5,0xc1,0x6c,0x0d,0xe0,0x11,0xc5,0x5f,0xc8,0x04,0x1c,0xe5,0x11,0xc7,0x0c,0xc0,0x30,0xf9,0x0f,0xf0,0xbe,0x52,0x5f,0x38,0x65,0x02,0x3d,0x8f,0xf7,0xf5,0x5b,
|
||||
0xe6,0x0b,0x0d,0x93,0xc5,0x4e,0x56,0x00,0x90,0x7e,0xe9,0x47,0x08,0x47,0x4c,0x20,0xd9,0xdc,0xe4,0xe7,0x50,0x67,0xad,0x3d,0x19,0x80,0xf0,0xb4,0x09,0xa4,0x64,0x00,0xce,0x1a,0x80,0x61,0xf2,0x11,0xf0,0xb6,0x52,0x5e,0x38,0x61,0x02,0x3e,0xae,0x00,0xe6,0x1a,0x26,0x1f,0xbb,0xa1,0x02,0x50,0x15,0x20,0x1c,0x33,0x81,0x54,0x73,0xb3,
|
||||
0x5f,0x43,0x9b,0x13,0xcd,0xe5,0xca,0x00,0x1e,0x03,0x7b,0x56,0x31,0x15,0x32,0x01,0x55,0x00,0xa4,0xc8,0xd1,0x2d,0xf8,0x9c,0x18,0x80,0x61,0xf2,0x05,0xe9,0xe7,0x92,0x85,0xb0,0xd5,0x04,0x7c,0x3a,0x07,0xf0,0x86,0x61,0xb2,0xdc,0x4d,0x15,0x80,0x86,0x01,0xc2,0x11,0x13,0xf0,0x69,0x05,0x90,0x33,0xad,0xe5,0xd2,0x00,0x9e,0x80,0xfc,
|
||||
0xad,0x5e,0x2a,0x64,0x02,0x5b,0xad,0x00,0x5a,0x7c,0x37,0x07,0xd0,0x6a,0x69,0xcd,0x5d,0x06,0x60,0x98,0xac,0x06,0x5e,0x55,0x8a,0x0b,0x3b,0x4d,0xc0,0x87,0x15,0xc0,0x2b,0x86,0x49,0xad,0x1b,0x2b,0x00,0x80,0x7b,0x95,0xde,0xc2,0x4e,0x13,0xf0,0xe1,0x1c,0xc0,0x7d,0xb9,0xfc,0x65,0xb9,0x36,0x80,0xc7,0x81,0x0f,0x95,0xde,0xc2,0x2e,
|
||||
0x13,0x48,0x36,0xf9,0xca,0x00,0x3e,0xb4,0x34,0xe6,0x4e,0x03,0xb0,0xb6,0x31,0x9a,0xa0,0xd4,0x16,0x76,0x99,0x80,0xcf,0xe6,0x00,0xc6,0xe7,0x7a,0xab,0xb0,0x60,0x1e,0x1a,0x39,0x0d,0x58,0xa2,0xd4,0x16,0x76,0x98,0x80,0x8f,0x86,0x00,0x4b,0xc8,0xc3,0xdb,0xb7,0x39,0x37,0x00,0x6b,0x1f,0x33,0x55,0x01,0xc2,0x16,0x13,0xf0,0xd1,0x24,
|
||||
0xe0,0xf8,0x7c,0xec,0x11,0x18,0xcc,0x53,0x63,0xa7,0x02,0x1f,0x29,0xad,0x45,0xbe,0x4d,0xc0,0x27,0x06,0xf0,0x91,0xa5,0x29,0x3c,0x61,0x00,0xd6,0x46,0x86,0x13,0x95,0xd2,0x22,0xdf,0x26,0xe0,0x93,0x21,0xc0,0x84,0x7c,0xed,0x10,0x1c,0xcc,0x63,0xa3,0x1f,0x04,0x96,0x29,0xa5,0x45,0x3e,0x4d,0xc0,0x07,0x2f,0x03,0x7d,0x0c,0x3c,0x94,
|
||||
0xaf,0x5f,0x9e,0x37,0x03,0x50,0x15,0x20,0xec,0x30,0x01,0x1f,0x0c,0x01,0x26,0xe6,0x6b,0x6b,0xf0,0x7c,0x57,0x00,0x00,0x0f,0x00,0x9f,0x2a,0x9d,0x45,0xbe,0x4c,0xa0,0xc0,0x0d,0xe0,0x13,0xab,0x92,0xc6,0x93,0x06,0x60,0xed,0x67,0x7e,0x83,0x52,0x59,0xe4,0xcb,0x04,0x0a,0x7c,0x0e,0xe0,0x06,0x4b,0x43,0xde,0x34,0x00,0x8b,0xfb,0x81,
|
||||
0xcf,0x95,0xca,0x22,0x1f,0x26,0x50,0xc0,0x0f,0x02,0x7d,0x66,0x69,0x07,0x4f,0x1b,0x80,0x61,0xd2,0x04,0x4c,0x52,0x1a,0x8b,0x7c,0x98,0x40,0x01,0x0f,0x01,0x26,0xe5,0xfb,0xea,0x6f,0x57,0x05,0x00,0xe9,0x97,0x84,0x54,0x05,0x88,0x9c,0x9b,0x40,0x81,0x56,0x00,0x9f,0x63,0xd3,0x8b,0x75,0xb6,0x18,0x80,0x61,0x92,0x00,0x7e,0xa1,0x14,
|
||||
0x16,0xb9,0x34,0x81,0x54,0x6b,0x2b,0xa9,0xd6,0x82,0x5c,0x82,0xe2,0xe7,0x56,0xe5,0x5c,0x18,0x06,0x60,0x99,0xc0,0x73,0xe4,0xf1,0x7e,0xa6,0xf0,0x9f,0x09,0xb4,0x6e,0xde,0x54,0x88,0xa7,0xf7,0xa0,0x61,0x32,0xdd,0xae,0x83,0x05,0xec,0x3c,0xb3,0x78,0x8c,0x0a,0x60,0x11,0xd0,0x53,0x69,0x2c,0xb2,0xa5,0xf2,0x80,0xc3,0x58,0x37,0xfb,
|
||||
0xe5,0x42,0x3a,0xa5,0x15,0xc0,0x40,0xc3,0xa4,0xbe,0x20,0x0d,0xc0,0x32,0x81,0xa3,0x81,0x67,0x95,0xbe,0x42,0x7c,0x8f,0x31,0x56,0xa5,0x6c,0x1b,0x41,0xbb,0xcf,0x50,0x43,0x01,0x21,0xb6,0x59,0xfa,0x3f,0x67,0xf7,0x41,0x83,0x0e,0x9d,0xec,0x38,0xe0,0x4b,0xf5,0xb9,0x10,0x5f,0x97,0xfe,0xe3,0x9c,0x38,0xb0,0x23,0x06,0x60,0x98,0xd4,
|
||||
0x01,0x3f,0x53,0xbf,0x0b,0x01,0xc0,0x05,0x76,0x8e,0xfb,0xdd,0x50,0x01,0x68,0x28,0x20,0x84,0x83,0xa5,0xbf,0xe3,0x06,0xa0,0xa1,0x80,0x10,0xce,0x95,0xfe,0xae,0x30,0x00,0x6b,0x28,0x70,0x81,0xf2,0x40,0xa8,0xf4,0xf7,0x67,0x05,0x80,0x61,0xf2,0x2c,0xf0,0xb0,0x72,0x41,0xf8,0x8c,0x87,0x9c,0x2c,0xfd,0x5d,0x63,0x00,0x16,0x17,0x6b,
|
||||
0x28,0x20,0x7c,0xc4,0x97,0x4e,0x97,0xfe,0xae,0x32,0x00,0x6b,0x28,0x70,0x36,0xe4,0x6f,0xe5,0x13,0x21,0x5c,0x42,0x0b,0x70,0xb6,0x95,0xf3,0x32,0x80,0x36,0x26,0xf0,0x4f,0xe0,0xe7,0xca,0x0f,0x51,0xe0,0x5c,0x68,0xe5,0x3a,0x32,0x80,0xef,0x9b,0xc0,0xdf,0xd0,0x3a,0x82,0xa2,0x70,0x99,0x60,0x98,0xee,0xda,0x3f,0x33,0xe8,0xc2,0x20,
|
||||
0x5d,0x4d,0x7a,0x77,0x21,0x21,0x0a,0x89,0xa9,0x86,0xc9,0xd5,0x6e,0x6b,0x94,0xeb,0x0c,0xc0,0x30,0x49,0x01,0xe7,0x01,0x33,0x1d,0x6a,0xc2,0x7a,0xe0,0x1f,0xc0,0x7b,0xca,0xd9,0x82,0xe1,0x3d,0xab,0x4f,0xd7,0x3b,0x74,0xfc,0xd7,0xad,0x9c,0x46,0x06,0xd0,0x3e,0x13,0x48,0x00,0xc7,0x01,0x1f,0xd8,0x70,0xb8,0x14,0xf0,0x36,0xe9,0xed,
|
||||
0xcc,0x0e,0x04,0xaa,0x0c,0x93,0x13,0x81,0xe1,0xc0,0x75,0x40,0xb3,0xf4,0xe3,0x59,0x9a,0x81,0xdf,0x03,0xfb,0x5a,0x7d,0x5a,0x65,0xf5,0xf1,0x04,0xab,0xcf,0x53,0x36,0xb4,0xe1,0x03,0xe0,0x78,0xbb,0x16,0xf8,0xc8,0x94,0x80,0x9b,0x7b,0x2f,0x1e,0xa3,0x1a,0x98,0x03,0x74,0xcb,0xf1,0xaf,0x5e,0x05,0xbc,0x68,0x7d,0xbd,0x64,0x98,0xac,
|
||||
0xd9,0x4e,0x1b,0x86,0x00,0x53,0x80,0xc1,0xd2,0x93,0xe7,0xae,0xfa,0xe7,0x1a,0x26,0xf3,0xb7,0xd3,0xb7,0x5d,0x81,0xc3,0x80,0x23,0x80,0xc3,0x81,0xee,0x79,0xc8,0xb3,0x91,0x86,0xc9,0x27,0x6e,0x0d,0x52,0xc0,0xed,0xbd,0x18,0x8f,0x31,0x1c,0x78,0x15,0xe8,0x90,0xe5,0x95,0x60,0xb6,0x25,0xf8,0x19,0xc0,0x7c,0x6b,0xa8,0xd1,0xde,0x36,
|
||||
0x84,0x81,0xdf,0x01,0x57,0x01,0x61,0x69,0xcb,0xf5,0x57,0xfd,0x09,0xa4,0x37,0xd4,0x68,0xce,0xa0,0x8f,0x03,0xc0,0x10,0x60,0xb4,0x65,0x08,0xfb,0x67,0xd9,0xd7,0x8d,0xc0,0xc1,0x86,0xc9,0x5c,0x37,0x07,0x2b,0xe0,0x85,0x1e,0x8d,0xc7,0x38,0xd6,0x1a,0xc3,0x65,0x32,0x64,0xf9,0xb8,0x8d,0xe0,0x5f,0x35,0x4c,0x36,0xe6,0xa0,0x1d,0x43,
|
||||
0x48,0x6f,0x76,0x32,0x48,0x3a,0x73,0x25,0xf3,0xad,0xab,0xfe,0x7b,0x39,0xe8,0xeb,0x32,0x60,0x94,0x65,0x08,0xa3,0x81,0xdd,0x32,0xf8,0x78,0xd2,0x2a,0xfb,0x9f,0x71,0x7b,0xc0,0x02,0x5e,0xe9,0xd9,0x78,0x8c,0x71,0xc0,0xe4,0xed,0xfc,0xc8,0x26,0xe0,0x35,0x4b,0xf0,0x2f,0x1a,0x26,0x4b,0xf2,0xd4,0x8e,0x30,0xe9,0x3b,0x15,0x57,0x01,
|
||||
0x45,0xd2,0x9c,0x2b,0xf8,0x6a,0x1b,0xba,0xf1,0xf9,0x5a,0x4a,0x3b,0x1e,0xa3,0x5f,0x9b,0xea,0xe0,0x60,0xa0,0xe3,0x76,0x7e,0xfc,0x62,0xc3,0xe4,0x36,0x2f,0x04,0x2e,0xe0,0xa5,0x5e,0x8e,0xc7,0x98,0xcc,0xb7,0x1f,0xa1,0x5c,0xf8,0x95,0xe0,0x81,0x59,0x76,0x4e,0xb4,0xc4,0x63,0xd4,0x58,0x73,0x03,0x7b,0x4b,0x7f,0x8e,0xb2,0xc0,0xba,
|
||||
0xea,0xbf,0x6b,0x63,0xdf,0x47,0x48,0x4f,0x26,0x7e,0x65,0x08,0x6d,0x73,0x60,0xb2,0x61,0x72,0xa9,0x57,0x82,0xe7,0x35,0x03,0x08,0x92,0x9e,0x99,0x5f,0x66,0x5d,0xe5,0x57,0x38,0xdc,0x9e,0x08,0x70,0x39,0x70,0x19,0x50,0x21,0x2d,0xda,0x4a,0x1d,0x70,0x13,0x70,0xa3,0x1d,0x1b,0x68,0xfc,0x40,0x1e,0xf4,0xb2,0xcc,0xa0,0x1a,0xb8,0xce,
|
||||
0x30,0x49,0xca,0x00,0x7c,0x44,0x3c,0x46,0x27,0xe0,0x57,0xc0,0xa5,0x40,0x17,0x45,0x24,0xaf,0xac,0x05,0xfe,0x02,0xdc,0x66,0x98,0x6c,0x50,0x38,0x64,0x00,0x6e,0x32,0x82,0x52,0xe0,0x22,0xab,0x22,0xe8,0xaa,0x88,0xe4,0x94,0x5a,0xe0,0x66,0xe0,0x76,0xc3,0xa4,0x41,0xe1,0x90,0x01,0xb8,0xd9,0x08,0x3a,0x92,0x7e,0xb1,0xe9,0x37,0xe4,
|
||||
0xfe,0xde,0xb2,0xdf,0x58,0x05,0xdc,0x08,0xdc,0x69,0x98,0x34,0x2a,0x1c,0x32,0x00,0x2f,0x19,0x41,0x09,0xe9,0x15,0x8f,0xae,0x40,0x9b,0xa1,0x64,0xca,0x97,0xc0,0xff,0x02,0x77,0x19,0x26,0x9b,0x15,0x0e,0x19,0x80,0x97,0x8d,0xa0,0x18,0xf8,0x6f,0xe0,0xb7,0xc0,0x4e,0x8a,0xc8,0x76,0x59,0x4e,0x7a,0x37,0xe9,0xbf,0x19,0x26,0x5b,0x14,
|
||||
0x0e,0x19,0x40,0x21,0x19,0xc1,0x8f,0xc1,0xf9,0x65,0xa0,0x5c,0xce,0x8f,0x0d,0x93,0xe7,0x15,0x06,0x7b,0x08,0x2a,0x04,0xb6,0x32,0x13,0xad,0x7a,0xb4,0x3d,0x5a,0x80,0x59,0x0a,0x83,0x0c,0xa0,0x20,0xb1,0x1e,0x47,0x7e,0x47,0x91,0xd8,0x26,0x6f,0xe7,0xe2,0x91,0x6d,0x21,0x03,0x70,0x33,0xaf,0x28,0x04,0x8a,0x8d,0x0c,0x40,0x49,0x2e,
|
||||
0x14,0x1b,0x19,0x80,0x0f,0x99,0x0d,0xee,0x5c,0x1c,0xc2,0x61,0x12,0xc0,0x9b,0x0a,0x83,0x0c,0xa0,0xd0,0xe7,0x01,0x36,0x93,0x5e,0xe4,0x44,0x7c,0x9b,0x39,0xba,0xdf,0x2f,0x03,0x50,0xa9,0xab,0x98,0x08,0x19,0x80,0x92,0x5d,0x31,0x11,0x32,0x80,0xc2,0xe5,0xdf,0xa0,0xe7,0xda,0xdb,0xd0,0x68,0xc5,0x44,0xc8,0x00,0x7c,0x31,0x0f,0xd0,
|
||||
0x44,0x7a,0x32,0x50,0xa4,0x79,0xc3,0xe9,0x77,0xfa,0x65,0x00,0x42,0x25,0xaf,0x62,0x21,0x03,0x10,0x4a,0x7a,0xc5,0x42,0x06,0x20,0xf2,0xcf,0x3b,0xa0,0x15,0x6d,0x48,0xef,0xd6,0x33,0x4f,0x61,0x90,0x01,0xf8,0x6d,0x1e,0xa0,0x15,0xe7,0xb6,0x3f,0x73,0x13,0x33,0xad,0x58,0x08,0x19,0x80,0x4a,0x5f,0xc5,0x40,0xc8,0x00,0x94,0xfc,0x8a,
|
||||
0x81,0x90,0x01,0xf8,0x80,0x05,0xa4,0x57,0xb9,0xf5,0x2b,0x6b,0x48,0xef,0xed,0x20,0x64,0x00,0xbe,0x9c,0x07,0x48,0x91,0xde,0xcd,0xc8,0xaf,0xbc,0x96,0xc9,0x1e,0x8d,0x42,0x06,0xa0,0x12,0x58,0xe7,0x2e,0x64,0x00,0x12,0x81,0xce,0x5d,0xe4,0x02,0x2d,0x0a,0xea,0x02,0xe2,0x31,0x56,0xe0,0xbf,0x65,0xc3,0x57,0x18,0xa6,0x56,0x48,0x56,
|
||||
0x05,0x20,0x00,0x5e,0xd5,0x39,0x0b,0x19,0x80,0x4a,0x61,0x9d,0xb3,0x90,0x01,0x48,0x0c,0xfe,0x18,0xf9,0xa8,0xdb,0x65,0x00,0x02,0x30,0x4c,0x96,0x01,0x4f,0x93,0x7e,0x2e,0xbe,0xd0,0xa9,0x07,0x9e,0x36,0x4c,0x3e,0x55,0xcf,0x3b,0x8f,0x26,0x01,0xdd,0x74,0x49,0x8c,0x11,0x20,0xbd,0xc7,0x7c,0xcd,0x77,0xbe,0xbc,0xba,0xd3,0xf0,0x6a,
|
||||
0xe0,0x5d,0xd2,0x2f,0xfb,0xcc,0x03,0xe6,0x19,0x26,0x1f,0xab,0xa7,0x65,0x00,0x22,0x33,0x63,0xe8,0x6d,0x19,0xc1,0xd0,0x36,0xa6,0xd0,0xdb,0x65,0xcd,0xfc,0xa2,0xad,0xd0,0x2d,0xb1,0x2f,0x57,0xef,0xc9,0x00,0x44,0x7e,0x4c,0xa1,0x6b,0x1b,0x33,0xa8,0x06,0xca,0xad,0xaf,0x8a,0x36,0xdf,0x3b,0x03,0x45,0x59,0x1e,0xaa,0xc5,0x1a,0x9a,
|
||||
0xd4,0x59,0xe5,0xfb,0x57,0xdf,0xeb,0x81,0x65,0x6d,0xc4,0x5e,0xab,0x5e,0x91,0x01,0x08,0xf7,0x19,0x45,0xe9,0x77,0x4c,0xe1,0xbb,0x46,0xc1,0x56,0x84,0xfd,0xb5,0xd8,0x0d,0x93,0x06,0x45,0x51,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0xc2,0x8d,0xfc,
|
||||
0x3f,0x5c,0x56,0xd9,0x0b,0xad,0xff,0xf9,0xa9,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
|
||||
};
|
||||
|
||||
read_only global String8 lnx_sh_logo_file_bytes = {lnx_sh_logo_file_bytes__data, sizeof(lnx_sh_logo_file_bytes__data)};
|
||||
|
||||
C_LINKAGE_END
|
||||
|
||||
#endif // LINUX_SHELL_META_H
|
||||
@@ -0,0 +1,189 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Generated Code
|
||||
|
||||
#include "generated/linux_shell.meta.c"
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Shell Operations
|
||||
|
||||
internal void
|
||||
sh_message(B32 error, String8 title, String8 message)
|
||||
{
|
||||
B32 done = 0;
|
||||
B32 text_is_long = (str8_find_needle(message, 0, s("\n"), 0) < message.size);
|
||||
|
||||
//- rjf: try zenity
|
||||
if(!done)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
if(text_is_long)
|
||||
{
|
||||
String8 cmd = str8f(scratch.arena, "echo \"%S\" | zenity --text-info --no-markup --title=\"%S\"", escaped_from_raw_str8(scratch.arena, message), title);
|
||||
FILE *f = popen((char *)cmd.str, "r");
|
||||
done = (f != 0);
|
||||
pclose(f);
|
||||
}
|
||||
else
|
||||
{
|
||||
String8 cmd = str8f(scratch.arena, "zenity %s --no-markup --title=\"%S\" --text=\"%S\"", error ? "--error" : "--info", title, escaped_from_raw_str8(scratch.arena, message));
|
||||
FILE *f = popen((char *)cmd.str, "r");
|
||||
done = (f != 0);
|
||||
pclose(f);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
//- rjf: fall back to stderr
|
||||
if(!done)
|
||||
{
|
||||
if(error)
|
||||
{
|
||||
fprintf(stderr, "[X] ");
|
||||
}
|
||||
fprintf(stderr, "%.*s\n", str8_varg(title));
|
||||
fprintf(stderr, "%.*s\n\n", str8_varg(message));
|
||||
}
|
||||
}
|
||||
|
||||
internal String8
|
||||
sh_pick_file(Arena *arena, String8 title, String8 initial_path)
|
||||
{
|
||||
String8 result = {0};
|
||||
B32 done = 0;
|
||||
|
||||
//- rjf: try zenity
|
||||
if(!done)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
String8 cmd = str8f(scratch.arena, "zenity --file-selection --filename=\"%S\" --title=\"%S\"", initial_path, title);
|
||||
FILE *f = popen((char *)cmd.str, "r");
|
||||
done = (f != 0);
|
||||
if(done)
|
||||
{
|
||||
U64 output_buffer_size = 4096;
|
||||
char *output_buffer = push_array(scratch.arena, char, output_buffer_size);
|
||||
char *path = fgets(output_buffer, output_buffer_size, f);
|
||||
if(path != 0)
|
||||
{
|
||||
result = str8_copy(arena, str8_chop(str8_cstring_capped(path, output_buffer+output_buffer_size), 1));
|
||||
}
|
||||
}
|
||||
pclose(f);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void
|
||||
sh_show_in_file_browser(String8 path)
|
||||
{
|
||||
B32 done = 0;
|
||||
|
||||
//- rjf: try xdg-open
|
||||
if(!done)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8 cmd = str8f(scratch.arena, "xdg-open %S", str8_chop_last_slash(path));
|
||||
FILE *f = popen((char *)cmd.str, "r");
|
||||
pclose(f);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
//- rjf: fallback -> tell user
|
||||
if(!done)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
sh_message(1, s("Error"), s("Could not find a way to pick a file using the locally installed system utilities."));
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
|
||||
internal void
|
||||
sh_open_in_browser(String8 url)
|
||||
{
|
||||
B32 done = 0;
|
||||
|
||||
//- rjf: try xdg-open
|
||||
if(!done)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8 cmd = str8f(scratch.arena, "xdg-open %S", url);
|
||||
FILE *f = popen((char *)cmd.str, "r");
|
||||
done = (f != 0);
|
||||
pclose(f);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
//- rjf: fallback -> tell user
|
||||
if(!done)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
sh_message(1, s("Error"), str8f(scratch.arena, "Could not find a way to open %S in a locally installed browser.", url));
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
|
||||
internal void
|
||||
sh_install_or_uninstall_self(B32 install)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
|
||||
//- rjf: get xdg local application install info path
|
||||
String8 application_name = str8_chop_last_dot(str8_skip_last_slash(get_process_info()->binary_file_path));
|
||||
char *xdg_data_home_cstring = getenv("XDG_DATA_HOME");
|
||||
String8 desktop_entries_folder_name = str8_cstring(xdg_data_home_cstring);
|
||||
if(desktop_entries_folder_name.size == 0)
|
||||
{
|
||||
char *home = getenv("HOME");
|
||||
desktop_entries_folder_name = str8f(scratch.arena, "%s/.local/share", home);
|
||||
}
|
||||
String8 desktop_file_path = str8f(scratch.arena, "%S/applications/%S.desktop", desktop_entries_folder_name, application_name);
|
||||
|
||||
//- rjf: get icon image path
|
||||
B32 has_icon = 0;
|
||||
String8 icon_path = {0};
|
||||
#if LNX_WM_ICON
|
||||
{
|
||||
has_icon = 1;
|
||||
icon_path = str8f(scratch.arena, "%S/%S.png", get_process_info()->user_program_config_data_path, application_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
//- rjf: install -> write files
|
||||
if(install)
|
||||
{
|
||||
//- rjf: write icon
|
||||
write_data_to_file_path(icon_path, lnx_sh_logo_file_bytes);
|
||||
|
||||
//- rjf: write .desktop file
|
||||
String8 desktop_file_data = str8f(scratch.arena,
|
||||
"[Desktop Entry]\n"
|
||||
"Type=Application\n"
|
||||
"Version=" BUILD_VERSION_STRING_LITERAL "\n"
|
||||
"Name=" BUILD_TITLE "\n"
|
||||
"Comment=" BUILD_TITLE_STRING_LITERAL "\n"
|
||||
"Exec=%S\n"
|
||||
"%s%S%s" // (optional icon)
|
||||
"Terminal=%s\n"
|
||||
"Categories=Utility;Development;",
|
||||
get_process_info()->binary_file_path,
|
||||
has_icon ? "Icon=" : "",
|
||||
has_icon ? icon_path : s(""),
|
||||
has_icon ? "\n" : "",
|
||||
BUILD_CONSOLE_INTERFACE ? "true" : "false");
|
||||
write_data_to_file_path(desktop_file_path, desktop_file_data);
|
||||
}
|
||||
|
||||
//- rjf: uninstall -> delete files
|
||||
else
|
||||
{
|
||||
delete_file_at_path(icon_path);
|
||||
delete_file_at_path(desktop_file_path);
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef LINUX_SHELL_H
|
||||
#define LINUX_SHELL_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Generated Code
|
||||
|
||||
#include "generated/linux_shell.meta.h"
|
||||
|
||||
#endif // LINUX_SHELL_H
|
||||
@@ -0,0 +1,4 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
@embed_file lnx_sh_logo_file_bytes: "../data/logo.png"
|
||||
@@ -381,6 +381,15 @@ wm_window_open(Rng2F32 rect, WM_WindowFlags flags, String8 title)
|
||||
XFlush(lnx_wm_state->display);
|
||||
}
|
||||
|
||||
//- rjf: set class
|
||||
{
|
||||
XClassHint *class_hints = XAllocClassHint();
|
||||
class_hints->res_name = "raddbg";
|
||||
class_hints->res_class = "RADDBG";
|
||||
XSetClassHint(lnx_wm_state->display, w->window, class_hints);
|
||||
XFree(class_hints);
|
||||
}
|
||||
|
||||
//- rjf: create xic
|
||||
w->xic = XCreateIC(lnx_wm_state->xim,
|
||||
XNInputStyle, XIMPreeditNothing|XIMStatusNothing,
|
||||
@@ -1097,38 +1106,3 @@ wm_set_cursor(WM_Cursor cursor)
|
||||
{
|
||||
lnx_wm_state->last_set_cursor = cursor;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Native User-Facing Graphical Messages (Implemented Per-OS)
|
||||
|
||||
internal void
|
||||
wm_graphical_message(B32 error, String8 title, String8 message)
|
||||
{
|
||||
if(error)
|
||||
{
|
||||
fprintf(stderr, "[X] ");
|
||||
}
|
||||
fprintf(stderr, "%.*s\n", str8_varg(title));
|
||||
fprintf(stderr, "%.*s\n\n", str8_varg(message));
|
||||
}
|
||||
|
||||
internal String8
|
||||
wm_graphical_pick_file(Arena *arena, String8 title, String8 initial_path)
|
||||
{
|
||||
return str8_zero();
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Shell Operations
|
||||
|
||||
internal void
|
||||
wm_show_in_filesystem_ui(String8 path)
|
||||
{
|
||||
// TODO(rjf)
|
||||
}
|
||||
|
||||
internal void
|
||||
wm_open_in_browser(String8 url)
|
||||
{
|
||||
// TODO(rjf)
|
||||
}
|
||||
@@ -440,7 +440,7 @@ RD_VocabInfo rd_vocab_info_table[372] =
|
||||
|
||||
RD_NameSchemaInfo rd_name_schema_info_table[39] =
|
||||
{
|
||||
{str8_lit_comp("user"), 0, str8_lit_comp("@expand_commands(edit_user_theme) x:\n{\n //- rjf: animations\n @display_name('Animations') @description(\"Enables animations.\")\n @default(1) 'animations': bool,\n @display_name('Scrolling Animations') @description(\"Enables scrolling animations.\")\n @expand_if(\"$.animations\") @default(1) 'scrolling_animations': bool,\n @display_name('Tooltip Animations') @description(\"Enables tooltip animations.\")\n @expand_if(\"$.animations\") @default(1) 'tooltip_animations': bool,\n @display_name('Menu Animations') @description(\"Enables menu animations.\")\n @expand_if(\"$.animations\") @default(1) 'menu_animations': bool,\n\n //- rjf: fonts\n @display_name('UI Font') @description(\"The name of, or path to, the font used when displaying non-code UI elements.\")\n @default('') 'main_font': string,\n @display_name('Code Font') @description(\"The name of, or path to, the font used when displaying code.\")\n @default('') 'code_font': string,\n\n //- rjf: theme\n @default(\"Default (Dark)\") @display_name('User Theme')\n @description(\"The user's theme, which describes all colors used throughout the UI.\")\n 'theme': string,\n @no_expand @display_name('User Theme')\n 'theme_colors': set,\n\n //- rjf: auto eval\n @display_name('Show Auto Watches In Source / Disassembly') @description(\"Enables the display of auto watch expressions inline in source and disassembly views.\") @default(1)\n 'show_autos_in_src_and_disasm': bool,\n\n //- rjf: autocompletion\n @display_name('Autocompletion Lister') @description(\"Enables the autocompletion lister while typing expressions.\") @default(1)\n 'autocompletion_lister': bool,\n @display_name('View Call Argument Helper') @description(\"Enables the view call argument helper, which shows view arguments and documentation, while typing expressions.\") @default(1)\n 'view_call_argument_helper': bool,\n\n //- rjf: scope decorations\n @default(1) @display_name('Cursor Scope Lines') @description(\"Controls whether or not scopes containing the cursor in text views are drawn.\")\n 'cursor_scope_lines': bool,\n @default(1) @display_name('Cursor Scope End Annotations') @description(\"Controls whether or not ending annotations for scopes containing the cursor are drawn.\")\n 'cursor_scope_end_annotations': bool,\n\n //- rjf: cursor decorations\n @default(1) @display_name('Cursor Trail') @expand_if(\"$.animations\") @description(\"Controls whether or not a movement trail animation of the cursor is drawn.\")\n 'cursor_trail': bool,\n\n //- rjf: thread & breakpoint decorations\n @default(1) @display_name('Thread Lines') @description(\"Controls whether or not a long horizontal line is drawn before the next line or instruction that the selected thread will execute in source and disassembly views.\")\n 'thread_lines': bool,\n @default(1) @display_name('Thread Glow') @description(\"Controls whether or not a glowing effect is drawn on the selected thread in source and disassembly views.\")\n 'thread_glow': bool,\n @default(1) @display_name('Breakpoint Lines') @description(\"Controls whether or not a long horizontal line is drawn before the line or instruction at which a breakpoint is placed, in source and disassembly views.\")\n 'breakpoint_lines': bool,\n @default(1) @display_name('Breakpoint Glow') @description(\"Controls whether or not a glowing effect is drawn on breakpoints in source and disassembly views.\")\n 'breakpoint_glow': bool,\n\n //- rjf: occluding background settings\n @default(0) @display_name('Opaque Backgrounds') @description(\"Controls whether or not all floating background colors are forced to be fully opaque.\")\n 'opaque_backgrounds': bool,\n @default(1) @display_name('Background Blur') @description(\"Controls whether or not occluded regions behind floating elements are blurred.\")\n 'background_blur': bool,\n\n //- rjf: appearance settings\n @default(1) @display_name('Drop Shadows') @description(\"Controls whether or not drop shadows are drawn.\")\n 'drop_shadows': bool,\n @default(1.f) @display_name('Rounded Corner Amount') @description(\"Controls the degree to which UI corners are rounded.\")\n 'rounded_corner_amount': @range[0, 1] f32,\n\n //- rjf: code formatting settings\n @default(2) @display_name('User Tab Width') 'tab_width': @range[1, 32] u64,\n\n //- rjf: windows style menu bar\n @default(1) @display_name('Focus Menu Bar With Alt') @description(\"Mimics standard Windows behavior of focusing the menu bar using the Alt key.\")\n 'focus_menu_bar_with_alt': bool,\n\n //- rjf: native filesystem dialogues\n @default(0) @display_name('Use Native File System Dialog') @description(\"Uses the operating system's file system dialog box, rather than the debugger's built-in UI.\")\n 'use_native_file_system_dialog': bool,\n\n //- rjf: transient tabs\n @default(1) @display_name('Transient Tabs') @description(\"When snapping to source code locations, opens new files in a 'transienLine truncated
|
||||
{str8_lit_comp("user"), 0, str8_lit_comp("@expand_commands(edit_user_theme) x:\n{\n //- rjf: animations\n @display_name('Animations') @description(\"Enables animations.\")\n @default(1) 'animations': bool,\n @display_name('Scrolling Animations') @description(\"Enables scrolling animations.\")\n @expand_if(\"$.animations\") @default(1) 'scrolling_animations': bool,\n @display_name('Tooltip Animations') @description(\"Enables tooltip animations.\")\n @expand_if(\"$.animations\") @default(1) 'tooltip_animations': bool,\n @display_name('Menu Animations') @description(\"Enables menu animations.\")\n @expand_if(\"$.animations\") @default(1) 'menu_animations': bool,\n\n //- rjf: fonts\n @display_name('UI Font') @description(\"The name of, or path to, the font used when displaying non-code UI elements.\")\n @default('') 'main_font': string,\n @display_name('Code Font') @description(\"The name of, or path to, the font used when displaying code.\")\n @default('') 'code_font': string,\n\n //- rjf: theme\n @default(\"Default (Dark)\") @display_name('User Theme')\n @description(\"The user's theme, which describes all colors used throughout the UI.\")\n 'theme': string,\n @no_expand @display_name('User Theme')\n 'theme_colors': set,\n\n //- rjf: auto eval\n @display_name('Show Auto Watches In Source / Disassembly') @description(\"Enables the display of auto watch expressions inline in source and disassembly views.\") @default(1)\n 'show_autos_in_src_and_disasm': bool,\n\n //- rjf: autocompletion\n @display_name('Autocompletion Lister') @description(\"Enables the autocompletion lister while typing expressions.\") @default(1)\n 'autocompletion_lister': bool,\n @display_name('View Call Argument Helper') @description(\"Enables the view call argument helper, which shows view arguments and documentation, while typing expressions.\") @default(1)\n 'view_call_argument_helper': bool,\n\n //- rjf: scope decorations\n @default(1) @display_name('Cursor Scope Lines') @description(\"Controls whether or not scopes containing the cursor in text views are drawn.\")\n 'cursor_scope_lines': bool,\n @default(1) @display_name('Cursor Scope End Annotations') @description(\"Controls whether or not ending annotations for scopes containing the cursor are drawn.\")\n 'cursor_scope_end_annotations': bool,\n\n //- rjf: cursor decorations\n @default(1) @display_name('Cursor Trail') @expand_if(\"$.animations\") @description(\"Controls whether or not a movement trail animation of the cursor is drawn.\")\n 'cursor_trail': bool,\n\n //- rjf: thread & breakpoint decorations\n @default(1) @display_name('Thread Lines') @description(\"Controls whether or not a long horizontal line is drawn before the next line or instruction that the selected thread will execute in source and disassembly views.\")\n 'thread_lines': bool,\n @default(1) @display_name('Thread Glow') @description(\"Controls whether or not a glowing effect is drawn on the selected thread in source and disassembly views.\")\n 'thread_glow': bool,\n @default(1) @display_name('Breakpoint Lines') @description(\"Controls whether or not a long horizontal line is drawn before the line or instruction at which a breakpoint is placed, in source and disassembly views.\")\n 'breakpoint_lines': bool,\n @default(1) @display_name('Breakpoint Glow') @description(\"Controls whether or not a glowing effect is drawn on breakpoints in source and disassembly views.\")\n 'breakpoint_glow': bool,\n\n //- rjf: occluding background settings\n @default(0) @display_name('Opaque Backgrounds') @description(\"Controls whether or not all floating background colors are forced to be fully opaque.\")\n 'opaque_backgrounds': bool,\n @default(1) @display_name('Background Blur') @description(\"Controls whether or not occluded regions behind floating elements are blurred.\")\n 'background_blur': bool,\n\n //- rjf: appearance settings\n @default(1) @display_name('Drop Shadows') @description(\"Controls whether or not drop shadows are drawn.\")\n 'drop_shadows': bool,\n @default(1.f) @display_name('Rounded Corner Amount') @description(\"Controls the degree to which UI corners are rounded.\")\n 'rounded_corner_amount': @range[0, 1] f32,\n\n //- rjf: code formatting settings\n @default(2) @display_name('User Tab Width') 'tab_width': @range[1, 32] u64,\n\n //- rjf: windows style menu bar\n @default(1) @display_name('Focus Menu Bar With Alt') @description(\"Mimics standard Windows behavior of focusing the menu bar using the Alt key.\")\n 'focus_menu_bar_with_alt': bool,\n\n //- rjf: native filesystem dialogues\n @default(0) @display_name('Use Native File System Dialog') @description(\"Uses the operating system's file system dialog box, rather than the debugger's built-in UI.\")\n 'use_native_file_system_dialog': bool,\n\n //- rjf: transient tabs\n @default(1) @display_name('Transient Tabs') @description(\"When snapping to source code locations, opens new files in a 'transienLine truncated
|
||||
{str8_lit_comp("project"), 0, str8_lit_comp("@expand_commands(edit_project_theme) x:\n{\n @display_name('Project Name') 'name': string,\n @default(2) @display_name('Project Tab Width') 'tab_width': @range[1, 32] u64,\n\n //- rjf: visualizers\n @display_name('Display Pointer Addresses Before Contents') @description(\"When visualizing pointers, always shows the address first, before showing contents at the pointer's address.\")\n @default(0) display_pointer_addresses_before_contents: bool,\n @display_name('Use Default C++ STL Type Visualizers') @description(\"Enables the built-in type views for C++ STL types.\")\n @default(1) use_default_stl_type_views: bool,\n @display_name('Use Default Unreal Engine Type Visualizers') @description(\"Enables the built-in type views for Unreal Engine types.\")\n @default(1) use_default_ue_type_views: bool,\n\n //- rjf: theme\n @default(\"None\") @display_name('Project Theme') @description(\"The project's theme, which describes all colors used throughout the UI, and can override the user's theme.\")\n 'theme': string,\n @no_expand @display_name('Project Theme') @description(\"The project's theme, which describes all colors used throughout the UI, and can override the user's theme.\")\n 'theme_colors': set,\n\n //- rjf: exception settings\n @default(1) @display_name(\"Break On Win32 Control-C Exceptions\") @description(\"Code: 0x40010005\")\n win32_ctrl_c: bool;\n @default(1) @display_name(\"Break On Win32 Control-Break Exceptions\") @description(\"Code: 0x40010008\")\n win32_ctrl_break: bool;\n @default(0) @display_name(\"Break On Win32 WinRT Originate Error Exceptions\") @description(\"Code: 0x40080201\")\n win32_win_rt_originate_error: bool;\n @default(0) @display_name(\"Break On Win32 WinRT Transform Error Exceptions\") @description(\"Code: 0x40080202\")\n win32_win_rt_transform_error: bool;\n @default(0) @display_name(\"Break On Win32 RPC Call Cancelled Exceptions\") @description(\"Code: 0x0000071a\")\n win32_rpc_call_cancelled: bool;\n @default(0) @display_name(\"Break On Win32 Data Type Misalignment Exceptions\") @description(\"Code: 0x80000002\")\n win32_datatype_misalignment: bool;\n @default(1) @display_name(\"Break On Win32 Access Violation Exceptions\") @description(\"Code: 0xc0000005\")\n win32_access_violation: bool;\n @default(0) @display_name(\"Break On Win32 In Page Error Exceptions\") @description(\"Code: 0xc0000006\")\n win32_in_page_error: bool;\n @default(1) @display_name(\"Break On Win32 Invalid Handle Specified Exceptions\") @description(\"Code: 0xc0000008\")\n win32_invalid_handle: bool;\n @default(0) @display_name(\"Break On Win32 Not Enough Quota Exceptions\") @description(\"Code: 0xc0000017\")\n win32_not_enough_quota: bool;\n @default(0) @display_name(\"Break On Win32 Illegal Instruction Exceptions\") @description(\"Code: 0xc000001d\")\n win32_illegal_instruction: bool;\n @default(0) @display_name(\"Break On Win32 Cannot Continue From Exception Exceptions\") @description(\"Code: 0xc0000025\")\n win32_cannot_continue_exception: bool;\n @default(0) @display_name(\"Break On Win32 Invalid Exception Disposition Returned By Handler Exceptions\") @description(\"Code: 0xc0000026\")\n win32_invalid_exception_disposition: bool;\n @default(0) @display_name(\"Break On Win32 Array Bounds Exceeded Exceptions\") @description(\"Code: 0xc000008c\")\n win32_array_bounds_exceeded: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Denormal Operand Exceptions\") @description(\"Code: 0xc000008d\")\n win32_floating_point_denormal_operand: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Division By Zero Exceptions\") @description(\"Code: 0xc000008e\")\n win32_floating_point_division_by_zero: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Inexact Result Exceptions\") @description(\"Code: 0xc000008f\")\n win32_floating_point_inexact_result: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Invalid Operation Exceptions\") @description(\"Code: 0xc0000090\")\n win32_floating_point_invalid_operation: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Overflow Exceptions\") @description(\"Code: 0xc0000091\")\n win32_floating_point_overflow: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Stack Check Exceptions\") @description(\"Code: 0xc0000092\")\n win32_floating_point_stack_check: bool;\n @default(0) @display_name(\"Break On Win32 Floating-Point Underflow Exceptions\") @description(\"Code: 0xc0000093\")\n win32_floating_point_underflow: bool;\n @default(0) @display_name(\"Break On Win32 Integer Division By Zero Exceptions\") @description(\"Code: 0xc0000094\")\n win32_integer_division_by_zero: bool;\n @default(0) @display_name(\"Break On Win32 Integer Overflow Exceptions\") @description(\"Code: 0xc0000095\")\n win32_integer_overflow: bool;\n @default(0) @display_name(\"Break On Win32 Privileged Instruction Exceptions\
Line truncated
|
||||
{str8_lit_comp("theme_color"), 0, str8_lit_comp("@collection_commands(add_theme_color, fork_theme, save_theme, save_and_set_theme)\n@row_commands(duplicate_cfg, remove_cfg)\nx:\n{\n @display_name('Tags') tags: string,\n @display_name('Value') value: @color @hex u32,\n}\n")},
|
||||
{str8_lit_comp("window"), 0, str8_lit_comp("x:\n{\n //- rjf: text rasterization settings\n @default(1) @display_name('Smooth UI Text') @description(\"Controls whether or not UI text is fully anti-aliased, for a smoother appearance.\")\n 'smooth_ui_text': bool,\n @default(1) @display_name('Hint UI Text') @description(\"Controls whether or not UI text is hinted, for better text readability at small sizes.\")\n 'hint_ui_text': bool,\n @default(0) @display_name('Smooth Code Text') @description(\"Controls whether or not code text is fully anti-aliased, for a smoother appearance.\")\n 'smooth_code_text': bool,\n @default(1) @display_name('Hint Code Text') @description(\"Controls whether or not code text is hinted, for better text readability at small sizes.\")\n 'hint_code_text': bool,\n @default(11) @display_name('Window Font Size') @description(\"Controls the window's default font size. Does not apply to tabs with their own font size set.\")\n 'font_size': @range[6, 72] u64,\n\n //- rjf: size settings\n @default(3.f) @display_name('Window Row Height') @description(\"Controls the window's default row height, in multiples of the font size. Does not apply to tabs with their own row height set.\")\n 'row_height': @range[1.75f, 5.f] f32,\n @default(3.f) @description(\"Controls the height of tabs, in multiples of the font size.\")\n 'tab_height': @range[1.75f, 5.f] f32,\n\n //- rjf: theme settings\n @default(1) @display_name('Use Project Theme') @description(\"Prefer using the project theme for this window, if any. If off, only the user's theme settings will be used.\")\n 'use_project_theme': bool,\n}\n")},
|
||||
|
||||
@@ -325,6 +325,9 @@ RD_VocabTable:
|
||||
//- rjf: update check
|
||||
@default(1) @display_name('Check For Updates') @description("Enables a small network request to check if there is a newer release version available.")
|
||||
'check_for_updates': bool,
|
||||
|
||||
//- rjf: system installation
|
||||
@display_name('Install To System') @description("Controls whether or not associated installation files are created on the system, for tighter integration with the operating system shell.") 'install_to_system': bool,
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
@@ -7549,7 +7549,7 @@ rd_window_frame(void)
|
||||
UI_Signal sig = ui_button(str8_lit("Submit request, issue, or bug report"));
|
||||
if(ui_clicked(sig))
|
||||
{
|
||||
wm_open_in_browser(url);
|
||||
sh_open_in_browser(url);
|
||||
}
|
||||
}
|
||||
ui_spacer(ui_em(0.5f, 1.f));
|
||||
@@ -8018,7 +8018,7 @@ rd_window_frame(void)
|
||||
ui_box_equip_display_fstrs(label, &fstrs);
|
||||
if(ui_clicked(sig))
|
||||
{
|
||||
wm_open_in_browser(s("https://github.com/EpicGames/raddebugger/releases/latest"));
|
||||
sh_open_in_browser(s("https://github.com/EpicGames/raddebugger/releases/latest"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13201,6 +13201,17 @@ rd_frame(void)
|
||||
rd_state->eval_viz_base_string_flags |= EV_StringFlag_DisplayAddressUnmappedStatus;
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: do installation/uninstallation of app
|
||||
//
|
||||
B32 installed = rd_setting_b32_from_name(s("install_to_system"));
|
||||
B32 last_installed = rd_state->installed;
|
||||
if(installed != last_installed)
|
||||
{
|
||||
sh_install_or_uninstall_self(installed);
|
||||
rd_state->installed = installed;
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: send update check if needed
|
||||
//
|
||||
@@ -13503,7 +13514,7 @@ rd_frame(void)
|
||||
{
|
||||
cmd_title = info->string;
|
||||
}
|
||||
String8 file_path = wm_graphical_pick_file(scratch.arena, cmd_title, current_path_string);
|
||||
String8 file_path = sh_pick_file(scratch.arena, cmd_title, current_path_string);
|
||||
file_path = path_normalized_from_string(scratch.arena, file_path);
|
||||
if(file_path.size != 0)
|
||||
{
|
||||
@@ -15084,7 +15095,7 @@ rd_frame(void)
|
||||
if(rd_regs()->file_path.size != 0)
|
||||
{
|
||||
String8 full_path = rd_regs()->file_path;
|
||||
wm_show_in_filesystem_ui(full_path);
|
||||
sh_show_in_file_browser(full_path);
|
||||
}break;
|
||||
|
||||
//- rjf: source <-> disasm
|
||||
|
||||
@@ -390,6 +390,9 @@ struct RD_State
|
||||
S32 frame_depth;
|
||||
U64 frame_eval_memread_endt_us;
|
||||
|
||||
// rjf: installation setting state
|
||||
B32 installed;
|
||||
|
||||
// rjf: update checker
|
||||
B32 sent_update_check;
|
||||
B32 got_update_check;
|
||||
|
||||
+22
-20
@@ -387,6 +387,7 @@
|
||||
#include "minidump/minidump_parse.h"
|
||||
#include "mdesk/mdesk.h"
|
||||
#include "window_manager/window_manager_inc.h"
|
||||
#include "shell/shell_inc.h"
|
||||
#include "http/http_inc.h"
|
||||
#include "symbol_server/symbol_server_inc.h"
|
||||
#include "config/config_inc.h"
|
||||
@@ -448,6 +449,7 @@
|
||||
#include "minidump/minidump_parse.c"
|
||||
#include "mdesk/mdesk.c"
|
||||
#include "window_manager/window_manager_inc.c"
|
||||
#include "shell/shell_inc.c"
|
||||
#include "http/http_inc.c"
|
||||
#include "symbol_server/symbol_server_inc.c"
|
||||
#include "config/config_inc.c"
|
||||
@@ -964,26 +966,26 @@ entry_point(CmdLine *cmd_line)
|
||||
//- rjf: help message box
|
||||
case ExecMode_Help:
|
||||
{
|
||||
wm_graphical_message(0,
|
||||
str8_lit("The RAD Debugger - Help"),
|
||||
str8_lit("The following options may be used when starting the RAD Debugger from the command line:\n\n"
|
||||
"--user:<path>\n"
|
||||
"Use to specify the location of a user file which should be used. User files are used to store settings for users, including window and panel setups, path mapping, and visual settings. If this file does not exist, it will be created as necessary. This file will be autosaved as user-related changes are made.\n\n"
|
||||
"--project:<path>\n"
|
||||
"Use to specify the location of a project file which should be used. Project files are used to store settings for users and projects. If this file does not exist, it will be created as necessary. This file will be autosaved as project-related changes are made.\n\n"
|
||||
"--auto_step\n"
|
||||
"This will step into all active targets after the debugger initially starts.\n\n"
|
||||
"--auto_run\n"
|
||||
"This will run all active targets after the debugger initially starts.\n\n"
|
||||
"--quit_after_success (or -q)\n"
|
||||
"This will close the debugger automatically after all processes exit, if they all exited successfully (with code 0), and ran with no interruptions.\n\n"
|
||||
"--ipc <command>\n"
|
||||
"This will launch the debugger in the non-graphical IPC mode, which is used to communicate with another running instance of the debugger. The debugger instance will launch, send the specified command, then immediately terminate. This may be used by editors or other programs to control the debugger.\n\n"
|
||||
"--gen_crash_dump\n"
|
||||
"Generate mini dump on crash.\n\n"
|
||||
"--logs:<path>\n"
|
||||
"Overrides default path to the folder with logs.\n"
|
||||
));
|
||||
sh_message(0,
|
||||
str8_lit("The RAD Debugger - Help"),
|
||||
str8_lit("The following options may be used when starting the RAD Debugger from the command line:\n\n"
|
||||
"--user:<path>\n"
|
||||
"Use to specify the location of a user file which should be used. User files are used to store settings for users, including window and panel setups, path mapping, and visual settings. If this file does not exist, it will be created as necessary. This file will be autosaved as user-related changes are made.\n\n"
|
||||
"--project:<path>\n"
|
||||
"Use to specify the location of a project file which should be used. Project files are used to store settings for users and projects. If this file does not exist, it will be created as necessary. This file will be autosaved as project-related changes are made.\n\n"
|
||||
"--auto_step\n"
|
||||
"This will step into all active targets after the debugger initially starts.\n\n"
|
||||
"--auto_run\n"
|
||||
"This will run all active targets after the debugger initially starts.\n\n"
|
||||
"--quit_after_success (or -q)\n"
|
||||
"This will close the debugger automatically after all processes exit, if they all exited successfully (with code 0), and ran with no interruptions.\n\n"
|
||||
"--ipc <command>\n"
|
||||
"This will launch the debugger in the non-graphical IPC mode, which is used to communicate with another running instance of the debugger. The debugger instance will launch, send the specified command, then immediately terminate. This may be used by editors or other programs to control the debugger.\n\n"
|
||||
"--gen_crash_dump\n"
|
||||
"Generate mini dump on crash.\n\n"
|
||||
"--logs:<path>\n"
|
||||
"Overrides default path to the folder with logs.\n"
|
||||
));
|
||||
}break;
|
||||
}
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ r_init(CmdLine *cmdln)
|
||||
{
|
||||
char buffer[256] = {0};
|
||||
raddbg_snprintf(buffer, sizeof(buffer), "D3D11 device creation failure (%lx). The process is terminating.", error);
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||
abort_self(1);
|
||||
}
|
||||
ProfEnd();
|
||||
@@ -370,7 +370,7 @@ r_init(CmdLine *cmdln)
|
||||
{
|
||||
errors = str8((U8 *)vshad_source_errors->lpVtbl->GetBufferPointer(vshad_source_errors),
|
||||
(U64)vshad_source_errors->lpVtbl->GetBufferSize(vshad_source_errors));
|
||||
wm_graphical_message(1, str8_lit("Vertex Shader Compilation Failure"), errors);
|
||||
sh_message(1, str8_lit("Vertex Shader Compilation Failure"), errors);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -425,7 +425,7 @@ r_init(CmdLine *cmdln)
|
||||
{
|
||||
errors = str8((U8 *)pshad_source_errors->lpVtbl->GetBufferPointer(pshad_source_errors),
|
||||
(U64)pshad_source_errors->lpVtbl->GetBufferSize(pshad_source_errors));
|
||||
wm_graphical_message(1, str8_lit("Pixel Shader Compilation Failure"), errors);
|
||||
sh_message(1, str8_lit("Pixel Shader Compilation Failure"), errors);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -534,7 +534,7 @@ r_window_equip(WM_Window handle)
|
||||
{
|
||||
char buffer[256] = {0};
|
||||
raddbg_snprintf(buffer, sizeof(buffer), "DXGI swap chain creation failure (%lx). The process is terminating.", error);
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||
abort_self(1);
|
||||
}
|
||||
|
||||
@@ -1052,7 +1052,7 @@ r_window_end_frame(WM_Window window, R_Handle window_equip)
|
||||
{
|
||||
char buffer[256] = {0};
|
||||
raddbg_snprintf(buffer, sizeof(buffer), "D3D11 present failure (%lx). The process is terminating.", error);
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_cstring(buffer));
|
||||
abort_self(1);
|
||||
}
|
||||
d_ctx->lpVtbl->ClearState(d_ctx);
|
||||
|
||||
@@ -23,7 +23,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
||||
r_ogl_lnx_state->display = eglGetDisplay((EGLNativeDisplayType)lnx_wm_state->display);
|
||||
if(r_ogl_lnx_state->display == EGL_NO_DISPLAY)
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Failed to get EGL display."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Failed to get EGL display."));
|
||||
abort_self(1);
|
||||
}
|
||||
}
|
||||
@@ -33,14 +33,14 @@ r_ogl_os_init(CmdLine *cmdln)
|
||||
EGLint egl_version_minor = 0;
|
||||
if(!eglInitialize(r_ogl_lnx_state->display, &egl_version_major, &egl_version_minor))
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't initialize EGL display."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't initialize EGL display."));
|
||||
abort_self(1);
|
||||
}
|
||||
if(egl_version_major < 1 || (egl_version_major == 1 && egl_version_minor < 5))
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8 message = push_str8f(scratch.arena, "Unsupported EGL version (%i.%i, need at least 1.5)", egl_version_major, egl_version_minor);
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), message);
|
||||
sh_message(1, str8_lit("Fatal Error"), message);
|
||||
abort_self(1);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
@@ -48,7 +48,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
||||
//- rjf: pick GL API
|
||||
if(!eglBindAPI(EGL_OPENGL_API))
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't initialize EGL API to OpenGL."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't initialize EGL API to OpenGL."));
|
||||
abort_self(1);
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
||||
EGLint configs_count = 0;
|
||||
if(!eglChooseConfig(r_ogl_lnx_state->display, config_filter, configs, ArrayCount(configs), &configs_count) || configs_count == 0)
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't choose EGL configuration."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't choose EGL configuration."));
|
||||
abort_self(1);
|
||||
}
|
||||
int screen = DefaultScreen(lnx_wm_state->display);
|
||||
@@ -97,7 +97,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
||||
}
|
||||
if(vi == 0 || r_ogl_lnx_state->config == 0)
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't find an EGL config with a matching X11 visual."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't find an EGL config with a matching X11 visual."));
|
||||
abort_self(1);
|
||||
}
|
||||
lnx_wm_state->window_visual = vi->visual;
|
||||
@@ -125,7 +125,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
||||
r_ogl_lnx_state->context = eglCreateContext(r_ogl_lnx_state->display, r_ogl_lnx_state->config, EGL_NO_CONTEXT, options);
|
||||
if(r_ogl_lnx_state->context == EGL_NO_CONTEXT)
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't create OpenGL context with EGL."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't create OpenGL context with EGL."));
|
||||
abort_self(1);
|
||||
}
|
||||
}
|
||||
@@ -168,7 +168,7 @@ r_ogl_os_window_equip(WM_Window window)
|
||||
}
|
||||
if(w->surface == EGL_NO_SURFACE)
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't create EGL surface."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Couldn't create EGL surface."));
|
||||
abort_self(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ r_ogl_os_init(CmdLine *cmdln)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8 message = push_str8f(scratch.arena, "Unsupported GLX version (%i.%i, need at least 1.3)", glx_version_major, glx_version_minor);
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), message);
|
||||
sh_message(1, str8_lit("Fatal Error"), message);
|
||||
abort_self(1);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
@@ -45,25 +45,25 @@ r_ogl_os_init(CmdLine *cmdln)
|
||||
GLXFBConfig *framebuffer_configs = glXChooseFBConfig(lnx_wm_state->display, DefaultScreen(lnx_wm_state->display), framebuffer_config_options, &framebuffer_configs_count);
|
||||
if(framebuffer_configs == 0)
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Could not find a suitable framebuffer configuration."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Could not find a suitable framebuffer configuration."));
|
||||
abort_self(1);
|
||||
}
|
||||
GLXFBConfig framebuffer_config = framebuffer_configs[0];
|
||||
XFree(framebuffer_configs);
|
||||
|
||||
|
||||
//- extract visual/colormap from chosen fbconfig, publish to os layer
|
||||
{
|
||||
XVisualInfo *vi = glXGetVisualFromFBConfig(lnx_wm_state->display, framebuffer_config);
|
||||
if(vi == 0)
|
||||
{
|
||||
wm_graphical_message(1, str8_lit("Fatal Error"), str8_lit("Could not get visual from GLX framebuffer config."));
|
||||
sh_message(1, str8_lit("Fatal Error"), str8_lit("Could not get visual from GLX framebuffer config."));
|
||||
abort_self(1);
|
||||
}
|
||||
lnx_wm_state->window_visual = vi->visual;
|
||||
lnx_wm_state->window_depth = vi->depth;
|
||||
lnx_wm_state->window_colormap = XCreateColormap(lnx_wm_state->display,
|
||||
XRootWindow(lnx_wm_state->display, vi->screen),
|
||||
vi->visual, AllocNone);
|
||||
XRootWindow(lnx_wm_state->display, vi->screen),
|
||||
vi->visual, AllocNone);
|
||||
XFree(vi);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
@@ -0,0 +1,16 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef SHELL_H
|
||||
#define SHELL_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Shell Operations
|
||||
|
||||
internal void sh_message(B32 error, String8 title, String8 message);
|
||||
internal String8 sh_pick_file(Arena *arena, String8 title, String8 initial_path);
|
||||
internal void sh_show_in_file_browser(String8 path);
|
||||
internal void sh_open_in_browser(String8 url);
|
||||
internal void sh_install_or_uninstall_self(B32 install);
|
||||
|
||||
#endif // SHELL_H
|
||||
@@ -0,0 +1,11 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#include "shell.c"
|
||||
#if OS_WINDOWS
|
||||
# include "win32/shell/win32_shell.c"
|
||||
#elif OS_LINUX
|
||||
# include "linux/shell/linux_shell.c"
|
||||
#else
|
||||
# error Shell functions not implemented for this operating system.
|
||||
#endif
|
||||
@@ -0,0 +1,16 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef SHELL_INC_H
|
||||
#define SHELL_INC_H
|
||||
|
||||
#include "shell.h"
|
||||
#if OS_WINDOWS
|
||||
# include "win32/shell/win32_shell.h"
|
||||
#elif OS_LINUX
|
||||
# include "linux/shell/linux_shell.h"
|
||||
#else
|
||||
# error Shell functions not implemented for this operating system.
|
||||
#endif
|
||||
|
||||
#endif // SHELL_INC_H
|
||||
@@ -0,0 +1,78 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Shell Operations
|
||||
|
||||
internal void
|
||||
sh_message(B32 error, String8 title, String8 message)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String16 title16 = str16_from_8(scratch.arena, title);
|
||||
String16 message16 = str16_from_8(scratch.arena, message);
|
||||
MessageBoxW(0, (WCHAR *)message16.str, (WCHAR *)title16.str, MB_OK|(!!error*MB_ICONERROR));
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
internal String8
|
||||
sh_pick_file(Arena *arena, String8 title, String8 initial_path)
|
||||
{
|
||||
String8 result = {0};
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
U64 buffer_size = 4096;
|
||||
U16 *buffer = push_array(scratch.arena, U16, buffer_size);
|
||||
OPENFILENAMEW params = {sizeof(params)};
|
||||
{
|
||||
params.lpstrTitle = (WCHAR *)str16_from_8(scratch.arena, title).str;
|
||||
params.lpstrFile = (WCHAR *)buffer;
|
||||
params.nMaxFile = buffer_size;
|
||||
params.lpstrInitialDir = (WCHAR *)str16_from_8(scratch.arena, initial_path).str;
|
||||
}
|
||||
if(GetOpenFileNameW(¶ms))
|
||||
{
|
||||
result = str8_from_16(arena, str16_cstring((U16 *)buffer));
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void
|
||||
sh_show_in_file_browser(String8 path)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8 path_copy = push_str8_copy(scratch.arena, path);
|
||||
for(U64 idx = 0; idx < path_copy.size; idx += 1)
|
||||
{
|
||||
if(path_copy.str[idx] == '/')
|
||||
{
|
||||
path_copy.str[idx] = '\\';
|
||||
}
|
||||
}
|
||||
String16 path16 = str16_from_8(scratch.arena, path_copy);
|
||||
SFGAOF flags = 0;
|
||||
PIDLIST_ABSOLUTE list = 0;
|
||||
if(path16.size != 0 && SUCCEEDED(SHParseDisplayName(path16.str, 0, &list, 0, &flags)))
|
||||
{
|
||||
HRESULT hr = SHOpenFolderAndSelectItems(list, 0, 0, 0);
|
||||
CoTaskMemFree(list);
|
||||
(void)hr;
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
internal void
|
||||
sh_open_in_browser(String8 url)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String16 url16 = str16_from_8(scratch.arena, url);
|
||||
ShellExecuteW(0, L"open", (WCHAR *)url16.str, 0, 0, SW_SHOWNORMAL);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
internal void
|
||||
sh_install_or_uninstall_self(B32 install)
|
||||
{
|
||||
// TODO(rjf)
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef WIN32_SHELL_H
|
||||
#define WIN32_SHELL_H
|
||||
|
||||
#endif // WIN32_SHELL_H
|
||||
@@ -1618,76 +1618,3 @@ hcursor = curs; }break;
|
||||
w32_wm_state->hCursor = hcursor;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Native User-Facing Graphical Messages (Implemented Per-OS)
|
||||
|
||||
internal void
|
||||
wm_graphical_message(B32 error, String8 title, String8 message)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String16 title16 = str16_from_8(scratch.arena, title);
|
||||
String16 message16 = str16_from_8(scratch.arena, message);
|
||||
MessageBoxW(0, (WCHAR *)message16.str, (WCHAR *)title16.str, MB_OK|(!!error*MB_ICONERROR));
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
internal String8
|
||||
wm_graphical_pick_file(Arena *arena, String8 title, String8 initial_path)
|
||||
{
|
||||
String8 result = {0};
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
U64 buffer_size = 4096;
|
||||
U16 *buffer = push_array(scratch.arena, U16, buffer_size);
|
||||
OPENFILENAMEW params = {sizeof(params)};
|
||||
{
|
||||
params.lpstrTitle = (WCHAR *)str16_from_8(scratch.arena, title).str;
|
||||
params.lpstrFile = (WCHAR *)buffer;
|
||||
params.nMaxFile = buffer_size;
|
||||
params.lpstrInitialDir = (WCHAR *)str16_from_8(scratch.arena, initial_path).str;
|
||||
}
|
||||
if(GetOpenFileNameW(¶ms))
|
||||
{
|
||||
result = str8_from_16(arena, str16_cstring((U16 *)buffer));
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Shell Operations
|
||||
|
||||
internal void
|
||||
wm_show_in_filesystem_ui(String8 path)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8 path_copy = push_str8_copy(scratch.arena, path);
|
||||
for(U64 idx = 0; idx < path_copy.size; idx += 1)
|
||||
{
|
||||
if(path_copy.str[idx] == '/')
|
||||
{
|
||||
path_copy.str[idx] = '\\';
|
||||
}
|
||||
}
|
||||
String16 path16 = str16_from_8(scratch.arena, path_copy);
|
||||
SFGAOF flags = 0;
|
||||
PIDLIST_ABSOLUTE list = 0;
|
||||
if(path16.size != 0 && SUCCEEDED(SHParseDisplayName(path16.str, 0, &list, 0, &flags)))
|
||||
{
|
||||
HRESULT hr = SHOpenFolderAndSelectItems(list, 0, 0, 0);
|
||||
CoTaskMemFree(list);
|
||||
(void)hr;
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
internal void
|
||||
wm_open_in_browser(String8 url)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String16 url16 = str16_from_8(scratch.arena, url);
|
||||
ShellExecuteW(0, L"open", (WCHAR *)url16.str, 0, 0, SW_SHOWNORMAL);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
@@ -231,16 +231,4 @@ internal Vec2F32 wm_mouse_from_window(WM_Window window);
|
||||
|
||||
internal void wm_set_cursor(WM_Cursor cursor);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Native User-Facing Graphical Messages (Implemented Per-OS)
|
||||
|
||||
internal void wm_graphical_message(B32 error, String8 title, String8 message);
|
||||
internal String8 wm_graphical_pick_file(Arena *arena, String8 title, String8 initial_path);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Shell Operations
|
||||
|
||||
internal void wm_show_in_filesystem_ui(String8 path);
|
||||
internal void wm_open_in_browser(String8 url);
|
||||
|
||||
#endif // WINDOW_MANAGER_H
|
||||
@@ -249,30 +249,3 @@ internal void
|
||||
wm_set_cursor(WM_Cursor cursor)
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Native User-Facing Graphical Messages (Implemented Per-OS)
|
||||
|
||||
internal void
|
||||
wm_graphical_message(B32 error, String8 title, String8 message)
|
||||
{
|
||||
}
|
||||
|
||||
internal String8
|
||||
wm_graphical_pick_file(Arena *arena, String8 title, String8 initial_path)
|
||||
{
|
||||
return str8_zero();
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @per_os_impl Shell Operations
|
||||
|
||||
internal void
|
||||
wm_show_in_filesystem_ui(String8 path)
|
||||
{
|
||||
}
|
||||
|
||||
internal void
|
||||
wm_open_in_browser(String8 url)
|
||||
{
|
||||
}
|
||||
Reference in new issue
Block a user