mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
stdout/stderr/stdin file path overrides for targets
This commit is contained in:
+47
-4
@@ -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, ¶ms);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -123,6 +123,8 @@ struct OS_ProcessLaunchParams
|
||||
B32 inherit_env;
|
||||
B32 consoleless;
|
||||
OS_Handle stdout_file;
|
||||
OS_Handle stderr_file;
|
||||
OS_Handle stdin_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))
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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" }
|
||||
|
||||
@@ -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));}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user