mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 13:28:40 +00:00
memory view fixups for new visualization systems; breakpoint editing work
This commit is contained in:
@@ -5598,7 +5598,8 @@ ctrl_mem_stream_thread__entry_point(void *p)
|
|||||||
if(got_task && pre_read_mem_gen != preexisting_mem_gen)
|
if(got_task && pre_read_mem_gen != preexisting_mem_gen)
|
||||||
{
|
{
|
||||||
range_size = dim_1u64(vaddr_range_clamped);
|
range_size = dim_1u64(vaddr_range_clamped);
|
||||||
U64 arena_size = AlignPow2(range_size + ARENA_HEADER_SIZE, os_get_system_info()->page_size);
|
U64 page_size = os_get_system_info()->page_size;
|
||||||
|
U64 arena_size = AlignPow2(range_size + ARENA_HEADER_SIZE, page_size);
|
||||||
range_arena = arena_alloc(.reserve_size = range_size+ARENA_HEADER_SIZE, .commit_size = range_size+ARENA_HEADER_SIZE);
|
range_arena = arena_alloc(.reserve_size = range_size+ARENA_HEADER_SIZE, .commit_size = range_size+ARENA_HEADER_SIZE);
|
||||||
if(range_arena == 0)
|
if(range_arena == 0)
|
||||||
{
|
{
|
||||||
@@ -5609,14 +5610,17 @@ ctrl_mem_stream_thread__entry_point(void *p)
|
|||||||
range_base = push_array_no_zero(range_arena, U8, range_size);
|
range_base = push_array_no_zero(range_arena, U8, range_size);
|
||||||
U64 bytes_read = 0;
|
U64 bytes_read = 0;
|
||||||
U64 retry_count = 0;
|
U64 retry_count = 0;
|
||||||
U64 retry_limit = (zero_terminated ? 64 : 0);
|
U64 retry_limit = range_size > page_size ? 64 : 0;
|
||||||
for(Rng1U64 vaddr_range_clamped_retry = vaddr_range_clamped; retry_count <= retry_limit; retry_count += 1)
|
for(Rng1U64 vaddr_range_clamped_retry = vaddr_range_clamped;
|
||||||
|
retry_count <= retry_limit;
|
||||||
|
retry_count += 1)
|
||||||
{
|
{
|
||||||
bytes_read = dmn_process_read(process.dmn_handle, vaddr_range_clamped_retry, range_base);
|
bytes_read = dmn_process_read(process.dmn_handle, vaddr_range_clamped_retry, range_base);
|
||||||
if(bytes_read == 0 && vaddr_range_clamped_retry.max > vaddr_range_clamped_retry.min)
|
if(bytes_read == 0 && vaddr_range_clamped_retry.max > vaddr_range_clamped_retry.min)
|
||||||
{
|
{
|
||||||
U64 diff = (vaddr_range_clamped_retry.max-vaddr_range_clamped_retry.min)/2;
|
U64 diff = (vaddr_range_clamped_retry.max-vaddr_range_clamped_retry.min)/2;
|
||||||
vaddr_range_clamped_retry.max -= diff;
|
vaddr_range_clamped_retry.max -= diff;
|
||||||
|
vaddr_range_clamped_retry.max = AlignDownPow2(vaddr_range_clamped_retry.max, page_size);
|
||||||
if(diff == 0)
|
if(diff == 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|||||||
+13
-8
@@ -86,7 +86,9 @@ Y(String8, type(CTRL_PathString8), dbg, "Debug Info Path")\
|
|||||||
Y(String8, type(CTRL_PlainString8), args, "Arguments")\
|
Y(String8, type(CTRL_PlainString8), args, "Arguments")\
|
||||||
Y(String8, type(CTRL_PathString8), working_directory, "Working Directory")\
|
Y(String8, type(CTRL_PathString8), working_directory, "Working Directory")\
|
||||||
Y(String8, type(CTRL_CodeString8), entry_point, "Custom Entry Point")\
|
Y(String8, type(CTRL_CodeString8), entry_point, "Custom Entry Point")\
|
||||||
Y(String8, type(CTRL_PlainString8), location, "Location")\
|
Y(String8, type(CTRL_PathString8), source_location, "Source Location")\
|
||||||
|
Y(String8, type(CTRL_CodeString8), function_location, "Function Location")\
|
||||||
|
Y(String8, type(CTRL_CodeString8), address_location, "Address Location")\
|
||||||
Y(String8, type(CTRL_CodeString8), condition, "Condition")\
|
Y(String8, type(CTRL_CodeString8), condition, "Condition")\
|
||||||
X(CTRL_MetaEvalFrameArray, callstack, "Call Stack")
|
X(CTRL_MetaEvalFrameArray, callstack, "Call Stack")
|
||||||
#define X(T, name, pretty_name) T name;
|
#define X(T, name, pretty_name) T name;
|
||||||
@@ -109,12 +111,14 @@ struct_type(CTRL_MetaEval);
|
|||||||
|
|
||||||
struct_members(CTRL_BreakpointMetaEval)
|
struct_members(CTRL_BreakpointMetaEval)
|
||||||
{
|
{
|
||||||
member_lit_comp(CTRL_MetaEval, type(B32), enabled, .pretty_name = str8_lit_comp("Enabled")),
|
member_lit_comp(CTRL_MetaEval, type(B32), enabled, .pretty_name = str8_lit_comp("Enabled")),
|
||||||
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
|
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
|
||||||
member_lit_comp(CTRL_MetaEval, type(U64), hit_count, .pretty_name = str8_lit_comp("Hit Count")),
|
member_lit_comp(CTRL_MetaEval, type(U64), hit_count, .pretty_name = str8_lit_comp("Hit Count")),
|
||||||
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Label")),
|
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Label")),
|
||||||
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), condition, .pretty_name = str8_lit_comp("Condition")),
|
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), condition, .pretty_name = str8_lit_comp("Condition")),
|
||||||
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),location, .pretty_name = str8_lit_comp("Location")),
|
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), source_location, .pretty_name = str8_lit_comp("Source Location")),
|
||||||
|
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), function_location, .pretty_name = str8_lit_comp("Function Location")),
|
||||||
|
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), address_location, .pretty_name = str8_lit_comp("Address Location")),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct_members(CTRL_TargetMetaEval)
|
struct_members(CTRL_TargetMetaEval)
|
||||||
@@ -130,7 +134,8 @@ struct_members(CTRL_PinMetaEval)
|
|||||||
{
|
{
|
||||||
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Expression")),
|
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), label, .pretty_name = str8_lit_comp("Expression")),
|
||||||
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
|
member_lit_comp(CTRL_MetaEval, type(U32), color, .pretty_name = str8_lit_comp("Color")),
|
||||||
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), location, .pretty_name = str8_lit_comp("Location")),
|
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), source_location, .pretty_name = str8_lit_comp("Source Location")),
|
||||||
|
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), address_location, .pretty_name = str8_lit_comp("Address Location")),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct_members(CTRL_MachineMetaEval)
|
struct_members(CTRL_MachineMetaEval)
|
||||||
|
|||||||
@@ -2142,7 +2142,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
|||||||
// rjf: no targets -> error
|
// rjf: no targets -> error
|
||||||
if(targets_to_launch->count == 0)
|
if(targets_to_launch->count == 0)
|
||||||
{
|
{
|
||||||
log_user_error(str8_lit("No active targets exist; cannot launch."));
|
log_user_error(str8_lit("No active targets exist; cannot launch. You must select target first."));
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case D_CmdKind_Kill:
|
case D_CmdKind_Kill:
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ E_ExprKindTable:
|
|||||||
{ LeafBytecode Null 0 "bytecode" "" "" "" }
|
{ LeafBytecode Null 0 "bytecode" "" "" "" }
|
||||||
{ LeafMember Null 0 "member" "" "" "" }
|
{ LeafMember Null 0 "member" "" "" "" }
|
||||||
{ LeafStringLiteral Null 0 "string_literal" "" "" "" }
|
{ LeafStringLiteral Null 0 "string_literal" "" "" "" }
|
||||||
|
{ LeafBool Null 0 "B32" "" "" "" }
|
||||||
{ LeafU64 Null 0 "U64" "" "" "" }
|
{ LeafU64 Null 0 "U64" "" "" "" }
|
||||||
{ LeafF64 Null 0 "F64" "" "" "" }
|
{ LeafF64 Null 0 "F64" "" "" "" }
|
||||||
{ LeafF32 Null 0 "F32" "" "" "" }
|
{ LeafF32 Null 0 "F32" "" "" "" }
|
||||||
|
|||||||
@@ -1221,6 +1221,14 @@ e_irtree_and_type_from_expr(Arena *arena, E_Expr *expr)
|
|||||||
result.mode = E_Mode_Value;
|
result.mode = E_Mode_Value;
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
//- rjf: leaf bools
|
||||||
|
case E_ExprKind_LeafBool:
|
||||||
|
{
|
||||||
|
result.root = e_irtree_const_u(arena, expr->value.u64);
|
||||||
|
result.type_key = expr->type_key;
|
||||||
|
result.mode = E_Mode_Value;
|
||||||
|
}break;
|
||||||
|
|
||||||
//- rjf: leaf U64s
|
//- rjf: leaf U64s
|
||||||
case E_ExprKind_LeafU64:
|
case E_ExprKind_LeafU64:
|
||||||
{
|
{
|
||||||
|
|||||||
+26
-1
@@ -789,6 +789,7 @@ e_append_strings_from_expr(Arena *arena, E_Expr *expr, String8List *out)
|
|||||||
str8_list_pushf(arena, out, "\"%S\"", expr->string);
|
str8_list_pushf(arena, out, "\"%S\"", expr->string);
|
||||||
}break;
|
}break;
|
||||||
case E_ExprKind_LeafU64:
|
case E_ExprKind_LeafU64:
|
||||||
|
case E_ExprKind_LeafBool:
|
||||||
{
|
{
|
||||||
str8_list_pushf(arena, out, "%I64u", expr->value.u64);
|
str8_list_pushf(arena, out, "%I64u", expr->value.u64);
|
||||||
}break;
|
}break;
|
||||||
@@ -1297,12 +1298,14 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
|||||||
case E_TokenKind_Identifier:
|
case E_TokenKind_Identifier:
|
||||||
{
|
{
|
||||||
B32 mapped_identifier = 0;
|
B32 mapped_identifier = 0;
|
||||||
|
B32 identifier_is_constant_value = 0;
|
||||||
B32 identifier_type_is_possibly_dynamically_overridden = 0;
|
B32 identifier_type_is_possibly_dynamically_overridden = 0;
|
||||||
B32 identifier_looks_like_type_expr = 0;
|
B32 identifier_looks_like_type_expr = 0;
|
||||||
RDI_LocationKind loc_kind = RDI_LocationKind_NULL;
|
RDI_LocationKind loc_kind = RDI_LocationKind_NULL;
|
||||||
RDI_LocationReg loc_reg = {0};
|
RDI_LocationReg loc_reg = {0};
|
||||||
RDI_LocationRegPlusU16 loc_reg_u16 = {0};
|
RDI_LocationRegPlusU16 loc_reg_u16 = {0};
|
||||||
String8 loc_bytecode = {0};
|
String8 loc_bytecode = {0};
|
||||||
|
U64 constant_value = 0;
|
||||||
REGS_RegCode reg_code = 0;
|
REGS_RegCode reg_code = 0;
|
||||||
REGS_AliasCode alias_code = 0;
|
REGS_AliasCode alias_code = 0;
|
||||||
E_TypeKey type_key = zero_struct;
|
E_TypeKey type_key = zero_struct;
|
||||||
@@ -1589,6 +1592,22 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- rjf: try basic constants
|
||||||
|
if(mapped_identifier == 0 && str8_match(token_string, str8_lit("true"), 0))
|
||||||
|
{
|
||||||
|
mapped_identifier = 1;
|
||||||
|
identifier_is_constant_value = 1;
|
||||||
|
type_key = e_type_key_basic(E_TypeKind_Bool);
|
||||||
|
constant_value = 1;
|
||||||
|
}
|
||||||
|
if(mapped_identifier == 0 && str8_match(token_string, str8_lit("false"), 0))
|
||||||
|
{
|
||||||
|
mapped_identifier = 1;
|
||||||
|
identifier_is_constant_value = 1;
|
||||||
|
type_key = e_type_key_basic(E_TypeKind_Bool);
|
||||||
|
constant_value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//- rjf: attach on map
|
//- rjf: attach on map
|
||||||
if(mapped_identifier != 0)
|
if(mapped_identifier != 0)
|
||||||
{
|
{
|
||||||
@@ -1599,7 +1618,13 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
|||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
if(identifier_looks_like_type_expr)
|
if(identifier_is_constant_value)
|
||||||
|
{
|
||||||
|
atom = e_push_expr(arena, E_ExprKind_LeafBool, token_string.str);
|
||||||
|
atom->value.u64 = constant_value;
|
||||||
|
atom->type_key = type_key;
|
||||||
|
}
|
||||||
|
else if(identifier_looks_like_type_expr)
|
||||||
{
|
{
|
||||||
E_TokenArray type_parse_tokens = e_token_array_make_first_opl(it-1, it_opl);
|
E_TokenArray type_parse_tokens = e_token_array_make_first_opl(it-1, it_opl);
|
||||||
E_Parse type_parse = e_parse_type_from_text_tokens(arena, text, &type_parse_tokens);
|
E_Parse type_parse = e_parse_type_from_text_tokens(arena, text, &type_parse_tokens);
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ str8_lit_comp("CharLiteral"),
|
|||||||
str8_lit_comp("Symbol"),
|
str8_lit_comp("Symbol"),
|
||||||
};
|
};
|
||||||
|
|
||||||
String8 e_expr_kind_strings[45] =
|
String8 e_expr_kind_strings[46] =
|
||||||
{
|
{
|
||||||
str8_lit_comp("Nil"),
|
str8_lit_comp("Nil"),
|
||||||
str8_lit_comp("Ref"),
|
str8_lit_comp("Ref"),
|
||||||
@@ -50,6 +50,7 @@ str8_lit_comp("Ternary"),
|
|||||||
str8_lit_comp("LeafBytecode"),
|
str8_lit_comp("LeafBytecode"),
|
||||||
str8_lit_comp("LeafMember"),
|
str8_lit_comp("LeafMember"),
|
||||||
str8_lit_comp("LeafStringLiteral"),
|
str8_lit_comp("LeafStringLiteral"),
|
||||||
|
str8_lit_comp("LeafBool"),
|
||||||
str8_lit_comp("LeafU64"),
|
str8_lit_comp("LeafU64"),
|
||||||
str8_lit_comp("LeafF64"),
|
str8_lit_comp("LeafF64"),
|
||||||
str8_lit_comp("LeafF32"),
|
str8_lit_comp("LeafF32"),
|
||||||
@@ -78,7 +79,7 @@ str8_lit_comp("Insufficient evaluation machine stack space."),
|
|||||||
str8_lit_comp("Malformed bytecode."),
|
str8_lit_comp("Malformed bytecode."),
|
||||||
};
|
};
|
||||||
|
|
||||||
E_OpInfo e_expr_kind_op_info_table[45] =
|
E_OpInfo e_expr_kind_op_info_table[46] =
|
||||||
{
|
{
|
||||||
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
||||||
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
||||||
@@ -124,6 +125,7 @@ E_OpInfo e_expr_kind_op_info_table[45] =
|
|||||||
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
||||||
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
||||||
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
||||||
|
{ E_OpKind_Null, 0, str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("") },
|
||||||
{ E_OpKind_Binary, 13, str8_lit_comp(""), str8_lit_comp("="), str8_lit_comp("") },
|
{ E_OpKind_Binary, 13, str8_lit_comp(""), str8_lit_comp("="), str8_lit_comp("") },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ E_ExprKind_Ternary,
|
|||||||
E_ExprKind_LeafBytecode,
|
E_ExprKind_LeafBytecode,
|
||||||
E_ExprKind_LeafMember,
|
E_ExprKind_LeafMember,
|
||||||
E_ExprKind_LeafStringLiteral,
|
E_ExprKind_LeafStringLiteral,
|
||||||
|
E_ExprKind_LeafBool,
|
||||||
E_ExprKind_LeafU64,
|
E_ExprKind_LeafU64,
|
||||||
E_ExprKind_LeafF64,
|
E_ExprKind_LeafF64,
|
||||||
E_ExprKind_LeafF32,
|
E_ExprKind_LeafF32,
|
||||||
@@ -157,9 +158,9 @@ E_InterpretationCode_COUNT,
|
|||||||
|
|
||||||
C_LINKAGE_BEGIN
|
C_LINKAGE_BEGIN
|
||||||
extern String8 e_token_kind_strings[6];
|
extern String8 e_token_kind_strings[6];
|
||||||
extern String8 e_expr_kind_strings[45];
|
extern String8 e_expr_kind_strings[46];
|
||||||
extern String8 e_interpretation_code_display_strings[11];
|
extern String8 e_interpretation_code_display_strings[11];
|
||||||
extern E_OpInfo e_expr_kind_op_info_table[45];
|
extern E_OpInfo e_expr_kind_op_info_table[46];
|
||||||
extern U8 e_kind_basic_byte_size_table[56];
|
extern U8 e_kind_basic_byte_size_table[56];
|
||||||
extern String8 e_kind_basic_string_table[56];
|
extern String8 e_kind_basic_string_table[56];
|
||||||
|
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[214] =
|
|||||||
{ str8_lit_comp("enable_entity"), str8_lit_comp("Enables an entity."), str8_lit_comp(""), str8_lit_comp("Enable Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
{ str8_lit_comp("enable_entity"), str8_lit_comp("Enables an entity."), str8_lit_comp(""), str8_lit_comp("Enable Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||||
{ str8_lit_comp("disable_entity"), str8_lit_comp("Disables an entity."), str8_lit_comp(""), str8_lit_comp("Disable Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
{ str8_lit_comp("disable_entity"), str8_lit_comp("Disables an entity."), str8_lit_comp(""), str8_lit_comp("Disable Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||||
{ str8_lit_comp("select_entity"), str8_lit_comp("Selects an entity, disabling all others of the same kind."), str8_lit_comp(""), str8_lit_comp("Select Entity"), RD_IconKind_CheckHollow, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
{ str8_lit_comp("select_entity"), str8_lit_comp("Selects an entity, disabling all others of the same kind."), str8_lit_comp(""), str8_lit_comp("Select Entity"), RD_IconKind_CheckHollow, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||||
{ str8_lit_comp("remove_entity"), str8_lit_comp("Removes an entity."), str8_lit_comp(""), str8_lit_comp("Remove Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
{ str8_lit_comp("remove_entity"), str8_lit_comp("Removes an entity."), str8_lit_comp(""), str8_lit_comp("Remove Entity"), RD_IconKind_Trash, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||||
{ str8_lit_comp("name_entity"), str8_lit_comp("Equips an entity with a name."), str8_lit_comp(""), str8_lit_comp("Name Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
{ str8_lit_comp("name_entity"), str8_lit_comp("Equips an entity with a name."), str8_lit_comp(""), str8_lit_comp("Name Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||||
{ str8_lit_comp("duplicate_entity"), str8_lit_comp("Duplicates an entity."), str8_lit_comp(""), str8_lit_comp("Duplicate Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
{ str8_lit_comp("duplicate_entity"), str8_lit_comp("Duplicates an entity."), str8_lit_comp(""), str8_lit_comp("Duplicate Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||||
{ str8_lit_comp("relocate_entity"), str8_lit_comp("Relocates an entity."), str8_lit_comp(""), str8_lit_comp("Relocate Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
{ str8_lit_comp("relocate_entity"), str8_lit_comp("Relocates an entity."), str8_lit_comp(""), str8_lit_comp("Relocate Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}},
|
||||||
|
|||||||
@@ -416,7 +416,7 @@ RD_CmdTable: // | | | |
|
|||||||
{EnableEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "enable_entity" "Enable Entity" "Enables an entity." "" }
|
{EnableEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "enable_entity" "Enable Entity" "Enables an entity." "" }
|
||||||
{DisableEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "disable_entity" "Disable Entity" "Disables an entity." "" }
|
{DisableEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "disable_entity" "Disable Entity" "Disables an entity." "" }
|
||||||
{SelectEntity 0 0 Null null Nil 0 0 0 0 0 0 CheckHollow "select_entity" "Select Entity" "Selects an entity, disabling all others of the same kind." "" }
|
{SelectEntity 0 0 Null null Nil 0 0 0 0 0 0 CheckHollow "select_entity" "Select Entity" "Selects an entity, disabling all others of the same kind." "" }
|
||||||
{RemoveEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "remove_entity" "Remove Entity" "Removes an entity." "" }
|
{RemoveEntity 0 0 Null null Nil 0 0 0 0 0 0 Trash "remove_entity" "Remove Entity" "Removes an entity." "" }
|
||||||
{NameEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "name_entity" "Name Entity" "Equips an entity with a name." "" }
|
{NameEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "name_entity" "Name Entity" "Equips an entity with a name." "" }
|
||||||
{DuplicateEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "duplicate_entity" "Duplicate Entity" "Duplicates an entity." "" }
|
{DuplicateEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "duplicate_entity" "Duplicate Entity" "Duplicates an entity." "" }
|
||||||
{RelocateEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "relocate_entity" "Relocate Entity" "Relocates an entity." "" }
|
{RelocateEntity 0 0 Null null Nil 0 0 0 0 0 0 Null "relocate_entity" "Relocate Entity" "Relocates an entity." "" }
|
||||||
|
|||||||
+105
-24
@@ -1774,6 +1774,12 @@ rd_title_fstrs_from_entity(Arena *arena, RD_Entity *entity, Vec4F32 secondary_co
|
|||||||
else if(loc->string.size != 0)
|
else if(loc->string.size != 0)
|
||||||
{
|
{
|
||||||
location = loc->string;
|
location = loc->string;
|
||||||
|
location_is_code = 1;
|
||||||
|
}
|
||||||
|
else if(loc->flags & RD_EntityFlag_HasVAddr)
|
||||||
|
{
|
||||||
|
location = push_str8f(arena, "0x%I64x", loc->vaddr);
|
||||||
|
location_is_code = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
B32 extra = 0;
|
B32 extra = 0;
|
||||||
@@ -1792,7 +1798,17 @@ rd_title_fstrs_from_entity(Arena *arena, RD_Entity *entity, Vec4F32 secondary_co
|
|||||||
{
|
{
|
||||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, v4f32(0, 0, 0, 0), str8_lit(" "));
|
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Code), size, v4f32(0, 0, 0, 0), str8_lit(" "));
|
||||||
}
|
}
|
||||||
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(location_is_code ? RD_FontSlot_Code : RD_FontSlot_Main), size_extrafied, color_extrafied, location);
|
if(location_is_code)
|
||||||
|
{
|
||||||
|
DR_FancyStringList loc_fstrs = {0};
|
||||||
|
RD_Font(RD_FontSlot_Code)
|
||||||
|
loc_fstrs = rd_fancy_string_list_from_code_string(arena, 1.f, 0, color_extrafied, location);
|
||||||
|
dr_fancy_string_list_concat_in_place(&result, &loc_fstrs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dr_fancy_string_list_push_new(arena, &result, rd_font_from_slot(RD_FontSlot_Main), size_extrafied, color_extrafied, location);
|
||||||
|
}
|
||||||
extra = 1;
|
extra = 1;
|
||||||
size_extrafied = size*0.95f;
|
size_extrafied = size*0.95f;
|
||||||
color_extrafied = secondary_color;
|
color_extrafied = secondary_color;
|
||||||
@@ -2057,14 +2073,20 @@ rd_ctrl_meta_eval_from_entity(Arena *arena, RD_Entity *entity)
|
|||||||
RD_Entity *loc = rd_entity_child_from_kind(entity, RD_EntityKind_Location);
|
RD_Entity *loc = rd_entity_child_from_kind(entity, RD_EntityKind_Location);
|
||||||
RD_Entity *cnd = rd_entity_child_from_kind(entity, RD_EntityKind_Condition);
|
RD_Entity *cnd = rd_entity_child_from_kind(entity, RD_EntityKind_Condition);
|
||||||
String8 label_string = push_str8_copy(arena, entity->string);
|
String8 label_string = push_str8_copy(arena, entity->string);
|
||||||
String8 loc_string = {0};
|
String8 src_loc_string = {0};
|
||||||
|
String8 vaddr_loc_string = {0};
|
||||||
|
String8 function_loc_string = {0};
|
||||||
if(loc->flags & RD_EntityFlag_HasTextPoint)
|
if(loc->flags & RD_EntityFlag_HasTextPoint)
|
||||||
{
|
{
|
||||||
loc_string = push_str8f(arena, "%S:%I64u:%I64u", loc->string, loc->text_point.line, loc->text_point.column);
|
src_loc_string = push_str8f(arena, "%S:%I64u:%I64u", loc->string, loc->text_point.line, loc->text_point.column);
|
||||||
}
|
}
|
||||||
else if(loc->flags & RD_EntityFlag_HasVAddr)
|
else if(loc->flags & RD_EntityFlag_HasVAddr)
|
||||||
{
|
{
|
||||||
loc_string = push_str8f(arena, "0x%I64x", loc->vaddr);
|
vaddr_loc_string = push_str8f(arena, "0x%I64x", loc->vaddr);
|
||||||
|
}
|
||||||
|
else if(loc->string.size != 0)
|
||||||
|
{
|
||||||
|
function_loc_string = push_str8_copy(arena, loc->string);
|
||||||
}
|
}
|
||||||
String8 cnd_string = push_str8_copy(arena, cnd->string);
|
String8 cnd_string = push_str8_copy(arena, cnd->string);
|
||||||
meval->enabled = !entity->disabled;
|
meval->enabled = !entity->disabled;
|
||||||
@@ -2075,7 +2097,9 @@ rd_ctrl_meta_eval_from_entity(Arena *arena, RD_Entity *entity)
|
|||||||
meval->args = args->string;
|
meval->args = args->string;
|
||||||
meval->working_directory = wdir->string;
|
meval->working_directory = wdir->string;
|
||||||
meval->entry_point = entr->string;
|
meval->entry_point = entr->string;
|
||||||
meval->location = loc_string;
|
meval->source_location = src_loc_string;
|
||||||
|
meval->address_location = vaddr_loc_string;
|
||||||
|
meval->function_location = function_loc_string;
|
||||||
meval->condition = cnd_string;
|
meval->condition = cnd_string;
|
||||||
return meval;
|
return meval;
|
||||||
}
|
}
|
||||||
@@ -2289,6 +2313,24 @@ rd_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range)
|
|||||||
StringMemberCase(working_directory) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_WorkingDirectory), str8_cstring_capped(in, (U8 *)in + 4096));}
|
StringMemberCase(working_directory) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_WorkingDirectory), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||||
StringMemberCase(entry_point) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_EntryPoint), str8_cstring_capped(in, (U8 *)in + 4096));}
|
StringMemberCase(entry_point) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_EntryPoint), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||||
StringMemberCase(condition) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Condition), str8_cstring_capped(in, (U8 *)in + 4096));}
|
StringMemberCase(condition) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Condition), str8_cstring_capped(in, (U8 *)in + 4096));}
|
||||||
|
StringMemberCase(source_location)
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
String8TxtPtPair src_loc = str8_txt_pt_pair_from_string(str8_cstring_capped(in, (U8 *)in + 4096));
|
||||||
|
RD_Entity *loc = rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Location);
|
||||||
|
rd_entity_equip_name(loc, src_loc.string);
|
||||||
|
rd_entity_equip_txt_pt(loc, src_loc.pt);
|
||||||
|
}
|
||||||
|
StringMemberCase(address_location)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
StringMemberCase(function_location)
|
||||||
|
{
|
||||||
|
result = 1;
|
||||||
|
RD_Entity *loc = rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Location);
|
||||||
|
loc->flags &= ~RD_EntityFlag_HasTextPoint;
|
||||||
|
rd_entity_equip_name(loc, str8_cstring_capped(in, (U8 *)in + 4096));
|
||||||
|
}
|
||||||
#undef FlatMemberCase
|
#undef FlatMemberCase
|
||||||
#undef StringMemberCase
|
#undef StringMemberCase
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
@@ -2413,17 +2455,9 @@ rd_commit_eval_value_string(E_Eval dst_eval, String8 string)
|
|||||||
E_Eval src_eval = e_eval_from_string(scratch.arena, string);
|
E_Eval src_eval = e_eval_from_string(scratch.arena, string);
|
||||||
E_Eval src_eval_value = e_value_eval_from_eval(src_eval);
|
E_Eval src_eval_value = e_value_eval_from_eval(src_eval);
|
||||||
E_TypeKind src_eval_value_type_kind = e_type_kind_from_key(src_eval_value.type_key);
|
E_TypeKind src_eval_value_type_kind = e_type_kind_from_key(src_eval_value.type_key);
|
||||||
if(type_kind == E_TypeKind_Ptr &&
|
if(direct_type_kind == E_TypeKind_Char8 ||
|
||||||
(e_type_kind_is_pointer_or_ref(src_eval_value_type_kind) ||
|
direct_type_kind == E_TypeKind_UChar8 ||
|
||||||
e_type_kind_is_integer(src_eval_value_type_kind)) &&
|
e_type_kind_is_integer(direct_type_kind))
|
||||||
src_eval_value.mode == E_Mode_Value)
|
|
||||||
{
|
|
||||||
commit_data = push_str8_copy(scratch.arena, str8_struct(&src_eval.value));
|
|
||||||
commit_data.size = Min(commit_data.size, e_type_byte_size_from_key(type_key));
|
|
||||||
}
|
|
||||||
else if(direct_type_kind == E_TypeKind_Char8 ||
|
|
||||||
direct_type_kind == E_TypeKind_UChar8 ||
|
|
||||||
e_type_kind_is_integer(direct_type_kind))
|
|
||||||
{
|
{
|
||||||
B32 is_quoted = 0;
|
B32 is_quoted = 0;
|
||||||
if(string.size >= 1 && string.str[0] == '"')
|
if(string.size >= 1 && string.str[0] == '"')
|
||||||
@@ -2449,6 +2483,15 @@ rd_commit_eval_value_string(E_Eval dst_eval, String8 string)
|
|||||||
commit_at_ptr_dest = 1;
|
commit_at_ptr_dest = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(type_kind == E_TypeKind_Ptr &&
|
||||||
|
(e_type_kind_is_pointer_or_ref(src_eval_value_type_kind) ||
|
||||||
|
e_type_kind_is_integer(src_eval_value_type_kind)) &&
|
||||||
|
src_eval_value.mode == E_Mode_Value)
|
||||||
|
{
|
||||||
|
commit_data = push_str8_copy(scratch.arena, str8_struct(&src_eval.value));
|
||||||
|
commit_data.size = Min(commit_data.size, e_type_byte_size_from_key(src_eval.type_key));
|
||||||
|
commit_data.size = Min(commit_data.size, e_type_byte_size_from_key(type_key));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(commit_data.size != 0 && e_type_byte_size_from_key(type_key) != 0)
|
if(commit_data.size != 0 && e_type_byte_size_from_key(type_key) != 0)
|
||||||
{
|
{
|
||||||
@@ -3373,7 +3416,7 @@ rd_window_frame(RD_Window *ws)
|
|||||||
RD_RegSlot slot = ((rd_state->drag_drop_regs_slot != RD_RegSlot_Null && rd_drag_is_active()) ? rd_state->drag_drop_regs_slot : rd_state->hover_regs_slot);
|
RD_RegSlot slot = ((rd_state->drag_drop_regs_slot != RD_RegSlot_Null && rd_drag_is_active()) ? rd_state->drag_drop_regs_slot : rd_state->hover_regs_slot);
|
||||||
RD_Regs *regs = (((rd_state->drag_drop_regs_slot != RD_RegSlot_Null && rd_drag_is_active()) ? rd_state->drag_drop_regs : rd_state->hover_regs));
|
RD_Regs *regs = (((rd_state->drag_drop_regs_slot != RD_RegSlot_Null && rd_drag_is_active()) ? rd_state->drag_drop_regs : rd_state->hover_regs));
|
||||||
CTRL_Entity *ctrl_entity = &ctrl_entity_nil;
|
CTRL_Entity *ctrl_entity = &ctrl_entity_nil;
|
||||||
UI_Tooltip RD_Palette(RD_PaletteCode_Floating) switch(slot)
|
RD_Palette(RD_PaletteCode_Floating) switch(slot)
|
||||||
{
|
{
|
||||||
default:{}break;
|
default:{}break;
|
||||||
|
|
||||||
@@ -3381,6 +3424,7 @@ rd_window_frame(RD_Window *ws)
|
|||||||
//- rjf: frontend entity tooltips
|
//- rjf: frontend entity tooltips
|
||||||
//
|
//
|
||||||
case RD_RegSlot_Entity:
|
case RD_RegSlot_Entity:
|
||||||
|
UI_Tooltip
|
||||||
{
|
{
|
||||||
// rjf: unpack
|
// rjf: unpack
|
||||||
RD_Entity *entity = rd_entity_from_handle(regs->entity);
|
RD_Entity *entity = rd_entity_from_handle(regs->entity);
|
||||||
@@ -3403,6 +3447,7 @@ rd_window_frame(RD_Window *ws)
|
|||||||
case RD_RegSlot_Thread: {ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->thread); }goto ctrl_entity_tooltip;
|
case RD_RegSlot_Thread: {ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->thread); }goto ctrl_entity_tooltip;
|
||||||
case RD_RegSlot_CtrlEntity:{ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->ctrl_entity); }goto ctrl_entity_tooltip;
|
case RD_RegSlot_CtrlEntity:{ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->ctrl_entity); }goto ctrl_entity_tooltip;
|
||||||
ctrl_entity_tooltip:;
|
ctrl_entity_tooltip:;
|
||||||
|
UI_Tooltip
|
||||||
{
|
{
|
||||||
// rjf: unpack
|
// rjf: unpack
|
||||||
DI_Scope *di_scope = di_scope_open();
|
DI_Scope *di_scope = di_scope_open();
|
||||||
@@ -3980,10 +4025,11 @@ rd_window_frame(RD_Window *ws)
|
|||||||
//////////////////////
|
//////////////////////
|
||||||
//- rjf: ctrl entities
|
//- rjf: ctrl entities
|
||||||
//
|
//
|
||||||
case RD_RegSlot_Machine: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->machine); goto ctrl_entity_title;
|
case RD_RegSlot_Machine: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->machine); goto ctrl_entity_title;
|
||||||
case RD_RegSlot_Process: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->process); goto ctrl_entity_title;
|
case RD_RegSlot_Process: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->process); goto ctrl_entity_title;
|
||||||
case RD_RegSlot_Module: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->module); goto ctrl_entity_title;
|
case RD_RegSlot_Module: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->module); goto ctrl_entity_title;
|
||||||
case RD_RegSlot_Thread: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->thread); goto ctrl_entity_title;
|
case RD_RegSlot_Thread: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->thread); goto ctrl_entity_title;
|
||||||
|
case RD_RegSlot_CtrlEntity: ctrl_entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, regs->ctrl_entity); goto ctrl_entity_title;
|
||||||
ctrl_entity_title:;
|
ctrl_entity_title:;
|
||||||
{
|
{
|
||||||
//- rjf: title
|
//- rjf: title
|
||||||
@@ -4271,6 +4317,38 @@ rd_window_frame(RD_Window *ws)
|
|||||||
#endif
|
#endif
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
//////////////////////
|
||||||
|
//- rjf: frontend entities
|
||||||
|
//
|
||||||
|
case RD_RegSlot_Entity:
|
||||||
|
{
|
||||||
|
RD_Entity *entity = rd_entity_from_handle(regs->entity);
|
||||||
|
|
||||||
|
//- rjf: title
|
||||||
|
UI_Row
|
||||||
|
UI_PrefWidth(ui_text_dim(5, 1))
|
||||||
|
UI_TextAlignment(UI_TextAlign_Center)
|
||||||
|
UI_TextPadding(ui_top_font_size()*1.5f)
|
||||||
|
{
|
||||||
|
DR_FancyStringList fstrs = rd_title_fstrs_from_entity(scratch.arena, entity, ui_top_palette()->text_weak, ui_top_font_size());
|
||||||
|
UI_Box *title_box = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero());
|
||||||
|
ui_box_equip_display_fancy_strings(title_box, &fstrs);
|
||||||
|
if(ctrl_entity->kind == CTRL_EntityKind_Thread)
|
||||||
|
{
|
||||||
|
ui_spacer(ui_em(0.5f, 1.f));
|
||||||
|
UI_FontSize(ui_top_font_size() - 1.f)
|
||||||
|
UI_CornerRadius(ui_top_font_size()*0.5f)
|
||||||
|
RD_Palette(RD_PaletteCode_NeutralPopButton)
|
||||||
|
UI_TextPadding(ui_top_font_size()*0.5f)
|
||||||
|
{
|
||||||
|
UI_FlagsAdd(UI_BoxFlag_DrawTextWeak|UI_BoxFlag_DrawBorder) ui_label(string_from_arch(ctrl_entity->arch));
|
||||||
|
ui_spacer(ui_em(0.5f, 1.f));
|
||||||
|
UI_FlagsAdd(UI_BoxFlag_DrawTextWeak|UI_BoxFlag_DrawBorder) ui_labelf("TID: %i", (U32)ctrl_entity->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9789,8 +9867,8 @@ rd_cfg_strings_from_gfx(Arena *arena, String8 root_path, RD_CfgSrc source)
|
|||||||
entity_name_escaped = escaped_from_raw_str8(arena, e->string);
|
entity_name_escaped = escaped_from_raw_str8(arena, e->string);
|
||||||
}
|
}
|
||||||
EntityInfoFlags info_flags = 0;
|
EntityInfoFlags info_flags = 0;
|
||||||
if(entity_name_escaped.size != 0) { info_flags |= EntityInfoFlag_HasName; }
|
if(entity_name_escaped.size != 0) { info_flags |= EntityInfoFlag_HasName; }
|
||||||
if(!!e->disabled) { info_flags |= EntityInfoFlag_HasDisabled; }
|
if(!!e->disabled) { info_flags |= EntityInfoFlag_HasDisabled; }
|
||||||
if(e->flags & RD_EntityFlag_HasTextPoint) { info_flags |= EntityInfoFlag_HasTxtPt; }
|
if(e->flags & RD_EntityFlag_HasTextPoint) { info_flags |= EntityInfoFlag_HasTxtPt; }
|
||||||
if(e->flags & RD_EntityFlag_HasVAddr) { info_flags |= EntityInfoFlag_HasVAddr; }
|
if(e->flags & RD_EntityFlag_HasVAddr) { info_flags |= EntityInfoFlag_HasVAddr; }
|
||||||
if(e->flags & RD_EntityFlag_HasColor) { info_flags |= EntityInfoFlag_HasColor; }
|
if(e->flags & RD_EntityFlag_HasColor) { info_flags |= EntityInfoFlag_HasColor; }
|
||||||
@@ -14570,9 +14648,12 @@ rd_frame(void)
|
|||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
case RD_CmdKind_AddAddressBreakpoint:
|
case RD_CmdKind_AddAddressBreakpoint:
|
||||||
|
{
|
||||||
|
rd_cmd(RD_CmdKind_AddBreakpoint, .string = str8_zero());
|
||||||
|
}break;
|
||||||
case RD_CmdKind_AddFunctionBreakpoint:
|
case RD_CmdKind_AddFunctionBreakpoint:
|
||||||
{
|
{
|
||||||
rd_cmd(RD_CmdKind_AddBreakpoint);
|
rd_cmd(RD_CmdKind_AddBreakpoint, .vaddr = 0);
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
//- rjf: watch pins
|
//- rjf: watch pins
|
||||||
|
|||||||
+111
-74
@@ -1204,9 +1204,12 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
|||||||
}
|
}
|
||||||
RD_WatchViewRowCtrl row_ctrls_[] =
|
RD_WatchViewRowCtrl row_ctrls_[] =
|
||||||
{
|
{
|
||||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndRun },
|
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndRun },
|
||||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndInit },
|
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_LaunchAndInit },
|
||||||
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_SelectEntity },
|
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_SelectEntity },
|
||||||
|
{RD_EntityKind_Target, CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||||
|
{RD_EntityKind_Breakpoint, CTRL_EntityKind_Null, RD_CmdKind_EnableEntity },
|
||||||
|
{RD_EntityKind_Breakpoint, CTRL_EntityKind_Null, RD_CmdKind_RemoveEntity },
|
||||||
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_FreezeThread },
|
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_FreezeThread },
|
||||||
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_SelectThread },
|
{RD_EntityKind_Nil, CTRL_EntityKind_Thread, RD_CmdKind_SelectThread },
|
||||||
};
|
};
|
||||||
@@ -2599,7 +2602,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
|||||||
B32 is_frozen = ctrl_entity_tree_is_frozen(ctrl_entity);
|
B32 is_frozen = ctrl_entity_tree_is_frozen(ctrl_entity);
|
||||||
RD_IconKind icon_kind = rd_cmd_kind_info_table[ctrl->kind].icon_kind;
|
RD_IconKind icon_kind = rd_cmd_kind_info_table[ctrl->kind].icon_kind;
|
||||||
UI_Palette *palette = ui_top_palette();
|
UI_Palette *palette = ui_top_palette();
|
||||||
if(ctrl->kind == RD_CmdKind_SelectEntity)
|
if(ctrl->kind == RD_CmdKind_SelectEntity || ctrl->kind == RD_CmdKind_EnableEntity)
|
||||||
{
|
{
|
||||||
icon_kind = entity->disabled ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled;
|
icon_kind = entity->disabled ? RD_IconKind_CheckHollow : RD_IconKind_CheckFilled;
|
||||||
}
|
}
|
||||||
@@ -2623,6 +2626,10 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
|||||||
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
|
sig.event_flags & OS_Modifier_Ctrl && !entity->disabled ? RD_CmdKind_DisableEntity :
|
||||||
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
|
RD_CmdKind_SelectEntity, .entity = rd_handle_from_entity(entity));
|
||||||
}
|
}
|
||||||
|
else if(ctrl->kind == RD_CmdKind_EnableEntity)
|
||||||
|
{
|
||||||
|
rd_cmd(entity->disabled ? RD_CmdKind_EnableEntity : RD_CmdKind_DisableEntity, .entity = rd_handle_from_entity(entity));
|
||||||
|
}
|
||||||
else if(ctrl->kind == RD_CmdKind_SelectThread)
|
else if(ctrl->kind == RD_CmdKind_SelectThread)
|
||||||
{
|
{
|
||||||
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
|
rd_cmd(RD_CmdKind_SelectThread, .thread = ctrl_entity->handle);
|
||||||
@@ -5371,7 +5378,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(breakpoints)
|
|||||||
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.75f, .dequote_string = 1);
|
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.75f, .dequote_string = 1);
|
||||||
}
|
}
|
||||||
rd_watch_view_build(wv, RD_WatchViewFlag_NoHeader|RD_WatchViewFlag_PrettyNameMembers|RD_WatchViewFlag_PrettyEntityRows|RD_WatchViewFlag_DisableCacheLines,
|
rd_watch_view_build(wv, RD_WatchViewFlag_NoHeader|RD_WatchViewFlag_PrettyNameMembers|RD_WatchViewFlag_PrettyEntityRows|RD_WatchViewFlag_DisableCacheLines,
|
||||||
str8_lit("breakpoints"), str8_lit("only: label condition str hit_count location"), 0, 10, rect);
|
str8_lit("breakpoints"), str8_lit("only: label condition str hit_count source_location address_location function_location"), 0, 10, rect);
|
||||||
ProfEnd();
|
ProfEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6525,6 +6532,10 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
{
|
{
|
||||||
eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity);
|
eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity);
|
||||||
space_range = rd_whole_range_from_eval_space(eval.space);
|
space_range = rd_whole_range_from_eval_space(eval.space);
|
||||||
|
if(dim_1u64(space_range) == 0)
|
||||||
|
{
|
||||||
|
space_range = r1u64(0, 0x7FFFFFFFFFFFull);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
U64 cursor = rd_value_from_params_key(params, str8_lit("cursor_vaddr")).u64;
|
U64 cursor = rd_value_from_params_key(params, str8_lit("cursor_vaddr")).u64;
|
||||||
U64 mark = rd_value_from_params_key(params, str8_lit("mark_vaddr")).u64;
|
U64 mark = rd_value_from_params_key(params, str8_lit("mark_vaddr")).u64;
|
||||||
@@ -6564,10 +6575,8 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
}break;
|
}break;
|
||||||
case RD_CmdKind_GoToAddress:
|
case RD_CmdKind_GoToAddress:
|
||||||
{
|
{
|
||||||
// NOTE(rjf): go-to-address occurs with disassembly snaps, and we don't
|
cursor = mark = cmd->regs->vaddr;
|
||||||
// generally want to respond to those in thise view, so just skip any
|
mv->center_cursor = 1;
|
||||||
// go-to-address commands that haven't been *explicitly* parameterized
|
|
||||||
// with this view.
|
|
||||||
}break;
|
}break;
|
||||||
case RD_CmdKind_SetColumns:
|
case RD_CmdKind_SetColumns:
|
||||||
{
|
{
|
||||||
@@ -6594,7 +6603,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: determine legal scroll range
|
//- rjf: determine legal scroll range
|
||||||
//
|
//
|
||||||
Rng1S64 scroll_idx_rng = r1s64(0, space_range.max/num_columns);
|
Rng1S64 scroll_idx_rng = r1s64(0, dim_1u64(space_range)/num_columns);
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: determine info about visible range of rows
|
//- rjf: determine info about visible range of rows
|
||||||
@@ -6608,12 +6617,13 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
viz_range_rows.max = scroll_pos.y.idx + (S64)scroll_pos.y.off + num_possible_visible_rows,
|
viz_range_rows.max = scroll_pos.y.idx + (S64)scroll_pos.y.off + num_possible_visible_rows,
|
||||||
viz_range_rows.min = clamp_1s64(scroll_idx_rng, viz_range_rows.min);
|
viz_range_rows.min = clamp_1s64(scroll_idx_rng, viz_range_rows.min);
|
||||||
viz_range_rows.max = clamp_1s64(scroll_idx_rng, viz_range_rows.max);
|
viz_range_rows.max = clamp_1s64(scroll_idx_rng, viz_range_rows.max);
|
||||||
viz_range_bytes.min = viz_range_rows.min*num_columns;
|
viz_range_bytes.min = space_range.min + viz_range_rows.min*num_columns;
|
||||||
viz_range_bytes.max = (viz_range_rows.max+1)*num_columns+1;
|
viz_range_bytes.max = space_range.min + (viz_range_rows.max+1)*num_columns+1;
|
||||||
if(viz_range_bytes.min > viz_range_bytes.max)
|
if(viz_range_bytes.min > viz_range_bytes.max)
|
||||||
{
|
{
|
||||||
Swap(U64, viz_range_bytes.min, viz_range_bytes.max);
|
Swap(U64, viz_range_bytes.min, viz_range_bytes.max);
|
||||||
}
|
}
|
||||||
|
viz_range_bytes = intersect_1u64(space_range, viz_range_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
@@ -6670,7 +6680,6 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
cell_delta.y = ClampBot(cell_delta.y, (S64)-(next_cursor/num_columns));
|
cell_delta.y = ClampBot(cell_delta.y, (S64)-(next_cursor/num_columns));
|
||||||
next_cursor += cell_delta.x;
|
next_cursor += cell_delta.x;
|
||||||
next_cursor += cell_delta.y*num_columns;
|
next_cursor += cell_delta.y*num_columns;
|
||||||
next_cursor = ClampTop(0x7FFFFFFFFFFFull, next_cursor);
|
|
||||||
}
|
}
|
||||||
if(good_action && evt->flags & UI_EventFlag_PickSelectSide && cursor != mark)
|
if(good_action && evt->flags & UI_EventFlag_PickSelectSide && cursor != mark)
|
||||||
{
|
{
|
||||||
@@ -6702,6 +6711,10 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
//
|
//
|
||||||
{
|
{
|
||||||
Rng1U64 cursor_valid_rng = space_range;
|
Rng1U64 cursor_valid_rng = space_range;
|
||||||
|
if(cursor_valid_rng.max != 0)
|
||||||
|
{
|
||||||
|
cursor_valid_rng.max -= 1;
|
||||||
|
}
|
||||||
cursor = clamp_1u64(cursor_valid_rng, cursor);
|
cursor = clamp_1u64(cursor_valid_rng, cursor);
|
||||||
mark = clamp_1u64(cursor_valid_rng, mark);
|
mark = clamp_1u64(cursor_valid_rng, mark);
|
||||||
}
|
}
|
||||||
@@ -7071,7 +7084,8 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
UI_WidthFill UI_PrefHeight(ui_px(row_height_px, 1.f))
|
UI_WidthFill UI_PrefHeight(ui_px(row_height_px, 1.f))
|
||||||
for(S64 row_idx = viz_range_rows.min; row_idx <= viz_range_rows.max; row_idx += 1)
|
for(S64 row_idx = viz_range_rows.min; row_idx <= viz_range_rows.max; row_idx += 1)
|
||||||
{
|
{
|
||||||
Rng1U64 row_range_bytes = r1u64(row_idx*num_columns, (row_idx+1)*num_columns);
|
Rng1U64 row_range_bytes = r1u64(viz_range_bytes.min + row_idx*num_columns,
|
||||||
|
viz_range_bytes.min + (row_idx+1)*num_columns);
|
||||||
B32 row_is_boundary = 0;
|
B32 row_is_boundary = 0;
|
||||||
Vec4F32 row_boundary_color = {0};
|
Vec4F32 row_boundary_color = {0};
|
||||||
if(row_range_bytes.min%64 == 0)
|
if(row_range_bytes.min%64 == 0)
|
||||||
@@ -7096,77 +7110,94 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
{
|
{
|
||||||
for(U64 col_idx = 0; col_idx < num_columns; col_idx += 1)
|
for(U64 col_idx = 0; col_idx < num_columns; col_idx += 1)
|
||||||
{
|
{
|
||||||
|
// rjf: unpack information about this slot
|
||||||
U64 visible_byte_idx = (row_idx-viz_range_rows.min)*num_columns + col_idx;
|
U64 visible_byte_idx = (row_idx-viz_range_rows.min)*num_columns + col_idx;
|
||||||
U64 global_byte_idx = viz_range_bytes.min+visible_byte_idx;
|
U64 global_byte_idx = viz_range_bytes.min+visible_byte_idx;
|
||||||
U64 global_byte_num = global_byte_idx+1;
|
U64 global_byte_num = global_byte_idx+1;
|
||||||
U8 byte_value = visible_memory[visible_byte_idx];
|
|
||||||
Annotation *annotation = visible_memory_annotations[visible_byte_idx].first;
|
// rjf: build space, if this cell is out-of-range
|
||||||
UI_BoxFlags cell_flags = 0;
|
if(global_byte_idx >= viz_range_bytes.max)
|
||||||
Vec4F32 cell_border_rgba = {0};
|
|
||||||
Vec4F32 cell_bg_rgba = {0};
|
|
||||||
if(global_byte_num == mouse_hover_byte_num)
|
|
||||||
{
|
{
|
||||||
cell_flags |= UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawSideTop|UI_BoxFlag_DrawSideBottom|UI_BoxFlag_DrawSideLeft|UI_BoxFlag_DrawSideRight;
|
ui_build_box_from_key(0, ui_key_zero());
|
||||||
cell_border_rgba = rd_rgba_from_theme_color(RD_ThemeColor_Hover);
|
|
||||||
}
|
}
|
||||||
if(annotation != 0)
|
|
||||||
|
// rjf: build actual cell
|
||||||
|
else
|
||||||
{
|
{
|
||||||
cell_flags |= UI_BoxFlag_DrawBackground;
|
// rjf: unpack byte info
|
||||||
cell_bg_rgba = annotation->color;
|
U8 byte_value = visible_memory[visible_byte_idx];
|
||||||
if(contains_1u64(annotation->vaddr_range, mouse_hover_byte_num-1))
|
Annotation *annotation = visible_memory_annotations[visible_byte_idx].first;
|
||||||
|
|
||||||
|
// rjf: unpack visual cell info
|
||||||
|
UI_BoxFlags cell_flags = 0;
|
||||||
|
Vec4F32 cell_border_rgba = {0};
|
||||||
|
Vec4F32 cell_bg_rgba = {0};
|
||||||
|
if(global_byte_num == mouse_hover_byte_num)
|
||||||
{
|
{
|
||||||
cell_bg_rgba.w *= 0.15f;
|
cell_flags |= UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawSideTop|UI_BoxFlag_DrawSideBottom|UI_BoxFlag_DrawSideLeft|UI_BoxFlag_DrawSideRight;
|
||||||
|
cell_border_rgba = rd_rgba_from_theme_color(RD_ThemeColor_Hover);
|
||||||
}
|
}
|
||||||
else
|
if(annotation != 0)
|
||||||
{
|
{
|
||||||
cell_bg_rgba.w *= 0.08f;
|
cell_flags |= UI_BoxFlag_DrawBackground;
|
||||||
}
|
cell_bg_rgba = annotation->color;
|
||||||
}
|
if(contains_1u64(annotation->vaddr_range, mouse_hover_byte_num-1))
|
||||||
if(selection.min <= global_byte_idx && global_byte_idx <= selection.max)
|
|
||||||
{
|
|
||||||
cell_flags |= UI_BoxFlag_DrawBackground;
|
|
||||||
cell_bg_rgba = rd_rgba_from_theme_color(RD_ThemeColor_SelectionOverlay);
|
|
||||||
}
|
|
||||||
ui_set_next_palette(ui_build_palette(ui_top_palette(), .background = cell_bg_rgba));
|
|
||||||
UI_Box *cell_box = ui_build_box_from_key(UI_BoxFlag_DrawText|cell_flags, ui_key_zero());
|
|
||||||
ui_box_equip_display_fancy_strings(cell_box, &byte_fancy_strings[byte_value]);
|
|
||||||
{
|
|
||||||
F32 off = 0;
|
|
||||||
for(Annotation *a = annotation; a != 0; a = a->next)
|
|
||||||
{
|
|
||||||
if(global_byte_idx == a->vaddr_range.min) UI_Parent(row_overlay_box)
|
|
||||||
{
|
{
|
||||||
ui_set_next_palette(ui_build_palette(ui_top_palette(), .background = annotation->color));
|
cell_bg_rgba.w *= 0.15f;
|
||||||
ui_set_next_fixed_x(big_glyph_advance*18.f + col_idx*cell_width_px + -cell_width_px/8.f + off);
|
}
|
||||||
ui_set_next_fixed_y((row_idx-viz_range_rows.min)*row_height_px + -cell_width_px/8.f);
|
else
|
||||||
ui_set_next_fixed_width(cell_width_px/4.f);
|
{
|
||||||
ui_set_next_fixed_height(cell_width_px/4.f);
|
cell_bg_rgba.w *= 0.08f;
|
||||||
ui_set_next_corner_radius_00(cell_width_px/8.f);
|
|
||||||
ui_set_next_corner_radius_01(cell_width_px/8.f);
|
|
||||||
ui_set_next_corner_radius_10(cell_width_px/8.f);
|
|
||||||
ui_set_next_corner_radius_11(cell_width_px/8.f);
|
|
||||||
ui_build_box_from_key(UI_BoxFlag_Floating|UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawDropShadow, ui_key_zero());
|
|
||||||
off += cell_width_px/8.f + cell_width_px/16.f;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if(selection.min <= global_byte_idx && global_byte_idx <= selection.max)
|
||||||
if(annotation != 0 && mouse_hover_byte_num == global_byte_num) UI_Tooltip UI_FontSize(ui_top_font_size()) UI_PrefHeight(ui_px(ui_top_font_size()*1.75f, 1.f))
|
|
||||||
{
|
|
||||||
for(Annotation *a = annotation; a != 0; a = a->next)
|
|
||||||
{
|
{
|
||||||
UI_PrefWidth(ui_children_sum(1)) UI_Row UI_PrefWidth(ui_text_dim(10, 1))
|
cell_flags |= UI_BoxFlag_DrawBackground;
|
||||||
|
cell_bg_rgba = rd_rgba_from_theme_color(RD_ThemeColor_SelectionOverlay);
|
||||||
|
}
|
||||||
|
|
||||||
|
// rjf: build
|
||||||
|
ui_set_next_palette(ui_build_palette(ui_top_palette(), .background = cell_bg_rgba));
|
||||||
|
UI_Box *cell_box = ui_build_box_from_key(UI_BoxFlag_DrawText|cell_flags, ui_key_zero());
|
||||||
|
ui_box_equip_display_fancy_strings(cell_box, &byte_fancy_strings[byte_value]);
|
||||||
|
{
|
||||||
|
F32 off = 0;
|
||||||
|
for(Annotation *a = annotation; a != 0; a = a->next)
|
||||||
{
|
{
|
||||||
RD_Font(RD_FontSlot_Code) ui_label(a->name_string);
|
if(global_byte_idx == a->vaddr_range.min) UI_Parent(row_overlay_box)
|
||||||
RD_Font(RD_FontSlot_Main) UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) ui_label(a->kind_string);
|
{
|
||||||
|
ui_set_next_palette(ui_build_palette(ui_top_palette(), .background = annotation->color));
|
||||||
|
ui_set_next_fixed_x(big_glyph_advance*18.f + col_idx*cell_width_px + -cell_width_px/8.f + off);
|
||||||
|
ui_set_next_fixed_y((row_idx-viz_range_rows.min)*row_height_px + -cell_width_px/8.f);
|
||||||
|
ui_set_next_fixed_width(cell_width_px/4.f);
|
||||||
|
ui_set_next_fixed_height(cell_width_px/4.f);
|
||||||
|
ui_set_next_corner_radius_00(cell_width_px/8.f);
|
||||||
|
ui_set_next_corner_radius_01(cell_width_px/8.f);
|
||||||
|
ui_set_next_corner_radius_10(cell_width_px/8.f);
|
||||||
|
ui_set_next_corner_radius_11(cell_width_px/8.f);
|
||||||
|
ui_build_box_from_key(UI_BoxFlag_Floating|UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawDropShadow, ui_key_zero());
|
||||||
|
off += cell_width_px/8.f + cell_width_px/16.f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(a->type_string.size != 0)
|
}
|
||||||
|
if(annotation != 0 && mouse_hover_byte_num == global_byte_num) UI_Tooltip UI_FontSize(ui_top_font_size()) UI_PrefHeight(ui_px(ui_top_font_size()*1.75f, 1.f))
|
||||||
|
{
|
||||||
|
for(Annotation *a = annotation; a != 0; a = a->next)
|
||||||
{
|
{
|
||||||
rd_code_label(1.f, 1, rd_rgba_from_theme_color(RD_ThemeColor_CodeType), a->type_string);
|
UI_PrefWidth(ui_children_sum(1)) UI_Row UI_PrefWidth(ui_text_dim(10, 1))
|
||||||
}
|
{
|
||||||
UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) ui_label(str8_from_memory_size(scratch.arena, dim_1u64(a->vaddr_range)));
|
RD_Font(RD_FontSlot_Code) ui_label(a->name_string);
|
||||||
if(a->next != 0)
|
RD_Font(RD_FontSlot_Main) UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) ui_label(a->kind_string);
|
||||||
{
|
}
|
||||||
ui_spacer(ui_em(1.5f, 1.f));
|
if(a->type_string.size != 0)
|
||||||
|
{
|
||||||
|
rd_code_label(1.f, 1, rd_rgba_from_theme_color(RD_ThemeColor_CodeType), a->type_string);
|
||||||
|
}
|
||||||
|
UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) ui_label(str8_from_memory_size(scratch.arena, dim_1u64(a->vaddr_range)));
|
||||||
|
if(a->next != 0)
|
||||||
|
{
|
||||||
|
ui_spacer(ui_em(1.5f, 1.f));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7176,16 +7207,22 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
|||||||
UI_WidthFill
|
UI_WidthFill
|
||||||
{
|
{
|
||||||
MemoryZero(row_ascii_buffer, num_columns);
|
MemoryZero(row_ascii_buffer, num_columns);
|
||||||
|
U64 num_bytes_this_row = 0;
|
||||||
for(U64 col_idx = 0; col_idx < num_columns; col_idx += 1)
|
for(U64 col_idx = 0; col_idx < num_columns; col_idx += 1)
|
||||||
{
|
{
|
||||||
U8 byte_value = visible_memory[(row_idx-viz_range_rows.min)*num_columns + col_idx];
|
U64 visible_byte_idx = (row_idx-viz_range_rows.min)*num_columns + col_idx;
|
||||||
row_ascii_buffer[col_idx] = byte_value;
|
if(visible_byte_idx < visible_memory_size)
|
||||||
if(byte_value <= 32 || 127 < byte_value)
|
|
||||||
{
|
{
|
||||||
row_ascii_buffer[col_idx] = '.';
|
U8 byte_value = visible_memory[visible_byte_idx];
|
||||||
|
row_ascii_buffer[col_idx] = byte_value;
|
||||||
|
if(byte_value <= 32 || 127 < byte_value)
|
||||||
|
{
|
||||||
|
row_ascii_buffer[col_idx] = '.';
|
||||||
|
}
|
||||||
|
num_bytes_this_row += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String8 ascii_text = str8(row_ascii_buffer, num_columns);
|
String8 ascii_text = str8(row_ascii_buffer, num_bytes_this_row);
|
||||||
UI_Box *ascii_box = ui_build_box_from_stringf(UI_BoxFlag_DrawText, "%S###ascii_row_%I64x", ascii_text, row_range_bytes.min);
|
UI_Box *ascii_box = ui_build_box_from_stringf(UI_BoxFlag_DrawText, "%S###ascii_row_%I64x", ascii_text, row_range_bytes.min);
|
||||||
if(selection.max >= row_range_bytes.min && selection.min < row_range_bytes.max)
|
if(selection.max >= row_range_bytes.min && selection.min < row_range_bytes.max)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user