From 0c4c18c64f1d2d00daea305c96dad00ca2d88928 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 7 May 2024 18:44:00 -0400 Subject: [PATCH] Fixes for latest merge into with last changes for odin support from gingerBill --- src/df/core/generated/df_core.meta.c | 4 +- src/df/gfx/df_view_rules.c | 158 ++------------------------- src/df/gfx/generated/df_gfx.meta.c | 7 +- src/df/gfx/generated/df_gfx.meta.h | 6 + 4 files changed, 21 insertions(+), 154 deletions(-) diff --git a/src/df/core/generated/df_core.meta.c b/src/df/core/generated/df_core.meta.c index 9dcba9f9..1df1011a 100644 --- a/src/df/core/generated/df_core.meta.c +++ b/src/df/core/generated/df_core.meta.c @@ -432,10 +432,11 @@ DF_CmdSpecInfo df_g_core_cmd_kind_spec_info_table[212] = { str8_lit_comp("toggle_dev_menu"), str8_lit_comp("Opens and closes the developer menu."), str8_lit_comp(""), str8_lit_comp("Toggle Developer Menu"), (DF_CmdSpecFlag_OmitFromLists*0), {DF_CmdParamSlot_Null, DF_EntityKind_Nil, (DF_CmdQueryFlag_AllowFiles*0)|(DF_CmdQueryFlag_AllowFolders*0)|(DF_CmdQueryFlag_CodeInput*0)|(DF_CmdQueryFlag_KeepOldInput*0)|(DF_CmdQueryFlag_SelectOldInput*0)|(DF_CmdQueryFlag_Required*0)}, DF_IconKind_Null}, }; -DF_CoreViewRuleSpecInfo df_g_core_view_rule_spec_info_table[17] = +DF_CoreViewRuleSpecInfo df_g_core_view_rule_spec_info_table[19] = { {str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*0), 0, 0, }, {str8_lit_comp("array"), str8_lit_comp("Array"), str8_lit_comp("Specifies that a pointer points to N elements, rather than only 1."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*1)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*0), DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_NAME(array) , 0, }, +{str8_lit_comp("slice"), str8_lit_comp("Slice"), str8_lit_comp("Specifies that a struct to be rendered as a slice."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*1)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*0), DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_NAME(slice) , 0, }, {str8_lit_comp("list"), str8_lit_comp("List"), str8_lit_comp("Specifies that some struct, union, or class forms the top of a linked list, and the member which points at the following element in the list."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(list) , }, {str8_lit_comp("bswap"), str8_lit_comp("Byte Swap"), str8_lit_comp("Specifies that all integer primitives should be byte-swapped, such that their endianness is reversed."), (DF_CoreViewRuleSpecInfoFlag_Inherited*1)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*1)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*0), DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_NAME(bswap) , 0, }, {str8_lit_comp("dec"), str8_lit_comp("Decimal Base (Base 10)"), str8_lit_comp("Specifies that all integral evaluations should appear in base-10 form."), (DF_CoreViewRuleSpecInfoFlag_Inherited*1)|(DF_CoreViewRuleSpecInfoFlag_Expandable*0)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*0), 0, 0, }, @@ -451,6 +452,7 @@ DF_CoreViewRuleSpecInfo df_g_core_view_rule_spec_info_table[17] = {str8_lit_comp("graph"), str8_lit_comp("Graph"), str8_lit_comp("Displays as a pointer graph, visualizing nodes and edges formed by pointers directly."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*1)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(graph) , }, {str8_lit_comp("bitmap"), str8_lit_comp("Bitmap"), str8_lit_comp("Displays as a bitmap, interpreting the data as raw pixel data."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*1)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(bitmap) , }, {str8_lit_comp("geo"), str8_lit_comp("Geometry"), str8_lit_comp("Displays as geometry, interpreting the data as vertex data."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*1)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(geo) , }, +{str8_lit_comp("odin_map"), str8_lit_comp("Odin map"), str8_lit_comp("Specifies that a struct to be rendered as an Odin map type."), (DF_CoreViewRuleSpecInfoFlag_Inherited*0)|(DF_CoreViewRuleSpecInfoFlag_Expandable*1)|(DF_CoreViewRuleSpecInfoFlag_EvalResolution*0)|(DF_CoreViewRuleSpecInfoFlag_VizBlockProd*1), 0, DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(odin_map) , }, }; String8 df_g_icon_kind_text_table[69] = diff --git a/src/df/gfx/df_view_rules.c b/src/df/gfx/df_view_rules.c index a60847ea..7cd81c32 100644 --- a/src/df/gfx/df_view_rules.c +++ b/src/df/gfx/df_view_rules.c @@ -458,44 +458,6 @@ df_view_rule_hooks__disasm_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx return result; } -//////////////////////////////// -//~ rjf: "array" - -DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(array) -{ - Temp scratch = scratch_begin(&arena, 1); - TG_Key type_key = eval.type_key; - TG_Kind type_kind = tg_kind_from_key(type_key); - if(type_kind == TG_Kind_Ptr || type_kind == TG_Kind_LRef || type_kind == TG_Kind_RRef) - { - DF_CfgNode *array_node = val->last; - if(array_node != &df_g_nil_cfg_node) - { - // rjf: determine array size - U64 array_size = 0; - { - String8List array_size_expr_strs = {0}; - for(DF_CfgNode *child = array_node->first; child != &df_g_nil_cfg_node; child = child->next) - { - str8_list_push(scratch.arena, &array_size_expr_strs, child->string); - } - String8 array_size_expr = str8_list_join(scratch.arena, &array_size_expr_strs, 0); - DF_Eval array_size_eval = df_eval_from_string(arena, dbgi_scope, ctrl_ctx, parse_ctx, macro_map, array_size_expr); - DF_Eval array_size_eval_value = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, array_size_eval); - eval_error_list_concat_in_place(&eval.errors, &array_size_eval.errors); - array_size = array_size_eval_value.imm_u64; - } - - // rjf: apply array size to type - TG_Key pointee = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, type_key); - TG_Key array_type = tg_cons_type_make(parse_ctx->type_graph, TG_Kind_Array, pointee, array_size); - eval.type_key = tg_cons_type_make(parse_ctx->type_graph, TG_Kind_Ptr, array_type, 0); - } - } - scratch_end(scratch); - return eval; -} - //////////////////////////////// //~ bill: "slice" @@ -886,131 +848,25 @@ DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(odin_map) } - -DF_GFX_VIEW_RULE_WHOLE_UI_FUNCTION_DEF(odin_map) +DF_VIEW_SETUP_FUNCTION_DEF(odin_map) { } - - -//////////////////////////////// -//~ rjf: "list" - -DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(list) +DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(odin_map) { - + String8 result {}; + return result; } -DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_DEF(list) +DF_VIEW_CMD_FUNCTION_DEF(odin_map) { - + } -//////////////////////////////// -//~ rjf: "bswap" - -DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(bswap) +DF_VIEW_UI_FUNCTION_DEF(odin_map) { - Temp scratch = scratch_begin(&arena, 1); - TG_Key type_key = eval.type_key; - TG_Kind type_kind = tg_kind_from_key(type_key); - U64 type_size_bytes = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdi, type_key); - if(TG_Kind_Char8 <= type_kind && type_kind <= TG_Kind_S256 && - (type_size_bytes == 2 || - type_size_bytes == 4 || - type_size_bytes == 8)) - { - DF_Eval value_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdi, ctrl_ctx, eval); - if(value_eval.mode == EVAL_EvalMode_Value) - { - switch(type_size_bytes) - { - default:{}break; - case 2:{U16 v = (U16)value_eval.imm_u64; v = bswap_u16(v); value_eval.imm_u64 = (U64)v;}break; - case 4:{U32 v = (U32)value_eval.imm_u64; v = bswap_u32(v); value_eval.imm_u64 = (U64)v;}break; - case 8:{U64 v = value_eval.imm_u64; v = bswap_u64(v); value_eval.imm_u64 = v;}break; - } - } - eval = value_eval; - } - scratch_end(scratch); - return eval; -} -//////////////////////////////// -//~ rjf: "dec" - -DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(dec) -{ - -} - -//////////////////////////////// -//~ rjf: "bin" - -DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(bin) -{ - -} - -//////////////////////////////// -//~ rjf: "oct" - -DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(oct) -{ - -} - -//////////////////////////////// -//~ rjf: "hex" - -DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(hex) -{ - -} - -//////////////////////////////// -//~ rjf: "only" - -DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(only) -{ - -} - -DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_DEF(only) -{ - -} - -DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(only) -{ - -} - -//////////////////////////////// -//~ rjf: "omit" - -DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(omit) -{ - -} - -DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_DEF(omit) -{ - -} - -DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(omit) -{ - -} - -//////////////////////////////// -//~ rjf: "no_addr" - -DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(no_addr) -{ } //////////////////////////////// diff --git a/src/df/gfx/generated/df_gfx.meta.c b/src/df/gfx/generated/df_gfx.meta.c index b5bfe355..2aafdbe2 100644 --- a/src/df/gfx/generated/df_gfx.meta.c +++ b/src/df/gfx/generated/df_gfx.meta.c @@ -713,9 +713,10 @@ str8_lit_comp("open_user"), str8_lit_comp("open_profile"), }; -DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[14] = +DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[16] = { { str8_lit_comp("array"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), 0, 0, 0, 0, str8_lit_comp("") }, +{ str8_lit_comp("slice"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), 0, 0, 0, 0, str8_lit_comp("") }, { str8_lit_comp("list"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*1)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_NAME(list) , 0, 0, 0, str8_lit_comp("") }, { str8_lit_comp("dec"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), 0, DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(dec) , 0, 0, str8_lit_comp("") }, { str8_lit_comp("bin"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*0), 0, DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(bin) , 0, 0, str8_lit_comp("") }, @@ -728,14 +729,16 @@ DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[14] = { str8_lit_comp("text"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*1), 0, 0, 0, DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_NAME(text) , str8_lit_comp("text_view_rule") }, { str8_lit_comp("disasm"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*1), 0, 0, 0, DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_NAME(disasm) , str8_lit_comp("disasm_view_rule") }, { str8_lit_comp("bitmap"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*1), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(bitmap) , DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_NAME(bitmap) , str8_lit_comp("bitmap_view_rule") }, +{ str8_lit_comp("odin_map"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*1), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(odin_map) , DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_NAME(odin_map) , str8_lit_comp("odin_map_view_rule") }, { str8_lit_comp("geo"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_BlockUI*1), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(geo) , DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_NAME(geo) , str8_lit_comp("geo_view_rule") }, }; -DF_ViewSpecInfo df_g_gfx_view_rule_tab_view_spec_info_table[4] = +DF_ViewSpecInfo df_g_gfx_view_rule_tab_view_spec_info_table[5] = { { DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("text_view_rule"), str8_lit_comp("Text"), DF_NameKind_Null, DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(text), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(text), DF_VIEW_CMD_FUNCTION_NAME(text), DF_VIEW_UI_FUNCTION_NAME(text) }, { DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("disasm_view_rule"), str8_lit_comp("Disassembly"), DF_NameKind_Null, DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(disasm), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(disasm), DF_VIEW_CMD_FUNCTION_NAME(disasm), DF_VIEW_UI_FUNCTION_NAME(disasm) }, { DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("bitmap_view_rule"), str8_lit_comp("Bitmap"), DF_NameKind_Null, DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(bitmap), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(bitmap), DF_VIEW_CMD_FUNCTION_NAME(bitmap), DF_VIEW_UI_FUNCTION_NAME(bitmap) }, +{ DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("odin_map_view_rule"), str8_lit_comp("Odin HashMap"), DF_NameKind_Null, DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(odin_map), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(odin_map), DF_VIEW_CMD_FUNCTION_NAME(odin_map), DF_VIEW_UI_FUNCTION_NAME(odin_map) }, { DF_ViewSpecFlag_CanSerialize|DF_ViewSpecFlag_CanSerializeQuery, str8_lit_comp("geo_view_rule"), str8_lit_comp("Geometry"), DF_NameKind_Null, DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(geo), DF_VIEW_STRING_FROM_STATE_FUNCTION_NAME(geo), DF_VIEW_CMD_FUNCTION_NAME(geo), DF_VIEW_UI_FUNCTION_NAME(geo) }, }; diff --git a/src/df/gfx/generated/df_gfx.meta.h b/src/df/gfx/generated/df_gfx.meta.h index bee55a8e..38afb3c1 100644 --- a/src/df/gfx/generated/df_gfx.meta.h +++ b/src/df/gfx/generated/df_gfx.meta.h @@ -254,27 +254,33 @@ DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(omit); DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(no_addr); DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(rgba); DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(bitmap); +DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(odin_map); DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(geo); DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(rgba); DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(text); DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(disasm); DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(bitmap); +DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(odin_map); DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(geo); DF_VIEW_SETUP_FUNCTION_DEF(text); DF_VIEW_SETUP_FUNCTION_DEF(disasm); DF_VIEW_SETUP_FUNCTION_DEF(bitmap); +DF_VIEW_SETUP_FUNCTION_DEF(odin_map); DF_VIEW_SETUP_FUNCTION_DEF(geo); DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(text); DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(disasm); DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(bitmap); +DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(odin_map); DF_VIEW_STRING_FROM_STATE_FUNCTION_DEF(geo); DF_VIEW_CMD_FUNCTION_DEF(text); DF_VIEW_CMD_FUNCTION_DEF(disasm); DF_VIEW_CMD_FUNCTION_DEF(bitmap); +DF_VIEW_CMD_FUNCTION_DEF(odin_map); DF_VIEW_CMD_FUNCTION_DEF(geo); DF_VIEW_UI_FUNCTION_DEF(text); DF_VIEW_UI_FUNCTION_DEF(disasm); DF_VIEW_UI_FUNCTION_DEF(bitmap); +DF_VIEW_UI_FUNCTION_DEF(odin_map); DF_VIEW_UI_FUNCTION_DEF(geo); C_LINKAGE_BEGIN extern String8 df_g_theme_preset_display_string_table[9];