diff --git a/src/raddbg/generated/raddbg.meta.c b/src/raddbg/generated/raddbg.meta.c index 617c766f..1cbb3cf2 100644 --- a/src/raddbg/generated/raddbg.meta.c +++ b/src/raddbg/generated/raddbg.meta.c @@ -327,9 +327,9 @@ RD_NameSchemaInfo rd_name_schema_info_table[17] = {str8_lit_comp("settings"), str8_lit_comp("x:\n{\n @default(1) 'hover_animations': bool,\n @default(1) 'press_animations': bool,\n @default(0) 'focus_animations': bool,\n @default(1) 'tooltip_animations': bool,\n @default(1) 'menu_animations': bool,\n @default(1) 'scrolling_animations': bool,\n @default(1) 'background_blur': bool,\n @default(1) 'thread_lines': bool,\n @default(1) 'breakpoint_lines': bool,\n @default(1) 'thread_glow': bool,\n @default(1) 'breakpoint_glow': bool,\n @default(0) 'opaque_backgrounds': bool,\n @default(1) 'smooth_main_text': bool,\n @default(0) 'smooth_code_text': bool,\n @default(1) 'hint_main_text': bool,\n @default(1) 'hint_code_text': bool,\n @default(2) 'tab_width': @range[1, 32] u64,\n @can_be_per_window 'main_font_size': @range[6, 72] u64,\n @can_be_per_window 'code_font_size': @range[1, 32] u64,\n}\n")}, {str8_lit_comp("text"), str8_lit_comp("x:\n{\n 'lang':lang,\n 'size':code_string,\n @default(1) 'show_line_numbers':bool,\n}\n")}, {str8_lit_comp("disasm"), str8_lit_comp("x:\n{\n 'arch': arch,\n 'syntax': dasm_syntax,\n 'size': code_string,\n @default(1) 'show_addresses': bool,\n @default(0) 'show_code_bytes': bool,\n @default(1) 'show_source_lines': bool,\n @default(1) 'show_symbol_names': bool,\n @default(1) 'show_line_numbers': bool,\n}\n")}, -{str8_lit_comp("memory"), str8_lit_comp("x:\n{\n 'size': code_string,\n @default(16) 'num_columns': @range[1, 64] u64,\n}\n")}, -{str8_lit_comp("bitmap"), str8_lit_comp("x:\n{\n @order(0) 'w': code_string,\n @order(1) 'h': code_string,\n 'fmt': tex2dformat,\n}\n")}, -{str8_lit_comp("geo3d"), str8_lit_comp("x:\n{\n 'count': code_string,\n 'vtx': code_string,\n 'vtx_size': code_string,\n 'yaw': f32,\n 'pitch': f32,\n 'zoom': f32,\n}\n")}, +{str8_lit_comp("memory"), str8_lit_comp("x:\n{\n 'size': code_string,\n @default(16) 'num_columns': @range[1, 256] u64,\n}\n")}, +{str8_lit_comp("bitmap"), str8_lit_comp("x:\n{\n @order(0) 'w': u64,\n @order(1) 'h': u64,\n 'fmt': tex2dformat,\n}\n")}, +{str8_lit_comp("geo3d"), str8_lit_comp("x:\n{\n 'count': code_string,\n 'vtx': code_string,\n 'vtx_size': code_string,\n 'yaw': @range[0, 1] f32,\n 'pitch': @range[-0.5, 0] f32,\n 'zoom': @range[0, 100] f32,\n}\n")}, {str8_lit_comp("target"), str8_lit_comp("@commands(enable_cfg, launch_and_run, launch_and_step_into, remove_cfg)\n@collection_commands(add_target)\nx:\n{\n 'label': code_string,\n 'executable': path,\n 'arguments': string,\n 'working_directory': path,\n 'entry_point': code_string,\n 'stdout_path': path,\n 'stderr_path': path,\n 'stdin_path': path,\n 'environment': query,\n 'debug_subprocesses': bool,\n @no_expand @default(0) 'enabled': bool,\n}\n")}, {str8_lit_comp("breakpoint"), str8_lit_comp("@commands(enable_cfg, remove_cfg)\n@collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint)\nx:\n{\n 'label': code_string,\n 'condition': code_string,\n 'source_location': path_pt,\n 'address_location': code_string,\n 'hit_count': u64,\n 'address_range_size': @or(0, 1, 2, 4, 8) u64,\n 'break_on_write': bool,\n 'break_on_read': bool,\n 'break_on_execute': bool,\n @no_expand @default(1) 'enabled': bool,\n}\n")}, {str8_lit_comp("watch_pin"), str8_lit_comp("@commands(remove_cfg)\n@collection_commands(add_watch_pin)\nx:\n{\n 'expression': code_string,\n 'view_rule': code_string,\n 'source_location': path_pt,\n 'address_location': code_string,\n}\n")}, diff --git a/src/raddbg/raddbg.mdesk b/src/raddbg/raddbg.mdesk index 10d2e7d0..fa3cfc3f 100644 --- a/src/raddbg/raddbg.mdesk +++ b/src/raddbg/raddbg.mdesk @@ -204,7 +204,7 @@ RD_VocabTable: x: { 'size': code_string, - @default(16) 'num_columns': @range[1, 64] u64, + @default(16) 'num_columns': @range[1, 256] u64, } ``` } @@ -213,8 +213,8 @@ RD_VocabTable: ``` x: { - @order(0) 'w': code_string, - @order(1) 'h': code_string, + @order(0) 'w': u64, + @order(1) 'h': u64, 'fmt': tex2dformat, } ``` @@ -227,9 +227,9 @@ RD_VocabTable: 'count': code_string, 'vtx': code_string, 'vtx_size': code_string, - 'yaw': f32, - 'pitch': f32, - 'zoom': f32, + 'yaw': @range[0, 1] f32, + 'pitch': @range[-0.5, 0] f32, + 'zoom': @range[0, 100] f32, } ``` } diff --git a/src/raddbg/raddbg_eval.c b/src/raddbg/raddbg_eval.c index 2f50af59..521f35fc 100644 --- a/src/raddbg/raddbg_eval.c +++ b/src/raddbg/raddbg_eval.c @@ -392,6 +392,26 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema) child_type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, child_schema->string); } + //- rjf: extend child type with ranges + MD_Node *range = md_tag_from_string(child_schema->first, str8_lit("range"), 0); + if(!md_node_is_nil(range)) + { + Temp scratch = scratch_begin(&arena, 1); + E_Expr *min_bound = e_parse_expr_from_text(scratch.arena, range->first->string).exprs.first; + E_Expr *max_bound = e_parse_expr_from_text(scratch.arena, range->first->next->string).exprs.first; + E_Expr *args[] = + { + min_bound, + max_bound, + }; + child_type_key = e_type_key_cons(.kind = E_TypeKind_Lens, + .name = str8_lit("range1"), + .direct_key = child_type_key, + .count = 2, + .args = args); + scratch_end(scratch); + } + //- rjf: evaluate E_Space child_eval_space = zero_struct; if(cfg != &rd_nil_cfg) diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index 4cfe1f7b..aa56aa14 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -2180,10 +2180,10 @@ RD_VIEW_UI_FUNCTION_DEF(memory) { space_range = r1u64(0, 0x7FFFFFFFFFFFull); } - U64 cursor = rd_view_cfg_value_from_string(str8_lit("cursor_vaddr")).u64; - U64 mark = rd_view_cfg_value_from_string(str8_lit("mark_vaddr")).u64; - U64 bytes_per_cell = rd_view_cfg_value_from_string(str8_lit("bytes_per_cell")).u64; - U64 num_columns = rd_view_cfg_value_from_string(str8_lit("num_columns")).u64; + U64 cursor = rd_view_cfg_u64_from_string(str8_lit("cursor_vaddr")); + U64 mark = rd_view_cfg_u64_from_string(str8_lit("mark_vaddr")); + U64 bytes_per_cell = rd_view_cfg_u64_from_string(str8_lit("bytes_per_cell")); + U64 num_columns = rd_view_cfg_u64_from_string(str8_lit("num_columns")); if(num_columns == 0) { num_columns = 16;