stdout/stderr/stdin file path overrides for targets

This commit is contained in:
Ryan Fleury
2024-10-17 11:25:47 -07:00
parent 23ad094a68
commit e376ad8113
13 changed files with 166 additions and 22 deletions
+47 -4
View File
@@ -300,6 +300,14 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs)
str8_serial_push_data(scratch.arena, &msgs_srlzed, n->string.str, n->string.size);
}
// rjf: write stdout/stderr/stdin paths
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msg->stdout_path.size);
str8_serial_push_string(scratch.arena, &msgs_srlzed, msg->stdout_path);
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msg->stderr_path.size);
str8_serial_push_string(scratch.arena, &msgs_srlzed, msg->stderr_path);
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msg->stdin_path.size);
str8_serial_push_string(scratch.arena, &msgs_srlzed, msg->stdin_path);
// rjf: write trap list
str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msg->traps.count);
for(CTRL_TrapNode *n = msg->traps.first; n != 0; n = n->next)
@@ -405,6 +413,17 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string)
str8_list_push(arena, &msg->env_string_list, env_str);
}
// rjf: read stdout/stderr/stdin paths
read_off += str8_deserial_read_struct(string, read_off, &msg->stdout_path.size);
msg->stdout_path.str = push_array(arena, U8, msg->stdout_path.size);
read_off += str8_deserial_read(string, read_off, msg->stdout_path.str, msg->stdout_path.size, 1);
read_off += str8_deserial_read_struct(string, read_off, &msg->stderr_path.size);
msg->stderr_path.str = push_array(arena, U8, msg->stderr_path.size);
read_off += str8_deserial_read(string, read_off, msg->stderr_path.str, msg->stderr_path.size, 1);
read_off += str8_deserial_read_struct(string, read_off, &msg->stdin_path.size);
msg->stdin_path.str = push_array(arena, U8, msg->stdin_path.size);
read_off += str8_deserial_read(string, read_off, msg->stdin_path.str, msg->stdin_path.size, 1);
// rjf: read trap list
U64 trap_count = 0;
read_off += str8_deserial_read_struct(string, read_off, &trap_count);
@@ -4249,13 +4268,37 @@ ctrl_thread__end_and_flush_info_log(void)
internal void
ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg)
{
//- rjf: obtain stdout/stderr/stdin handles
OS_Handle stdout_handle = {0};
OS_Handle stderr_handle = {0};
OS_Handle stdin_handle = {0};
if(msg->stdout_path.size != 0)
{
OS_Handle f = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Read, msg->stdout_path);
os_file_close(f);
stdout_handle = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Append|OS_AccessFlag_ShareRead|OS_AccessFlag_ShareWrite|OS_AccessFlag_Inherited, msg->stdout_path);
}
if(msg->stderr_path.size != 0)
{
OS_Handle f = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Read, msg->stderr_path);
os_file_close(f);
stderr_handle = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Append|OS_AccessFlag_ShareRead|OS_AccessFlag_ShareWrite|OS_AccessFlag_Inherited, msg->stderr_path);
}
if(msg->stdin_path.size != 0)
{
stdin_handle = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead|OS_AccessFlag_ShareWrite|OS_AccessFlag_Inherited, msg->stdin_path);
}
//- rjf: launch
OS_ProcessLaunchParams params = {0};
{
params.cmd_line = msg->cmd_line_string_list;
params.path = msg->path;
params.env = msg->env_string_list;
params.inherit_env = msg->env_inherit;
params.cmd_line = msg->cmd_line_string_list;
params.path = msg->path;
params.env = msg->env_string_list;
params.inherit_env = msg->env_inherit;
params.stdout_file = stdout_handle;
params.stderr_file = stderr_handle;
params.stdin_file = stdin_handle;
}
U32 id = dmn_ctrl_launch(ctrl_ctx, &params);
+9
View File
@@ -86,6 +86,9 @@ Y(String8, type(CTRL_PathString8), dbg, "Debug Info Path")\
Y(String8, type(CTRL_PlainString8), args, "Arguments")\
Y(String8, type(CTRL_PathString8), working_directory, "Working Directory")\
Y(String8, type(CTRL_CodeString8), entry_point, "Custom Entry Point")\
Y(String8, type(CTRL_PathString8), stdout_path, "Standard Output Path")\
Y(String8, type(CTRL_PathString8), stderr_path, "Standard Error Path")\
Y(String8, type(CTRL_PathString8), stdin_path, "Standard Input Path")\
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")\
@@ -132,6 +135,9 @@ struct_members(CTRL_TargetMetaEval)
member_lit_comp(CTRL_MetaEval, type(CTRL_PlainString8),args, .pretty_name = str8_lit_comp("Arguments")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), working_directory, .pretty_name = str8_lit_comp("Working Directory")),
member_lit_comp(CTRL_MetaEval, type(CTRL_CodeString8), entry_point, .pretty_name = str8_lit_comp("Custom Entry Point")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), stdout_path, .pretty_name = str8_lit_comp("Standard Output Path")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), stderr_path, .pretty_name = str8_lit_comp("Standard Error Path")),
member_lit_comp(CTRL_MetaEval, type(CTRL_PathString8), stdin_path, .pretty_name = str8_lit_comp("Standard Input Path")),
};
struct_members(CTRL_PinMetaEval)
@@ -544,6 +550,9 @@ struct CTRL_Msg
String8List entry_points;
String8List cmd_line_string_list;
String8List env_string_list;
String8 stdout_path;
String8 stderr_path;
String8 stdin_path;
CTRL_TrapList traps;
CTRL_UserBreakpointList user_bps;
CTRL_MetaEvalArray meta_evals;
+6
View File
@@ -2031,6 +2031,9 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
String8 args = str8_skip_chop_whitespace(target->args);
String8 working_directory = str8_skip_chop_whitespace(target->working_directory);
String8 custom_entry_point_name = str8_skip_chop_whitespace(target->custom_entry_point_name);
String8 stdout_path = str8_skip_chop_whitespace(target->stdout_path);
String8 stderr_path = str8_skip_chop_whitespace(target->stderr_path);
String8 stdin_path = str8_skip_chop_whitespace(target->stdin_path);
String8List env = target->env;
if(working_directory.size == 0)
{
@@ -2071,6 +2074,9 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
msg->kind = CTRL_MsgKind_Launch;
msg->path = working_directory;
msg->cmd_line_string_list = cmdln_strings;
msg->stdout_path = stdout_path;
msg->stderr_path = stderr_path;
msg->stdin_path = stdin_path;
msg->env_inherit = 1;
MemoryCopyArray(msg->exception_code_filters, exception_code_filters);
MemoryCopyStruct(&msg->meta_evals, meta_evals);
+3
View File
@@ -14,6 +14,9 @@ struct D_Target
String8 args;
String8 working_directory;
String8 custom_entry_point_name;
String8 stdout_path;
String8 stderr_path;
String8 stdin_path;
String8List env;
};
+24 -2
View File
@@ -1256,11 +1256,33 @@ dmn_ctrl_launch(DMN_CtrlCtx *ctx, OS_ProcessLaunchParams *params)
String16 env16 = str16_from_8(scratch.arena, env);
//- rjf: launch
DWORD access_flags = CREATE_UNICODE_ENVIRONMENT|DEBUG_PROCESS;
DWORD creation_flags = CREATE_UNICODE_ENVIRONMENT|DEBUG_PROCESS;
BOOL inherit_handles = 0;
STARTUPINFOW startup_info = {sizeof(startup_info)};
if(!os_handle_match(params->stdout_file, os_handle_zero()))
{
HANDLE stdout_handle = (HANDLE)params->stdout_file.u64[0];
startup_info.hStdOutput = stdout_handle;
startup_info.dwFlags |= STARTF_USESTDHANDLES;
inherit_handles = 1;
}
if(!os_handle_match(params->stderr_file, os_handle_zero()))
{
HANDLE stderr_handle = (HANDLE)params->stderr_file.u64[0];
startup_info.hStdError = stderr_handle;
startup_info.dwFlags |= STARTF_USESTDHANDLES;
inherit_handles = 1;
}
if(!os_handle_match(params->stdin_file, os_handle_zero()))
{
HANDLE stdin_handle = (HANDLE)params->stdin_file.u64[0];
startup_info.hStdInput = stdin_handle;
startup_info.dwFlags |= STARTF_USESTDHANDLES;
inherit_handles = 1;
}
PROCESS_INFORMATION process_info = {0};
AllocConsole();
if(CreateProcessW(0, (WCHAR*)cmd16.str, 0, 0, 1, access_flags, (WCHAR*)env16.str, (WCHAR*)dir16.str, &startup_info, &process_info))
if(CreateProcessW(0, (WCHAR*)cmd16.str, 0, 0, 1, creation_flags, (WCHAR*)env16.str, (WCHAR*)dir16.str, &startup_info, &process_info))
{
// check if we are 32-bit app, and just close it immediately
BOOL is_wow = 0;
+2
View File
@@ -123,6 +123,8 @@ struct OS_ProcessLaunchParams
B32 inherit_env;
B32 consoleless;
OS_Handle stdout_file;
OS_Handle stderr_file;
OS_Handle stdin_file;
};
////////////////////////////////
+15 -1
View File
@@ -941,7 +941,21 @@ os_process_launch(OS_ProcessLaunchParams *params)
startup_info.hStdOutput = stdout_handle;
startup_info.dwFlags |= STARTF_USESTDHANDLES;
inherit_handles = 1;
}
}
if(!os_handle_match(params->stderr_file, os_handle_zero()))
{
HANDLE stderr_handle = (HANDLE)params->stderr_file.u64[0];
startup_info.hStdError = stderr_handle;
startup_info.dwFlags |= STARTF_USESTDHANDLES;
inherit_handles = 1;
}
if(!os_handle_match(params->stdin_file, os_handle_zero()))
{
HANDLE stdin_handle = (HANDLE)params->stdin_file.u64[0];
startup_info.hStdInput = stdin_handle;
startup_info.dwFlags |= STARTF_USESTDHANDLES;
inherit_handles = 1;
}
PROCESS_INFORMATION process_info = {0};
if(CreateProcessW(0, (WCHAR*)cmd16.str, 0, 0, inherit_handles, creation_flags, use_null_env_arg ? 0 : (WCHAR*)env16.str, (WCHAR*)dir16.str, &startup_info, &process_info))
{
+25 -7
View File
@@ -36,7 +36,7 @@ RD_CmdKind_Null,
RD_CmdKind_Null,
};
String8 d_entity_kind_display_string_table[31] =
String8 d_entity_kind_display_string_table[34] =
{
str8_lit_comp("Nil"),
str8_lit_comp("Root"),
@@ -55,6 +55,9 @@ str8_lit_comp("Executable"),
str8_lit_comp("Arguments"),
str8_lit_comp("Working Directory"),
str8_lit_comp("Entry Point"),
str8_lit_comp("Standard Output Path"),
str8_lit_comp("Standard Error Path"),
str8_lit_comp("Standard Input Path"),
str8_lit_comp("Window"),
str8_lit_comp("Panel"),
str8_lit_comp("View"),
@@ -71,7 +74,7 @@ str8_lit_comp("Conversion Task"),
str8_lit_comp("Conversion Failure"),
};
String8 d_entity_kind_name_lower_table[31] =
String8 d_entity_kind_name_lower_table[34] =
{
str8_lit_comp("nil"),
str8_lit_comp("root"),
@@ -90,6 +93,9 @@ str8_lit_comp("executable"),
str8_lit_comp("arguments"),
str8_lit_comp("working_directory"),
str8_lit_comp("entry_point"),
str8_lit_comp("stdout_path"),
str8_lit_comp("stderr_path"),
str8_lit_comp("stdin_path"),
str8_lit_comp("window"),
str8_lit_comp("panel"),
str8_lit_comp("view"),
@@ -106,7 +112,7 @@ str8_lit_comp("conversion_task"),
str8_lit_comp("conversion_fail"),
};
String8 d_entity_kind_name_lower_plural_table[31] =
String8 d_entity_kind_name_lower_plural_table[34] =
{
str8_lit_comp("nils"),
str8_lit_comp("roots"),
@@ -125,6 +131,9 @@ str8_lit_comp("executables"),
str8_lit_comp("argumentses"),
str8_lit_comp("working_directories"),
str8_lit_comp("entry_points"),
str8_lit_comp("stdout_paths"),
str8_lit_comp("stderr_paths"),
str8_lit_comp("stdin_paths"),
str8_lit_comp("windows"),
str8_lit_comp("panels"),
str8_lit_comp("views"),
@@ -141,7 +150,7 @@ str8_lit_comp("conversion_tasks"),
str8_lit_comp("conversion_fails"),
};
String8 d_entity_kind_name_label_table[31] =
String8 d_entity_kind_name_label_table[34] =
{
str8_lit_comp("Label"),
str8_lit_comp("Label"),
@@ -158,8 +167,11 @@ str8_lit_comp("Location"),
str8_lit_comp("Label"),
str8_lit_comp("Executable"),
str8_lit_comp("Arguments"),
str8_lit_comp("Execution Path"),
str8_lit_comp("Path"),
str8_lit_comp("Symbol Name"),
str8_lit_comp("Path"),
str8_lit_comp("Path"),
str8_lit_comp("Path"),
str8_lit_comp("Label"),
str8_lit_comp("Label"),
str8_lit_comp("Label"),
@@ -176,7 +188,7 @@ str8_lit_comp("Label"),
str8_lit_comp("Label"),
};
RD_EntityKindFlags rd_entity_kind_flags_table[31] =
RD_EntityKindFlags rd_entity_kind_flags_table[34] =
{
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (0*RD_EntityKindFlag_NameIsPath) | (0*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (0*RD_EntityKindFlag_NameIsPath) | (0*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
@@ -195,6 +207,9 @@ RD_EntityKindFlags rd_entity_kind_flags_table[31] =
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (0*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (1*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (0*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (1*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (1*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
(0*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (0*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (1*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (0*RD_EntityKindFlag_IsSerializedToConfig),
(1*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (1*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (0*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (1*RD_EntityKindFlag_IsSerializedToConfig),
(1*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (1*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (0*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (1*RD_EntityKindFlag_IsSerializedToConfig),
(1*RD_EntityKindFlag_CanDelete) | (0*RD_EntityKindFlag_CanFreeze) | (0*RD_EntityKindFlag_CanEdit) | (0*RD_EntityKindFlag_CanRename) | (0*RD_EntityKindFlag_CanEnable) | (0*RD_EntityKindFlag_CanCondition) | (1*RD_EntityKindFlag_CanDuplicate) | (0*RD_EntityKindFlag_NameIsCode) | (0*RD_EntityKindFlag_NameIsPath) | (1*RD_EntityKindFlag_UserDefinedLifetime) | (1*RD_EntityKindFlag_IsSerializedToConfig),
@@ -870,7 +885,7 @@ RD_ViewRuleInfo rd_view_rule_kind_info_table[35] =
{str8_lit_comp("geo3d"), str8_lit_comp("Visualizes memory as 3D geometry."), str8_lit_comp("Geometry (3D)"), str8_lit_comp("x:{'count':expr, 'vtx':expr, 'vtx_size':expr}"), RD_IconKind_Binoculars, (RD_ViewRuleInfoFlag_ShowInDocs*1|RD_ViewRuleInfoFlag_CanFilter*0|RD_ViewRuleInfoFlag_FilterIsCode*0|RD_ViewRuleInfoFlag_TypingAutomaticallyFilters*0|RD_ViewRuleInfoFlag_CanUseInWatchTable*1|RD_ViewRuleInfoFlag_CanFillValueCell*0|RD_ViewRuleInfoFlag_CanExpand*1), EV_VIEW_RULE_EXPR_EXPAND_INFO_FUNCTION_NAME(geo3d) , RD_VIEW_RULE_UI_FUNCTION_NAME(geo3d)},
};
RD_IconKind rd_entity_kind_icon_kind_table[31] =
RD_IconKind rd_entity_kind_icon_kind_table[34] =
{
RD_IconKind_Null,
RD_IconKind_Null,
@@ -889,6 +904,9 @@ RD_IconKind_Null,
RD_IconKind_Null,
RD_IconKind_Null,
RD_IconKind_Null,
RD_IconKind_Null,
RD_IconKind_Null,
RD_IconKind_Null,
RD_IconKind_Window,
RD_IconKind_XSplit,
RD_IconKind_Null,
+9 -6
View File
@@ -34,6 +34,9 @@ RD_EntityKind_Executable,
RD_EntityKind_Arguments,
RD_EntityKind_WorkingDirectory,
RD_EntityKind_EntryPoint,
RD_EntityKind_StdoutPath,
RD_EntityKind_StderrPath,
RD_EntityKind_StdinPath,
RD_EntityKind_Window,
RD_EntityKind_Panel,
RD_EntityKind_View,
@@ -763,11 +766,11 @@ extern String8 rd_cfg_src_string_table[4];
extern RD_CmdKind rd_cfg_src_load_cmd_kind_table[4];
extern RD_CmdKind rd_cfg_src_write_cmd_kind_table[4];
extern RD_CmdKind rd_cfg_src_apply_cmd_kind_table[4];
extern String8 d_entity_kind_display_string_table[31];
extern String8 d_entity_kind_name_lower_table[31];
extern String8 d_entity_kind_name_lower_plural_table[31];
extern String8 d_entity_kind_name_label_table[31];
extern RD_EntityKindFlags rd_entity_kind_flags_table[31];
extern String8 d_entity_kind_display_string_table[34];
extern String8 d_entity_kind_name_lower_table[34];
extern String8 d_entity_kind_name_lower_plural_table[34];
extern String8 d_entity_kind_name_label_table[34];
extern RD_EntityKindFlags rd_entity_kind_flags_table[34];
extern Rng1U64 rd_reg_slot_range_table[34];
extern RD_StringBindingPair rd_default_binding_table[110];
extern String8 rd_binding_version_remap_old_name_table[8];
@@ -781,7 +784,7 @@ extern EV_ViewRuleExprExpandRangeInfoHookFunctionType * rd_collection_expr_expan
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_id_from_num_hook_function_table[18];
extern EV_ViewRuleExprExpandIDFromNumHookFunctionType * rd_collection_expr_expand_num_from_id_hook_function_table[18];
extern RD_ViewRuleInfo rd_view_rule_kind_info_table[35];
extern RD_IconKind rd_entity_kind_icon_kind_table[31];
extern RD_IconKind rd_entity_kind_icon_kind_table[34];
extern String8 rd_theme_preset_display_string_table[9];
extern String8 rd_theme_preset_code_string_table[9];
extern String8 rd_theme_color_version_remap_old_name_table[22];
+4 -1
View File
@@ -93,8 +93,11 @@ RD_EntityKindTable:
{Target target targets 1 0 1 1 1 0 1 0 0 1 1 "Label" Target "Target" }
{Executable executable executables 0 0 0 0 0 0 0 0 1 1 0 "Executable" Null "Executable" }
{Arguments arguments argumentses 0 0 0 0 0 0 0 0 0 1 0 "Arguments" Null "Arguments" }
{WorkingDirectory working_directory working_directories 0 0 0 0 0 0 0 0 1 1 0 "Execution Path" Null "Working Directory" }
{WorkingDirectory working_directory working_directories 0 0 0 0 0 0 0 0 1 1 0 "Path" Null "Working Directory" }
{EntryPoint entry_point entry_points 0 0 0 0 0 0 0 0 0 1 0 "Symbol Name" Null "Entry Point" }
{StdoutPath stdout_path stdout_paths 0 0 0 0 0 0 0 0 1 1 0 "Path" Null "Standard Output Path" }
{StderrPath stderr_path stderr_paths 0 0 0 0 0 0 0 0 1 1 0 "Path" Null "Standard Error Path" }
{StdinPath stdin_path stdin_paths 0 0 0 0 0 0 0 0 1 1 0 "Path" Null "Standard Input Path" }
//- rjf: frontend containers (windows, panels, views)
{Window window windows 1 0 0 0 0 0 1 0 0 1 1 "Label" Window "Window" }
+15
View File
@@ -1895,12 +1895,18 @@ rd_d_target_from_entity(RD_Entity *entity)
RD_Entity *src_target_exe = rd_entity_child_from_kind(entity, RD_EntityKind_Executable);
RD_Entity *src_target_args = rd_entity_child_from_kind(entity, RD_EntityKind_Arguments);
RD_Entity *src_target_wdir = rd_entity_child_from_kind(entity, RD_EntityKind_WorkingDirectory);
RD_Entity *src_target_stdo = rd_entity_child_from_kind(entity, RD_EntityKind_StdoutPath);
RD_Entity *src_target_stde = rd_entity_child_from_kind(entity, RD_EntityKind_StderrPath);
RD_Entity *src_target_stdi = rd_entity_child_from_kind(entity, RD_EntityKind_StdinPath);
RD_Entity *src_target_entry = rd_entity_child_from_kind(entity, RD_EntityKind_EntryPoint);
D_Target target = {0};
target.exe = src_target_exe->string;
target.args = src_target_args->string;
target.working_directory = src_target_wdir->string;
target.custom_entry_point_name = src_target_entry->string;
target.stdout_path = src_target_stdo->string;
target.stderr_path = src_target_stde->string;
target.stdin_path = src_target_stdi->string;
return target;
}
@@ -2301,6 +2307,9 @@ rd_ctrl_meta_eval_from_entity(Arena *arena, RD_Entity *entity)
RD_Entity *args= rd_entity_child_from_kind(entity, RD_EntityKind_Arguments);
RD_Entity *wdir= rd_entity_child_from_kind(entity, RD_EntityKind_WorkingDirectory);
RD_Entity *entr= rd_entity_child_from_kind(entity, RD_EntityKind_EntryPoint);
RD_Entity *stdo= rd_entity_child_from_kind(entity, RD_EntityKind_StdoutPath);
RD_Entity *stde= rd_entity_child_from_kind(entity, RD_EntityKind_StderrPath);
RD_Entity *stdi= rd_entity_child_from_kind(entity, RD_EntityKind_StdinPath);
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 *src = rd_entity_child_from_kind(entity, RD_EntityKind_Source);
@@ -2330,6 +2339,9 @@ rd_ctrl_meta_eval_from_entity(Arena *arena, RD_Entity *entity)
meval->args = args->string;
meval->working_directory = wdir->string;
meval->entry_point = entr->string;
meval->stdout_path = stdo->string;
meval->stderr_path = stde->string;
meval->stdin_path = stdi->string;
meval->source_location = src_loc_string;
meval->address_location = vaddr_loc_string;
meval->function_location = function_loc_string;
@@ -2600,6 +2612,9 @@ rd_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range)
StringMemberCase(args) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Arguments), 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(stdout_path) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_StdoutPath), str8_cstring_capped(in, (U8 *)in + 4096));}
StringMemberCase(stderr_path) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_StderrPath), str8_cstring_capped(in, (U8 *)in + 4096));}
StringMemberCase(stdin_path) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_StdinPath), str8_cstring_capped(in, (U8 *)in + 4096));}
StringMemberCase(source_path) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Source), str8_cstring_capped(in, (U8 *)in + 4096));}
StringMemberCase(destination_path) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Dest), str8_cstring_capped(in, (U8 *)in + 4096));}
StringMemberCase(type) {result = 1; rd_entity_equip_name(rd_entity_child_from_kind_or_alloc(entity, RD_EntityKind_Source), str8_cstring_capped(in, (U8 *)in + 4096));}
+2
View File
@@ -4,6 +4,8 @@
////////////////////////////////
//~ rjf: post-0.9.12 TODO notes
//
// [ ] fix quote input in quoteless watch window value editors
//
// [ ] per-target stdout/stderr file output paths
//
// [ ] double click on breakpoints/watch-pins/etc. to go to location
+5 -1
View File
@@ -5361,7 +5361,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(targets)
rd_watch_view_column_alloc(wv, RD_WatchViewColumnKind_Value, 0.75f, .dequote_string = 1, .is_non_code = 0);
}
rd_watch_view_build(wv, RD_WatchViewFlag_NoHeader|RD_WatchViewFlag_PrettyNameMembers|RD_WatchViewFlag_PrettyEntityRows|RD_WatchViewFlag_DisableCacheLines,
str8_lit("targets"), str8_lit("only: label exe args working_directory entry_point str"), 1, 10, rect);
str8_lit("targets"), str8_lit("only: label exe args working_directory entry_point stdout_path stderr_path stdin_path str"), 1, 10, rect);
ProfEnd();
}
@@ -5823,6 +5823,10 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(text)
rd_regs()->cursor.column = rd_value_from_params_key(params, str8_lit("cursor_column")).s64;
rd_regs()->mark.line = rd_value_from_params_key(params, str8_lit("mark_line")).s64;
rd_regs()->mark.column = rd_value_from_params_key(params, str8_lit("mark_column")).s64;
if(rd_regs()->cursor.line == 0) { rd_regs()->cursor.line = 1; }
if(rd_regs()->cursor.column == 0) { rd_regs()->cursor.column = 1; }
if(rd_regs()->mark.line == 0) { rd_regs()->mark.line = 1; }
if(rd_regs()->mark.column == 0) { rd_regs()->mark.column = 1; }
E_Eval eval = e_eval_from_string(scratch.arena, string);
Rng1U64 range = rd_range_from_eval_params(eval, params);
rd_regs()->text_key = rd_key_from_eval_space_range(eval.space, range, 1);