diff --git a/src/base/base_entry_point.c b/src/base/base_entry_point.c index 2d7bfb20..1a24e3e0 100644 --- a/src/base/base_entry_point.c +++ b/src/base/base_entry_point.c @@ -76,10 +76,10 @@ main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **argum fnt_init(); #endif #if defined(DBG_ENGINE_CORE_H) && !defined(D_INIT_MANUAL) - d_init(&cmdline); + d_init(); #endif #if defined(DBG_FRONTEND_CORE_H) && !defined(DF_INIT_MANUAL) - df_init(); + df_init(&cmdline); #endif //- rjf: call into entry point diff --git a/src/dbg_engine/dbg_engine.mdesk b/src/dbg_engine/dbg_engine.mdesk index feb62022..27d986db 100644 --- a/src/dbg_engine/dbg_engine.mdesk +++ b/src/dbg_engine/dbg_engine.mdesk @@ -13,6 +13,17 @@ D_CfgSrcTable: {"transient" Transient Null Null Null } } +@enum D_CfgSrc: +{ + @expand(D_CfgSrcTable a) `$(a.name)`, + COUNT, +} + +@data(String8) d_cfg_src_string_table: +{ + @expand(D_CfgSrcTable a) `str8_lit_comp("$(a.string)")`, +} + //////////////////////////////// //~ rjf: Entity Kind Tables @@ -85,6 +96,37 @@ D_EntityKindTable: {ConversionFail conversion_fail conversion_fails 0 0 0 1 0 0 0 0 0 0 0 "Label" Null "Conversion Failure" } } +@enum D_EntityKind: +{ + @expand(D_EntityKindTable a) `$(a.name)`, + COUNT, +} + +@data(String8) d_entity_kind_display_string_table: +{ + @expand(D_EntityKindTable a) `str8_lit_comp("$(a.display_string)")`, +} + +@data(String8) d_entity_kind_name_lower_table: +{ + @expand(D_EntityKindTable a) `str8_lit_comp("$(a.name_lower)")`, +} + +@data(String8) d_entity_kind_name_lower_plural_table: +{ + @expand(D_EntityKindTable a) `str8_lit_comp("$(a.name_lower_plural)")`, +} + +@data(String8) d_entity_kind_name_label_table: +{ + @expand(D_EntityKindTable a) `str8_lit_comp("$(a.name_label)")`, +} + +@data(D_EntityKindFlags) d_entity_kind_flags_table: +{ + @expand(D_EntityKindTable a) `($(a.op_delete)*D_EntityKindFlag_CanDelete) | ($(a.op_freeze)*D_EntityKindFlag_CanFreeze) | ($(a.op_edit)*D_EntityKindFlag_CanEdit) | ($(a.op_rename)*D_EntityKindFlag_CanRename) | ($(a.op_enable)*D_EntityKindFlag_CanEnable) | ($(a.op_cond)*D_EntityKindFlag_CanCondition) | ($(a.op_dup)*D_EntityKindFlag_CanDuplicate) | ($(a.name_is_code)*D_EntityKindFlag_NameIsCode) | ($(a.name_is_path)*D_EntityKindFlag_NameIsPath) | ($(a.user_lifetime)*D_EntityKindFlag_UserDefinedLifetime) | ($(a.is_serialized)*D_EntityKindFlag_IsSerializedToConfig)`, +} + //////////////////////////////// //~ rjf: Registers Type Table @@ -187,22 +229,10 @@ D_CmdParamSlotTable: @table(name ui_vis ipc_docs_vis q_slot q_ent_kind q_allow_files q_allow_folders q_keep_oi q_select_oi q_is_code q_required canonical_icon string display_name desc search_tags ) // / | | | \___ ______________________________________________/ | | | | | // / | | | \ / | | | | | -D_CoreCmdTable: // | | | | | | | | | | +D_CmdTable: // | | | | | | | | | | { {Null 0 0 Null Nil 0 0 0 0 0 0 Null "" "" "" "" } - //- rjf: exiting - {Exit 1 1 Null Nil 0 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" } - - //- rjf: command runner - {RunCommand 1 1 CmdSpec Nil 0 0 0 0 0 1 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" } - - //- rjf: notifications - {Error 0 1 Null Nil 0 0 0 0 0 0 Null "error" "Error" "Notifies of an error." "" } - - //- rjf: os event passthrough - {OSEvent 0 0 Null Nil 0 0 0 0 0 0 Null "os_event" "OS Event" "" "" } - //- rjf: low-level target control operations {LaunchAndRun 1 1 EntityList Target 0 0 0 0 0 1 Play "launch_and_run" "Launch and Run" "Starts debugging a new instance of a target, then runs." "launch,start,run,target" } {LaunchAndInit 1 1 EntityList Target 0 0 0 0 0 1 PlayStepForward "launch_and_init" "Launch and Initialize" "Starts debugging a new instance of a target, then stops at the program's entry point." "launch,start,entry,point" } @@ -242,261 +272,41 @@ D_CoreCmdTable: // | | | | {ThawMachine 0 1 Entity Machine 0 0 0 0 0 1 Unlocked "thaw_machine" "Thaw Machine" "Thaws the passed machine." "" } {FreezeLocalMachine 1 1 Null Nil 0 0 0 0 0 0 Machine "freeze_local_machine" "Freeze Local Machine" "Freezes the local machine." "" } {ThawLocalMachine 1 1 Null Nil 0 0 0 0 0 0 Machine "thaw_local_machine" "Thaw Local Machine" "Thaws the local machine." "" } - - //- rjf: font sizes - {IncUIFontScale 1 1 Null Nil 0 0 0 0 0 0 Null "inc_ui_font_scale" "Increase UI Font Scale" "Increases the font size used for UI." "" } - {DecUIFontScale 1 1 Null Nil 0 0 0 0 0 0 Null "dec_ui_font_scale" "Decrease UI Font Scale" "Decreases the font size used for UI." "" } - {IncCodeFontScale 1 1 Null Nil 0 0 0 0 0 0 Null "inc_code_font_scale" "Increase Code Font Scale" "Increases the font size used for code." "" } - {DecCodeFontScale 1 1 Null Nil 0 0 0 0 0 0 Null "dec_code_font_scale" "Decrease Code Font Scale" "Decreases the font size used for code." "" } - - //- rjf: windows - {OpenWindow 1 1 Null Nil 0 0 0 0 0 0 Window "open_window" "Open New Window" "Opens a new window." "" } - {CloseWindow 1 1 Null Nil 0 0 0 0 0 0 Window "close_window" "Close Window" "Closes an opened window." "" } - {ToggleFullscreen 1 1 Null Nil 0 0 0 0 0 0 Window "toggle_fullscreen" "Toggle Fullscreen" "Toggles fullscreen view on the active window." "" } - - //- rjf: confirmations - {ConfirmAccept 0 1 Null Nil 0 0 0 0 0 0 Null "confirm_accept" "Confirm Accept" "Accepts the active confirmation prompt." "" } - {ConfirmCancel 0 1 Null Nil 0 0 0 0 0 0 Null "confirm_cancel" "Confirm Cancel" "Cancels the active confirmation prompt." "" } - - //- rjf: panel splitting - {ResetToDefaultPanels 1 1 Null Nil 0 0 0 0 0 0 Window "reset_to_default_panels" "Reset To Default Panel Layout" "Resets the window to the default panel layout." "panel" } - {ResetToCompactPanels 1 1 Null Nil 0 0 0 0 0 0 Window "reset_to_compact_panels" "Reset To Compact Panel Layout" "Resets the window to the compact panel layout." "panel" } - {NewPanelLeft 1 1 Null Nil 0 0 0 0 0 0 XSplit "new_panel_left" "Split Panel Left" "Creates a new panel to the left of the active panel." "panel" } - {NewPanelUp 1 1 Null Nil 0 0 0 0 0 0 YSplit "new_panel_up" "Split Panel Up" "Creates a new panel at the top of the active panel." "panel" } - {NewPanelRight 1 1 Null Nil 0 0 0 0 0 0 XSplit "new_panel_right" "Split Panel Right" "Creates a new panel to the right of the active panel." "panel" } - {NewPanelDown 1 1 Null Nil 0 0 0 0 0 0 YSplit "new_panel_down" "Split Panel Down" "Creates a new panel at the bottom of the active panel." "panel" } - {SplitPanel 0 0 Null Nil 0 0 0 0 0 0 Null "split_panel" "Split Panel" "Creates a new panel in a given direction, and moves a tab to it, if specified." "" } - - //- rjf: panel rotation - {RotatePanelColumns 1 1 Null Nil 0 0 0 0 0 0 Null "rotate_panel_columns" "Rotate Panel Columns" "Rotates all panels at the closest column level of the panel hierarchy." "" } - - //- rjf: focused panel changing - {NextPanel 1 1 Null Nil 0 0 0 0 0 0 RightArrow "next_panel" "Focus Next Panel" "Cycles the active panel forward." "" } - {PrevPanel 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "prev_panel" "Focus Previous Panel" "Cycles the active panel backwards." "" } - {FocusPanel 0 0 Null Nil 0 0 0 0 0 0 Null "focus_panel" "Focus Panel" "Focuses a new panel." "" } - {FocusPanelRight 1 1 Null Nil 0 0 0 0 0 0 RightArrow "focus_panel_right" "Focus Panel Right" "Focuses a panel rightward of the currently focused panel." "" } - {FocusPanelLeft 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "focus_panel_left" "Focus Panel Left" "Focuses a panel leftward of the currently focused panel." "" } - {FocusPanelUp 1 1 Null Nil 0 0 0 0 0 0 UpArrow "focus_panel_up" "Focus Panel Up" "Focuses a panel upward of the currently focused panel." "" } - {FocusPanelDown 1 1 Null Nil 0 0 0 0 0 0 DownArrow "focus_panel_down" "Focus Panel Down" "Focuses a panel downward of the currently focused panel." "" } - - //- rjf: undo/redo - {Undo 1 1 Null Nil 0 0 0 0 0 0 Undo "undo" "Undo" "Undoes the previous action." "" } - {Redo 1 1 Null Nil 0 0 0 0 0 0 Redo "redo" "Redo" "Redoes the first previously undone action." "" } - - //- rjf: focus history - {GoBack 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "go_back" "Go Back" "Returns to the previously selected panel and tab in recorded history." "" } - {GoForward 1 1 Null Nil 0 0 0 0 0 0 RightArrow "go_forward" "Go Forward" "Returns to the next selected panel and tab in recorded history." "" } - - //- rjf: panel removal - {ClosePanel 1 1 Null Nil 0 0 0 0 0 0 ClosePanel "close_panel" "Close Panel" "Closes the currently active panel." "" } - - //- rjf: panel tab - {NextTab 1 1 Null Nil 0 0 0 0 0 0 RightArrow "next_tab" "Focus Next Tab" "Focuses the next tab on the active panel." "" } - {PrevTab 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "prev_tab" "Focus Previous Tab" "Focuses the previous tab on the active panel." "" } - {MoveTabRight 1 1 Null Nil 0 0 0 0 0 0 RightArrow "move_tab_right" "Move Tab Right" "Moves the selected tab right one slot." "" } - {MoveTabLeft 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" } - {OpenTab 0 0 Null Nil 0 0 0 0 0 0 Null "open_tab" "Open Tab" "Opens a new tab with the parameterized view specification." "" } - {CloseTab 1 1 Null Nil 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" } - {MoveTab 0 0 Null Nil 0 0 0 0 0 0 Null "move_tab" "Move Tab" "Moves a tab to a new panel." "" } - {TabBarTop 1 1 Null Nil 0 0 0 0 0 0 UpArrow "tab_bar_top" "Anchor Tab Bar To Top" "Anchors a panel's tab bar to the top of the panel." "" } - {TabBarBottom 1 1 Null Nil 0 0 0 0 0 0 DownArrow "tab_bar_bottom" "Anchor Tab Bar To Bottom" "Anchors a panel's tab bar to the bottom of the panel." "" } - - //- rjf: files - {SetCurrentPath 0 1 Null Nil 0 0 0 0 0 0 FileOutline "set_current_path" "Set Current Path" "Sets the debugger's current path, which is used as a starting point when browsing for files." "" } - {Open 1 1 FilePath Nil 1 0 0 0 0 1 FileOutline "open" "Open" "Opens a file." "code,source,file" } - {Switch 1 1 Entity File 0 0 0 0 0 1 FileOutline "switch" "Switch" "Switches to a loaded file." "code,source,file" } - {SwitchToPartnerFile 1 1 Null Nil 0 0 0 0 0 0 FileOutline "switch_to_partner_file" "Switch To Partner File" "Switches to the focused file's partner; or from header to implementation or vice versa." "code,source,file" } - - //- rjf: source <-> disasm - {GoToDisassembly 1 1 Null Nil 0 0 0 0 0 0 Glasses "go_to_disassembly" "Go To Disassembly" "Goes to the disassembly, if any, for a given source code line." "code,source,disassembly,disasm" } - {GoToSource 1 1 Null Nil 0 0 0 0 0 0 FileOutline "go_to_source" "Go To Source" "Goes to the source code, if any, for a given disassembly line." "code,source,disassembly,disasm" } - - //- rjf: override file links - {SetFileOverrideLinkSrc 0 0 Null Nil 0 0 0 0 0 0 Null "set_file_override_link_src" "Set File Override Link Source" "Sets the source path for an override file link." "" } - {SetFileOverrideLinkDst 0 0 Null Nil 0 0 0 0 0 0 Null "set_file_override_link_dst" "Set File Override Link Destination" "Sets the destination path for an override file link." "" } - {SetFileReplacementPath 0 0 Null Nil 0 0 0 0 0 0 Null "set_file_replacement_path" "Set File Replacement Path" "Sets the path which should be used as the replacement for the passed file." "" } - - //- rjf: auto view rules - {SetAutoViewRuleType 0 0 Null Nil 0 0 0 0 0 0 Null "set_auto_view_rule_type" "Set Auto View Rule Type" "Sets the type for an auto view rule." "" } - {SetAutoViewRuleViewRule 0 0 Null Nil 0 0 0 0 0 0 Null "set_auto_view_rule_view_rule""Set Auto View Rule View Rule" "Sets the view rule string for an auto view rule." "" } - - //- rjf: setting config paths - {OpenUser 1 1 FilePath Nil 1 0 0 0 0 1 Person "open_user" "Open User" "Opens a user file path, immediately loading it, and begins autosaving to it." "load,user,project,layout" } - {OpenProject 1 1 FilePath Nil 1 0 0 0 0 1 Briefcase "open_project" "Open Project" "Opens a project file path, immediately loading it, and begins autosaving to it." "project,project,session" } - {OpenRecentProject 1 1 Entity RecentProject 0 0 0 0 0 1 Briefcase "open_recent_project" "Open Recent Project" "Opens a recently used project file." "project,project,session" } - - //- rjf: loading/applying stateful config changes - {ApplyUserData 0 0 Null Nil 0 0 0 0 0 0 Null "apply_user_data" "Apply User Data" "Applies user data from the active user file." "" } - {ApplyProjectData 0 0 Null Nil 0 0 0 0 0 0 Null "apply_project_data" "Apply Project Data" "Applies project data from the active project file." "" } - - //- rjf: writing config changes - {WriteUserData 0 1 Null Nil 0 0 0 0 0 0 Null "write_user_data" "Write User Data" "Writes user data to the active user file." "" } - {WriteProjectData 0 1 Null Nil 0 0 0 0 0 0 Null "write_project_data" "Write Project Data" "Writes project data to the active project file." "" } - - //- rjf: meta controls - {Edit 1 1 Null Nil 0 0 0 0 0 0 Pencil "edit" "Edit" "Edits the current selection." "" } - {Accept 1 1 Null Nil 0 0 0 0 0 0 CheckFilled "accept" "Accept" "Accepts current changes, or answers prompts in the affirmative." "" } - {Cancel 1 1 Null Nil 0 0 0 0 0 0 X "cancel" "Cancel" "Rejects current changes, exits temporary menus, or answers prompts in the negative." "" } - - //- rjf: directional movement & text controls - {MoveLeft 1 1 Null Nil 0 0 0 0 0 0 Null "move_left" "Move Left" "Moves the cursor or selection left." "" } - {MoveRight 1 1 Null Nil 0 0 0 0 0 0 Null "move_right" "Move Right" "Moves the cursor or selection right." "" } - {MoveUp 1 1 Null Nil 0 0 0 0 0 0 Null "move_up" "Move Up" "Moves the cursor or selection up." "" } - {MoveDown 1 1 Null Nil 0 0 0 0 0 0 Null "move_down" "Move Down" "Moves the cursor or selection down." "" } - {MoveLeftSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_left_select" "Move Left Select" "Moves the cursor or selection left, while selecting." "" } - {MoveRightSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_right_select" "Move Right Select" "Moves the cursor or selection right, while selecting." "" } - {MoveUpSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_select" "Move Up Select" "Moves the cursor or selection up, while selecting." "" } - {MoveDownSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_select" "Move Down Select" "Moves the cursor or selection down, while selecting." "" } - {MoveLeftChunk 1 1 Null Nil 0 0 0 0 0 0 Null "move_left_chunk" "Move Left Select" "Moves the cursor or selection left one chunk." "" } - {MoveRightChunk 1 1 Null Nil 0 0 0 0 0 0 Null "move_right_chunk" "Move Right Select" "Moves the cursor or selection right one chunk." "" } - {MoveUpChunk 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_chunk" "Move Up Chunk" "Moves the cursor or selection up one chunk." "" } - {MoveDownChunk 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_chunk" "Move Down Chunk" "Moves the cursor or selection down one chunk." "" } - {MoveUpPage 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_page" "Move Up Page" "Moves the cursor or selection up one page." "" } - {MoveDownPage 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_page" "Move Down Page" "Moves the cursor or selection down one page." "" } - {MoveUpWhole 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_whole" "Move Up Whole" "Moves the cursor or selection to the beginning of the relevant content." "" } - {MoveDownWhole 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_whole" "Move Down Whole" "Moves the cursor or selection to the end of the relevant content." "" } - {MoveLeftChunkSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_left_chunk_select" "Move Left Chunk Select" "Moves the cursor or selection left one chunk." "" } - {MoveRightChunkSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_right_chunk_select" "Move Right Chunk Select" "Moves the cursor or selection right one chunk." "" } - {MoveUpChunkSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_chunk_select" "Move Up Chunk Select" "Moves the cursor or selection up one chunk." "" } - {MoveDownChunkSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_chunk_select" "Move Down Chunk Select" "Moves the cursor or selection down one chunk." "" } - {MoveUpPageSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_page_select" "Move Up Page Select" "Moves the cursor or selection up one page, while selecting." "" } - {MoveDownPageSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_page_select" "Move Down Page Select" "Moves the cursor or selection down one page, while selecting." "" } - {MoveUpWholeSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_whole_select" "Move Up Whole Select" "Moves the cursor or selection to the beginning of the relevant content, while selecting." "" } - {MoveDownWholeSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_whole_select" "Move Down Whole Select" "Moves the cursor or selection to the end of the relevant content, while selecting." "" } - {MoveUpReorder 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_reorder" "Move Up Reorder" "Moves the cursor or selection up, while swapping the currently selected element with that upward." "" } - {MoveDownReorder 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_reorder" "Move Down Reorder" "Moves the cursor or selection down, while swapping the currently selected element with that downward." "" } - {MoveHome 1 1 Null Nil 0 0 0 0 0 0 Null "move_home" "Move Home" "Moves the cursor to the beginning of the line." "" } - {MoveEnd 1 1 Null Nil 0 0 0 0 0 0 Null "move_end" "Move End" "Moves the cursor to the end of the line." "" } - {MoveHomeSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_home_select" "Move Home Select" "Moves the cursor to the beginning of the line, while selecting." "" } - {MoveEndSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_end_select" "Move End Select" "Moves the cursor to the end of the line, while selecting." "" } - {SelectAll 1 1 Null Nil 0 0 0 0 0 0 Null "select_all" "Select All" "Selects everything possible." "" } - {DeleteSingle 1 1 Null Nil 0 0 0 0 0 0 Null "delete_single" "Delete Single" "Deletes a single element to the right of the cursor, or the active selection." "" } - {DeleteChunk 1 1 Null Nil 0 0 0 0 0 0 Null "delete_chunk" "Delete Chunk" "Deletes a chunk to the right of the cursor, or the active selection." "" } - {BackspaceSingle 1 1 Null Nil 0 0 0 0 0 0 Null "backspace_single" "Backspace Single" "Deletes a single element to the left of the cursor, or the active selection." "" } - {BackspaceChunk 1 1 Null Nil 0 0 0 0 0 0 Null "backspace_chunk" "Backspace Chunk" "Deletes a chunk to the left of the cursor, or the active selection." "" } - {Copy 1 1 Null Nil 0 0 0 0 0 0 Clipboard "copy" "Copy" "Copies the active selection to the clipboard." "" } - {Cut 1 1 Null Nil 0 0 0 0 0 0 Clipboard "cut" "Cut" "Copies the active selection to the clipboard, then deletes it." "" } - {Paste 1 1 Null Nil 0 0 0 0 0 0 Clipboard "paste" "Paste" "Pastes the current contents of the clipboard." "" } - {InsertText 0 1 Null Nil 0 0 0 0 0 0 Null "insert_text" "Insert Text" "Inserts the text that was used to cause this command." "" } - - //- rjf: code navigation - {GoToLine 1 1 TextPoint Nil 0 0 0 0 1 1 Null "goto_line" "Go To Line" "Jumps to a line number in the current code file." "" } - {GoToAddress 1 1 VirtualAddr Nil 0 0 0 0 1 1 Null "goto_address" "Go To Address" "Jumps to an address in the current memory or disassembly view." "" } - {CenterCursor 1 1 Null Nil 0 0 0 0 0 0 Null "center_cursor" "Center Cursor" "Snaps the current code view to center the cursor." "" } - {ContainCursor 1 1 Null Nil 0 0 0 0 0 0 Null "contain_cursor" "Contain Cursor" "Snaps the current code view to contain the cursor." "" } - {FindTextForward 1 1 String Nil 0 0 1 1 1 1 Find "find_text_forward" "Find Text (Forward)" "Searches the current code file forward (from the cursor) for a string." "" } - {FindTextBackward 1 1 String Nil 0 0 1 1 1 1 Find "find_text_backward" "Find Text (Backwards)" "Searches the current code file backwards (from the cursor) for a string." "" } - {FindNext 1 1 Null Nil 0 0 1 0 0 0 Find "find_next" "Find Next" "Searches the current code file forward (from the cursor) for the last searched string." "" } - {FindPrev 1 1 Null Nil 0 0 1 0 0 0 Find "find_prev" "Find Previous" "Searches the current code file backwards (from the cursor) for the last searched string." "" } - - //- rjf: thread finding - {FindThread 1 1 Entity Thread 0 0 0 0 0 1 Find "find_thread" "Find Thread" "Jumps to the passed thread in either source code, disassembly, or both if they're already open." "" } - {FindSelectedThread 1 1 Null Nil 0 0 0 0 0 0 Find "find_selected_thread" "Find Selected Thread" "Jumps to the selected thread in either source code, disassembly, or both if they're already open." "" } - - //- rjf: name finding - {GoToName 1 1 String Nil 0 0 0 0 1 1 Null "goto_name" "Go To Name" "Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible." "" } - {GoToNameAtCursor 1 1 Null Nil 0 0 0 0 0 0 Null "goto_name_at_cursor" "Go To Name At Cursor" "Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible." "" } - - //- rjf: watch expressions - {ToggleWatchExpression 1 1 Null Nil 0 0 0 0 0 0 Binoculars "toggle_watch_expr" "Toggle Watch Expression" "Adds or removes an expression to an opened watch view." "" } - {ToggleWatchExpressionAtCursor 1 1 Null Nil 0 0 0 0 0 0 Binoculars "toggle_watch_expr_at_cursor" "Toggle Watch Expression At Cursor" "Adds or removes the expression that the cursor or selection is currently over to an opened watch view." "" } - {ToggleWatchExpressionAtMouse 1 1 Null Nil 0 0 0 0 0 0 Binoculars "toggle_watch_expr_at_mouse" "Toggle Watch Expression At Mouse" "Adds or removes the expression that the mouse is currently over to an opened watch view." "" } - - //- rjf: memory view parameterization - {SetColumns 1 1 Index Nil 0 0 0 0 1 1 Thumbnails "set_columns" "Set Columns" "Sets the number of columns for a memory view." "" } - - //- rjf: disassembly view parameterization - {ToggleAddressVisibility 1 1 Null Nil 0 0 0 0 0 0 Thumbnails "toggle_address_visibility" "Toggle Address Visibility" "Toggles the visibility of addresses in a disassembly view." "" } - {ToggleCodeBytesVisibility 1 1 Null Nil 0 0 0 0 0 0 Thumbnails "toggle_code_bytes_visibility""Toggle Code Bytes Visibility" "Toggles the visibility of machine code bytes in a disassembly view." "" } - - //- rjf: general entity operations - {EnableEntity 0 0 Null Nil 0 0 0 0 0 0 Null "enable_entity" "Enable Entity" "Enables an entity." "" } - {DisableEntity 0 0 Null Nil 0 0 0 0 0 0 Null "disable_entity" "Disable Entity" "Disables an entity." "" } {FreezeEntity 0 0 Null Nil 0 0 0 0 0 0 Null "freeze_entity" "Freeze Entity" "Freezes an entity." "" } {ThawEntity 0 0 Null Nil 0 0 0 0 0 0 Null "thaw_entity" "Thaw Entity" "Thaws an entity." "" } - {RemoveEntity 0 0 Null Nil 0 0 0 0 0 0 Null "remove_entity" "Remove Entity" "Removes an entity." "" } - {NameEntity 0 0 Null Nil 0 0 0 0 0 0 Null "name_entity" "Name Entity" "Equips an entity with a name." "" } - {EditEntity 0 0 Null Nil 0 0 0 0 0 0 Null "edit_entity" "Edit Entity" "Opens the editor for an entity." "" } - {DuplicateEntity 0 0 Null Nil 0 0 0 0 0 0 Null "duplicate_entity" "Duplicate Entity" "Duplicates an entity." "" } - {RelocateEntity 0 0 Null Nil 0 0 0 0 0 0 Null "relocate_entity" "Relocate Entity" "Relocates an entity." "" } - - //- rjf: breakpoints - {AddBreakpoint 0 1 Null Nil 0 0 0 0 0 0 CircleFilled "add_breakpoint" "Add Breakpoint" "Places a breakpoint at a given location (file path and line number, address, or symbol name)." "" } - {AddAddressBreakpoint 1 0 VirtualAddr Nil 0 0 0 0 1 1 CircleFilled "add_address_breakpoint" "Add Address Breakpoint" "Places a breakpoint on the specified address." "" } - {AddFunctionBreakpoint 1 0 String Nil 0 0 0 0 1 1 CircleFilled "add_function_breakpoint" "Add Function Breakpoint" "Places a breakpoint on the first address(es) of the specified function." "" } - {ToggleBreakpoint 0 1 Null Nil 0 0 0 0 0 0 CircleFilled "toggle_breakpoint" "Toggle Breakpoint" "Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)." "" } - {RemoveBreakpoint 1 1 Entity Breakpoint 0 0 0 0 0 1 Trash "remove_breakpoint" "Remove Breakpoint" "Removes an existing breakpoint." "" } - {EnableBreakpoint 1 1 Entity Breakpoint 0 0 0 0 0 1 CheckFilled "enable_breakpoint" "Enable Breakpoint" "Enables a breakpoint." "" } - {DisableBreakpoint 1 1 Entity Breakpoint 0 0 0 0 0 1 CheckHollow "disable_breakpoint" "Disable Breakpoint" "Disables a breakpoint." "" } - - //- rjf: watch pins - {AddWatchPin 0 1 Null Nil 0 0 0 0 0 0 Binoculars "add_watch_pin" "Add Watch Pin" "Places a watch pin at a given location (file path and line number or address)." "" } - {ToggleWatchPin 0 0 Null Nil 0 0 0 0 0 0 Binoculars "toggle_watch_pin" "Toggle Watch Pin" "Places or removes a watch pin at a given location (file path and line number or address)." "" } - - //- rjf: cursor operations - {ToggleBreakpointAtCursor 1 1 Null Nil 0 0 0 0 0 0 CircleFilled "toggle_breakpoint_cursor" "Toggle Breakpoint At Cursor" "Places or removes a breakpoint on the line on which the active cursor sits." "" } - {ToggleWatchPinAtCursor 1 1 String Nil 0 0 0 0 1 1 Binoculars "toggle_watch_pin_at_cursor" "Toggle Watch Pin At Cursor" "Places or removes a watch pin at the cursor on the currently active file." "" } - - //- rjf: targets - {AddTarget 1 1 FilePath Nil 1 0 0 0 0 1 Target "add_target" "Add Target" "Adds a new target." "application,executable,debug" } - {RemoveTarget 1 1 Entity Target 0 0 0 0 0 1 Trash "remove_target" "Remove Target" "Removes an existing target." "delete,remove,target" } - {EditTarget 1 1 Entity Target 0 0 0 0 0 1 Pencil "edit_target" "Edit Target" "Edits an existing target." "" } - {SelectTarget 1 1 Entity Target 0 0 0 0 0 1 Target "select_target" "Select Target" "Selects a target." "" } - {EnableTarget 1 1 Entity Target 0 0 0 0 0 1 CheckFilled "enable_target" "Enable Target" "Enables a target, in addition to all targets currently enabled." "" } - {DisableTarget 1 1 Entity Target 0 0 0 0 0 1 CheckHollow "disable_target" "Disable Target" "Disables a target." "" } //- rjf: attaching {Attach 1 1 ID Nil 0 0 0 0 0 1 Null "attach" "Attach" "Attaches to a process that is already running on the local machine." "" } - {RegisterAsJITDebugger 1 1 Null Nil 0 0 0 0 0 0 Null "register_as_jit_debugger" "Register As Just-In-Time (JIT) Debugger" "Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system." "" } - - //- rjf: catchall general entity activation paths (drag/drop, clicking) - {EntityRefFastPath 0 0 Null Nil 0 0 0 0 0 0 Null "entity_ref_fast_path" "Entity Reference Fast Path" "Activates the default behavior when clicking an entity reference." "" } - {SpawnEntityView 0 0 Null Nil 0 0 0 0 0 0 Null "spawn_entity_view" "Spawn Entity View" "Spawns a new view, given an entity and other parameterizations." "" } - {FindCodeLocation 0 1 FilePath Nil 0 0 0 0 0 1 FileOutline "find_code_location" "Find Code Location" "Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary." "" } - - //- rjf: general-purpose view filtering - {Filter 1 1 Null Nil 0 0 0 0 0 0 Find "filter" "Filter" "Begins filtering the active view." "sort,search,filter,find" } - {ApplyFilter 1 1 Null Nil 0 0 0 0 0 0 Find "apply_filter" "Apply Filter" "Applies the typed filter to the active view." "sort,search,filter,find,apply" } - {ClearFilter 1 1 Null Nil 0 0 0 0 0 0 Find "clear_filter" "Clear Filter" "Clears the filter applied to the active view." "sort,search,filter,find,clear" } - - //- rjf: view drivers - {GettingStarted 1 1 Null Nil 0 0 0 0 0 0 QuestionMark "getting_started" "Getting Started" "Opens the menu for information on getting started." "tutorial,help" } - {Commands 0 0 Null Nil 0 0 0 0 0 0 List "commands" "Commands" "Opens the list of all commands." "" } - {Target 0 0 Null Nil 0 0 0 0 0 0 Target "target" "Target" "Opens the editor for a target." "" } - {Targets 1 1 Null Nil 0 0 0 0 0 0 Target "targets" "Targets" "Opens the list of all targets." "" } - {FilePathMap 1 1 Null Nil 0 0 0 0 0 0 FileOutline "file_path_map" "File Path Map" "Opens the file path mapping editor." "" } - {AutoViewRules 1 1 Null Nil 0 0 0 0 0 0 Binoculars "auto_view_rules" "Auto View Rules" "Opens the auto view rule editor." "" } - {Breakpoints 1 1 Null Nil 0 0 0 0 0 0 CircleFilled "breakpoints" "Breakpoints" "Opens the breakpoints view." "" } - {WatchPins 1 1 Null Nil 0 0 0 0 0 0 Pin "watch_pins" "Watch Pins" "Opens the watch pins view." "" } - {Scheduler 1 1 Null Nil 0 0 0 0 0 0 Scheduler "scheduler" "Scheduler" "Opens the scheduler view, for process and thread controls." "threads,processes,targets" } - {CallStack 1 1 Null Nil 0 0 0 0 0 0 Thread "call_stack" "Call Stack" "Opens the call stack view." "callstack,thread,unwind" } - {Modules 1 1 Null Nil 0 0 0 0 0 0 Module "modules" "Modules" "Opens the modules view." "" } - {Watch 1 1 Null Nil 0 0 0 0 0 0 Binoculars "watch" "Watch" "Opens a watch view." "" } - {Locals 1 1 Null Nil 0 0 0 0 0 0 Binoculars "locals" "Locals" "Opens a locals view." "" } - {Registers 1 1 Null Nil 0 0 0 0 0 0 Binoculars "registers" "Registers" "Opens a registers view." "" } - {Globals 1 1 Null Nil 0 0 0 0 0 0 Binoculars "globals" "Globals" "Opens a globals view." "" } - {ThreadLocals 1 1 Null Nil 0 0 0 0 0 0 Binoculars "thread_locals" "Thread Locals" "Opens a thread locals view." "" } - {Types 1 1 Null Nil 0 0 0 0 0 0 Binoculars "types" "Types" "Opens a types view." "" } - {Procedures 1 1 Null Nil 0 0 0 0 0 0 Binoculars "procedures" "Procedures" "Opens a procedures view." "" } - {PendingFile 0 0 Null Nil 0 0 0 0 0 0 FileOutline "pending_file" "Pending File" "Opens a view which asynchronously analyzes the file path parameter, then picks an appropriate viewer for it." "" } - {Disassembly 1 1 Null Nil 0 0 0 0 0 0 Glasses "disassembly" "Disassembly" "Opens the disassembly view." "disasm" } - {Output 1 1 Null Nil 0 0 0 0 0 0 List "output" "Output" "Opens an output view." "" } - {Memory 1 1 Null Nil 0 0 0 0 0 0 Grid "memory" "Memory" "Opens a memory view." "" } - {ExceptionFilters 1 1 Null Nil 0 0 0 0 0 0 Gear "exception_filters" "Exception Filters" "Opens the exception filters view." "exceptions,filters" } - {Settings 1 1 Null Nil 0 0 0 0 0 0 Gear "settings" "Settings" "Opens the settings view." "theme,color,scheme,options" } - - //- rjf: queries - {PickFile 0 0 FilePath Nil 1 0 0 0 0 1 FileOutline "pick_file" "Pick File" "Opens the file browser to pick a file." "" } - {PickFolder 0 0 FilePath Nil 0 1 0 0 0 1 FolderOpenFilled "pick_folder" "Pick Folder" "Opens the file browser to pick a folder." "" } - {PickFileOrFolder 0 0 FilePath Nil 1 1 0 0 0 1 FileOutline "pick_file_or_folder" "Pick File/Folder" "Opens the file browser to pick a file or folder." "" } - - //- rjf: query completion - {CompleteQuery 0 0 Null Nil 0 0 0 0 0 0 Null "complete_query" "Complete Query" "Completes a query." "" } - {CancelQuery 0 0 Null Nil 0 0 0 0 0 0 Null "cancel_query" "Cancel Query" "Cancels a query." "" } - - //- rjf: developer commands - {ToggleDevMenu 1 1 Null Nil 0 0 0 0 0 0 Null "toggle_dev_menu" "Toggle Developer Menu" "Opens and closes the developer menu." "" } - {LogMarker 1 1 Null Nil 0 0 0 0 0 0 Null "log_marker" "Log Marker" "Logs a marker in the application log, to denote specific points in time within the log." "" } +} + +@enum D_CmdKind: +{ + @expand(D_CmdTable, a) `$(a.name)`, + COUNT, +} + +@enum D_CmdParamSlot: +{ + Null, + @expand(D_CmdParamSlotTable a) `$(a.name)`, + COUNT, +} + +@struct D_CmdParams: +{ + @expand(D_CmdParamSlotTable a) `$(a.c_type) $(a.name_lower)`; +} + +@data(Rng1U64) d_cmd_param_slot_range_table: +{ + `{0}`, + @expand(D_CmdParamSlotTable a) `{OffsetOf(D_CmdParams, $(a.name_lower)), OffsetOf(D_CmdParams, $(a.name_lower)) + sizeof($(a.c_type))}`, +} + +@data(D_CmdSpecInfo) @c_file d_core_cmd_kind_spec_info_table: +{ + @expand(D_CmdTable, a) + ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), (D_CmdSpecFlag_ListInUI*$(a.ui_vis))|(D_CmdSpecFlag_ListInIPCDocs*$(a.ipc_docs_vis)), {D_CmdParamSlot_$(a.q_slot), D_EntityKind_$(a.q_ent_kind), (D_CmdQueryFlag_AllowFiles*$(a.q_allow_files))|(D_CmdQueryFlag_AllowFolders*$(a.q_allow_folders))|(D_CmdQueryFlag_CodeInput*$(a.q_is_code))|(D_CmdQueryFlag_KeepOldInput*$(a.q_keep_oi))|(D_CmdQueryFlag_SelectOldInput*$(a.q_select_oi))|(D_CmdQueryFlag_Required*$(a.q_required))}}```; } //////////////////////////////// @@ -612,6 +422,24 @@ D_ViewRuleTable: {- Geo3D geo3d "geo3d" - x - x "Geometry (3D)" x "x:{'count':expr, 'vtx':expr, 'vtx_size':expr}" "Displays as geometry, interpreting the data as index or vertex data." } } +@enum D_ViewRuleKind: +{ + @expand(D_ViewRuleTable a) `$(a.name)`, + COUNT, +} + +@gen +{ + @expand(D_ViewRuleTable a) `$(a.xp == "x" -> "D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(" .. a.name_lower .. ");")`; + @expand(D_ViewRuleTable a) `$(a.vb == "x" -> "D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(" .. a.name_lower .. ");")`; +} + +@data(D_ViewRuleSpecInfo) @c_file d_core_view_rule_spec_info_table: +{ + @expand(D_ViewRuleTable a) + ```{str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.display_name)"), str8_lit_comp("$(a.schema)"), str8_lit_comp("$(a.description)"), (D_ViewRuleSpecInfoFlag_Inherited*$(a.ih == "x"))|(D_ViewRuleSpecInfoFlag_Expandable*$(a.ex == "x"))|(D_ViewRuleSpecInfoFlag_ExprResolution*$(a.xp == "x"))|(D_ViewRuleSpecInfoFlag_VizBlockProd*$(a.vb == "x")), $(a.xp == "x" -> "D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME("..a.name_lower..")") $(a.xp != "x" -> 0), $(a.vb == "x" -> "D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME("..a.name_lower..")") $(a.vb != "x" -> 0), }```; +} + //////////////////////////////// //~ rjf: Developer Toggles @@ -630,130 +458,6 @@ DF_DevToggleTable: {updating_indicator} } -//////////////////////////////// -//~ rjf: Generators - -//- rjf: enums - -@enum D_CfgSrc: -{ - @expand(D_CfgSrcTable a) `$(a.name)`, - COUNT, -} - -@enum D_EntityKind: -{ - @expand(D_EntityKindTable a) `$(a.name)`, - COUNT, -} - -@enum D_CmdKind: -{ - @expand(D_CoreCmdTable, a) `$(a.name)`, - COUNT, -} - -@enum D_ViewRuleKind: -{ - @expand(D_ViewRuleTable a) `$(a.name)`, - COUNT, -} - -//- rjf: command params - -@enum D_CmdParamSlot: -{ - Null, - @expand(D_CmdParamSlotTable a) `$(a.name)`, - COUNT, -} - -@struct D_CmdParams: -{ - @expand(D_CmdParamSlotTable a) `$(a.c_type) $(a.name_lower)`; -} - -@data(Rng1U64) d_cmd_param_slot_range_table: -{ - `{0}`, - @expand(D_CmdParamSlotTable a) `{OffsetOf(D_CmdParams, $(a.name_lower)), OffsetOf(D_CmdParams, $(a.name_lower)) + sizeof($(a.c_type))}`, -} - -//- rjf: entity kind tables - -@data(String8) d_entity_kind_display_string_table: -{ - @expand(D_EntityKindTable a) `str8_lit_comp("$(a.display_string)")`, -} - -@data(String8) d_entity_kind_name_lower_table: -{ - @expand(D_EntityKindTable a) `str8_lit_comp("$(a.name_lower)")`, -} - -@data(String8) d_entity_kind_name_lower_plural_table: -{ - @expand(D_EntityKindTable a) `str8_lit_comp("$(a.name_lower_plural)")`, -} - -@data(String8) d_entity_kind_name_label_table: -{ - @expand(D_EntityKindTable a) `str8_lit_comp("$(a.name_label)")`, -} - -@data(D_EntityKindFlags) d_entity_kind_flags_table: -{ - @expand(D_EntityKindTable a) `($(a.op_delete)*D_EntityKindFlag_CanDelete) | ($(a.op_freeze)*D_EntityKindFlag_CanFreeze) | ($(a.op_edit)*D_EntityKindFlag_CanEdit) | ($(a.op_rename)*D_EntityKindFlag_CanRename) | ($(a.op_enable)*D_EntityKindFlag_CanEnable) | ($(a.op_cond)*D_EntityKindFlag_CanCondition) | ($(a.op_dup)*D_EntityKindFlag_CanDuplicate) | ($(a.name_is_code)*D_EntityKindFlag_NameIsCode) | ($(a.name_is_path)*D_EntityKindFlag_NameIsPath) | ($(a.user_lifetime)*D_EntityKindFlag_UserDefinedLifetime) | ($(a.is_serialized)*D_EntityKindFlag_IsSerializedToConfig)`, -} - -//- rjf: config source tables - -@data(String8) d_cfg_src_string_table: -{ - @expand(D_CfgSrcTable a) `str8_lit_comp("$(a.string)")`, -} - -@data(D_CmdKind) d_cfg_src_load_cmd_kind_table: -{ - @expand(D_CfgSrcTable a) `D_CmdKind_$(a.load_cmd)`, -} - -@data(D_CmdKind) d_cfg_src_write_cmd_kind_table: -{ - @expand(D_CfgSrcTable a) `D_CmdKind_$(a.write_cmd)`, -} - -@data(D_CmdKind) d_cfg_src_apply_cmd_kind_table: -{ - @expand(D_CfgSrcTable a) `D_CmdKind_$(a.apply_cmd)`; -} - -//- rjf: core view rule function prototypes - -@gen -{ - @expand(D_ViewRuleTable a) `$(a.xp == "x" -> "D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(" .. a.name_lower .. ");")`; - @expand(D_ViewRuleTable a) `$(a.vb == "x" -> "D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(" .. a.name_lower .. ");")`; -} - -//- rjf: core command kind tables - -@data(D_CmdSpecInfo) @c_file d_core_cmd_kind_spec_info_table: -{ - @expand(D_CoreCmdTable, a) - ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), (D_CmdSpecFlag_ListInUI*$(a.ui_vis))|(D_CmdSpecFlag_ListInIPCDocs*$(a.ipc_docs_vis)), {D_CmdParamSlot_$(a.q_slot), D_EntityKind_$(a.q_ent_kind), (D_CmdQueryFlag_AllowFiles*$(a.q_allow_files))|(D_CmdQueryFlag_AllowFolders*$(a.q_allow_folders))|(D_CmdQueryFlag_CodeInput*$(a.q_is_code))|(D_CmdQueryFlag_KeepOldInput*$(a.q_keep_oi))|(D_CmdQueryFlag_SelectOldInput*$(a.q_select_oi))|(D_CmdQueryFlag_Required*$(a.q_required))}}```; -} - -//- rjf: core view rule tables - -@data(D_ViewRuleSpecInfo) @c_file d_core_view_rule_spec_info_table: -{ - @expand(D_ViewRuleTable a) - ```{str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.display_name)"), str8_lit_comp("$(a.schema)"), str8_lit_comp("$(a.description)"), (D_ViewRuleSpecInfoFlag_Inherited*$(a.ih == "x"))|(D_ViewRuleSpecInfoFlag_Expandable*$(a.ex == "x"))|(D_ViewRuleSpecInfoFlag_ExprResolution*$(a.xp == "x"))|(D_ViewRuleSpecInfoFlag_VizBlockProd*$(a.vb == "x")), $(a.xp == "x" -> "D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME("..a.name_lower..")") $(a.xp != "x" -> 0), $(a.vb == "x" -> "D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME("..a.name_lower..")") $(a.vb != "x" -> 0), }```; -} - -//- rjf: developer toggles - @gen { @expand(DF_DevToggleTable a) `global B32 DEV_$(a.name) = 0;` diff --git a/src/dbg_engine/dbg_engine_core.c b/src/dbg_engine/dbg_engine_core.c index 89ea2f59..f850fd9f 100644 --- a/src/dbg_engine/dbg_engine_core.c +++ b/src/dbg_engine/dbg_engine_core.c @@ -5706,87 +5706,26 @@ d_query_cached_member_map_from_dbgi_key_voff(DI_Key *dbgi_key, U64 voff) internal void d_push_cmd(D_CmdSpec *spec, D_CmdParams *params) { - // rjf: log - if(params->os_event == 0 || params->os_event->kind != OS_EventKind_MouseMove) + d_cmd_list_push(d_state->cmds_arena, &d_state->cmds, params, spec); +} + +//- rjf: command iteration + +internal B32 +d_next_cmd(D_Cmd **cmd) +{ + D_CmdNode *start_node = d_state->cmds.first; + if(cmd[0] != 0) { - Temp scratch = scratch_begin(0, 0); - D_Entity *entity = d_entity_from_handle(params->entity); - log_infof("df_cmd:\n{\n", spec->info.string); - log_infof("spec: \"%S\"\n", spec->info.string); -#define HandleParamPrint(mem_name) if(!d_handle_match(d_handle_zero(), params->mem_name)) { log_infof("%s: [0x%I64x, 0x%I64x]\n", #mem_name, params->mem_name.u64[0], params->mem_name.u64[1]); } - HandleParamPrint(window); - HandleParamPrint(panel); - HandleParamPrint(dest_panel); - HandleParamPrint(prev_view); - HandleParamPrint(view); - if(!d_entity_is_nil(entity)) - { - String8 entity_name = d_display_string_from_entity(scratch.arena, entity); - log_infof("entity: \"%S\"\n", entity_name); - } - U64 idx = 0; - for(D_HandleNode *n = params->entity_list.first; n != 0; n = n->next, idx += 1) - { - D_Entity *entity = d_entity_from_handle(n->handle); - if(!d_entity_is_nil(entity)) - { - String8 entity_name = d_display_string_from_entity(scratch.arena, entity); - log_infof("entity_list[%I64u]: \"%S\"\n", idx, entity_name); - } - } - if(!d_cmd_spec_is_nil(params->cmd_spec)) - { - log_infof("cmd_spec: \"%S\"\n", params->cmd_spec->info.string); - } - if(params->string.size != 0) { log_infof("string: \"%S\"\n", params->string); } - if(params->file_path.size != 0) { log_infof("file_path: \"%S\"\n", params->file_path); } - if(params->text_point.line != 0) { log_infof("text_point: [line:%I64d, col:%I64d]\n", params->text_point.line, params->text_point.column); } - if(params->vaddr != 0) { log_infof("vaddr: 0x%I64x\n", params->vaddr); } - if(params->voff != 0) { log_infof("voff: 0x%I64x\n", params->voff); } - if(params->index != 0) { log_infof("index: 0x%I64x\n", params->index); } - if(params->unwind_index != 0) { log_infof("unwind_index: 0x%I64x\n", params->unwind_index); } - if(params->inline_depth != 0) { log_infof("inline_depth: 0x%I64x\n", params->inline_depth); } - if(params->id != 0) { log_infof("id: 0x%I64x\n", params->id); } - if(params->os_event != 0) - { - String8 kind_string = str8_lit(""); - switch(params->os_event->kind) - { - default:{}break; - case OS_EventKind_Press: {kind_string = str8_lit("press");}break; - case OS_EventKind_Release: {kind_string = str8_lit("release");}break; - case OS_EventKind_MouseMove: {kind_string = str8_lit("mousemove");}break; - case OS_EventKind_Text: {kind_string = str8_lit("text");}break; - case OS_EventKind_Scroll: {kind_string = str8_lit("scroll");}break; - case OS_EventKind_WindowLoseFocus:{kind_string = str8_lit("losefocus");}break; - case OS_EventKind_WindowClose: {kind_string = str8_lit("closewindow");}break; - case OS_EventKind_FileDrop: {kind_string = str8_lit("filedrop");}break; - case OS_EventKind_Wakeup: {kind_string = str8_lit("wakeup");}break; - } - log_infof("os_event->kind: %S\n", kind_string); - } -#undef HandleParamPrint - log_infof("}\n\n"); - scratch_end(scratch); + start_node = CastFromMember(D_CmdNode, cmd, cmd[0]); + start_node = start_node->next; } - d_cmd_list_push(d_state->root_cmd_arena, &d_state->root_cmds, params, spec); -} - -internal void -d_error(String8 string) -{ - d_cmd(D_CmdKind_Error, .string = string); -} - -internal void -d_errorf(char *fmt, ...) -{ - Temp scratch = scratch_begin(0, 0); - va_list args; - va_start(args, fmt); - String8 string = push_str8fv(scratch.arena, fmt, args); - d_error(string); - scratch_end(scratch); + cmd[0] = 0; + if(start_node != 0) + { + cmd[0] = &start_node->cmd; + } + return !!cmd[0]; } //////////////////////////////// @@ -5799,7 +5738,7 @@ d_errorf(char *fmt, ...) #endif internal void -d_init(CmdLine *cmdln) +d_init(void) { Arena *arena = arena_alloc(); d_state = push_array(arena, D_State, 1); @@ -5808,7 +5747,7 @@ d_init(CmdLine *cmdln) { d_state->frame_arenas[idx] = arena_alloc(); } - d_state->root_cmd_arena = arena_alloc(); + d_state->cmds_arena = arena_alloc(); d_state->output_log_key = hs_hash_from_data(str8_lit("df_output_log_key")); d_state->entities_arena = arena_alloc(.reserve_size = GB(64), .commit_size = KB(64)); d_state->entities_root = &d_nil_entity; @@ -5822,7 +5761,6 @@ d_init(CmdLine *cmdln) d_state->cmd_spec_table = push_array(arena, D_CmdSpec *, d_state->cmd_spec_table_size); d_state->view_rule_spec_table_size = 1024; d_state->view_rule_spec_table = push_array(arena, D_ViewRuleSpec *, d_state->view_rule_spec_table_size); - d_state->seconds_til_autosave = 0.5f; d_state->top_regs = &d_state->base_regs; // rjf: set up initial exception filtering rules @@ -5876,44 +5814,6 @@ d_init(CmdLine *cmdln) // rjf: set up run state d_state->ctrl_last_run_arena = arena_alloc(); - // rjf: set up config reading state - { - Temp scratch = scratch_begin(0, 0); - - // rjf: unpack command line arguments - String8 user_cfg_path = cmd_line_string(cmdln, str8_lit("user")); - String8 project_cfg_path = cmd_line_string(cmdln, str8_lit("project")); - if(project_cfg_path.size == 0) - { - project_cfg_path = cmd_line_string(cmdln, str8_lit("profile")); - } - { - String8 user_program_data_path = os_get_process_info()->user_program_data_path; - String8 user_data_folder = push_str8f(scratch.arena, "%S/%S", user_program_data_path, str8_lit("raddbg")); - os_make_directory(user_data_folder); - if(user_cfg_path.size == 0) - { - user_cfg_path = push_str8f(scratch.arena, "%S/default.raddbg_user", user_data_folder); - } - if(project_cfg_path.size == 0) - { - project_cfg_path = push_str8f(scratch.arena, "%S/default.raddbg_project", user_data_folder); - } - } - - // rjf: set up config path state - String8 cfg_src_paths[D_CfgSrc_COUNT] = {user_cfg_path, project_cfg_path}; - for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) - { - d_state->cfg_path_arenas[src] = arena_alloc(); - d_cmd(d_cfg_src_load_cmd_kind_table[src], .file_path = path_normalized_from_string(scratch.arena, cfg_src_paths[src])); - } - - // rjf: set up config table arena - d_state->cfg_arena = arena_alloc(); - scratch_end(scratch); - } - // rjf: set up config write state for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) { @@ -5931,19 +5831,8 @@ d_init(CmdLine *cmdln) } } -internal D_CmdList -d_gather_root_cmds(Arena *arena) -{ - D_CmdList cmds = {0}; - for(D_CmdNode *n = d_state->root_cmds.first; n != 0; n = n->next) - { - d_cmd_list_push(arena, &cmds, &n->cmd.params, n->cmd.spec); - } - return cmds; -} - internal void -d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, D_CmdList *cmds, F32 dt) +d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, F32 dt) { ProfBeginFunction(); d_state->frame_index += 1; @@ -6012,7 +5901,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ log_infof("stop_thread: \"%S\"\n", d_display_string_from_entity(scratch.arena, stop_thread)); D_CmdParams params = d_cmd_params_zero(); params.entity = d_handle_from_entity(stop_thread); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_SelectThread)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_SelectThread), ¶ms); } // rjf: if no stop-causing thread, and if selected thread, snap to selected @@ -6023,7 +5912,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ { D_CmdParams params = d_cmd_params_zero(); params.entity = d_handle_from_entity(selected_thread); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindThread)); + df_push_cmd(d_cmd_spec_from_kind(DF_CmdKind_FindThread), ¶ms); } } @@ -6071,8 +5960,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ if(event->cause == CTRL_EventCause_InterruptedByException || event->cause == CTRL_EventCause_InterruptedByTrap) { - D_CmdParams params = d_cmd_params_zero(); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_error(str8_zero()); } // rjf: kill all entities which are marked to die on stop @@ -6198,7 +6086,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ { D_CmdParams params = d_cmd_params_zero(); params.entity = d_handle_from_entity(entity); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_SelectThread)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_SelectThread), ¶ms); } }break; @@ -6503,34 +6391,17 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ } } - ////////////////////////////// - //- rjf: autosave - // - { - d_state->seconds_til_autosave -= dt; - if(d_state->seconds_til_autosave <= 0.f) - { - D_CmdParams params = d_cmd_params_zero(); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_WriteUserData)); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_WriteProjectData)); - d_state->seconds_til_autosave = 5.f; - } - } - ////////////////////////////// //- rjf: process top-level commands // ProfScope("process top-level commands") { Temp scratch = scratch_begin(&arena, 1); - for(D_CmdNode *cmd_node = cmds->first; - cmd_node != 0; - cmd_node = cmd_node->next) + for(D_Cmd *cmd = 0; d_next_cmd(&cmd);) { temp_end(scratch); // rjf: unpack command - D_Cmd *cmd = &cmd_node->cmd; D_CmdParams params = cmd->params; D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); d_cmd_spec_counter_inc(cmd->spec); @@ -6630,9 +6501,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ // rjf: no targets -> error if(targets.count == 0) { - D_CmdParams p = params; - p.string = str8_lit("No active targets exist; cannot launch."); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_error(str8_lit("No active targets exist; cannot launch.")); } }break; case D_CmdKind_Kill: @@ -6665,9 +6534,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ // rjf: no processes -> error if(processes.count == 0) { - D_CmdParams p = params; - p.string = str8_lit("No attached running processes exist; cannot kill."); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_error(str8_lit("No attached running processes exist; cannot kill.")); } }break; case D_CmdKind_KillAll: @@ -6690,9 +6557,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ } if(processes.count == 0) { - D_CmdParams p = params; - p.string = str8_lit("No attached running processes exist; cannot kill."); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_error(str8_lit("No attached running processes exist; cannot kill.")); } }break; case D_CmdKind_Detach: @@ -6730,9 +6595,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ } else { - D_CmdParams p = params; - p.string = str8_lit("Cannot run with all threads frozen."); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_error(str8_lit("Cannot run with all threads frozen.")); } }break; case D_CmdKind_StepIntoInst: @@ -6747,16 +6610,12 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ { if(d_ctrl_last_run_kind() == D_RunKind_Run) { - D_CmdParams p = params; - p.string = str8_lit("Must halt before stepping."); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_error(str8_lit("Must halt before stepping.")); } } else if(thread->is_frozen) { - D_CmdParams p = params; - p.string = str8_lit("Must thaw selected thread before stepping."); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_error(str8_lit("Must thaw selected thread before stepping.")); } else { @@ -6783,9 +6642,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ } else { - D_CmdParams p = params; - p.string = str8_lit("Could not find the return address of the current callstack frame successfully."); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_error(str8_lit("Could not find the return address of the current callstack frame successfully.")); good = 0; } }break; @@ -6871,7 +6728,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ d_entity_equip_name(loc, file_path); d_entity_equip_txt_pt(loc, point); D_CmdParams p = d_cmd_params_zero(); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Run)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_Run), &p); }break; case D_CmdKind_RunToAddress: { @@ -6881,7 +6738,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ D_Entity *loc = d_entity_alloc(bp, D_EntityKind_Location); d_entity_equip_vaddr(loc, params.vaddr); D_CmdParams p = d_cmd_params_zero(); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Run)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_Run), &p); }break; case D_CmdKind_Run: { @@ -6890,12 +6747,11 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ if(processes.count != 0) { D_CmdParams params = d_cmd_params_zero(); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_Continue)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_Continue), ¶ms); } else if(!d_ctrl_targets_running()) { - D_CmdParams params = d_cmd_params_zero(); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_LaunchAndRun)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_LaunchAndRun), ¶ms); } }break; case D_CmdKind_Restart: @@ -6903,7 +6759,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ // rjf: kill all { D_CmdParams params = d_cmd_params_zero(); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_KillAll)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_KillAll), ¶ms); } // rjf: gather targets corresponding to all launched processes @@ -6925,7 +6781,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ { D_CmdParams params = d_cmd_params_zero(); params.entity_list = d_handle_list_from_entity_list(scratch.arena, targets); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_LaunchAndRun)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_LaunchAndRun), ¶ms); } }break; case D_CmdKind_StepInto: @@ -6944,16 +6800,53 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ ? D_CmdKind_StepIntoInst : D_CmdKind_StepOverInst); } - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(step_cmd_kind)); + d_push_cmd(d_cmd_spec_from_kind(step_cmd_kind), ¶ms); } else if(!d_ctrl_targets_running()) { D_EntityList targets = d_push_active_target_list(scratch.arena); D_CmdParams p = params; p.entity_list = d_handle_list_from_entity_list(scratch.arena, targets); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_LaunchAndInit)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_LaunchAndInit), &p); } }break; + case D_CmdKind_RunToCursor: + { + String8 file_path = d_regs()->file_path; + if(file_path.size != 0) + { + d_cmd(D_CmdKind_RunToLine, .file_path = file_path, .text_point = d_regs()->cursor); + } + else + { + d_cmd(D_CmdKind_RunToAddress, .vaddr = d_regs()->vaddr_range.min); + } + }break; + case D_CmdKind_SetNextStatement: + { + D_Entity *thread = d_entity_from_handle(d_regs()->thread); + String8 file_path = d_regs()->file_path; + U64 new_rip_vaddr = d_regs()->vaddr_range.min; + if(file_path.size != 0) + { + D_LineList *lines = &d_regs()->lines; + for(D_LineNode *n = lines->first; n != 0; n = n->next) + { + D_EntityList modules = d_modules_from_dbgi_key(scratch.arena, &n->v.dbgi_key); + D_Entity *module = d_module_from_thread_candidates(thread, &modules); + if(!d_entity_is_nil(module)) + { + new_rip_vaddr = d_vaddr_from_voff(module, n->v.voff_range.min); + break; + } + } + } + D_CmdParams p = d_cmd_params_zero(); + p.entity = d_handle_from_entity(thread); + p.vaddr = new_rip_vaddr; + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_SetThreadIP), &p); + }break; + //- rjf: debug control context management operations case D_CmdKind_SelectThread: @@ -6966,6 +6859,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ d_state->base_regs.v.thread = d_handle_from_entity(thread); d_state->base_regs.v.module = d_handle_from_entity(module); d_state->base_regs.v.process = d_handle_from_entity(process); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindThread), ¶ms); }break; case D_CmdKind_SelectUnwind: { @@ -6984,6 +6878,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ d_state->base_regs.v.inline_depth = params.inline_depth; } } + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindThread), ¶ms); di_scope_close(di_scope); }break; case D_CmdKind_UpOneFrame: @@ -7033,7 +6928,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ D_CmdParams p = params; p.unwind_index = next_unwind_idx; p.inline_depth = next_inline_dpt; - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_SelectUnwind)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_SelectUnwind), &p); di_scope_close(di_scope); }break; case D_CmdKind_FreezeThread: @@ -7048,214 +6943,21 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ core_cmd_kind == D_CmdKind_FreezeMachine) ? D_CmdKind_FreezeEntity : D_CmdKind_ThawEntity); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(disptch_kind)); + d_push_cmd(d_cmd_spec_from_kind(disptch_kind), ¶ms); }break; case D_CmdKind_FreezeLocalMachine: { CTRL_MachineID machine_id = CTRL_MachineID_Local; D_CmdParams params = d_cmd_params_zero(); params.entity = d_handle_from_entity(d_machine_entity_from_machine_id(machine_id)); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FreezeMachine)); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_FreezeMachine), ¶ms); }break; case D_CmdKind_ThawLocalMachine: { CTRL_MachineID machine_id = CTRL_MachineID_Local; D_CmdParams params = d_cmd_params_zero(); params.entity = d_handle_from_entity(d_machine_entity_from_machine_id(machine_id)); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_ThawMachine)); - }break; - - //- rjf: undo/redo - case D_CmdKind_Undo: - { - }break; - case D_CmdKind_Redo: - { - }break; - - //- rjf: files - case D_CmdKind_SetCurrentPath: - { - arena_clear(d_state->current_path_arena); - d_state->current_path = push_str8_copy(d_state->current_path_arena, params.file_path); - }break; - - //- rjf: override file links - case D_CmdKind_SetFileOverrideLinkSrc: - case D_CmdKind_SetFileOverrideLinkDst: - { - // rjf: unpack args - D_Entity *map = d_entity_from_handle(params.entity); - String8 path = path_normalized_from_string(scratch.arena, params.file_path); - String8 path_folder = str8_chop_last_slash(path); - String8 path_file = str8_skip_last_slash(path); - - // rjf: src -> move map & commit name; dst -> open destination file & refer to it in map - switch(core_cmd_kind) - { - default:{}break; - case D_CmdKind_SetFileOverrideLinkSrc: - { - D_Entity *map_parent = (params.file_path.size != 0) ? d_entity_from_path(path_folder, D_EntityFromPathFlag_OpenAsNeeded|D_EntityFromPathFlag_OpenMissing) : d_entity_root(); - if(d_entity_is_nil(map)) - { - map = d_entity_alloc(map_parent, D_EntityKind_FilePathMap); - } - else - { - d_entity_change_parent(map, map->parent, map_parent, &d_nil_entity); - } - d_entity_equip_name(map, path_file); - }break; - case D_CmdKind_SetFileOverrideLinkDst: - { - if(d_entity_is_nil(map)) - { - map = d_entity_alloc(d_entity_root(), D_EntityKind_FilePathMap); - } - D_Entity *map_dst_entity = &d_nil_entity; - if(params.file_path.size != 0) - { - map_dst_entity = d_entity_from_path(path, D_EntityFromPathFlag_All); - } - d_entity_equip_entity_handle(map, d_handle_from_entity(map_dst_entity)); - }break; - } - - // rjf: empty src/dest -> delete - if(!d_entity_is_nil(map) && map->string.size == 0 && d_entity_is_nil(d_entity_from_handle(map->entity_handle))) - { - d_entity_mark_for_deletion(map); - } - }break; - case D_CmdKind_SetFileReplacementPath: - { - // NOTE(rjf): - // - // C:/foo/bar/baz.c - // D:/foo/bar/baz.c - // -> override C: -> D: - // - // C:/1/2/foo/bar.c - // C:/2/3/foo/bar.c - // -> override C:/1/2 -> C:2/3 - // - // C:/foo/bar/baz.c - // D:/1/2/3.c - // -> override C:/foo/bar/baz.c -> D:/1/2/3.c - - //- rjf: unpack - String8 src_path = params.string; - String8 dst_path = params.file_path; -#if 0 - // TODO(rjf): - - //- rjf: grab src file & chosen replacement - D_Entity *file = d_entity_from_handle(params.entity); - D_Entity *replacement = d_entity_from_path(params.file_path, D_EntityFromPathFlag_OpenAsNeeded|D_EntityFromPathFlag_OpenMissing); - - //- rjf: find - D_Entity *first_diff_src = file; - D_Entity *first_diff_dst = replacement; - for(;!d_entity_is_nil(first_diff_src) && !d_entity_is_nil(first_diff_dst);) - { - if(!str8_match(first_diff_src->string, first_diff_dst->string, StringMatchFlag_CaseInsensitive) || - first_diff_src->parent->kind != D_EntityKind_File || - first_diff_src->parent->parent->kind != D_EntityKind_File || - first_diff_dst->parent->kind != D_EntityKind_File || - first_diff_dst->parent->parent->kind != D_EntityKind_File) - { - break; - } - first_diff_src = first_diff_src->parent; - first_diff_dst = first_diff_dst->parent; - } - - //- rjf: override first different - if(!d_entity_is_nil(first_diff_src) && !d_entity_is_nil(first_diff_dst)) - { - D_Entity *link = d_entity_child_from_string_and_kind(first_diff_src->parent, first_diff_src->name, D_EntityKind_FilePathMap); - if(d_entity_is_nil(link)) - { - link = d_entity_alloc(first_diff_src->parent, D_EntityKind_FilePathMap); - d_entity_equip_name(link, first_diff_src->name); - } - d_entity_equip_entity_handle(link, d_handle_from_entity(first_diff_dst)); - } -#endif - }break; - - //- rjf: auto view rules - case D_CmdKind_SetAutoViewRuleType: - case D_CmdKind_SetAutoViewRuleViewRule: - { - D_Entity *map = d_entity_from_handle(params.entity); - if(d_entity_is_nil(map)) - { - map = d_entity_alloc(d_entity_root(), D_EntityKind_AutoViewRule); - d_entity_equip_cfg_src(map, D_CfgSrc_Project); - } - D_Entity *src = d_entity_child_from_kind(map, D_EntityKind_Source); - if(d_entity_is_nil(src)) - { - src = d_entity_alloc(map, D_EntityKind_Source); - } - D_Entity *dst = d_entity_child_from_kind(map, D_EntityKind_Dest); - if(d_entity_is_nil(dst)) - { - dst = d_entity_alloc(map, D_EntityKind_Dest); - } - if(map->kind == D_EntityKind_AutoViewRule) - { - D_Entity *edit_child = (core_cmd_kind == D_CmdKind_SetAutoViewRuleType ? src : dst); - d_entity_equip_name(edit_child, params.string); - } - if(src->string.size == 0 && dst->string.size == 0) - { - d_entity_mark_for_deletion(map); - } - { - D_AutoViewRuleMapCache *cache = &d_state->auto_view_rule_cache; - if(cache->arena == 0) - { - cache->arena = arena_alloc(); - } - arena_clear(cache->arena); - cache->slots_count = 1024; - cache->slots = push_array(cache->arena, D_AutoViewRuleSlot, cache->slots_count); - D_EntityList maps = d_query_cached_entity_list_with_kind(D_EntityKind_AutoViewRule); - for(D_EntityNode *n = maps.first; n != 0; n = n->next) - { - D_Entity *map = n->entity; - D_Entity *src = d_entity_child_from_kind(map, D_EntityKind_Source); - D_Entity *dst = d_entity_child_from_kind(map, D_EntityKind_Dest); - String8 type = src->string; - String8 view_rule = dst->string; - U64 hash = d_hash_from_string(type); - U64 slot_idx = hash%cache->slots_count; - D_AutoViewRuleSlot *slot = &cache->slots[slot_idx]; - D_AutoViewRuleNode *node = push_array(cache->arena, D_AutoViewRuleNode, 1); - node->type = push_str8_copy(cache->arena, type); - node->view_rule = push_str8_copy(cache->arena, view_rule); - SLLQueuePush(slot->first, slot->last, node); - } - } - }break; - - //- rjf: general entity operations - case D_CmdKind_EnableEntity: - case D_CmdKind_EnableBreakpoint: - case D_CmdKind_EnableTarget: - { - D_Entity *entity = d_entity_from_handle(params.entity); - d_entity_equip_disabled(entity, 0); - }break; - case D_CmdKind_DisableEntity: - case D_CmdKind_DisableBreakpoint: - case D_CmdKind_DisableTarget: - { - D_Entity *entity = d_entity_from_handle(params.entity); - d_entity_equip_disabled(entity, 1); + d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_ThawMachine), ¶ms); }break; case D_CmdKind_FreezeEntity: case D_CmdKind_ThawEntity: @@ -7275,326 +6977,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ } } }break; - case D_CmdKind_RemoveEntity: - case D_CmdKind_RemoveBreakpoint: - case D_CmdKind_RemoveTarget: - { - D_Entity *entity = d_entity_from_handle(params.entity); - D_EntityKindFlags kind_flags = d_entity_kind_flags_table[entity->kind]; - if(kind_flags & D_EntityKindFlag_CanDelete) - { - d_entity_mark_for_deletion(entity); - } - }break; - case D_CmdKind_NameEntity: - { - D_Entity *entity = d_entity_from_handle(params.entity); - String8 string = params.string; - d_entity_equip_name(entity, string); - }break; - case D_CmdKind_EditEntity:{}break; - case D_CmdKind_DuplicateEntity: - { - D_Entity *src = d_entity_from_handle(params.entity); - if(!d_entity_is_nil(src)) - { - typedef struct Task Task; - struct Task - { - Task *next; - D_Entity *src_n; - D_Entity *dst_parent; - }; - Task starter_task = {0, src, src->parent}; - Task *first_task = &starter_task; - Task *last_task = &starter_task; - for(Task *task = first_task; task != 0; task = task->next) - { - D_Entity *src_n = task->src_n; - D_Entity *dst_n = d_entity_alloc(task->dst_parent, task->src_n->kind); - if(src_n->flags & D_EntityFlag_HasTextPoint) {d_entity_equip_txt_pt(dst_n, src_n->text_point);} - if(src_n->flags & D_EntityFlag_HasU64) {d_entity_equip_u64(dst_n, src_n->u64);} - if(src_n->flags & D_EntityFlag_HasColor) {d_entity_equip_color_hsva(dst_n, d_hsva_from_entity(src_n));} - if(src_n->flags & D_EntityFlag_HasVAddrRng) {d_entity_equip_vaddr_rng(dst_n, src_n->vaddr_rng);} - if(src_n->flags & D_EntityFlag_HasVAddr) {d_entity_equip_vaddr(dst_n, src_n->vaddr);} - if(src_n->disabled) {d_entity_equip_disabled(dst_n, 1);} - if(src_n->string.size != 0) {d_entity_equip_name(dst_n, src_n->string);} - dst_n->cfg_src = src_n->cfg_src; - for(D_Entity *src_child = task->src_n->first; !d_entity_is_nil(src_child); src_child = src_child->next) - { - Task *child_task = push_array(scratch.arena, Task, 1); - child_task->src_n = src_child; - child_task->dst_parent = dst_n; - SLLQueuePush(first_task, last_task, child_task); - } - } - } - }break; - case D_CmdKind_RelocateEntity: - { - D_Entity *entity = d_entity_from_handle(params.entity); - D_Entity *location = d_entity_child_from_kind(entity, D_EntityKind_Location); - if(d_entity_is_nil(location)) - { - location = d_entity_alloc(entity, D_EntityKind_Location); - } - location->flags &= ~D_EntityFlag_HasTextPoint; - location->flags &= ~D_EntityFlag_HasVAddr; - if(params.text_point.line != 0) - { - d_entity_equip_txt_pt(location, params.text_point); - } - if(params.vaddr != 0) - { - d_entity_equip_vaddr(location, params.vaddr); - } - if(params.file_path.size != 0) - { - d_entity_equip_name(location, params.file_path); - } - }break; - - //- rjf: breakpoints - case D_CmdKind_AddBreakpoint: - case D_CmdKind_ToggleBreakpoint: - { - String8 file_path = params.file_path; - TxtPt pt = params.text_point; - String8 string = params.string; - U64 vaddr = params.vaddr; - B32 removed_already_existing = 0; - if(core_cmd_kind == D_CmdKind_ToggleBreakpoint) - { - D_EntityList bps = d_query_cached_entity_list_with_kind(D_EntityKind_Breakpoint); - for(D_EntityNode *n = bps.first; n != 0; n = n->next) - { - D_Entity *bp = n->entity; - D_Entity *loc = d_entity_child_from_kind(bp, D_EntityKind_Location); - if((loc->flags & D_EntityFlag_HasTextPoint && path_match_normalized(loc->string, file_path) && loc->text_point.line == pt.line) || - (loc->flags & D_EntityFlag_HasVAddr && loc->vaddr == vaddr) || - (!(loc->flags & D_EntityFlag_HasTextPoint) && str8_match(loc->string, string, 0))) - { - d_entity_mark_for_deletion(bp); - removed_already_existing = 1; - break; - } - } - } - if(!removed_already_existing) - { - D_Entity *bp = d_entity_alloc(d_entity_root(), D_EntityKind_Breakpoint); - d_entity_equip_cfg_src(bp, D_CfgSrc_Project); - D_Entity *loc = d_entity_alloc(bp, D_EntityKind_Location); - if(file_path.size != 0 && pt.line != 0) - { - d_entity_equip_name(loc, file_path); - d_entity_equip_txt_pt(loc, pt); - } - else if(string.size != 0) - { - d_entity_equip_name(loc, string); - } - else if(vaddr != 0) - { - d_entity_equip_vaddr(loc, vaddr); - } - } - }break; - case D_CmdKind_AddAddressBreakpoint: - case D_CmdKind_AddFunctionBreakpoint: - { - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_AddBreakpoint)); - }break; - - //- rjf: watch pins - case D_CmdKind_AddWatchPin: - case D_CmdKind_ToggleWatchPin: - { - String8 file_path = params.file_path; - TxtPt pt = params.text_point; - String8 string = params.string; - U64 vaddr = params.vaddr; - B32 removed_already_existing = 0; - if(core_cmd_kind == D_CmdKind_ToggleWatchPin) - { - D_EntityList wps = d_query_cached_entity_list_with_kind(D_EntityKind_WatchPin); - for(D_EntityNode *n = wps.first; n != 0; n = n->next) - { - D_Entity *wp = n->entity; - D_Entity *loc = d_entity_child_from_kind(wp, D_EntityKind_Location); - if((loc->flags & D_EntityFlag_HasTextPoint && path_match_normalized(loc->string, file_path) && loc->text_point.line == pt.line) || - (loc->flags & D_EntityFlag_HasVAddr && loc->vaddr == vaddr) || - (!(loc->flags & D_EntityFlag_HasTextPoint) && str8_match(loc->string, string, 0))) - { - d_entity_mark_for_deletion(wp); - removed_already_existing = 1; - break; - } - } - } - if(!removed_already_existing) - { - D_Entity *wp = d_entity_alloc(d_entity_root(), D_EntityKind_WatchPin); - d_entity_equip_name(wp, string); - d_entity_equip_cfg_src(wp, D_CfgSrc_Project); - D_Entity *loc = d_entity_alloc(wp, D_EntityKind_Location); - if(file_path.size != 0 && pt.line != 0) - { - d_entity_equip_name(loc, file_path); - d_entity_equip_txt_pt(loc, pt); - } - else if(vaddr != 0) - { - d_entity_equip_vaddr(loc, vaddr); - } - } - }break; - - //- rjf: watches - case D_CmdKind_ToggleWatchExpression: - if(params.string.size != 0) - { - D_Entity *existing_watch = d_entity_from_name_and_kind(params.string, D_EntityKind_Watch); - if(d_entity_is_nil(existing_watch)) - { - D_Entity *watch = &d_nil_entity; - watch = d_entity_alloc(d_entity_root(), D_EntityKind_Watch); - d_entity_equip_cfg_src(watch, D_CfgSrc_Project); - d_entity_equip_name(watch, cmd->params.string); - } - else - { - d_entity_mark_for_deletion(existing_watch); - } - }break; - - //- rjf: cursor operations - case D_CmdKind_ToggleBreakpointAtCursor: - { - D_Regs *regs = d_regs(); - D_CmdParams p = d_cmd_params_zero(); - p.file_path = regs->file_path; - p.text_point = regs->cursor; - p.vaddr = regs->vaddr_range.min; - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_ToggleBreakpoint)); - }break; - case D_CmdKind_ToggleWatchPinAtCursor: - { - D_Regs *regs = d_regs(); - D_CmdParams p = d_cmd_params_zero(); - p.file_path = regs->file_path; - p.text_point = regs->cursor; - p.vaddr = regs->vaddr_range.min; - p.string = params.string; - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_ToggleWatchPin)); - }break; - case D_CmdKind_GoToNameAtCursor: - case D_CmdKind_ToggleWatchExpressionAtCursor: - { - HS_Scope *hs_scope = hs_scope_open(); - TXT_Scope *txt_scope = txt_scope_open(); - D_Regs *regs = d_regs(); - U128 text_key = regs->text_key; - TXT_LangKind lang_kind = regs->lang_kind; - TxtRng range = txt_rng(regs->cursor, regs->mark); - U128 hash = {0}; - TXT_TextInfo info = txt_text_info_from_key_lang(txt_scope, text_key, lang_kind, &hash); - String8 data = hs_data_from_hash(hs_scope, hash); - Rng1U64 expr_off_range = {0}; - if(range.min.column != range.max.column) - { - expr_off_range = r1u64(txt_off_from_info_pt(&info, range.min), txt_off_from_info_pt(&info, range.max)); - } - else - { - expr_off_range = txt_expr_off_range_from_info_data_pt(&info, data, range.min); - } - String8 expr = str8_substr(data, expr_off_range); - D_CmdParams p = d_cmd_params_zero(); - p.string = expr; - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(core_cmd_kind == D_CmdKind_GoToNameAtCursor ? D_CmdKind_GoToName : - core_cmd_kind == D_CmdKind_ToggleWatchExpressionAtCursor ? D_CmdKind_ToggleWatchExpression : - D_CmdKind_GoToName)); - txt_scope_close(txt_scope); - hs_scope_close(hs_scope); - }break; - case D_CmdKind_RunToCursor: - { - String8 file_path = d_regs()->file_path; - if(file_path.size != 0) - { - d_cmd(D_CmdKind_RunToLine, .file_path = file_path, .text_point = d_regs()->cursor); - } - else - { - d_cmd(D_CmdKind_RunToAddress, .vaddr = d_regs()->vaddr_range.min); - } - }break; - case D_CmdKind_SetNextStatement: - { - D_Entity *thread = d_entity_from_handle(d_regs()->thread); - String8 file_path = d_regs()->file_path; - U64 new_rip_vaddr = d_regs()->vaddr_range.min; - if(file_path.size != 0) - { - D_LineList *lines = &d_regs()->lines; - for(D_LineNode *n = lines->first; n != 0; n = n->next) - { - D_EntityList modules = d_modules_from_dbgi_key(scratch.arena, &n->v.dbgi_key); - D_Entity *module = d_module_from_thread_candidates(thread, &modules); - if(!d_entity_is_nil(module)) - { - new_rip_vaddr = d_vaddr_from_voff(module, n->v.voff_range.min); - break; - } - } - } - D_CmdParams p = d_cmd_params_zero(); - p.entity = d_handle_from_entity(thread); - p.vaddr = new_rip_vaddr; - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_SetThreadIP)); - }break; - - //- rjf: targets - case D_CmdKind_AddTarget: - { - // rjf: build target - D_Entity *entity = &d_nil_entity; - entity = d_entity_alloc(d_entity_root(), D_EntityKind_Target); - d_entity_equip_disabled(entity, 1); - d_entity_equip_cfg_src(entity, D_CfgSrc_Project); - D_Entity *exe = d_entity_alloc(entity, D_EntityKind_Executable); - d_entity_equip_name(exe, params.file_path); - String8 working_dir = str8_chop_last_slash(params.file_path); - if(working_dir.size != 0) - { - String8 working_dir_path = push_str8f(scratch.arena, "%S/", working_dir); - D_Entity *execution_path = d_entity_alloc(entity, D_EntityKind_WorkingDirectory); - d_entity_equip_name(execution_path, working_dir_path); - } - D_CmdParams p = params; - p.entity = d_handle_from_entity(entity); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_EditTarget)); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_SelectTarget)); - }break; - case D_CmdKind_SelectTarget: - { - D_Entity *entity = d_entity_from_handle(params.entity); - if(entity->kind == D_EntityKind_Target) - { - D_EntityList all_targets = d_query_cached_entity_list_with_kind(D_EntityKind_Target); - B32 is_selected = !entity->disabled; - for(D_EntityNode *n = all_targets.first; n != 0; n = n->next) - { - D_Entity *target = n->entity; - d_entity_equip_disabled(target, 1); - } - if(!is_selected) - { - d_entity_equip_disabled(entity, 0); - } - } - }break; //- rjf: attaching case D_CmdKind_Attach: @@ -7608,51 +6990,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ d_push_ctrl_msg(&msg); } }break; - - //- rjf: jit-debugger registration - case D_CmdKind_RegisterAsJITDebugger: - { -#if OS_WINDOWS - char filename_cstr[MAX_PATH] = {0}; - GetModuleFileName(0, filename_cstr, sizeof(filename_cstr)); - String8 debugger_binary_path = str8_cstring(filename_cstr); - String8 name8 = str8_lit("Debugger"); - String8 data8 = push_str8f(scratch.arena, "%S --jit_pid:%%ld --jit_code:%%ld --jit_addr:0x%%p", debugger_binary_path); - String16 name16 = str16_from_8(scratch.arena, name8); - String16 data16 = str16_from_8(scratch.arena, data8); - B32 likely_not_in_admin_mode = 0; - { - HKEY reg_key = 0; - LSTATUS status = 0; - status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\", 0, KEY_SET_VALUE, ®_key); - likely_not_in_admin_mode = (status == ERROR_ACCESS_DENIED); - status = RegSetValueExW(reg_key, (LPCWSTR)name16.str, 0, REG_SZ, (BYTE *)data16.str, data16.size*sizeof(U16)+2); - RegCloseKey(reg_key); - } - { - HKEY reg_key = 0; - LSTATUS status = 0; - status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\", 0, KEY_SET_VALUE, ®_key); - likely_not_in_admin_mode = (status == ERROR_ACCESS_DENIED); - status = RegSetValueExW(reg_key, (LPCWSTR)name16.str, 0, REG_SZ, (BYTE *)data16.str, data16.size*sizeof(U16)+2); - RegCloseKey(reg_key); - } - if(likely_not_in_admin_mode) - { - d_cmd(D_CmdKind_Error, .string = str8_lit("Could not register as the just-in-time debugger, access was denied; try running the debugger as administrator.")); - } -#else - D_CmdParams p = params; - p.string = str8_lit("Registering as the just-in-time debugger is currently not supported on this system."); - d_push_cmd(&p, d_cmd_spec_from_kind(D_CmdKind_Error)); -#endif - }break; - - //- rjf: developer commands - case D_CmdKind_LogMarker: - { - log_infof("\"#MARKER\""); - }break; } // rjf: do run if needed @@ -7736,6 +7073,14 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_ scratch_end(scratch); } + ////////////////////////////// + //- rjf: clear command batch + // + { + arena_clear(d_state->cmds_arena); + MemoryZeroStruct(&d_state->cmds); + } + ////////////////////////////// //- rjf: send messages to control // diff --git a/src/dbg_engine/dbg_engine_core.h b/src/dbg_engine/dbg_engine_core.h index b2cdad0f..ffae1856 100644 --- a/src/dbg_engine/dbg_engine_core.h +++ b/src/dbg_engine/dbg_engine_core.h @@ -942,7 +942,6 @@ struct D_State U64 frame_eval_memread_endt_us; F64 time_in_seconds; F32 dt; - F32 seconds_til_autosave; // rjf: frame info Arena *frame_arenas[2]; @@ -951,9 +950,9 @@ struct D_State D_RegsNode base_regs; D_RegsNode *top_regs; - // rjf: top-level command batch - Arena *root_cmd_arena; - D_CmdList root_cmds; + // rjf: commands + Arena *cmds_arena; + D_CmdList cmds; // rjf: output log key U128 output_log_key; @@ -1478,8 +1477,6 @@ internal E_String2NumMap *d_query_cached_member_map_from_dbgi_key_voff(DI_Key *d //- rjf: top-level command dispatch internal void d_push_cmd(D_CmdSpec *spec, D_CmdParams *params); -internal void d_error(String8 string); -internal void d_errorf(char *fmt, ...); #define d_cmd(kind, ...) d_push_cmd(d_cmd_spec_from_kind(kind), \ &(D_CmdParams) \ { \ @@ -1489,11 +1486,13 @@ internal void d_errorf(char *fmt, ...); __VA_ARGS__ \ }) +//- rjf: command iteration +internal B32 d_next_cmd(D_Cmd **cmd); + //////////////////////////////// //~ rjf: Main Layer Top-Level Calls -internal void d_init(CmdLine *cmdln); -internal D_CmdList d_gather_root_cmds(Arena *arena); -internal void d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, D_CmdList *cmds, F32 dt); +internal void d_init(void); +internal void d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, F32 dt); #endif // DBG_ENGINE_CORE_H diff --git a/src/dbg_engine/generated/dbg_engine.meta.c b/src/dbg_engine/generated/dbg_engine.meta.c index 64fd382e..7a41c9cd 100644 --- a/src/dbg_engine/generated/dbg_engine.meta.c +++ b/src/dbg_engine/generated/dbg_engine.meta.c @@ -4,65 +4,12 @@ //- GENERATED CODE C_LINKAGE_BEGIN -Rng1U64 d_reg_slot_range_table[29] = +String8 d_cfg_src_string_table[4] = { -{0}, -{OffsetOf(D_Regs, machine), OffsetOf(D_Regs, machine) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, module), OffsetOf(D_Regs, module) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, process), OffsetOf(D_Regs, process) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, thread), OffsetOf(D_Regs, thread) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, window), OffsetOf(D_Regs, window) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, panel), OffsetOf(D_Regs, panel) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, view), OffsetOf(D_Regs, view) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, prev_view), OffsetOf(D_Regs, prev_view) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, dst_panel), OffsetOf(D_Regs, dst_panel) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, entity), OffsetOf(D_Regs, entity) + sizeof(D_Handle)}, -{OffsetOf(D_Regs, entity_list), OffsetOf(D_Regs, entity_list) + sizeof(D_HandleList)}, -{OffsetOf(D_Regs, unwind_count), OffsetOf(D_Regs, unwind_count) + sizeof(U64)}, -{OffsetOf(D_Regs, inline_depth), OffsetOf(D_Regs, inline_depth) + sizeof(U64)}, -{OffsetOf(D_Regs, file_path), OffsetOf(D_Regs, file_path) + sizeof(String8)}, -{OffsetOf(D_Regs, cursor), OffsetOf(D_Regs, cursor) + sizeof(TxtPt)}, -{OffsetOf(D_Regs, mark), OffsetOf(D_Regs, mark) + sizeof(TxtPt)}, -{OffsetOf(D_Regs, text_key), OffsetOf(D_Regs, text_key) + sizeof(U128)}, -{OffsetOf(D_Regs, lang_kind), OffsetOf(D_Regs, lang_kind) + sizeof(TXT_LangKind)}, -{OffsetOf(D_Regs, lines), OffsetOf(D_Regs, lines) + sizeof(D_LineList)}, -{OffsetOf(D_Regs, dbgi_key), OffsetOf(D_Regs, dbgi_key) + sizeof(DI_Key)}, -{OffsetOf(D_Regs, vaddr_range), OffsetOf(D_Regs, vaddr_range) + sizeof(Rng1U64)}, -{OffsetOf(D_Regs, voff_range), OffsetOf(D_Regs, voff_range) + sizeof(Rng1U64)}, -{OffsetOf(D_Regs, pid), OffsetOf(D_Regs, pid) + sizeof(U32)}, -{OffsetOf(D_Regs, force_confirm), OffsetOf(D_Regs, force_confirm) + sizeof(B32)}, -{OffsetOf(D_Regs, prefer_disasm), OffsetOf(D_Regs, prefer_disasm) + sizeof(B32)}, -{OffsetOf(D_Regs, dir2), OffsetOf(D_Regs, dir2) + sizeof(Dir2)}, -{OffsetOf(D_Regs, string), OffsetOf(D_Regs, string) + sizeof(String8)}, -{OffsetOf(D_Regs, params_tree), OffsetOf(D_Regs, params_tree) + sizeof(MD_Node *)}, -}; - -Rng1U64 d_cmd_param_slot_range_table[24] = -{ -{0}, -{OffsetOf(D_CmdParams, window), OffsetOf(D_CmdParams, window) + sizeof(D_Handle)}, -{OffsetOf(D_CmdParams, panel), OffsetOf(D_CmdParams, panel) + sizeof(D_Handle)}, -{OffsetOf(D_CmdParams, dest_panel), OffsetOf(D_CmdParams, dest_panel) + sizeof(D_Handle)}, -{OffsetOf(D_CmdParams, prev_view), OffsetOf(D_CmdParams, prev_view) + sizeof(D_Handle)}, -{OffsetOf(D_CmdParams, view), OffsetOf(D_CmdParams, view) + sizeof(D_Handle)}, -{OffsetOf(D_CmdParams, entity), OffsetOf(D_CmdParams, entity) + sizeof(D_Handle)}, -{OffsetOf(D_CmdParams, entity_list), OffsetOf(D_CmdParams, entity_list) + sizeof(D_HandleList)}, -{OffsetOf(D_CmdParams, string), OffsetOf(D_CmdParams, string) + sizeof(String8)}, -{OffsetOf(D_CmdParams, file_path), OffsetOf(D_CmdParams, file_path) + sizeof(String8)}, -{OffsetOf(D_CmdParams, text_point), OffsetOf(D_CmdParams, text_point) + sizeof(TxtPt)}, -{OffsetOf(D_CmdParams, cmd_spec), OffsetOf(D_CmdParams, cmd_spec) + sizeof(struct D_CmdSpec *)}, -{OffsetOf(D_CmdParams, view_spec), OffsetOf(D_CmdParams, view_spec) + sizeof(struct DF_ViewSpec *)}, -{OffsetOf(D_CmdParams, params_tree), OffsetOf(D_CmdParams, params_tree) + sizeof(MD_Node *)}, -{OffsetOf(D_CmdParams, os_event), OffsetOf(D_CmdParams, os_event) + sizeof(struct OS_Event *)}, -{OffsetOf(D_CmdParams, vaddr), OffsetOf(D_CmdParams, vaddr) + sizeof(U64)}, -{OffsetOf(D_CmdParams, voff), OffsetOf(D_CmdParams, voff) + sizeof(U64)}, -{OffsetOf(D_CmdParams, index), OffsetOf(D_CmdParams, index) + sizeof(U64)}, -{OffsetOf(D_CmdParams, id), OffsetOf(D_CmdParams, id) + sizeof(U64)}, -{OffsetOf(D_CmdParams, prefer_dasm), OffsetOf(D_CmdParams, prefer_dasm) + sizeof(B32)}, -{OffsetOf(D_CmdParams, force_confirm), OffsetOf(D_CmdParams, force_confirm) + sizeof(B32)}, -{OffsetOf(D_CmdParams, dir2), OffsetOf(D_CmdParams, dir2) + sizeof(Dir2)}, -{OffsetOf(D_CmdParams, unwind_index), OffsetOf(D_CmdParams, unwind_index) + sizeof(U64)}, -{OffsetOf(D_CmdParams, inline_depth), OffsetOf(D_CmdParams, inline_depth) + sizeof(U64)}, +str8_lit_comp("user"), +str8_lit_comp("project"), +str8_lit_comp("command_line"), +str8_lit_comp("transient"), }; String8 d_entity_kind_display_string_table[30] = @@ -235,45 +182,70 @@ D_EntityKindFlags d_entity_kind_flags_table[30] = (0*D_EntityKindFlag_CanDelete) | (0*D_EntityKindFlag_CanFreeze) | (0*D_EntityKindFlag_CanEdit) | (1*D_EntityKindFlag_CanRename) | (0*D_EntityKindFlag_CanEnable) | (0*D_EntityKindFlag_CanCondition) | (0*D_EntityKindFlag_CanDuplicate) | (0*D_EntityKindFlag_NameIsCode) | (0*D_EntityKindFlag_NameIsPath) | (0*D_EntityKindFlag_UserDefinedLifetime) | (0*D_EntityKindFlag_IsSerializedToConfig), }; -String8 d_cfg_src_string_table[4] = +Rng1U64 d_reg_slot_range_table[29] = { -str8_lit_comp("user"), -str8_lit_comp("project"), -str8_lit_comp("command_line"), -str8_lit_comp("transient"), +{0}, +{OffsetOf(D_Regs, machine), OffsetOf(D_Regs, machine) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, module), OffsetOf(D_Regs, module) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, process), OffsetOf(D_Regs, process) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, thread), OffsetOf(D_Regs, thread) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, window), OffsetOf(D_Regs, window) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, panel), OffsetOf(D_Regs, panel) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, view), OffsetOf(D_Regs, view) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, prev_view), OffsetOf(D_Regs, prev_view) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, dst_panel), OffsetOf(D_Regs, dst_panel) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, entity), OffsetOf(D_Regs, entity) + sizeof(D_Handle)}, +{OffsetOf(D_Regs, entity_list), OffsetOf(D_Regs, entity_list) + sizeof(D_HandleList)}, +{OffsetOf(D_Regs, unwind_count), OffsetOf(D_Regs, unwind_count) + sizeof(U64)}, +{OffsetOf(D_Regs, inline_depth), OffsetOf(D_Regs, inline_depth) + sizeof(U64)}, +{OffsetOf(D_Regs, file_path), OffsetOf(D_Regs, file_path) + sizeof(String8)}, +{OffsetOf(D_Regs, cursor), OffsetOf(D_Regs, cursor) + sizeof(TxtPt)}, +{OffsetOf(D_Regs, mark), OffsetOf(D_Regs, mark) + sizeof(TxtPt)}, +{OffsetOf(D_Regs, text_key), OffsetOf(D_Regs, text_key) + sizeof(U128)}, +{OffsetOf(D_Regs, lang_kind), OffsetOf(D_Regs, lang_kind) + sizeof(TXT_LangKind)}, +{OffsetOf(D_Regs, lines), OffsetOf(D_Regs, lines) + sizeof(D_LineList)}, +{OffsetOf(D_Regs, dbgi_key), OffsetOf(D_Regs, dbgi_key) + sizeof(DI_Key)}, +{OffsetOf(D_Regs, vaddr_range), OffsetOf(D_Regs, vaddr_range) + sizeof(Rng1U64)}, +{OffsetOf(D_Regs, voff_range), OffsetOf(D_Regs, voff_range) + sizeof(Rng1U64)}, +{OffsetOf(D_Regs, pid), OffsetOf(D_Regs, pid) + sizeof(U32)}, +{OffsetOf(D_Regs, force_confirm), OffsetOf(D_Regs, force_confirm) + sizeof(B32)}, +{OffsetOf(D_Regs, prefer_disasm), OffsetOf(D_Regs, prefer_disasm) + sizeof(B32)}, +{OffsetOf(D_Regs, dir2), OffsetOf(D_Regs, dir2) + sizeof(Dir2)}, +{OffsetOf(D_Regs, string), OffsetOf(D_Regs, string) + sizeof(String8)}, +{OffsetOf(D_Regs, params_tree), OffsetOf(D_Regs, params_tree) + sizeof(MD_Node *)}, }; -D_CmdKind d_cfg_src_load_cmd_kind_table[4] = +Rng1U64 d_cmd_param_slot_range_table[24] = { -D_CmdKind_OpenUser, -D_CmdKind_OpenProject, -D_CmdKind_Null, -D_CmdKind_Null, +{0}, +{OffsetOf(D_CmdParams, window), OffsetOf(D_CmdParams, window) + sizeof(D_Handle)}, +{OffsetOf(D_CmdParams, panel), OffsetOf(D_CmdParams, panel) + sizeof(D_Handle)}, +{OffsetOf(D_CmdParams, dest_panel), OffsetOf(D_CmdParams, dest_panel) + sizeof(D_Handle)}, +{OffsetOf(D_CmdParams, prev_view), OffsetOf(D_CmdParams, prev_view) + sizeof(D_Handle)}, +{OffsetOf(D_CmdParams, view), OffsetOf(D_CmdParams, view) + sizeof(D_Handle)}, +{OffsetOf(D_CmdParams, entity), OffsetOf(D_CmdParams, entity) + sizeof(D_Handle)}, +{OffsetOf(D_CmdParams, entity_list), OffsetOf(D_CmdParams, entity_list) + sizeof(D_HandleList)}, +{OffsetOf(D_CmdParams, string), OffsetOf(D_CmdParams, string) + sizeof(String8)}, +{OffsetOf(D_CmdParams, file_path), OffsetOf(D_CmdParams, file_path) + sizeof(String8)}, +{OffsetOf(D_CmdParams, text_point), OffsetOf(D_CmdParams, text_point) + sizeof(TxtPt)}, +{OffsetOf(D_CmdParams, cmd_spec), OffsetOf(D_CmdParams, cmd_spec) + sizeof(struct D_CmdSpec *)}, +{OffsetOf(D_CmdParams, view_spec), OffsetOf(D_CmdParams, view_spec) + sizeof(struct DF_ViewSpec *)}, +{OffsetOf(D_CmdParams, params_tree), OffsetOf(D_CmdParams, params_tree) + sizeof(MD_Node *)}, +{OffsetOf(D_CmdParams, os_event), OffsetOf(D_CmdParams, os_event) + sizeof(struct OS_Event *)}, +{OffsetOf(D_CmdParams, vaddr), OffsetOf(D_CmdParams, vaddr) + sizeof(U64)}, +{OffsetOf(D_CmdParams, voff), OffsetOf(D_CmdParams, voff) + sizeof(U64)}, +{OffsetOf(D_CmdParams, index), OffsetOf(D_CmdParams, index) + sizeof(U64)}, +{OffsetOf(D_CmdParams, id), OffsetOf(D_CmdParams, id) + sizeof(U64)}, +{OffsetOf(D_CmdParams, prefer_dasm), OffsetOf(D_CmdParams, prefer_dasm) + sizeof(B32)}, +{OffsetOf(D_CmdParams, force_confirm), OffsetOf(D_CmdParams, force_confirm) + sizeof(B32)}, +{OffsetOf(D_CmdParams, dir2), OffsetOf(D_CmdParams, dir2) + sizeof(Dir2)}, +{OffsetOf(D_CmdParams, unwind_index), OffsetOf(D_CmdParams, unwind_index) + sizeof(U64)}, +{OffsetOf(D_CmdParams, inline_depth), OffsetOf(D_CmdParams, inline_depth) + sizeof(U64)}, }; -D_CmdKind d_cfg_src_write_cmd_kind_table[4] = -{ -D_CmdKind_WriteUserData, -D_CmdKind_WriteProjectData, -D_CmdKind_Null, -D_CmdKind_Null, -}; - -D_CmdKind d_cfg_src_apply_cmd_kind_table[4] = -{ -D_CmdKind_ApplyUserData, -D_CmdKind_ApplyProjectData, -D_CmdKind_Null, -D_CmdKind_Null, -}; - -D_CmdSpecInfo d_core_cmd_kind_spec_info_table[220] = +D_CmdSpecInfo d_core_cmd_kind_spec_info_table[38] = { { str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp("Exit"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp("Run Command"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_CmdSpec, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("error"), str8_lit_comp("Notifies of an error."), str8_lit_comp(""), str8_lit_comp("Error"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("OS Event"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, { str8_lit_comp("launch_and_run"), str8_lit_comp("Starts debugging a new instance of a target, then runs."), str8_lit_comp("launch,start,run,target"), str8_lit_comp("Launch and Run"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_EntityList, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, { str8_lit_comp("launch_and_init"), str8_lit_comp("Starts debugging a new instance of a target, then stops at the program's entry point."), str8_lit_comp("launch,start,entry,point"), str8_lit_comp("Launch and Initialize"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_EntityList, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, { str8_lit_comp("kill"), str8_lit_comp("Kills the specified existing debugged process(es)."), str8_lit_comp("stop,kill"), str8_lit_comp("Kill"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_EntityList, D_EntityKind_Process, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, @@ -308,187 +280,9 @@ D_CmdSpecInfo d_core_cmd_kind_spec_info_table[220] = { str8_lit_comp("thaw_machine"), str8_lit_comp("Thaws the passed machine."), str8_lit_comp(""), str8_lit_comp("Thaw Machine"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Machine, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, { str8_lit_comp("freeze_local_machine"), str8_lit_comp("Freezes the local machine."), str8_lit_comp(""), str8_lit_comp("Freeze Local Machine"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, { str8_lit_comp("thaw_local_machine"), str8_lit_comp("Thaws the local machine."), str8_lit_comp(""), str8_lit_comp("Thaw Local Machine"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("inc_ui_font_scale"), str8_lit_comp("Increases the font size used for UI."), str8_lit_comp(""), str8_lit_comp("Increase UI Font Scale"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("dec_ui_font_scale"), str8_lit_comp("Decreases the font size used for UI."), str8_lit_comp(""), str8_lit_comp("Decrease UI Font Scale"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("inc_code_font_scale"), str8_lit_comp("Increases the font size used for code."), str8_lit_comp(""), str8_lit_comp("Increase Code Font Scale"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("dec_code_font_scale"), str8_lit_comp("Decreases the font size used for code."), str8_lit_comp(""), str8_lit_comp("Decrease Code Font Scale"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("open_window"), str8_lit_comp("Opens a new window."), str8_lit_comp(""), str8_lit_comp("Open New Window"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("close_window"), str8_lit_comp("Closes an opened window."), str8_lit_comp(""), str8_lit_comp("Close Window"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_fullscreen"), str8_lit_comp("Toggles fullscreen view on the active window."), str8_lit_comp(""), str8_lit_comp("Toggle Fullscreen"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("confirm_accept"), str8_lit_comp("Accepts the active confirmation prompt."), str8_lit_comp(""), str8_lit_comp("Confirm Accept"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("confirm_cancel"), str8_lit_comp("Cancels the active confirmation prompt."), str8_lit_comp(""), str8_lit_comp("Confirm Cancel"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("reset_to_default_panels"), str8_lit_comp("Resets the window to the default panel layout."), str8_lit_comp("panel"), str8_lit_comp("Reset To Default Panel Layout"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("reset_to_compact_panels"), str8_lit_comp("Resets the window to the compact panel layout."), str8_lit_comp("panel"), str8_lit_comp("Reset To Compact Panel Layout"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("new_panel_left"), str8_lit_comp("Creates a new panel to the left of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Left"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("new_panel_up"), str8_lit_comp("Creates a new panel at the top of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Up"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("new_panel_right"), str8_lit_comp("Creates a new panel to the right of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Right"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("new_panel_down"), str8_lit_comp("Creates a new panel at the bottom of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Down"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("split_panel"), str8_lit_comp("Creates a new panel in a given direction, and moves a tab to it, if specified."), str8_lit_comp(""), str8_lit_comp("Split Panel"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("rotate_panel_columns"), str8_lit_comp("Rotates all panels at the closest column level of the panel hierarchy."), str8_lit_comp(""), str8_lit_comp("Rotate Panel Columns"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("next_panel"), str8_lit_comp("Cycles the active panel forward."), str8_lit_comp(""), str8_lit_comp("Focus Next Panel"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("prev_panel"), str8_lit_comp("Cycles the active panel backwards."), str8_lit_comp(""), str8_lit_comp("Focus Previous Panel"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("focus_panel"), str8_lit_comp("Focuses a new panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("focus_panel_right"), str8_lit_comp("Focuses a panel rightward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Right"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("focus_panel_left"), str8_lit_comp("Focuses a panel leftward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Left"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("focus_panel_up"), str8_lit_comp("Focuses a panel upward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Up"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("focus_panel_down"), str8_lit_comp("Focuses a panel downward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Down"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("undo"), str8_lit_comp("Undoes the previous action."), str8_lit_comp(""), str8_lit_comp("Undo"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("redo"), str8_lit_comp("Redoes the first previously undone action."), str8_lit_comp(""), str8_lit_comp("Redo"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("go_back"), str8_lit_comp("Returns to the previously selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp("Go Back"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("go_forward"), str8_lit_comp("Returns to the next selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp("Go Forward"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("close_panel"), str8_lit_comp("Closes the currently active panel."), str8_lit_comp(""), str8_lit_comp("Close Panel"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("next_tab"), str8_lit_comp("Focuses the next tab on the active panel."), str8_lit_comp(""), str8_lit_comp("Focus Next Tab"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("prev_tab"), str8_lit_comp("Focuses the previous tab on the active panel."), str8_lit_comp(""), str8_lit_comp("Focus Previous Tab"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_tab_right"), str8_lit_comp("Moves the selected tab right one slot."), str8_lit_comp(""), str8_lit_comp("Move Tab Right"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_tab_left"), str8_lit_comp("Moves the selected tab left one slot."), str8_lit_comp(""), str8_lit_comp("Move Tab Left"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("open_tab"), str8_lit_comp("Opens a new tab with the parameterized view specification."), str8_lit_comp(""), str8_lit_comp("Open Tab"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("Close Tab"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_tab"), str8_lit_comp("Moves a tab to a new panel."), str8_lit_comp(""), str8_lit_comp("Move Tab"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("tab_bar_top"), str8_lit_comp("Anchors a panel's tab bar to the top of the panel."), str8_lit_comp(""), str8_lit_comp("Anchor Tab Bar To Top"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("tab_bar_bottom"), str8_lit_comp("Anchors a panel's tab bar to the bottom of the panel."), str8_lit_comp(""), str8_lit_comp("Anchor Tab Bar To Bottom"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("set_current_path"), str8_lit_comp("Sets the debugger's current path, which is used as a starting point when browsing for files."), str8_lit_comp(""), str8_lit_comp("Set Current Path"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("open"), str8_lit_comp("Opens a file."), str8_lit_comp("code,source,file"), str8_lit_comp("Open"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("switch"), str8_lit_comp("Switches to a loaded file."), str8_lit_comp("code,source,file"), str8_lit_comp("Switch"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_File, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("switch_to_partner_file"), str8_lit_comp("Switches to the focused file's partner; or from header to implementation or vice versa."), str8_lit_comp("code,source,file"), str8_lit_comp("Switch To Partner File"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("go_to_disassembly"), str8_lit_comp("Goes to the disassembly, if any, for a given source code line."), str8_lit_comp("code,source,disassembly,disasm"), str8_lit_comp("Go To Disassembly"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("go_to_source"), str8_lit_comp("Goes to the source code, if any, for a given disassembly line."), str8_lit_comp("code,source,disassembly,disasm"), str8_lit_comp("Go To Source"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("set_file_override_link_src"), str8_lit_comp("Sets the source path for an override file link."), str8_lit_comp(""), str8_lit_comp("Set File Override Link Source"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("set_file_override_link_dst"), str8_lit_comp("Sets the destination path for an override file link."), str8_lit_comp(""), str8_lit_comp("Set File Override Link Destination"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("set_file_replacement_path"), str8_lit_comp("Sets the path which should be used as the replacement for the passed file."), str8_lit_comp(""), str8_lit_comp("Set File Replacement Path"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("set_auto_view_rule_type"), str8_lit_comp("Sets the type for an auto view rule."), str8_lit_comp(""), str8_lit_comp("Set Auto View Rule Type"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("set_auto_view_rule_view_rule"), str8_lit_comp("Sets the view rule string for an auto view rule."), str8_lit_comp(""), str8_lit_comp("Set Auto View Rule View Rule"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("open_user"), str8_lit_comp("Opens a user file path, immediately loading it, and begins autosaving to it."), str8_lit_comp("load,user,project,layout"), str8_lit_comp("Open User"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("open_project"), str8_lit_comp("Opens a project file path, immediately loading it, and begins autosaving to it."), str8_lit_comp("project,project,session"), str8_lit_comp("Open Project"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("open_recent_project"), str8_lit_comp("Opens a recently used project file."), str8_lit_comp("project,project,session"), str8_lit_comp("Open Recent Project"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_RecentProject, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("apply_user_data"), str8_lit_comp("Applies user data from the active user file."), str8_lit_comp(""), str8_lit_comp("Apply User Data"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("apply_project_data"), str8_lit_comp("Applies project data from the active project file."), str8_lit_comp(""), str8_lit_comp("Apply Project Data"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("write_user_data"), str8_lit_comp("Writes user data to the active user file."), str8_lit_comp(""), str8_lit_comp("Write User Data"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("write_project_data"), str8_lit_comp("Writes project data to the active project file."), str8_lit_comp(""), str8_lit_comp("Write Project Data"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("edit"), str8_lit_comp("Edits the current selection."), str8_lit_comp(""), str8_lit_comp("Edit"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("accept"), str8_lit_comp("Accepts current changes, or answers prompts in the affirmative."), str8_lit_comp(""), str8_lit_comp("Accept"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("cancel"), str8_lit_comp("Rejects current changes, exits temporary menus, or answers prompts in the negative."), str8_lit_comp(""), str8_lit_comp("Cancel"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_left"), str8_lit_comp("Moves the cursor or selection left."), str8_lit_comp(""), str8_lit_comp("Move Left"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_right"), str8_lit_comp("Moves the cursor or selection right."), str8_lit_comp(""), str8_lit_comp("Move Right"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up"), str8_lit_comp("Moves the cursor or selection up."), str8_lit_comp(""), str8_lit_comp("Move Up"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down"), str8_lit_comp("Moves the cursor or selection down."), str8_lit_comp(""), str8_lit_comp("Move Down"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_left_select"), str8_lit_comp("Moves the cursor or selection left, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Left Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_right_select"), str8_lit_comp("Moves the cursor or selection right, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Right Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up_select"), str8_lit_comp("Moves the cursor or selection up, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down_select"), str8_lit_comp("Moves the cursor or selection down, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_left_chunk"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp("Move Left Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_right_chunk"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp("Move Right Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up_chunk"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp("Move Up Chunk"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down_chunk"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp("Move Down Chunk"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up_page"), str8_lit_comp("Moves the cursor or selection up one page."), str8_lit_comp(""), str8_lit_comp("Move Up Page"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down_page"), str8_lit_comp("Moves the cursor or selection down one page."), str8_lit_comp(""), str8_lit_comp("Move Down Page"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up_whole"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content."), str8_lit_comp(""), str8_lit_comp("Move Up Whole"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down_whole"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content."), str8_lit_comp(""), str8_lit_comp("Move Down Whole"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_left_chunk_select"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp("Move Left Chunk Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_right_chunk_select"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp("Move Right Chunk Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up_chunk_select"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp("Move Up Chunk Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down_chunk_select"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp("Move Down Chunk Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up_page_select"), str8_lit_comp("Moves the cursor or selection up one page, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Page Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down_page_select"), str8_lit_comp("Moves the cursor or selection down one page, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Page Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up_whole_select"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Whole Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down_whole_select"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Whole Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_up_reorder"), str8_lit_comp("Moves the cursor or selection up, while swapping the currently selected element with that upward."), str8_lit_comp(""), str8_lit_comp("Move Up Reorder"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_down_reorder"), str8_lit_comp("Moves the cursor or selection down, while swapping the currently selected element with that downward."), str8_lit_comp(""), str8_lit_comp("Move Down Reorder"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_home"), str8_lit_comp("Moves the cursor to the beginning of the line."), str8_lit_comp(""), str8_lit_comp("Move Home"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_end"), str8_lit_comp("Moves the cursor to the end of the line."), str8_lit_comp(""), str8_lit_comp("Move End"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_home_select"), str8_lit_comp("Moves the cursor to the beginning of the line, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Home Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("move_end_select"), str8_lit_comp("Moves the cursor to the end of the line, while selecting."), str8_lit_comp(""), str8_lit_comp("Move End Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("select_all"), str8_lit_comp("Selects everything possible."), str8_lit_comp(""), str8_lit_comp("Select All"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("delete_single"), str8_lit_comp("Deletes a single element to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Delete Single"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("delete_chunk"), str8_lit_comp("Deletes a chunk to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Delete Chunk"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("backspace_single"), str8_lit_comp("Deletes a single element to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Backspace Single"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("backspace_chunk"), str8_lit_comp("Deletes a chunk to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Backspace Chunk"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("copy"), str8_lit_comp("Copies the active selection to the clipboard."), str8_lit_comp(""), str8_lit_comp("Copy"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("cut"), str8_lit_comp("Copies the active selection to the clipboard, then deletes it."), str8_lit_comp(""), str8_lit_comp("Cut"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("paste"), str8_lit_comp("Pastes the current contents of the clipboard."), str8_lit_comp(""), str8_lit_comp("Paste"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("insert_text"), str8_lit_comp("Inserts the text that was used to cause this command."), str8_lit_comp(""), str8_lit_comp("Insert Text"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("goto_line"), str8_lit_comp("Jumps to a line number in the current code file."), str8_lit_comp(""), str8_lit_comp("Go To Line"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_TextPoint, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("goto_address"), str8_lit_comp("Jumps to an address in the current memory or disassembly view."), str8_lit_comp(""), str8_lit_comp("Go To Address"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_VirtualAddr, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("center_cursor"), str8_lit_comp("Snaps the current code view to center the cursor."), str8_lit_comp(""), str8_lit_comp("Center Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("contain_cursor"), str8_lit_comp("Snaps the current code view to contain the cursor."), str8_lit_comp(""), str8_lit_comp("Contain Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("find_text_forward"), str8_lit_comp("Searches the current code file forward (from the cursor) for a string."), str8_lit_comp(""), str8_lit_comp("Find Text (Forward)"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*1)|(D_CmdQueryFlag_SelectOldInput*1)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("find_text_backward"), str8_lit_comp("Searches the current code file backwards (from the cursor) for a string."), str8_lit_comp(""), str8_lit_comp("Find Text (Backwards)"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*1)|(D_CmdQueryFlag_SelectOldInput*1)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("find_next"), str8_lit_comp("Searches the current code file forward (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp("Find Next"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*1)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("find_prev"), str8_lit_comp("Searches the current code file backwards (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp("Find Previous"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*1)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("find_thread"), str8_lit_comp("Jumps to the passed thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp("Find Thread"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Thread, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("find_selected_thread"), str8_lit_comp("Jumps to the selected thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp("Find Selected Thread"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("goto_name"), str8_lit_comp("Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("Go To Name"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("goto_name_at_cursor"), str8_lit_comp("Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("Go To Name At Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_watch_expr"), str8_lit_comp("Adds or removes an expression to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_watch_expr_at_cursor"), str8_lit_comp("Adds or removes the expression that the cursor or selection is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression At Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_watch_expr_at_mouse"), str8_lit_comp("Adds or removes the expression that the mouse is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression At Mouse"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("set_columns"), str8_lit_comp("Sets the number of columns for a memory view."), str8_lit_comp(""), str8_lit_comp("Set Columns"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Index, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("toggle_address_visibility"), str8_lit_comp("Toggles the visibility of addresses in a disassembly view."), str8_lit_comp(""), str8_lit_comp("Toggle Address Visibility"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_code_bytes_visibility"), str8_lit_comp("Toggles the visibility of machine code bytes in a disassembly view."), str8_lit_comp(""), str8_lit_comp("Toggle Code Bytes Visibility"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("enable_entity"), str8_lit_comp("Enables an entity."), str8_lit_comp(""), str8_lit_comp("Enable Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("disable_entity"), str8_lit_comp("Disables an entity."), str8_lit_comp(""), str8_lit_comp("Disable Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, { str8_lit_comp("freeze_entity"), str8_lit_comp("Freezes an entity."), str8_lit_comp(""), str8_lit_comp("Freeze Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, { str8_lit_comp("thaw_entity"), str8_lit_comp("Thaws an entity."), str8_lit_comp(""), str8_lit_comp("Thaw Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("remove_entity"), str8_lit_comp("Removes an entity."), str8_lit_comp(""), str8_lit_comp("Remove Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("name_entity"), str8_lit_comp("Equips an entity with a name."), str8_lit_comp(""), str8_lit_comp("Name Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("edit_entity"), str8_lit_comp("Opens the editor for an entity."), str8_lit_comp(""), str8_lit_comp("Edit Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("duplicate_entity"), str8_lit_comp("Duplicates an entity."), str8_lit_comp(""), str8_lit_comp("Duplicate Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("relocate_entity"), str8_lit_comp("Relocates an entity."), str8_lit_comp(""), str8_lit_comp("Relocate Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("add_breakpoint"), str8_lit_comp("Places a breakpoint at a given location (file path and line number, address, or symbol name)."), str8_lit_comp(""), str8_lit_comp("Add Breakpoint"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("add_address_breakpoint"), str8_lit_comp("Places a breakpoint on the specified address."), str8_lit_comp(""), str8_lit_comp("Add Address Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_VirtualAddr, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("add_function_breakpoint"), str8_lit_comp("Places a breakpoint on the first address(es) of the specified function."), str8_lit_comp(""), str8_lit_comp("Add Function Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("toggle_breakpoint"), str8_lit_comp("Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)."), str8_lit_comp(""), str8_lit_comp("Toggle Breakpoint"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("remove_breakpoint"), str8_lit_comp("Removes an existing breakpoint."), str8_lit_comp(""), str8_lit_comp("Remove Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Breakpoint, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("enable_breakpoint"), str8_lit_comp("Enables a breakpoint."), str8_lit_comp(""), str8_lit_comp("Enable Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Breakpoint, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("disable_breakpoint"), str8_lit_comp("Disables a breakpoint."), str8_lit_comp(""), str8_lit_comp("Disable Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Breakpoint, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("add_watch_pin"), str8_lit_comp("Places a watch pin at a given location (file path and line number or address)."), str8_lit_comp(""), str8_lit_comp("Add Watch Pin"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_watch_pin"), str8_lit_comp("Places or removes a watch pin at a given location (file path and line number or address)."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Pin"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_breakpoint_cursor"), str8_lit_comp("Places or removes a breakpoint on the line on which the active cursor sits."), str8_lit_comp(""), str8_lit_comp("Toggle Breakpoint At Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_watch_pin_at_cursor"), str8_lit_comp("Places or removes a watch pin at the cursor on the currently active file."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Pin At Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("add_target"), str8_lit_comp("Adds a new target."), str8_lit_comp("application,executable,debug"), str8_lit_comp("Add Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("remove_target"), str8_lit_comp("Removes an existing target."), str8_lit_comp("delete,remove,target"), str8_lit_comp("Remove Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("edit_target"), str8_lit_comp("Edits an existing target."), str8_lit_comp(""), str8_lit_comp("Edit Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("select_target"), str8_lit_comp("Selects a target."), str8_lit_comp(""), str8_lit_comp("Select Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("enable_target"), str8_lit_comp("Enables a target, in addition to all targets currently enabled."), str8_lit_comp(""), str8_lit_comp("Enable Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("disable_target"), str8_lit_comp("Disables a target."), str8_lit_comp(""), str8_lit_comp("Disable Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, { str8_lit_comp("attach"), str8_lit_comp("Attaches to a process that is already running on the local machine."), str8_lit_comp(""), str8_lit_comp("Attach"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_ID, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("register_as_jit_debugger"), str8_lit_comp("Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system."), str8_lit_comp(""), str8_lit_comp("Register As Just-In-Time (JIT) Debugger"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("entity_ref_fast_path"), str8_lit_comp("Activates the default behavior when clicking an entity reference."), str8_lit_comp(""), str8_lit_comp("Entity Reference Fast Path"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("spawn_entity_view"), str8_lit_comp("Spawns a new view, given an entity and other parameterizations."), str8_lit_comp(""), str8_lit_comp("Spawn Entity View"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("find_code_location"), str8_lit_comp("Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary."), str8_lit_comp(""), str8_lit_comp("Find Code Location"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("filter"), str8_lit_comp("Begins filtering the active view."), str8_lit_comp("sort,search,filter,find"), str8_lit_comp("Filter"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("apply_filter"), str8_lit_comp("Applies the typed filter to the active view."), str8_lit_comp("sort,search,filter,find,apply"), str8_lit_comp("Apply Filter"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("clear_filter"), str8_lit_comp("Clears the filter applied to the active view."), str8_lit_comp("sort,search,filter,find,clear"), str8_lit_comp("Clear Filter"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("getting_started"), str8_lit_comp("Opens the menu for information on getting started."), str8_lit_comp("tutorial,help"), str8_lit_comp("Getting Started"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("commands"), str8_lit_comp("Opens the list of all commands."), str8_lit_comp(""), str8_lit_comp("Commands"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("target"), str8_lit_comp("Opens the editor for a target."), str8_lit_comp(""), str8_lit_comp("Target"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("targets"), str8_lit_comp("Opens the list of all targets."), str8_lit_comp(""), str8_lit_comp("Targets"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("file_path_map"), str8_lit_comp("Opens the file path mapping editor."), str8_lit_comp(""), str8_lit_comp("File Path Map"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("auto_view_rules"), str8_lit_comp("Opens the auto view rule editor."), str8_lit_comp(""), str8_lit_comp("Auto View Rules"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("breakpoints"), str8_lit_comp("Opens the breakpoints view."), str8_lit_comp(""), str8_lit_comp("Breakpoints"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("watch_pins"), str8_lit_comp("Opens the watch pins view."), str8_lit_comp(""), str8_lit_comp("Watch Pins"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("scheduler"), str8_lit_comp("Opens the scheduler view, for process and thread controls."), str8_lit_comp("threads,processes,targets"), str8_lit_comp("Scheduler"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("call_stack"), str8_lit_comp("Opens the call stack view."), str8_lit_comp("callstack,thread,unwind"), str8_lit_comp("Call Stack"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("modules"), str8_lit_comp("Opens the modules view."), str8_lit_comp(""), str8_lit_comp("Modules"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("watch"), str8_lit_comp("Opens a watch view."), str8_lit_comp(""), str8_lit_comp("Watch"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("locals"), str8_lit_comp("Opens a locals view."), str8_lit_comp(""), str8_lit_comp("Locals"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("registers"), str8_lit_comp("Opens a registers view."), str8_lit_comp(""), str8_lit_comp("Registers"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("globals"), str8_lit_comp("Opens a globals view."), str8_lit_comp(""), str8_lit_comp("Globals"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("thread_locals"), str8_lit_comp("Opens a thread locals view."), str8_lit_comp(""), str8_lit_comp("Thread Locals"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("types"), str8_lit_comp("Opens a types view."), str8_lit_comp(""), str8_lit_comp("Types"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("procedures"), str8_lit_comp("Opens a procedures view."), str8_lit_comp(""), str8_lit_comp("Procedures"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("pending_file"), str8_lit_comp("Opens a view which asynchronously analyzes the file path parameter, then picks an appropriate viewer for it."), str8_lit_comp(""), str8_lit_comp("Pending File"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("disassembly"), str8_lit_comp("Opens the disassembly view."), str8_lit_comp("disasm"), str8_lit_comp("Disassembly"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("output"), str8_lit_comp("Opens an output view."), str8_lit_comp(""), str8_lit_comp("Output"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("memory"), str8_lit_comp("Opens a memory view."), str8_lit_comp(""), str8_lit_comp("Memory"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("exception_filters"), str8_lit_comp("Opens the exception filters view."), str8_lit_comp("exceptions,filters"), str8_lit_comp("Exception Filters"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("settings"), str8_lit_comp("Opens the settings view."), str8_lit_comp("theme,color,scheme,options"), str8_lit_comp("Settings"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("pick_file"), str8_lit_comp("Opens the file browser to pick a file."), str8_lit_comp(""), str8_lit_comp("Pick File"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("pick_folder"), str8_lit_comp("Opens the file browser to pick a folder."), str8_lit_comp(""), str8_lit_comp("Pick Folder"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*1)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("pick_file_or_folder"), str8_lit_comp("Opens the file browser to pick a file or folder."), str8_lit_comp(""), str8_lit_comp("Pick File/Folder"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*1)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, -{ str8_lit_comp("complete_query"), str8_lit_comp("Completes a query."), str8_lit_comp(""), str8_lit_comp("Complete Query"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("cancel_query"), str8_lit_comp("Cancels a query."), str8_lit_comp(""), str8_lit_comp("Cancel Query"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("toggle_dev_menu"), str8_lit_comp("Opens and closes the developer menu."), str8_lit_comp(""), str8_lit_comp("Toggle Developer Menu"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, -{ str8_lit_comp("log_marker"), str8_lit_comp("Logs a marker in the application log, to denote specific points in time within the log."), str8_lit_comp(""), str8_lit_comp("Log Marker"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, }; D_ViewRuleSpecInfo d_core_view_rule_spec_info_table[21] = diff --git a/src/dbg_engine/generated/dbg_engine.meta.h b/src/dbg_engine/generated/dbg_engine.meta.h index c1db3aa7..bad40fa5 100644 --- a/src/dbg_engine/generated/dbg_engine.meta.h +++ b/src/dbg_engine/generated/dbg_engine.meta.h @@ -6,40 +6,6 @@ #ifndef DBG_ENGINE_META_H #define DBG_ENGINE_META_H -typedef enum D_RegSlot -{ -D_RegSlot_Null, -D_RegSlot_Machine, -D_RegSlot_Module, -D_RegSlot_Process, -D_RegSlot_Thread, -D_RegSlot_Window, -D_RegSlot_Panel, -D_RegSlot_View, -D_RegSlot_PrevView, -D_RegSlot_DstPanel, -D_RegSlot_Entity, -D_RegSlot_EntityList, -D_RegSlot_UnwindCount, -D_RegSlot_InlineDepth, -D_RegSlot_FilePath, -D_RegSlot_Cursor, -D_RegSlot_Mark, -D_RegSlot_TextKey, -D_RegSlot_LangKind, -D_RegSlot_Lines, -D_RegSlot_DbgiKey, -D_RegSlot_VaddrRange, -D_RegSlot_VoffRange, -D_RegSlot_PID, -D_RegSlot_ForceConfirm, -D_RegSlot_PreferDisasm, -D_RegSlot_Dir2, -D_RegSlot_String, -D_RegSlot_ParamsTree, -D_RegSlot_COUNT, -} D_RegSlot; - typedef enum D_CfgSrc { D_CfgSrc_User, @@ -84,13 +50,43 @@ D_EntityKind_ConversionFail, D_EntityKind_COUNT, } D_EntityKind; +typedef enum D_RegSlot +{ +D_RegSlot_Null, +D_RegSlot_Machine, +D_RegSlot_Module, +D_RegSlot_Process, +D_RegSlot_Thread, +D_RegSlot_Window, +D_RegSlot_Panel, +D_RegSlot_View, +D_RegSlot_PrevView, +D_RegSlot_DstPanel, +D_RegSlot_Entity, +D_RegSlot_EntityList, +D_RegSlot_UnwindCount, +D_RegSlot_InlineDepth, +D_RegSlot_FilePath, +D_RegSlot_Cursor, +D_RegSlot_Mark, +D_RegSlot_TextKey, +D_RegSlot_LangKind, +D_RegSlot_Lines, +D_RegSlot_DbgiKey, +D_RegSlot_VaddrRange, +D_RegSlot_VoffRange, +D_RegSlot_PID, +D_RegSlot_ForceConfirm, +D_RegSlot_PreferDisasm, +D_RegSlot_Dir2, +D_RegSlot_String, +D_RegSlot_ParamsTree, +D_RegSlot_COUNT, +} D_RegSlot; + typedef enum D_CmdKind { D_CmdKind_Null, -D_CmdKind_Exit, -D_CmdKind_RunCommand, -D_CmdKind_Error, -D_CmdKind_OSEvent, D_CmdKind_LaunchAndRun, D_CmdKind_LaunchAndInit, D_CmdKind_Kill, @@ -125,216 +121,12 @@ D_CmdKind_FreezeMachine, D_CmdKind_ThawMachine, D_CmdKind_FreezeLocalMachine, D_CmdKind_ThawLocalMachine, -D_CmdKind_IncUIFontScale, -D_CmdKind_DecUIFontScale, -D_CmdKind_IncCodeFontScale, -D_CmdKind_DecCodeFontScale, -D_CmdKind_OpenWindow, -D_CmdKind_CloseWindow, -D_CmdKind_ToggleFullscreen, -D_CmdKind_ConfirmAccept, -D_CmdKind_ConfirmCancel, -D_CmdKind_ResetToDefaultPanels, -D_CmdKind_ResetToCompactPanels, -D_CmdKind_NewPanelLeft, -D_CmdKind_NewPanelUp, -D_CmdKind_NewPanelRight, -D_CmdKind_NewPanelDown, -D_CmdKind_SplitPanel, -D_CmdKind_RotatePanelColumns, -D_CmdKind_NextPanel, -D_CmdKind_PrevPanel, -D_CmdKind_FocusPanel, -D_CmdKind_FocusPanelRight, -D_CmdKind_FocusPanelLeft, -D_CmdKind_FocusPanelUp, -D_CmdKind_FocusPanelDown, -D_CmdKind_Undo, -D_CmdKind_Redo, -D_CmdKind_GoBack, -D_CmdKind_GoForward, -D_CmdKind_ClosePanel, -D_CmdKind_NextTab, -D_CmdKind_PrevTab, -D_CmdKind_MoveTabRight, -D_CmdKind_MoveTabLeft, -D_CmdKind_OpenTab, -D_CmdKind_CloseTab, -D_CmdKind_MoveTab, -D_CmdKind_TabBarTop, -D_CmdKind_TabBarBottom, -D_CmdKind_SetCurrentPath, -D_CmdKind_Open, -D_CmdKind_Switch, -D_CmdKind_SwitchToPartnerFile, -D_CmdKind_GoToDisassembly, -D_CmdKind_GoToSource, -D_CmdKind_SetFileOverrideLinkSrc, -D_CmdKind_SetFileOverrideLinkDst, -D_CmdKind_SetFileReplacementPath, -D_CmdKind_SetAutoViewRuleType, -D_CmdKind_SetAutoViewRuleViewRule, -D_CmdKind_OpenUser, -D_CmdKind_OpenProject, -D_CmdKind_OpenRecentProject, -D_CmdKind_ApplyUserData, -D_CmdKind_ApplyProjectData, -D_CmdKind_WriteUserData, -D_CmdKind_WriteProjectData, -D_CmdKind_Edit, -D_CmdKind_Accept, -D_CmdKind_Cancel, -D_CmdKind_MoveLeft, -D_CmdKind_MoveRight, -D_CmdKind_MoveUp, -D_CmdKind_MoveDown, -D_CmdKind_MoveLeftSelect, -D_CmdKind_MoveRightSelect, -D_CmdKind_MoveUpSelect, -D_CmdKind_MoveDownSelect, -D_CmdKind_MoveLeftChunk, -D_CmdKind_MoveRightChunk, -D_CmdKind_MoveUpChunk, -D_CmdKind_MoveDownChunk, -D_CmdKind_MoveUpPage, -D_CmdKind_MoveDownPage, -D_CmdKind_MoveUpWhole, -D_CmdKind_MoveDownWhole, -D_CmdKind_MoveLeftChunkSelect, -D_CmdKind_MoveRightChunkSelect, -D_CmdKind_MoveUpChunkSelect, -D_CmdKind_MoveDownChunkSelect, -D_CmdKind_MoveUpPageSelect, -D_CmdKind_MoveDownPageSelect, -D_CmdKind_MoveUpWholeSelect, -D_CmdKind_MoveDownWholeSelect, -D_CmdKind_MoveUpReorder, -D_CmdKind_MoveDownReorder, -D_CmdKind_MoveHome, -D_CmdKind_MoveEnd, -D_CmdKind_MoveHomeSelect, -D_CmdKind_MoveEndSelect, -D_CmdKind_SelectAll, -D_CmdKind_DeleteSingle, -D_CmdKind_DeleteChunk, -D_CmdKind_BackspaceSingle, -D_CmdKind_BackspaceChunk, -D_CmdKind_Copy, -D_CmdKind_Cut, -D_CmdKind_Paste, -D_CmdKind_InsertText, -D_CmdKind_GoToLine, -D_CmdKind_GoToAddress, -D_CmdKind_CenterCursor, -D_CmdKind_ContainCursor, -D_CmdKind_FindTextForward, -D_CmdKind_FindTextBackward, -D_CmdKind_FindNext, -D_CmdKind_FindPrev, -D_CmdKind_FindThread, -D_CmdKind_FindSelectedThread, -D_CmdKind_GoToName, -D_CmdKind_GoToNameAtCursor, -D_CmdKind_ToggleWatchExpression, -D_CmdKind_ToggleWatchExpressionAtCursor, -D_CmdKind_ToggleWatchExpressionAtMouse, -D_CmdKind_SetColumns, -D_CmdKind_ToggleAddressVisibility, -D_CmdKind_ToggleCodeBytesVisibility, -D_CmdKind_EnableEntity, -D_CmdKind_DisableEntity, D_CmdKind_FreezeEntity, D_CmdKind_ThawEntity, -D_CmdKind_RemoveEntity, -D_CmdKind_NameEntity, -D_CmdKind_EditEntity, -D_CmdKind_DuplicateEntity, -D_CmdKind_RelocateEntity, -D_CmdKind_AddBreakpoint, -D_CmdKind_AddAddressBreakpoint, -D_CmdKind_AddFunctionBreakpoint, -D_CmdKind_ToggleBreakpoint, -D_CmdKind_RemoveBreakpoint, -D_CmdKind_EnableBreakpoint, -D_CmdKind_DisableBreakpoint, -D_CmdKind_AddWatchPin, -D_CmdKind_ToggleWatchPin, -D_CmdKind_ToggleBreakpointAtCursor, -D_CmdKind_ToggleWatchPinAtCursor, -D_CmdKind_AddTarget, -D_CmdKind_RemoveTarget, -D_CmdKind_EditTarget, -D_CmdKind_SelectTarget, -D_CmdKind_EnableTarget, -D_CmdKind_DisableTarget, D_CmdKind_Attach, -D_CmdKind_RegisterAsJITDebugger, -D_CmdKind_EntityRefFastPath, -D_CmdKind_SpawnEntityView, -D_CmdKind_FindCodeLocation, -D_CmdKind_Filter, -D_CmdKind_ApplyFilter, -D_CmdKind_ClearFilter, -D_CmdKind_GettingStarted, -D_CmdKind_Commands, -D_CmdKind_Target, -D_CmdKind_Targets, -D_CmdKind_FilePathMap, -D_CmdKind_AutoViewRules, -D_CmdKind_Breakpoints, -D_CmdKind_WatchPins, -D_CmdKind_Scheduler, -D_CmdKind_CallStack, -D_CmdKind_Modules, -D_CmdKind_Watch, -D_CmdKind_Locals, -D_CmdKind_Registers, -D_CmdKind_Globals, -D_CmdKind_ThreadLocals, -D_CmdKind_Types, -D_CmdKind_Procedures, -D_CmdKind_PendingFile, -D_CmdKind_Disassembly, -D_CmdKind_Output, -D_CmdKind_Memory, -D_CmdKind_ExceptionFilters, -D_CmdKind_Settings, -D_CmdKind_PickFile, -D_CmdKind_PickFolder, -D_CmdKind_PickFileOrFolder, -D_CmdKind_CompleteQuery, -D_CmdKind_CancelQuery, -D_CmdKind_ToggleDevMenu, -D_CmdKind_LogMarker, D_CmdKind_COUNT, } D_CmdKind; -typedef enum D_ViewRuleKind -{ -D_ViewRuleKind_Default, -D_ViewRuleKind_Array, -D_ViewRuleKind_Slice, -D_ViewRuleKind_List, -D_ViewRuleKind_ByteSwap, -D_ViewRuleKind_Cast, -D_ViewRuleKind_BaseDec, -D_ViewRuleKind_BaseBin, -D_ViewRuleKind_BaseOct, -D_ViewRuleKind_BaseHex, -D_ViewRuleKind_Only, -D_ViewRuleKind_Omit, -D_ViewRuleKind_NoAddr, -D_ViewRuleKind_Checkbox, -D_ViewRuleKind_ColorRGBA, -D_ViewRuleKind_Text, -D_ViewRuleKind_Disasm, -D_ViewRuleKind_Memory, -D_ViewRuleKind_Graph, -D_ViewRuleKind_Bitmap, -D_ViewRuleKind_Geo3D, -D_ViewRuleKind_COUNT, -} D_ViewRuleKind; - typedef enum D_CmdParamSlot { D_CmdParamSlot_Null, @@ -364,6 +156,32 @@ D_CmdParamSlot_InlineDepth, D_CmdParamSlot_COUNT, } D_CmdParamSlot; +typedef enum D_ViewRuleKind +{ +D_ViewRuleKind_Default, +D_ViewRuleKind_Array, +D_ViewRuleKind_Slice, +D_ViewRuleKind_List, +D_ViewRuleKind_ByteSwap, +D_ViewRuleKind_Cast, +D_ViewRuleKind_BaseDec, +D_ViewRuleKind_BaseBin, +D_ViewRuleKind_BaseOct, +D_ViewRuleKind_BaseHex, +D_ViewRuleKind_Only, +D_ViewRuleKind_Omit, +D_ViewRuleKind_NoAddr, +D_ViewRuleKind_Checkbox, +D_ViewRuleKind_ColorRGBA, +D_ViewRuleKind_Text, +D_ViewRuleKind_Disasm, +D_ViewRuleKind_Memory, +D_ViewRuleKind_Graph, +D_ViewRuleKind_Bitmap, +D_ViewRuleKind_Geo3D, +D_ViewRuleKind_COUNT, +} D_ViewRuleKind; + typedef struct D_Regs D_Regs; struct D_Regs { @@ -494,17 +312,14 @@ struct {B32 *value_ptr; String8 name;} DEV_toggle_table[] = {&DEV_updating_indicator, str8_lit_comp("updating_indicator")}, }; C_LINKAGE_BEGIN -extern Rng1U64 d_reg_slot_range_table[29]; -extern Rng1U64 d_cmd_param_slot_range_table[24]; +extern String8 d_cfg_src_string_table[4]; extern String8 d_entity_kind_display_string_table[30]; extern String8 d_entity_kind_name_lower_table[30]; extern String8 d_entity_kind_name_lower_plural_table[30]; extern String8 d_entity_kind_name_label_table[30]; extern D_EntityKindFlags d_entity_kind_flags_table[30]; -extern String8 d_cfg_src_string_table[4]; -extern D_CmdKind d_cfg_src_load_cmd_kind_table[4]; -extern D_CmdKind d_cfg_src_write_cmd_kind_table[4]; -extern D_CmdKind d_cfg_src_apply_cmd_kind_table[4]; +extern Rng1U64 d_reg_slot_range_table[29]; +extern Rng1U64 d_cmd_param_slot_range_table[24]; C_LINKAGE_END diff --git a/src/dbg_frontend/dbg_frontend.mdesk b/src/dbg_frontend/dbg_frontend.mdesk index 224178d7..bce7824e 100644 --- a/src/dbg_frontend/dbg_frontend.mdesk +++ b/src/dbg_frontend/dbg_frontend.mdesk @@ -10,6 +10,311 @@ //@embed_file df_g_default_code_font_bytes: "../data/Inconsolata-Regular.ttf" @embed_file df_g_icon_file_bytes: "../data/logo.ico" +//////////////////////////////// +//~ rjf: Config Sources + +@data(DF_CmdKind) d_cfg_src_load_cmd_kind_table: +{ + @expand(D_CfgSrcTable a) `DF_CmdKind_$(a.load_cmd)`, +} + +@data(DF_CmdKind) d_cfg_src_write_cmd_kind_table: +{ + @expand(D_CfgSrcTable a) `DF_CmdKind_$(a.write_cmd)`, +} + +@data(DF_CmdKind) d_cfg_src_apply_cmd_kind_table: +{ + @expand(D_CfgSrcTable a) `DF_CmdKind_$(a.apply_cmd)`; +} + +//////////////////////////////// +//~ rjf: Command Table + +@table(name ui_vis ipc_docs_vis q_slot q_ent_kind q_allow_files q_allow_folders q_keep_oi q_select_oi q_is_code q_required canonical_icon string display_name desc search_tags ) +// / | | | \___ ______________________________________________/ | | | | | +// / | | | \ / | | | | | +DF_CmdTable: // | | | | | | | | | | +{ + {Null 0 0 Null Nil 0 0 0 0 0 0 Null "" "" "" "" } + + //- rjf: exiting + {Exit 1 1 Null Nil 0 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" } + + //- rjf: command runner + {RunCommand 1 1 CmdSpec Nil 0 0 0 0 0 1 Null "run_command" "Run Command" "Runs a command from the command palette." "help,cmd" } + + //- rjf: notifications + {Error 0 1 Null Nil 0 0 0 0 0 0 Null "error" "Error" "Notifies of an error." "" } + + //- rjf: os event passthrough + {OSEvent 0 0 Null Nil 0 0 0 0 0 0 Null "os_event" "OS Event" "" "" } + + //- rjf: font sizes + {IncUIFontScale 1 1 Null Nil 0 0 0 0 0 0 Null "inc_ui_font_scale" "Increase UI Font Scale" "Increases the font size used for UI." "" } + {DecUIFontScale 1 1 Null Nil 0 0 0 0 0 0 Null "dec_ui_font_scale" "Decrease UI Font Scale" "Decreases the font size used for UI." "" } + {IncCodeFontScale 1 1 Null Nil 0 0 0 0 0 0 Null "inc_code_font_scale" "Increase Code Font Scale" "Increases the font size used for code." "" } + {DecCodeFontScale 1 1 Null Nil 0 0 0 0 0 0 Null "dec_code_font_scale" "Decrease Code Font Scale" "Decreases the font size used for code." "" } + + //- rjf: windows + {OpenWindow 1 1 Null Nil 0 0 0 0 0 0 Window "open_window" "Open New Window" "Opens a new window." "" } + {CloseWindow 1 1 Null Nil 0 0 0 0 0 0 Window "close_window" "Close Window" "Closes an opened window." "" } + {ToggleFullscreen 1 1 Null Nil 0 0 0 0 0 0 Window "toggle_fullscreen" "Toggle Fullscreen" "Toggles fullscreen view on the active window." "" } + + //- rjf: confirmations + {ConfirmAccept 0 1 Null Nil 0 0 0 0 0 0 Null "confirm_accept" "Confirm Accept" "Accepts the active confirmation prompt." "" } + {ConfirmCancel 0 1 Null Nil 0 0 0 0 0 0 Null "confirm_cancel" "Confirm Cancel" "Cancels the active confirmation prompt." "" } + + //- rjf: panel splitting + {ResetToDefaultPanels 1 1 Null Nil 0 0 0 0 0 0 Window "reset_to_default_panels" "Reset To Default Panel Layout" "Resets the window to the default panel layout." "panel" } + {ResetToCompactPanels 1 1 Null Nil 0 0 0 0 0 0 Window "reset_to_compact_panels" "Reset To Compact Panel Layout" "Resets the window to the compact panel layout." "panel" } + {NewPanelLeft 1 1 Null Nil 0 0 0 0 0 0 XSplit "new_panel_left" "Split Panel Left" "Creates a new panel to the left of the active panel." "panel" } + {NewPanelUp 1 1 Null Nil 0 0 0 0 0 0 YSplit "new_panel_up" "Split Panel Up" "Creates a new panel at the top of the active panel." "panel" } + {NewPanelRight 1 1 Null Nil 0 0 0 0 0 0 XSplit "new_panel_right" "Split Panel Right" "Creates a new panel to the right of the active panel." "panel" } + {NewPanelDown 1 1 Null Nil 0 0 0 0 0 0 YSplit "new_panel_down" "Split Panel Down" "Creates a new panel at the bottom of the active panel." "panel" } + {SplitPanel 0 0 Null Nil 0 0 0 0 0 0 Null "split_panel" "Split Panel" "Creates a new panel in a given direction, and moves a tab to it, if specified." "" } + + //- rjf: panel rotation + {RotatePanelColumns 1 1 Null Nil 0 0 0 0 0 0 Null "rotate_panel_columns" "Rotate Panel Columns" "Rotates all panels at the closest column level of the panel hierarchy." "" } + + //- rjf: focused panel changing + {NextPanel 1 1 Null Nil 0 0 0 0 0 0 RightArrow "next_panel" "Focus Next Panel" "Cycles the active panel forward." "" } + {PrevPanel 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "prev_panel" "Focus Previous Panel" "Cycles the active panel backwards." "" } + {FocusPanel 0 0 Null Nil 0 0 0 0 0 0 Null "focus_panel" "Focus Panel" "Focuses a new panel." "" } + {FocusPanelRight 1 1 Null Nil 0 0 0 0 0 0 RightArrow "focus_panel_right" "Focus Panel Right" "Focuses a panel rightward of the currently focused panel." "" } + {FocusPanelLeft 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "focus_panel_left" "Focus Panel Left" "Focuses a panel leftward of the currently focused panel." "" } + {FocusPanelUp 1 1 Null Nil 0 0 0 0 0 0 UpArrow "focus_panel_up" "Focus Panel Up" "Focuses a panel upward of the currently focused panel." "" } + {FocusPanelDown 1 1 Null Nil 0 0 0 0 0 0 DownArrow "focus_panel_down" "Focus Panel Down" "Focuses a panel downward of the currently focused panel." "" } + + //- rjf: undo/redo + {Undo 1 1 Null Nil 0 0 0 0 0 0 Undo "undo" "Undo" "Undoes the previous action." "" } + {Redo 1 1 Null Nil 0 0 0 0 0 0 Redo "redo" "Redo" "Redoes the first previously undone action." "" } + + //- rjf: focus history + {GoBack 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "go_back" "Go Back" "Returns to the previously selected panel and tab in recorded history." "" } + {GoForward 1 1 Null Nil 0 0 0 0 0 0 RightArrow "go_forward" "Go Forward" "Returns to the next selected panel and tab in recorded history." "" } + + //- rjf: panel removal + {ClosePanel 1 1 Null Nil 0 0 0 0 0 0 ClosePanel "close_panel" "Close Panel" "Closes the currently active panel." "" } + + //- rjf: panel tab + {NextTab 1 1 Null Nil 0 0 0 0 0 0 RightArrow "next_tab" "Focus Next Tab" "Focuses the next tab on the active panel." "" } + {PrevTab 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "prev_tab" "Focus Previous Tab" "Focuses the previous tab on the active panel." "" } + {MoveTabRight 1 1 Null Nil 0 0 0 0 0 0 RightArrow "move_tab_right" "Move Tab Right" "Moves the selected tab right one slot." "" } + {MoveTabLeft 1 1 Null Nil 0 0 0 0 0 0 LeftArrow "move_tab_left" "Move Tab Left" "Moves the selected tab left one slot." "" } + {OpenTab 0 0 Null Nil 0 0 0 0 0 0 Null "open_tab" "Open Tab" "Opens a new tab with the parameterized view specification." "" } + {CloseTab 1 1 Null Nil 0 0 0 0 0 0 X "close_tab" "Close Tab" "Closes the currently opened tab." "" } + {MoveTab 0 0 Null Nil 0 0 0 0 0 0 Null "move_tab" "Move Tab" "Moves a tab to a new panel." "" } + {TabBarTop 1 1 Null Nil 0 0 0 0 0 0 UpArrow "tab_bar_top" "Anchor Tab Bar To Top" "Anchors a panel's tab bar to the top of the panel." "" } + {TabBarBottom 1 1 Null Nil 0 0 0 0 0 0 DownArrow "tab_bar_bottom" "Anchor Tab Bar To Bottom" "Anchors a panel's tab bar to the bottom of the panel." "" } + + //- rjf: files + {SetCurrentPath 0 1 Null Nil 0 0 0 0 0 0 FileOutline "set_current_path" "Set Current Path" "Sets the debugger's current path, which is used as a starting point when browsing for files." "" } + {Open 1 1 FilePath Nil 1 0 0 0 0 1 FileOutline "open" "Open" "Opens a file." "code,source,file" } + {Switch 1 1 Entity File 0 0 0 0 0 1 FileOutline "switch" "Switch" "Switches to a loaded file." "code,source,file" } + {SwitchToPartnerFile 1 1 Null Nil 0 0 0 0 0 0 FileOutline "switch_to_partner_file" "Switch To Partner File" "Switches to the focused file's partner; or from header to implementation or vice versa." "code,source,file" } + + //- rjf: source <-> disasm + {GoToDisassembly 1 1 Null Nil 0 0 0 0 0 0 Glasses "go_to_disassembly" "Go To Disassembly" "Goes to the disassembly, if any, for a given source code line." "code,source,disassembly,disasm" } + {GoToSource 1 1 Null Nil 0 0 0 0 0 0 FileOutline "go_to_source" "Go To Source" "Goes to the source code, if any, for a given disassembly line." "code,source,disassembly,disasm" } + + //- rjf: override file links + {SetFileOverrideLinkSrc 0 0 Null Nil 0 0 0 0 0 0 Null "set_file_override_link_src" "Set File Override Link Source" "Sets the source path for an override file link." "" } + {SetFileOverrideLinkDst 0 0 Null Nil 0 0 0 0 0 0 Null "set_file_override_link_dst" "Set File Override Link Destination" "Sets the destination path for an override file link." "" } + {SetFileReplacementPath 0 0 Null Nil 0 0 0 0 0 0 Null "set_file_replacement_path" "Set File Replacement Path" "Sets the path which should be used as the replacement for the passed file." "" } + + //- rjf: auto view rules + {SetAutoViewRuleType 0 0 Null Nil 0 0 0 0 0 0 Null "set_auto_view_rule_type" "Set Auto View Rule Type" "Sets the type for an auto view rule." "" } + {SetAutoViewRuleViewRule 0 0 Null Nil 0 0 0 0 0 0 Null "set_auto_view_rule_view_rule""Set Auto View Rule View Rule" "Sets the view rule string for an auto view rule." "" } + + //- rjf: setting config paths + {OpenUser 1 1 FilePath Nil 1 0 0 0 0 1 Person "open_user" "Open User" "Opens a user file path, immediately loading it, and begins autosaving to it." "load,user,project,layout" } + {OpenProject 1 1 FilePath Nil 1 0 0 0 0 1 Briefcase "open_project" "Open Project" "Opens a project file path, immediately loading it, and begins autosaving to it." "project,project,session" } + {OpenRecentProject 1 1 Entity RecentProject 0 0 0 0 0 1 Briefcase "open_recent_project" "Open Recent Project" "Opens a recently used project file." "project,project,session" } + + //- rjf: loading/applying stateful config changes + {ApplyUserData 0 0 Null Nil 0 0 0 0 0 0 Null "apply_user_data" "Apply User Data" "Applies user data from the active user file." "" } + {ApplyProjectData 0 0 Null Nil 0 0 0 0 0 0 Null "apply_project_data" "Apply Project Data" "Applies project data from the active project file." "" } + + //- rjf: writing config changes + {WriteUserData 0 1 Null Nil 0 0 0 0 0 0 Null "write_user_data" "Write User Data" "Writes user data to the active user file." "" } + {WriteProjectData 0 1 Null Nil 0 0 0 0 0 0 Null "write_project_data" "Write Project Data" "Writes project data to the active project file." "" } + + //- rjf: meta controls + {Edit 1 1 Null Nil 0 0 0 0 0 0 Pencil "edit" "Edit" "Edits the current selection." "" } + {Accept 1 1 Null Nil 0 0 0 0 0 0 CheckFilled "accept" "Accept" "Accepts current changes, or answers prompts in the affirmative." "" } + {Cancel 1 1 Null Nil 0 0 0 0 0 0 X "cancel" "Cancel" "Rejects current changes, exits temporary menus, or answers prompts in the negative." "" } + + //- rjf: directional movement & text controls + {MoveLeft 1 1 Null Nil 0 0 0 0 0 0 Null "move_left" "Move Left" "Moves the cursor or selection left." "" } + {MoveRight 1 1 Null Nil 0 0 0 0 0 0 Null "move_right" "Move Right" "Moves the cursor or selection right." "" } + {MoveUp 1 1 Null Nil 0 0 0 0 0 0 Null "move_up" "Move Up" "Moves the cursor or selection up." "" } + {MoveDown 1 1 Null Nil 0 0 0 0 0 0 Null "move_down" "Move Down" "Moves the cursor or selection down." "" } + {MoveLeftSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_left_select" "Move Left Select" "Moves the cursor or selection left, while selecting." "" } + {MoveRightSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_right_select" "Move Right Select" "Moves the cursor or selection right, while selecting." "" } + {MoveUpSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_select" "Move Up Select" "Moves the cursor or selection up, while selecting." "" } + {MoveDownSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_select" "Move Down Select" "Moves the cursor or selection down, while selecting." "" } + {MoveLeftChunk 1 1 Null Nil 0 0 0 0 0 0 Null "move_left_chunk" "Move Left Select" "Moves the cursor or selection left one chunk." "" } + {MoveRightChunk 1 1 Null Nil 0 0 0 0 0 0 Null "move_right_chunk" "Move Right Select" "Moves the cursor or selection right one chunk." "" } + {MoveUpChunk 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_chunk" "Move Up Chunk" "Moves the cursor or selection up one chunk." "" } + {MoveDownChunk 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_chunk" "Move Down Chunk" "Moves the cursor or selection down one chunk." "" } + {MoveUpPage 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_page" "Move Up Page" "Moves the cursor or selection up one page." "" } + {MoveDownPage 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_page" "Move Down Page" "Moves the cursor or selection down one page." "" } + {MoveUpWhole 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_whole" "Move Up Whole" "Moves the cursor or selection to the beginning of the relevant content." "" } + {MoveDownWhole 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_whole" "Move Down Whole" "Moves the cursor or selection to the end of the relevant content." "" } + {MoveLeftChunkSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_left_chunk_select" "Move Left Chunk Select" "Moves the cursor or selection left one chunk." "" } + {MoveRightChunkSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_right_chunk_select" "Move Right Chunk Select" "Moves the cursor or selection right one chunk." "" } + {MoveUpChunkSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_chunk_select" "Move Up Chunk Select" "Moves the cursor or selection up one chunk." "" } + {MoveDownChunkSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_chunk_select" "Move Down Chunk Select" "Moves the cursor or selection down one chunk." "" } + {MoveUpPageSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_page_select" "Move Up Page Select" "Moves the cursor or selection up one page, while selecting." "" } + {MoveDownPageSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_page_select" "Move Down Page Select" "Moves the cursor or selection down one page, while selecting." "" } + {MoveUpWholeSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_whole_select" "Move Up Whole Select" "Moves the cursor or selection to the beginning of the relevant content, while selecting." "" } + {MoveDownWholeSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_whole_select" "Move Down Whole Select" "Moves the cursor or selection to the end of the relevant content, while selecting." "" } + {MoveUpReorder 1 1 Null Nil 0 0 0 0 0 0 Null "move_up_reorder" "Move Up Reorder" "Moves the cursor or selection up, while swapping the currently selected element with that upward." "" } + {MoveDownReorder 1 1 Null Nil 0 0 0 0 0 0 Null "move_down_reorder" "Move Down Reorder" "Moves the cursor or selection down, while swapping the currently selected element with that downward." "" } + {MoveHome 1 1 Null Nil 0 0 0 0 0 0 Null "move_home" "Move Home" "Moves the cursor to the beginning of the line." "" } + {MoveEnd 1 1 Null Nil 0 0 0 0 0 0 Null "move_end" "Move End" "Moves the cursor to the end of the line." "" } + {MoveHomeSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_home_select" "Move Home Select" "Moves the cursor to the beginning of the line, while selecting." "" } + {MoveEndSelect 1 1 Null Nil 0 0 0 0 0 0 Null "move_end_select" "Move End Select" "Moves the cursor to the end of the line, while selecting." "" } + {SelectAll 1 1 Null Nil 0 0 0 0 0 0 Null "select_all" "Select All" "Selects everything possible." "" } + {DeleteSingle 1 1 Null Nil 0 0 0 0 0 0 Null "delete_single" "Delete Single" "Deletes a single element to the right of the cursor, or the active selection." "" } + {DeleteChunk 1 1 Null Nil 0 0 0 0 0 0 Null "delete_chunk" "Delete Chunk" "Deletes a chunk to the right of the cursor, or the active selection." "" } + {BackspaceSingle 1 1 Null Nil 0 0 0 0 0 0 Null "backspace_single" "Backspace Single" "Deletes a single element to the left of the cursor, or the active selection." "" } + {BackspaceChunk 1 1 Null Nil 0 0 0 0 0 0 Null "backspace_chunk" "Backspace Chunk" "Deletes a chunk to the left of the cursor, or the active selection." "" } + {Copy 1 1 Null Nil 0 0 0 0 0 0 Clipboard "copy" "Copy" "Copies the active selection to the clipboard." "" } + {Cut 1 1 Null Nil 0 0 0 0 0 0 Clipboard "cut" "Cut" "Copies the active selection to the clipboard, then deletes it." "" } + {Paste 1 1 Null Nil 0 0 0 0 0 0 Clipboard "paste" "Paste" "Pastes the current contents of the clipboard." "" } + {InsertText 0 1 Null Nil 0 0 0 0 0 0 Null "insert_text" "Insert Text" "Inserts the text that was used to cause this command." "" } + + //- rjf: code navigation + {GoToLine 1 1 TextPoint Nil 0 0 0 0 1 1 Null "goto_line" "Go To Line" "Jumps to a line number in the current code file." "" } + {GoToAddress 1 1 VirtualAddr Nil 0 0 0 0 1 1 Null "goto_address" "Go To Address" "Jumps to an address in the current memory or disassembly view." "" } + {CenterCursor 1 1 Null Nil 0 0 0 0 0 0 Null "center_cursor" "Center Cursor" "Snaps the current code view to center the cursor." "" } + {ContainCursor 1 1 Null Nil 0 0 0 0 0 0 Null "contain_cursor" "Contain Cursor" "Snaps the current code view to contain the cursor." "" } + {FindTextForward 1 1 String Nil 0 0 1 1 1 1 Find "find_text_forward" "Find Text (Forward)" "Searches the current code file forward (from the cursor) for a string." "" } + {FindTextBackward 1 1 String Nil 0 0 1 1 1 1 Find "find_text_backward" "Find Text (Backwards)" "Searches the current code file backwards (from the cursor) for a string." "" } + {FindNext 1 1 Null Nil 0 0 1 0 0 0 Find "find_next" "Find Next" "Searches the current code file forward (from the cursor) for the last searched string." "" } + {FindPrev 1 1 Null Nil 0 0 1 0 0 0 Find "find_prev" "Find Previous" "Searches the current code file backwards (from the cursor) for the last searched string." "" } + + //- rjf: thread finding + {FindThread 1 1 Entity Thread 0 0 0 0 0 1 Find "find_thread" "Find Thread" "Jumps to the passed thread in either source code, disassembly, or both if they're already open." "" } + {FindSelectedThread 1 1 Null Nil 0 0 0 0 0 0 Find "find_selected_thread" "Find Selected Thread" "Jumps to the selected thread in either source code, disassembly, or both if they're already open." "" } + + //- rjf: name finding + {GoToName 1 1 String Nil 0 0 0 0 1 1 Null "goto_name" "Go To Name" "Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible." "" } + {GoToNameAtCursor 1 1 Null Nil 0 0 0 0 0 0 Null "goto_name_at_cursor" "Go To Name At Cursor" "Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible." "" } + + //- rjf: watch expressions + {ToggleWatchExpression 1 1 Null Nil 0 0 0 0 0 0 Binoculars "toggle_watch_expr" "Toggle Watch Expression" "Adds or removes an expression to an opened watch view." "" } + {ToggleWatchExpressionAtCursor 1 1 Null Nil 0 0 0 0 0 0 Binoculars "toggle_watch_expr_at_cursor" "Toggle Watch Expression At Cursor" "Adds or removes the expression that the cursor or selection is currently over to an opened watch view." "" } + {ToggleWatchExpressionAtMouse 1 1 Null Nil 0 0 0 0 0 0 Binoculars "toggle_watch_expr_at_mouse" "Toggle Watch Expression At Mouse" "Adds or removes the expression that the mouse is currently over to an opened watch view." "" } + + //- rjf: memory view parameterization + {SetColumns 1 1 Index Nil 0 0 0 0 1 1 Thumbnails "set_columns" "Set Columns" "Sets the number of columns for a memory view." "" } + + //- rjf: disassembly view parameterization + {ToggleAddressVisibility 1 1 Null Nil 0 0 0 0 0 0 Thumbnails "toggle_address_visibility" "Toggle Address Visibility" "Toggles the visibility of addresses in a disassembly view." "" } + {ToggleCodeBytesVisibility 1 1 Null Nil 0 0 0 0 0 0 Thumbnails "toggle_code_bytes_visibility""Toggle Code Bytes Visibility" "Toggles the visibility of machine code bytes in a disassembly view." "" } + + //- rjf: general entity operations + {EnableEntity 0 0 Null Nil 0 0 0 0 0 0 Null "enable_entity" "Enable Entity" "Enables an entity." "" } + {DisableEntity 0 0 Null Nil 0 0 0 0 0 0 Null "disable_entity" "Disable Entity" "Disables an entity." "" } + {RemoveEntity 0 0 Null Nil 0 0 0 0 0 0 Null "remove_entity" "Remove Entity" "Removes an entity." "" } + {NameEntity 0 0 Null Nil 0 0 0 0 0 0 Null "name_entity" "Name Entity" "Equips an entity with a name." "" } + {EditEntity 0 0 Null Nil 0 0 0 0 0 0 Null "edit_entity" "Edit Entity" "Opens the editor for an entity." "" } + {DuplicateEntity 0 0 Null Nil 0 0 0 0 0 0 Null "duplicate_entity" "Duplicate Entity" "Duplicates an entity." "" } + {RelocateEntity 0 0 Null Nil 0 0 0 0 0 0 Null "relocate_entity" "Relocate Entity" "Relocates an entity." "" } + + //- rjf: breakpoints + {AddBreakpoint 0 1 Null Nil 0 0 0 0 0 0 CircleFilled "add_breakpoint" "Add Breakpoint" "Places a breakpoint at a given location (file path and line number, address, or symbol name)." "" } + {AddAddressBreakpoint 1 0 VirtualAddr Nil 0 0 0 0 1 1 CircleFilled "add_address_breakpoint" "Add Address Breakpoint" "Places a breakpoint on the specified address." "" } + {AddFunctionBreakpoint 1 0 String Nil 0 0 0 0 1 1 CircleFilled "add_function_breakpoint" "Add Function Breakpoint" "Places a breakpoint on the first address(es) of the specified function." "" } + {ToggleBreakpoint 0 1 Null Nil 0 0 0 0 0 0 CircleFilled "toggle_breakpoint" "Toggle Breakpoint" "Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)." "" } + {RemoveBreakpoint 1 1 Entity Breakpoint 0 0 0 0 0 1 Trash "remove_breakpoint" "Remove Breakpoint" "Removes an existing breakpoint." "" } + {EnableBreakpoint 1 1 Entity Breakpoint 0 0 0 0 0 1 CheckFilled "enable_breakpoint" "Enable Breakpoint" "Enables a breakpoint." "" } + {DisableBreakpoint 1 1 Entity Breakpoint 0 0 0 0 0 1 CheckHollow "disable_breakpoint" "Disable Breakpoint" "Disables a breakpoint." "" } + + //- rjf: watch pins + {AddWatchPin 0 1 Null Nil 0 0 0 0 0 0 Binoculars "add_watch_pin" "Add Watch Pin" "Places a watch pin at a given location (file path and line number or address)." "" } + {ToggleWatchPin 0 0 Null Nil 0 0 0 0 0 0 Binoculars "toggle_watch_pin" "Toggle Watch Pin" "Places or removes a watch pin at a given location (file path and line number or address)." "" } + + //- rjf: cursor operations + {ToggleBreakpointAtCursor 1 1 Null Nil 0 0 0 0 0 0 CircleFilled "toggle_breakpoint_cursor" "Toggle Breakpoint At Cursor" "Places or removes a breakpoint on the line on which the active cursor sits." "" } + {ToggleWatchPinAtCursor 1 1 String Nil 0 0 0 0 1 1 Binoculars "toggle_watch_pin_at_cursor" "Toggle Watch Pin At Cursor" "Places or removes a watch pin at the cursor on the currently active file." "" } + + //- rjf: targets + {AddTarget 1 1 FilePath Nil 1 0 0 0 0 1 Target "add_target" "Add Target" "Adds a new target." "application,executable,debug" } + {RemoveTarget 1 1 Entity Target 0 0 0 0 0 1 Trash "remove_target" "Remove Target" "Removes an existing target." "delete,remove,target" } + {EditTarget 1 1 Entity Target 0 0 0 0 0 1 Pencil "edit_target" "Edit Target" "Edits an existing target." "" } + {SelectTarget 1 1 Entity Target 0 0 0 0 0 1 Target "select_target" "Select Target" "Selects a target." "" } + {EnableTarget 1 1 Entity Target 0 0 0 0 0 1 CheckFilled "enable_target" "Enable Target" "Enables a target, in addition to all targets currently enabled." "" } + {DisableTarget 1 1 Entity Target 0 0 0 0 0 1 CheckHollow "disable_target" "Disable Target" "Disables a target." "" } + + //- rjf: attaching + {RegisterAsJITDebugger 1 1 Null Nil 0 0 0 0 0 0 Null "register_as_jit_debugger" "Register As Just-In-Time (JIT) Debugger" "Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system." "" } + + //- rjf: catchall general entity activation paths (drag/drop, clicking) + {EntityRefFastPath 0 0 Null Nil 0 0 0 0 0 0 Null "entity_ref_fast_path" "Entity Reference Fast Path" "Activates the default behavior when clicking an entity reference." "" } + {SpawnEntityView 0 0 Null Nil 0 0 0 0 0 0 Null "spawn_entity_view" "Spawn Entity View" "Spawns a new view, given an entity and other parameterizations." "" } + {FindCodeLocation 0 1 FilePath Nil 0 0 0 0 0 1 FileOutline "find_code_location" "Find Code Location" "Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary." "" } + + //- rjf: general-purpose view filtering + {Filter 1 1 Null Nil 0 0 0 0 0 0 Find "filter" "Filter" "Begins filtering the active view." "sort,search,filter,find" } + {ApplyFilter 1 1 Null Nil 0 0 0 0 0 0 Find "apply_filter" "Apply Filter" "Applies the typed filter to the active view." "sort,search,filter,find,apply" } + {ClearFilter 1 1 Null Nil 0 0 0 0 0 0 Find "clear_filter" "Clear Filter" "Clears the filter applied to the active view." "sort,search,filter,find,clear" } + + //- rjf: view drivers + {GettingStarted 1 1 Null Nil 0 0 0 0 0 0 QuestionMark "getting_started" "Getting Started" "Opens the menu for information on getting started." "tutorial,help" } + {Commands 0 0 Null Nil 0 0 0 0 0 0 List "commands" "Commands" "Opens the list of all commands." "" } + {Target 0 0 Null Nil 0 0 0 0 0 0 Target "target" "Target" "Opens the editor for a target." "" } + {Targets 1 1 Null Nil 0 0 0 0 0 0 Target "targets" "Targets" "Opens the list of all targets." "" } + {FilePathMap 1 1 Null Nil 0 0 0 0 0 0 FileOutline "file_path_map" "File Path Map" "Opens the file path mapping editor." "" } + {AutoViewRules 1 1 Null Nil 0 0 0 0 0 0 Binoculars "auto_view_rules" "Auto View Rules" "Opens the auto view rule editor." "" } + {Breakpoints 1 1 Null Nil 0 0 0 0 0 0 CircleFilled "breakpoints" "Breakpoints" "Opens the breakpoints view." "" } + {WatchPins 1 1 Null Nil 0 0 0 0 0 0 Pin "watch_pins" "Watch Pins" "Opens the watch pins view." "" } + {Scheduler 1 1 Null Nil 0 0 0 0 0 0 Scheduler "scheduler" "Scheduler" "Opens the scheduler view, for process and thread controls." "threads,processes,targets" } + {CallStack 1 1 Null Nil 0 0 0 0 0 0 Thread "call_stack" "Call Stack" "Opens the call stack view." "callstack,thread,unwind" } + {Modules 1 1 Null Nil 0 0 0 0 0 0 Module "modules" "Modules" "Opens the modules view." "" } + {Watch 1 1 Null Nil 0 0 0 0 0 0 Binoculars "watch" "Watch" "Opens a watch view." "" } + {Locals 1 1 Null Nil 0 0 0 0 0 0 Binoculars "locals" "Locals" "Opens a locals view." "" } + {Registers 1 1 Null Nil 0 0 0 0 0 0 Binoculars "registers" "Registers" "Opens a registers view." "" } + {Globals 1 1 Null Nil 0 0 0 0 0 0 Binoculars "globals" "Globals" "Opens a globals view." "" } + {ThreadLocals 1 1 Null Nil 0 0 0 0 0 0 Binoculars "thread_locals" "Thread Locals" "Opens a thread locals view." "" } + {Types 1 1 Null Nil 0 0 0 0 0 0 Binoculars "types" "Types" "Opens a types view." "" } + {Procedures 1 1 Null Nil 0 0 0 0 0 0 Binoculars "procedures" "Procedures" "Opens a procedures view." "" } + {PendingFile 0 0 Null Nil 0 0 0 0 0 0 FileOutline "pending_file" "Pending File" "Opens a view which asynchronously analyzes the file path parameter, then picks an appropriate viewer for it." "" } + {Disassembly 1 1 Null Nil 0 0 0 0 0 0 Glasses "disassembly" "Disassembly" "Opens the disassembly view." "disasm" } + {Output 1 1 Null Nil 0 0 0 0 0 0 List "output" "Output" "Opens an output view." "" } + {Memory 1 1 Null Nil 0 0 0 0 0 0 Grid "memory" "Memory" "Opens a memory view." "" } + {ExceptionFilters 1 1 Null Nil 0 0 0 0 0 0 Gear "exception_filters" "Exception Filters" "Opens the exception filters view." "exceptions,filters" } + {Settings 1 1 Null Nil 0 0 0 0 0 0 Gear "settings" "Settings" "Opens the settings view." "theme,color,scheme,options" } + + //- rjf: queries + {PickFile 0 0 FilePath Nil 1 0 0 0 0 1 FileOutline "pick_file" "Pick File" "Opens the file browser to pick a file." "" } + {PickFolder 0 0 FilePath Nil 0 1 0 0 0 1 FolderOpenFilled "pick_folder" "Pick Folder" "Opens the file browser to pick a folder." "" } + {PickFileOrFolder 0 0 FilePath Nil 1 1 0 0 0 1 FileOutline "pick_file_or_folder" "Pick File/Folder" "Opens the file browser to pick a file or folder." "" } + + //- rjf: query completion + {CompleteQuery 0 0 Null Nil 0 0 0 0 0 0 Null "complete_query" "Complete Query" "Completes a query." "" } + {CancelQuery 0 0 Null Nil 0 0 0 0 0 0 Null "cancel_query" "Cancel Query" "Cancels a query." "" } + + //- rjf: developer commands + {ToggleDevMenu 1 1 Null Nil 0 0 0 0 0 0 Null "toggle_dev_menu" "Toggle Developer Menu" "Opens and closes the developer menu." "" } + {LogMarker 1 1 Null Nil 0 0 0 0 0 0 Null "log_marker" "Log Marker" "Logs a marker in the application log, to denote specific points in time within the log." "" } +} + +@enum DF_CmdKind: +{ + @expand(DF_CmdTable, a) `$(a.name)`, + COUNT, +} + +@data(D_CmdSpecInfo) @c_file df_cmd_kind_spec_info_table: +{ + @expand(DF_CmdTable, a) + ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), (D_CmdSpecFlag_ListInUI*$(a.ui_vis))|(D_CmdSpecFlag_ListInIPCDocs*$(a.ipc_docs_vis)), {D_CmdParamSlot_$(a.q_slot), D_EntityKind_$(a.q_ent_kind), (D_CmdQueryFlag_AllowFiles*$(a.q_allow_files))|(D_CmdQueryFlag_AllowFolders*$(a.q_allow_folders))|(D_CmdQueryFlag_CodeInput*$(a.q_is_code))|(D_CmdQueryFlag_KeepOldInput*$(a.q_keep_oi))|(D_CmdQueryFlag_SelectOldInput*$(a.q_select_oi))|(D_CmdQueryFlag_Required*$(a.q_required))}}```; +} + //////////////////////////////// //~ rjf: Default Bindings @@ -380,7 +685,7 @@ DF_ViewTable: @data(DF_IconKind) df_cmd_kind_icon_kind_table: { - @expand(D_CoreCmdTable a) `DF_IconKind_$(a.canonical_icon)` + @expand(DF_CmdTable a) `DF_IconKind_$(a.canonical_icon)` } @data(DF_IconKind) df_entity_kind_icon_kind_table: @@ -806,7 +1111,7 @@ raddbg_readme: @p "A list of commands and their descriptions are below:"; @unordered_list { - @expand(D_CoreCmdTable a) @p "$(a.ipc_docs_vis == 1 -> '`'..a.display_name..'` '..'(`'..a.string..'`) '..a.desc)"; + @expand(D_CmdTable a) @p "$(a.ipc_docs_vis == 1 -> '`'..a.display_name..'` '..'(`'..a.string..'`) '..a.desc)"; } @subtitle "Targets"; diff --git a/src/dbg_frontend/dbg_frontend_core.c b/src/dbg_frontend/dbg_frontend_core.c index 2a6a2b6f..163618fa 100644 --- a/src/dbg_frontend/dbg_frontend_core.c +++ b/src/dbg_frontend/dbg_frontend_core.c @@ -1099,7 +1099,7 @@ df_window_from_os_handle(OS_Handle os) #endif internal void -df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) +df_window_update_and_render(Arena *arena, DF_Window *ws) { ProfBeginFunction(); @@ -1136,7 +1136,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) (d_entity_is_nil(entity) && view->spec->info.flags & DF_ViewSpecFlag_ParameterizedByEntity)) { D_CmdParams params = df_cmd_params_from_view(ws, panel, view); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_CloseTab)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_CloseTab), ¶ms); } } } @@ -1148,16 +1148,13 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) ProfScope("do commands") { Temp scratch = scratch_begin(&arena, 1); - for(D_CmdNode *cmd_node = cmds->first; - cmd_node != 0; - cmd_node = cmd_node->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { temp_end(scratch); // rjf: get command info - D_Cmd *cmd = &cmd_node->cmd; D_CmdParams params = cmd->params; - D_CmdKind kind = d_cmd_kind_from_string(cmd->spec->info.string); + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); // rjf: mismatched window => skip if(df_window_from_handle(params.window) != ws) @@ -1176,7 +1173,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) switch(kind) { //- rjf: OS events - case D_CmdKind_OSEvent: + case DF_CmdKind_OSEvent: { OS_Event *os_event = params.os_event; if(os_event != 0 && os_handle_match(os_event->window, ws->os)) @@ -1208,21 +1205,21 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) }break; //- rjf: meta controls - case D_CmdKind_Edit: + case DF_CmdKind_Edit: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Press; evt.slot = UI_EventActionSlot_Edit; ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_Accept: + case DF_CmdKind_Accept: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Press; evt.slot = UI_EventActionSlot_Accept; ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_Cancel: + case DF_CmdKind_Cancel: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Press; @@ -1236,7 +1233,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) // can be used by the UI build phase for navigation and stuff, as well // as builder codepaths that want to use these controls to modify text. // - case D_CmdKind_MoveLeft: + case DF_CmdKind_MoveLeft: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1245,7 +1242,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(-1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveRight: + case DF_CmdKind_MoveRight: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1254,7 +1251,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUp: + case DF_CmdKind_MoveUp: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1263,7 +1260,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDown: + case DF_CmdKind_MoveDown: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1272,7 +1269,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveLeftSelect: + case DF_CmdKind_MoveLeftSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1281,7 +1278,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(-1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveRightSelect: + case DF_CmdKind_MoveRightSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1290,7 +1287,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUpSelect: + case DF_CmdKind_MoveUpSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1299,7 +1296,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDownSelect: + case DF_CmdKind_MoveDownSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1308,7 +1305,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveLeftChunk: + case DF_CmdKind_MoveLeftChunk: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1317,7 +1314,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(-1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveRightChunk: + case DF_CmdKind_MoveRightChunk: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1326,7 +1323,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUpChunk: + case DF_CmdKind_MoveUpChunk: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1335,7 +1332,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDownChunk: + case DF_CmdKind_MoveDownChunk: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1344,7 +1341,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUpPage: + case DF_CmdKind_MoveUpPage: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1352,7 +1349,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDownPage: + case DF_CmdKind_MoveDownPage: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1360,7 +1357,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUpWhole: + case DF_CmdKind_MoveUpWhole: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1368,7 +1365,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDownWhole: + case DF_CmdKind_MoveDownWhole: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1376,7 +1373,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveLeftChunkSelect: + case DF_CmdKind_MoveLeftChunkSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1385,7 +1382,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(-1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveRightChunkSelect: + case DF_CmdKind_MoveRightChunkSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1394,7 +1391,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUpChunkSelect: + case DF_CmdKind_MoveUpChunkSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1403,7 +1400,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDownChunkSelect: + case DF_CmdKind_MoveDownChunkSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1412,7 +1409,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUpPageSelect: + case DF_CmdKind_MoveUpPageSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1421,7 +1418,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDownPageSelect: + case DF_CmdKind_MoveDownPageSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1430,7 +1427,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUpWholeSelect: + case DF_CmdKind_MoveUpWholeSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1439,7 +1436,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDownWholeSelect: + case DF_CmdKind_MoveDownWholeSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1448,7 +1445,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveUpReorder: + case DF_CmdKind_MoveUpReorder: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1457,7 +1454,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, -1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveDownReorder: + case DF_CmdKind_MoveDownReorder: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1466,7 +1463,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+0, +1); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveHome: + case DF_CmdKind_MoveHome: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1474,7 +1471,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(-1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveEnd: + case DF_CmdKind_MoveEnd: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1482,7 +1479,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveHomeSelect: + case DF_CmdKind_MoveHomeSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1491,7 +1488,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(-1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_MoveEndSelect: + case DF_CmdKind_MoveEndSelect: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Navigate; @@ -1500,7 +1497,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_SelectAll: + case DF_CmdKind_SelectAll: { UI_Event evt1 = zero_struct; evt1.kind = UI_EventKind_Navigate; @@ -1514,7 +1511,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt2.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt2); }break; - case D_CmdKind_DeleteSingle: + case DF_CmdKind_DeleteSingle: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Edit; @@ -1523,7 +1520,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_DeleteChunk: + case DF_CmdKind_DeleteChunk: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Edit; @@ -1532,7 +1529,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(+1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_BackspaceSingle: + case DF_CmdKind_BackspaceSingle: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Edit; @@ -1541,7 +1538,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(-1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_BackspaceChunk: + case DF_CmdKind_BackspaceChunk: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Edit; @@ -1550,28 +1547,28 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) evt.delta_2s32 = v2s32(-1, +0); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_Copy: + case DF_CmdKind_Copy: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Edit; evt.flags = UI_EventFlag_Copy|UI_EventFlag_KeepMark; ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_Cut: + case DF_CmdKind_Cut: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Edit; evt.flags = UI_EventFlag_Copy|UI_EventFlag_Delete; ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_Paste: + case DF_CmdKind_Paste: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Text; evt.string = os_get_clipboard_text(ui_build_arena()); ui_event_list_push(ui_build_arena(), &events, &evt); }break; - case D_CmdKind_InsertText: + case DF_CmdKind_InsertText: { UI_Event evt = zero_struct; evt.kind = UI_EventKind_Text; @@ -1651,7 +1648,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) d_regs()->panel = df_handle_from_panel(panel); d_regs()->view = df_handle_from_view(view); DF_ViewCmdFunctionType *do_view_cmds_function = view->spec->info.cmd_hook; - do_view_cmds_function(view, view->params_roots[view->params_read_gen%ArrayCount(view->params_roots)], str8(view->query_buffer, view->query_string_size), cmds); + do_view_cmds_function(view, view->params_roots[view->params_read_gen%ArrayCount(view->params_roots)], str8(view->query_buffer, view->query_string_size)); D_Regs *view_regs = d_pop_regs(); if(panel == ws->focused_panel) { @@ -2044,7 +2041,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) HS_Scope *hs_scope = hs_scope_open(); TxtRng range = ws->code_ctx_menu_range; D_LineList lines = ws->code_ctx_menu_lines; - if(!txt_pt_match(range.min, range.max) && ui_clicked(df_cmd_spec_button(d_cmd_spec_from_kind(D_CmdKind_Copy)))) + if(!txt_pt_match(range.min, range.max) && ui_clicked(df_cmd_spec_button(df_cmd_spec_from_kind(DF_CmdKind_Copy)))) { U128 hash = {0}; TXT_TextInfo info = txt_text_info_from_key_lang(txt_scope, ws->code_ctx_menu_text_key, ws->code_ctx_menu_lang_kind, &hash); @@ -2100,15 +2097,15 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) expr_off_range = txt_expr_off_range_from_info_data_pt(&info, data, range.min); } String8 expr = str8_substr(data, expr_off_range); - d_cmd(D_CmdKind_GoToName, .string = expr); + df_cmd(DF_CmdKind_GoToName, .string = expr); ui_ctx_menu_close(); } if(range.min.line == range.max.line && ui_clicked(df_icon_buttonf(DF_IconKind_CircleFilled, 0, "Toggle Breakpoint"))) { - d_cmd(D_CmdKind_ToggleBreakpoint, - .file_path = ws->code_ctx_menu_file_path, - .text_point = range.min, - .vaddr = ws->code_ctx_menu_vaddr); + df_cmd(DF_CmdKind_ToggleBreakpoint, + .file_path = ws->code_ctx_menu_file_path, + .text_point = range.min, + .vaddr = ws->code_ctx_menu_vaddr); ui_ctx_menu_close(); } if(range.min.line == range.max.line && ui_clicked(df_icon_buttonf(DF_IconKind_Binoculars, 0, "Toggle Watch Expression"))) @@ -2126,16 +2123,16 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) expr_off_range = txt_expr_off_range_from_info_data_pt(&info, data, range.min); } String8 expr = str8_substr(data, expr_off_range); - d_cmd(D_CmdKind_ToggleWatchExpression, .string = expr); + df_cmd(DF_CmdKind_ToggleWatchExpression, .string = expr); ui_ctx_menu_close(); } if(ws->code_ctx_menu_file_path.size == 0 && range.min.line == range.max.line && ui_clicked(df_icon_buttonf(DF_IconKind_FileOutline, 0, "Go To Source"))) { if(lines.first != 0) { - d_cmd(D_CmdKind_FindCodeLocation, - .file_path = lines.first->v.file_path, - .text_point = lines.first->v.pt); + df_cmd(DF_CmdKind_FindCodeLocation, + .file_path = lines.first->v.file_path, + .text_point = lines.first->v.pt); } ui_ctx_menu_close(); } @@ -2153,7 +2150,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) break; } } - d_cmd(D_CmdKind_FindCodeLocation, .entity = d_handle_from_entity(thread), .vaddr = vaddr); + df_cmd(DF_CmdKind_FindCodeLocation, .entity = d_handle_from_entity(thread), .vaddr = vaddr); ui_ctx_menu_close(); } hs_scope_close(hs_scope); @@ -2206,9 +2203,9 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_Signal sig = df_line_editf(DF_LineEditFlag_Border, 0, 0, &ws->entity_ctx_menu_input_cursor, &ws->entity_ctx_menu_input_mark, ws->entity_ctx_menu_input_buffer, sizeof(ws->entity_ctx_menu_input_buffer), &ws->entity_ctx_menu_input_size, 0, entity->string, "%S###entity_name_edit_%p", d_entity_kind_name_label_table[entity->kind], entity); if(ui_committed(sig)) { - d_cmd(D_CmdKind_NameEntity, - .entity = d_handle_from_entity(entity), - .string = str8(ws->entity_ctx_menu_input_buffer, ws->entity_ctx_menu_input_size)); + df_cmd(DF_CmdKind_NameEntity, + .entity = d_handle_from_entity(entity), + .string = str8(ws->entity_ctx_menu_input_buffer, ws->entity_ctx_menu_input_size)); } } @@ -2228,7 +2225,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) { condition = d_entity_alloc(entity, D_EntityKind_Condition); } - d_cmd(D_CmdKind_NameEntity, .entity = d_handle_from_entity(condition), .string = new_string); + df_cmd(DF_CmdKind_NameEntity, .entity = d_handle_from_entity(condition), .string = new_string); } else if(!d_entity_is_nil(condition)) { @@ -2251,7 +2248,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) { exe = d_entity_alloc(entity, D_EntityKind_Executable); } - d_cmd(D_CmdKind_NameEntity, .entity = d_handle_from_entity(exe), .string = new_string); + df_cmd(DF_CmdKind_NameEntity, .entity = d_handle_from_entity(exe), .string = new_string); } else if(!d_entity_is_nil(exe)) { @@ -2274,7 +2271,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) { args = d_entity_alloc(entity, D_EntityKind_Arguments); } - d_cmd(D_CmdKind_NameEntity, .entity = d_handle_from_entity(args), .string = new_string); + df_cmd(DF_CmdKind_NameEntity, .entity = d_handle_from_entity(args), .string = new_string); } else if(!d_entity_is_nil(args)) { @@ -2299,21 +2296,21 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) // rjf: duplicate if(kind_flags & D_EntityKindFlag_CanDuplicate && ui_clicked(df_icon_buttonf(DF_IconKind_XSplit, 0, "Duplicate"))) { - d_cmd(D_CmdKind_DuplicateEntity, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_DuplicateEntity, .entity = d_handle_from_entity(entity)); ui_ctx_menu_close(); } // rjf: edit if(kind_flags & D_EntityKindFlag_CanEdit && ui_clicked(df_icon_buttonf(DF_IconKind_Pencil, 0, "Edit"))) { - d_cmd(D_CmdKind_EditEntity, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_EditEntity, .entity = d_handle_from_entity(entity)); ui_ctx_menu_close(); } // rjf: deletion if(kind_flags & D_EntityKindFlag_CanDelete && ui_clicked(df_icon_buttonf(DF_IconKind_Trash, 0, "Delete"))) { - d_cmd(D_CmdKind_RemoveEntity, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_RemoveEntity, .entity = d_handle_from_entity(entity)); ui_ctx_menu_close(); } @@ -2323,11 +2320,11 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) B32 is_enabled = !entity->disabled; if(!is_enabled && ui_clicked(df_icon_buttonf(DF_IconKind_CheckHollow, 0, "Enable###enabler"))) { - d_cmd(D_CmdKind_EnableEntity, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_EnableEntity, .entity = d_handle_from_entity(entity)); } if(is_enabled && ui_clicked(df_icon_buttonf(DF_IconKind_CheckFilled, 0, "Disable###enabler"))) { - d_cmd(D_CmdKind_DisableEntity, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_DisableEntity, .entity = d_handle_from_entity(entity)); } } @@ -2351,10 +2348,10 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) D_Entity *loc = d_entity_child_from_kind(entity, D_EntityKind_Location); if(!d_entity_is_nil(loc) && ui_clicked(df_icon_buttonf(DF_IconKind_FileOutline, 0, "Go To Location"))) { - d_cmd(D_CmdKind_FindCodeLocation, - .file_path = loc->string, - .text_point = loc->text_point, - .vaddr = loc->vaddr); + df_cmd(DF_CmdKind_FindCodeLocation, + .file_path = loc->string, + .text_point = loc->text_point, + .vaddr = loc->vaddr); ui_ctx_menu_close(); } } @@ -2455,7 +2452,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) { if(ui_clicked(df_icon_buttonf(DF_IconKind_FileOutline, 0, "Find"))) { - d_cmd(D_CmdKind_FindThread, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_FindThread, .entity = d_handle_from_entity(entity)); ui_ctx_menu_close(); } } @@ -2662,14 +2659,14 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) // rjf: filter controls if(view->spec->info.flags & DF_ViewSpecFlag_CanFilter) { - if(ui_clicked(df_cmd_spec_button(d_cmd_spec_from_kind(D_CmdKind_Filter)))) + if(ui_clicked(df_cmd_spec_button(df_cmd_spec_from_kind(DF_CmdKind_Filter)))) { - d_cmd(D_CmdKind_Filter, .view = df_handle_from_view(view)); + df_cmd(DF_CmdKind_Filter, .view = df_handle_from_view(view)); ui_ctx_menu_close(); } - if(ui_clicked(df_cmd_spec_button(d_cmd_spec_from_kind(D_CmdKind_ClearFilter)))) + if(ui_clicked(df_cmd_spec_button(df_cmd_spec_from_kind(DF_CmdKind_ClearFilter)))) { - d_cmd(D_CmdKind_ClearFilter, .view = df_handle_from_view(view)); + df_cmd(DF_CmdKind_ClearFilter, .view = df_handle_from_view(view)); ui_ctx_menu_close(); } } @@ -2677,7 +2674,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) // rjf: close tab if(ui_clicked(df_icon_buttonf(DF_IconKind_X, 0, "Close Tab"))) { - d_cmd(D_CmdKind_CloseTab, .panel = df_handle_from_panel(panel), .view = df_handle_from_view(view)); + df_cmd(DF_CmdKind_CloseTab, .panel = df_handle_from_panel(panel), .view = df_handle_from_view(view)); ui_ctx_menu_close(); } @@ -2761,13 +2758,13 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) DF_Palette(DF_PaletteCode_NeutralPopButton) if(ui_clicked(ui_buttonf("OK")) || (ui_key_match(bg_box->default_nav_focus_hot_key, ui_key_zero()) && ui_slot_press(UI_EventActionSlot_Accept))) { - d_cmd(D_CmdKind_ConfirmAccept); + df_cmd(DF_CmdKind_ConfirmAccept); } UI_CornerRadius10(ui_top_font_size()*0.25f) UI_CornerRadius11(ui_top_font_size()*0.25f) if(ui_clicked(ui_buttonf("Cancel")) || ui_slot_press(UI_EventActionSlot_Cancel)) { - d_cmd(D_CmdKind_ConfirmCancel); + df_cmd(DF_CmdKind_ConfirmCancel); } } ui_spacer(ui_em(3.f, 1.f)); @@ -3147,13 +3144,13 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_PrefWidth(ui_em(50.f, 1.f)) DF_Palette(DF_PaletteCode_ImplicitButton) { - D_CmdKind cmds[] = + D_CmdSpec *cmds[] = { - D_CmdKind_Open, - D_CmdKind_OpenUser, - D_CmdKind_OpenProject, - D_CmdKind_OpenRecentProject, - D_CmdKind_Exit, + df_cmd_spec_from_kind(DF_CmdKind_Open), + df_cmd_spec_from_kind(DF_CmdKind_OpenUser), + df_cmd_spec_from_kind(DF_CmdKind_OpenProject), + df_cmd_spec_from_kind(DF_CmdKind_OpenRecentProject), + df_cmd_spec_from_kind(DF_CmdKind_Exit), }; U32 codepoints[] = { @@ -3174,11 +3171,11 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_PrefWidth(ui_em(50.f, 1.f)) DF_Palette(DF_PaletteCode_ImplicitButton) { - D_CmdKind cmds[] = + D_CmdSpec *cmds[] = { - D_CmdKind_OpenWindow, - D_CmdKind_CloseWindow, - D_CmdKind_ToggleFullscreen, + df_cmd_spec_from_kind(DF_CmdKind_OpenWindow), + df_cmd_spec_from_kind(DF_CmdKind_CloseWindow), + df_cmd_spec_from_kind(DF_CmdKind_ToggleFullscreen), }; U32 codepoints[] = { @@ -3197,21 +3194,21 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_PrefWidth(ui_em(50.f, 1.f)) DF_Palette(DF_PaletteCode_ImplicitButton) { - D_CmdKind cmds[] = + D_CmdSpec *cmds[] = { - D_CmdKind_NewPanelRight, - D_CmdKind_NewPanelDown, - D_CmdKind_ClosePanel, - D_CmdKind_RotatePanelColumns, - D_CmdKind_NextPanel, - D_CmdKind_PrevPanel, - D_CmdKind_CloseTab, - D_CmdKind_NextTab, - D_CmdKind_PrevTab, - D_CmdKind_TabBarTop, - D_CmdKind_TabBarBottom, - D_CmdKind_ResetToDefaultPanels, - D_CmdKind_ResetToCompactPanels, + df_cmd_spec_from_kind(DF_CmdKind_NewPanelRight), + df_cmd_spec_from_kind(DF_CmdKind_NewPanelDown), + df_cmd_spec_from_kind(DF_CmdKind_ClosePanel), + df_cmd_spec_from_kind(DF_CmdKind_RotatePanelColumns), + df_cmd_spec_from_kind(DF_CmdKind_NextPanel), + df_cmd_spec_from_kind(DF_CmdKind_PrevPanel), + df_cmd_spec_from_kind(DF_CmdKind_CloseTab), + df_cmd_spec_from_kind(DF_CmdKind_NextTab), + df_cmd_spec_from_kind(DF_CmdKind_PrevTab), + df_cmd_spec_from_kind(DF_CmdKind_TabBarTop), + df_cmd_spec_from_kind(DF_CmdKind_TabBarBottom), + df_cmd_spec_from_kind(DF_CmdKind_ResetToDefaultPanels), + df_cmd_spec_from_kind(DF_CmdKind_ResetToCompactPanels), }; U32 codepoints[] = { @@ -3240,28 +3237,28 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_PrefWidth(ui_em(50.f, 1.f)) DF_Palette(DF_PaletteCode_ImplicitButton) { - D_CmdKind cmds[] = + D_CmdSpec *cmds[] = { - D_CmdKind_Targets, - D_CmdKind_Scheduler, - D_CmdKind_CallStack, - D_CmdKind_Modules, - D_CmdKind_Output, - D_CmdKind_Memory, - D_CmdKind_Disassembly, - D_CmdKind_Watch, - D_CmdKind_Locals, - D_CmdKind_Registers, - D_CmdKind_Globals, - D_CmdKind_ThreadLocals, - D_CmdKind_Types, - D_CmdKind_Procedures, - D_CmdKind_Breakpoints, - D_CmdKind_WatchPins, - D_CmdKind_FilePathMap, - D_CmdKind_Settings, - D_CmdKind_ExceptionFilters, - D_CmdKind_GettingStarted, + df_cmd_spec_from_kind(DF_CmdKind_Targets), + df_cmd_spec_from_kind(DF_CmdKind_Scheduler), + df_cmd_spec_from_kind(DF_CmdKind_CallStack), + df_cmd_spec_from_kind(DF_CmdKind_Modules), + df_cmd_spec_from_kind(DF_CmdKind_Output), + df_cmd_spec_from_kind(DF_CmdKind_Memory), + df_cmd_spec_from_kind(DF_CmdKind_Disassembly), + df_cmd_spec_from_kind(DF_CmdKind_Watch), + df_cmd_spec_from_kind(DF_CmdKind_Locals), + df_cmd_spec_from_kind(DF_CmdKind_Registers), + df_cmd_spec_from_kind(DF_CmdKind_Globals), + df_cmd_spec_from_kind(DF_CmdKind_ThreadLocals), + df_cmd_spec_from_kind(DF_CmdKind_Types), + df_cmd_spec_from_kind(DF_CmdKind_Procedures), + df_cmd_spec_from_kind(DF_CmdKind_Breakpoints), + df_cmd_spec_from_kind(DF_CmdKind_WatchPins), + df_cmd_spec_from_kind(DF_CmdKind_FilePathMap), + df_cmd_spec_from_kind(DF_CmdKind_Settings), + df_cmd_spec_from_kind(DF_CmdKind_ExceptionFilters), + df_cmd_spec_from_kind(DF_CmdKind_GettingStarted), }; U32 codepoints[] = { @@ -3298,11 +3295,11 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) DF_Palette(DF_PaletteCode_ImplicitButton) { Temp scratch = scratch_begin(&arena, 1); - D_CmdKind cmds[] = + D_CmdSpec *cmds[] = { - D_CmdKind_AddTarget, - D_CmdKind_EditTarget, - D_CmdKind_RemoveTarget, + df_cmd_spec_from_kind(DF_CmdKind_AddTarget), + df_cmd_spec_from_kind(DF_CmdKind_EditTarget), + df_cmd_spec_from_kind(DF_CmdKind_RemoveTarget), }; U32 codepoints[] = { @@ -3327,7 +3324,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_Palette(palette) sig = df_icon_buttonf(DF_IconKind_Target, 0, "%S##%p", target_name, target); if(ui_clicked(sig)) { - d_cmd(D_CmdKind_EditTarget, .entity = d_handle_from_entity(target)); + df_cmd(DF_CmdKind_EditTarget, .entity = d_handle_from_entity(target)); ui_ctx_menu_close(); ws->menu_bar_focused = 0; } @@ -3342,17 +3339,17 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_PrefWidth(ui_em(50.f, 1.f)) DF_Palette(DF_PaletteCode_ImplicitButton) { - D_CmdKind cmds[] = + D_CmdSpec *cmds[] = { - D_CmdKind_Run, - D_CmdKind_KillAll, - D_CmdKind_Restart, - D_CmdKind_Halt, - D_CmdKind_SoftHaltRefresh, - D_CmdKind_StepInto, - D_CmdKind_StepOver, - D_CmdKind_StepOut, - D_CmdKind_Attach, + d_cmd_spec_from_kind(D_CmdKind_Run), + d_cmd_spec_from_kind(D_CmdKind_KillAll), + d_cmd_spec_from_kind(D_CmdKind_Restart), + d_cmd_spec_from_kind(D_CmdKind_Halt), + d_cmd_spec_from_kind(D_CmdKind_SoftHaltRefresh), + d_cmd_spec_from_kind(D_CmdKind_StepInto), + d_cmd_spec_from_kind(D_CmdKind_StepOver), + d_cmd_spec_from_kind(D_CmdKind_StepOut), + d_cmd_spec_from_kind(D_CmdKind_Attach), }; U32 codepoints[] = { @@ -3394,7 +3391,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_Padding(ui_pct(1, 0)) { ui_labelf("Search for commands by pressing "); - D_CmdSpec *spec = d_cmd_spec_from_kind(D_CmdKind_RunCommand); + D_CmdSpec *spec = df_cmd_spec_from_kind(DF_CmdKind_RunCommand); UI_Flags(UI_BoxFlag_DrawBorder) UI_TextAlignment(UI_TextAlign_Center) df_cmd_binding_buttons(spec); @@ -3821,7 +3818,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_Signal user_sig = ui_signal_from_box(user_box); if(ui_clicked(user_sig)) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(D_CmdKind_OpenUser)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(DF_CmdKind_OpenUser)); } } @@ -3854,7 +3851,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_Signal prof_sig = ui_signal_from_box(prof_box); if(ui_clicked(prof_sig)) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(D_CmdKind_OpenProject)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(DF_CmdKind_OpenProject)); } } @@ -3890,7 +3887,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) } if(ui_clicked(cls_sig)) { - d_cmd(D_CmdKind_CloseWindow, .window = df_handle_from_window(ws)); + df_cmd(DF_CmdKind_CloseWindow, .window = df_handle_from_window(ws)); } os_window_push_custom_title_bar_client_area(ws->os, min_sig.box->rect); os_window_push_custom_title_bar_client_area(ws->os, max_sig.box->rect); @@ -4176,7 +4173,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) { UI_PrefWidth(ui_text_dim(0.f, 1.f)) UI_Padding(ui_em(1.f, 1.f)) { - D_CmdKind cmd_kind = d_cmd_kind_from_string(ws->query_cmd_spec->info.string); + DF_CmdKind cmd_kind = df_cmd_kind_from_string(ws->query_cmd_spec->info.string); DF_IconKind icon_kind = df_cmd_kind_icon_kind_table[cmd_kind]; if(icon_kind != DF_IconKind_Null) { @@ -4233,7 +4230,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) if(((ui_is_focus_active() || (window_is_focused && !ui_any_ctx_menu_is_open() && !ws->menu_bar_focused && !ws->query_view_selected)) && ui_slot_press(UI_EventActionSlot_Cancel)) || query_cancelled) { - d_cmd(D_CmdKind_CancelQuery); + df_cmd(DF_CmdKind_CancelQuery); } if((ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Accept)) || query_completed) { @@ -4241,10 +4238,10 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) DF_View *view = ws->query_view_stack_top; D_CmdParams params = df_cmd_params_from_window(ws); String8 error = d_cmd_params_apply_spec_query(scratch.arena, ¶ms, ws->query_cmd_spec, str8(view->query_buffer, view->query_string_size)); - d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_CompleteQuery), ¶ms); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_CompleteQuery), ¶ms); if(error.size != 0) { - d_error(error); + log_user_error(error); } scratch_end(scratch); } @@ -4529,7 +4526,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) B32 success = d_commit_eval_value_string(row_eval, commit_string); if(success == 0) { - d_error(str8_lit("Could not commit value successfully.")); + log_user_error(str8_lit("Could not commit value successfully.")); } } } @@ -4559,7 +4556,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) } if(ui_clicked(watch_sig)) { - d_cmd(D_CmdKind_ToggleWatchExpression, .string = expr); + df_cmd(DF_CmdKind_ToggleWatchExpression, .string = expr); } } if(ws->hover_eval_file_path.size != 0 || ws->hover_eval_vaddr != 0) @@ -4578,11 +4575,11 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) } if(ui_clicked(pin_sig)) { - d_cmd(D_CmdKind_ToggleWatchPin, - .file_path = ws->hover_eval_file_path, - .text_point = ws->hover_eval_file_pt, - .vaddr = ws->hover_eval_vaddr, - .string = expr); + df_cmd(DF_CmdKind_ToggleWatchPin, + .file_path = ws->hover_eval_file_path, + .text_point = ws->hover_eval_file_pt, + .vaddr = ws->hover_eval_vaddr, + .string = expr); } } } @@ -4727,11 +4724,11 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) if(dir != Dir2_Invalid) { DF_Panel *split_panel = panel; - d_cmd(D_CmdKind_SplitPanel, - .dest_panel = df_handle_from_panel(split_panel), - .panel = payload.panel, - .view = payload.view, - .dir2 = dir); + df_cmd(DF_CmdKind_SplitPanel, + .dest_panel = df_handle_from_panel(split_panel), + .panel = payload.panel, + .view = payload.view, + .dir2 = dir); } } } @@ -4812,11 +4809,11 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) split_panel = panel->last; dir = (panel->split_axis == Axis2_X ? Dir2_Right : Dir2_Down); } - d_cmd(D_CmdKind_SplitPanel, - .dest_panel = df_handle_from_panel(split_panel), - .panel = payload.panel, - .view = payload.view, - .dir2 = dir); + df_cmd(DF_CmdKind_SplitPanel, + .dest_panel = df_handle_from_panel(split_panel), + .panel = payload.panel, + .view = payload.view, + .dir2 = dir); } // rjf: exit on opl child @@ -5106,19 +5103,19 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) { if(dir != Dir2_Invalid) { - d_cmd(D_CmdKind_SplitPanel, - .dest_panel = df_handle_from_panel(panel), - .panel = payload.panel, - .view = payload.view, - .dir2 = dir); + df_cmd(DF_CmdKind_SplitPanel, + .dest_panel = df_handle_from_panel(panel), + .panel = payload.panel, + .view = payload.view, + .dir2 = dir); } else { - d_cmd(D_CmdKind_MoveTab, - .dest_panel = df_handle_from_panel(panel), - .panel = payload.panel, - .view = payload.view, - .prev_view = df_handle_from_view(panel->last_tab_view)); + df_cmd(DF_CmdKind_MoveTab, + .dest_panel = df_handle_from_panel(panel), + .panel = payload.panel, + .view = payload.view, + .prev_view = df_handle_from_view(panel->last_tab_view)); } } } @@ -5168,7 +5165,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) { if(view->is_filtering && ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Accept)) { - d_cmd(D_CmdKind_ApplyFilter, .view = df_handle_from_view(view)); + df_cmd(DF_CmdKind_ApplyFilter, .view = df_handle_from_view(view)); } if(view->is_filtering || view->is_filtering_t > 0.01f) { @@ -5207,7 +5204,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) str8_lit("###filter_text_input")); if(ui_pressed(sig)) { - d_cmd(D_CmdKind_FocusPanel, .panel = df_handle_from_panel(panel)); + df_cmd(DF_CmdKind_FocusPanel, .panel = df_handle_from_panel(panel)); } } } @@ -5312,20 +5309,20 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) if(evt->flags & UI_EventFlag_Paste) { ui_eat_event(evt); - d_cmd(D_CmdKind_Filter); - d_cmd(D_CmdKind_Paste); + df_cmd(DF_CmdKind_Filter); + df_cmd(DF_CmdKind_Paste); } else if(evt->string.size != 0 && evt->kind == UI_EventKind_Text) { ui_eat_event(evt); - d_cmd(D_CmdKind_Filter); - d_cmd(D_CmdKind_InsertText, .string = evt->string); + df_cmd(DF_CmdKind_Filter); + df_cmd(DF_CmdKind_InsertText, .string = evt->string); } } } if(view->spec->info.flags & DF_ViewSpecFlag_CanFilter && (view->query_string_size != 0 || view->is_filtering) && ui_is_focus_active() && ui_slot_press(UI_EventActionSlot_Cancel)) { - d_cmd(D_CmdKind_ClearFilter, .view = df_handle_from_view(view)); + df_cmd(DF_CmdKind_ClearFilter, .view = df_handle_from_view(view)); } } @@ -5335,7 +5332,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_Signal panel_sig = ui_signal_from_box(panel_box); if(ui_pressed(panel_sig)) { - d_cmd(D_CmdKind_FocusPanel, .panel = df_handle_from_panel(panel)); + df_cmd(DF_CmdKind_FocusPanel, .panel = df_handle_from_panel(panel)); } ////////////////////////// @@ -5482,7 +5479,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_Signal sig = ui_buttonf("%S###close_view_%p", df_g_icon_kind_text_table[DF_IconKind_X], view); if(ui_clicked(sig) || ui_middle_clicked(sig)) { - d_cmd(D_CmdKind_CloseTab, .panel = df_handle_from_panel(panel), .view = df_handle_from_view(view)); + df_cmd(DF_CmdKind_CloseTab, .panel = df_handle_from_panel(panel), .view = df_handle_from_view(view)); } } } @@ -5493,7 +5490,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) if(ui_pressed(sig)) { next_selected_tab_view = view; - d_cmd(D_CmdKind_FocusPanel, .panel = df_handle_from_panel(panel)); + df_cmd(DF_CmdKind_FocusPanel, .panel = df_handle_from_panel(panel)); } else if(ui_dragging(sig) && !df_drag_is_active() && length_2f32(ui_drag_delta()) > 10.f) { @@ -5513,7 +5510,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) } else if(ui_middle_clicked(sig)) { - d_cmd(D_CmdKind_CloseTab, .panel = df_handle_from_panel(panel), .view = df_handle_from_view(view)); + df_cmd(DF_CmdKind_CloseTab, .panel = df_handle_from_panel(panel), .view = df_handle_from_view(view)); } } } @@ -5566,7 +5563,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) UI_Signal sig = ui_signal_from_box(add_new_box); if(ui_clicked(sig)) { - d_cmd(D_CmdKind_FocusPanel, .panel = df_handle_from_panel(panel)); + df_cmd(DF_CmdKind_FocusPanel, .panel = df_handle_from_panel(panel)); UI_Key view_menu_key = ui_key_from_string(ui_key_zero(), str8_lit("_view_menu_key_")); ui_ctx_menu_open(view_menu_key, add_new_box->key, v2f32(0, tab_bar_vheight)); } @@ -5633,11 +5630,11 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) DF_Panel *src_panel = df_panel_from_handle(payload.panel); if(!df_panel_is_nil(panel) && !df_view_is_nil(view)) { - d_cmd(D_CmdKind_MoveTab, - .panel = df_handle_from_panel(src_panel), - .dest_panel = df_handle_from_panel(panel), - .view = df_handle_from_view(view), - .prev_view = df_handle_from_view(active_drop_site->prev_view)); + df_cmd(DF_CmdKind_MoveTab, + .panel = df_handle_from_panel(src_panel), + .dest_panel = df_handle_from_panel(panel), + .view = df_handle_from_view(view), + .prev_view = df_handle_from_view(active_drop_site->prev_view)); } } } @@ -5691,20 +5688,20 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) // rjf: view drop if(!df_view_is_nil(view)) { - d_cmd(D_CmdKind_MoveTab, - .prev_view = df_handle_from_view(panel->last_tab_view), - .panel = df_handle_from_panel(src_panel), - .dest_panel = df_handle_from_panel(panel), - .view = df_handle_from_view(view)); + df_cmd(DF_CmdKind_MoveTab, + .prev_view = df_handle_from_view(panel->last_tab_view), + .panel = df_handle_from_panel(src_panel), + .dest_panel = df_handle_from_panel(panel), + .view = df_handle_from_view(view)); } // rjf: entity drop if(!d_entity_is_nil(entity)) { - d_cmd(D_CmdKind_SpawnEntityView, - .panel = df_handle_from_panel(panel), - .text_point = payload.text_point, - .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_SpawnEntityView, + .panel = df_handle_from_panel(panel), + .text_point = payload.text_point, + .entity = d_handle_from_entity(entity)); } } } @@ -5721,7 +5718,7 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) for(String8Node *n = evt->paths.first; n != 0; n = n->next) { Temp scratch = scratch_begin(0, 0); - d_cmd(D_CmdKind_Open, .file_path = path_normalized_from_string(scratch.arena, n->string)); + df_cmd(DF_CmdKind_Open, .file_path = path_normalized_from_string(scratch.arena, n->string)); scratch_end(scratch); } ui_eat_event(evt); @@ -5830,11 +5827,11 @@ df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds) ui_eat_event(evt); if(evt->delta_2f32.y < 0) { - d_cmd(D_CmdKind_IncUIFontScale, .window = df_handle_from_window(ws)); + df_cmd(DF_CmdKind_IncUIFontScale, .window = df_handle_from_window(ws)); } else if(evt->delta_2f32.y > 0) { - d_cmd(D_CmdKind_DecUIFontScale, .window = df_handle_from_window(ws)); + df_cmd(DF_CmdKind_DecUIFontScale, .window = df_handle_from_window(ws)); } } } @@ -7803,6 +7800,60 @@ df_request_frame(void) df_state->num_frames_requested = 4; } +//////////////////////////////// +//~ rjf: Commands + +// TODO(rjf): @msgs temporary glue +internal D_CmdSpec * +df_cmd_spec_from_kind(DF_CmdKind kind) +{ + String8 string = df_cmd_kind_spec_info_table[kind].string; + D_CmdSpec *result = d_cmd_spec_from_string(string); + return result; +} + +internal DF_CmdKind +df_cmd_kind_from_string(String8 string) +{ + DF_CmdKind result = DF_CmdKind_Null; + for(U64 idx = 0; idx < ArrayCount(df_cmd_kind_spec_info_table); idx += 1) + { + if(str8_match(string, df_cmd_kind_spec_info_table[idx].string, StringMatchFlag_CaseInsensitive)) + { + result = (DF_CmdKind)idx; + break; + } + } + return result; +} + +//- rjf: pushing + +internal void +df_push_cmd(D_CmdSpec *spec, D_CmdParams *params) +{ + d_cmd_list_push(df_state->cmds_arena, &df_state->cmds, params, spec); +} + +//- rjf: iterating + +internal B32 +df_next_cmd(D_Cmd **cmd) +{ + D_CmdNode *start_node = df_state->cmds.first; + if(cmd[0] != 0) + { + start_node = CastFromMember(D_CmdNode, cmd, cmd[0]); + start_node = start_node->next; + } + cmd[0] = 0; + if(start_node != 0) + { + cmd[0] = &start_node->cmd; + } + return !!cmd[0]; +} + //////////////////////////////// //~ rjf: Main Layer Top-Level Calls @@ -7814,13 +7865,15 @@ df_request_frame(void) #endif internal void -df_init(void) +df_init(CmdLine *cmdln) { ProfBeginFunction(); Arena *arena = arena_alloc(); df_state = push_array(arena, DF_State, 1); df_state->arena = arena; df_state->num_frames_requested = 2; + df_state->seconds_until_autosave = 0.5f; + df_state->cmds_arena = arena_alloc(); df_state->key_map_arena = arena_alloc(); df_state->confirm_arena = arena_alloc(); df_state->view_spec_table_size = 256; @@ -7837,6 +7890,12 @@ df_init(void) df_state->rich_hover_info_current_arena = arena_alloc(); df_clear_bindings(); + // rjf: register commands + { + D_CmdSpecInfoArray array = {df_cmd_kind_spec_info_table, ArrayCount(df_cmd_kind_spec_info_table)}; + d_register_cmd_specs(array); + } + // rjf: register gfx layer views { DF_ViewSpecInfoArray array = {df_g_gfx_view_kind_spec_info_table, ArrayCount(df_g_gfx_view_kind_spec_info_table)}; @@ -7866,6 +7925,44 @@ df_init(void) } } + // rjf: set up user / project paths + { + Temp scratch = scratch_begin(0, 0); + + // rjf: unpack command line arguments + String8 user_cfg_path = cmd_line_string(cmdln, str8_lit("user")); + String8 project_cfg_path = cmd_line_string(cmdln, str8_lit("project")); + if(project_cfg_path.size == 0) + { + project_cfg_path = cmd_line_string(cmdln, str8_lit("profile")); + } + { + String8 user_program_data_path = os_get_process_info()->user_program_data_path; + String8 user_data_folder = push_str8f(scratch.arena, "%S/%S", user_program_data_path, str8_lit("raddbg")); + os_make_directory(user_data_folder); + if(user_cfg_path.size == 0) + { + user_cfg_path = push_str8f(scratch.arena, "%S/default.raddbg_user", user_data_folder); + } + if(project_cfg_path.size == 0) + { + project_cfg_path = push_str8f(scratch.arena, "%S/default.raddbg_project", user_data_folder); + } + } + + // rjf: set up config path state + String8 cfg_src_paths[D_CfgSrc_COUNT] = {user_cfg_path, project_cfg_path}; + for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) + { + d_state->cfg_path_arenas[src] = arena_alloc(); + df_cmd(d_cfg_src_load_cmd_kind_table[src], .file_path = path_normalized_from_string(scratch.arena, cfg_src_paths[src])); + } + + // rjf: set up config table arena + d_state->cfg_arena = arena_alloc(); + scratch_end(scratch); + } + // rjf: unpack icon image data { Temp scratch = scratch_begin(0, 0); @@ -7942,15 +8039,6 @@ df_frame(void) DI_Scope *di_scope = di_scope_open(); local_persist S32 depth = 0; - ////////////////////////////// - //- rjf: mark user-facing thread tick - // - ProfTick(0); - txt_user_clock_tick(); - dasm_user_clock_tick(); - geo_user_clock_tick(); - tex_user_clock_tick(); - ////////////////////////////// //- rjf: get events from the OS // @@ -8074,7 +8162,7 @@ df_frame(void) if(!take && event->kind == OS_EventKind_WindowClose && window != 0) { take = 1; - d_cmd(D_CmdKind_CloseWindow, .window = df_handle_from_window(window)); + df_cmd(DF_CmdKind_CloseWindow, .window = df_handle_from_window(window)); } //- rjf: try menu bar operations @@ -8121,7 +8209,7 @@ df_frame(void) D_CmdSpecList spec_candidates = df_cmd_spec_list_from_binding(scratch.arena, binding); if(spec_candidates.first != 0 && !d_cmd_spec_is_nil(spec_candidates.first->spec)) { - D_CmdSpec *run_spec = d_cmd_spec_from_kind(D_CmdKind_RunCommand); + D_CmdSpec *run_spec = df_cmd_spec_from_kind(DF_CmdKind_RunCommand); D_CmdSpec *spec = spec_candidates.first->spec; if(run_spec != spec) { @@ -8147,7 +8235,7 @@ df_frame(void) { String32 insertion32 = str32(&event->character, 1); String8 insertion8 = str8_from_32(scratch.arena, insertion32); - D_CmdSpec *spec = d_cmd_spec_from_kind(D_CmdKind_InsertText); + D_CmdSpec *spec = df_cmd_spec_from_kind(DF_CmdKind_InsertText); params.string = insertion8; d_push_cmd(spec, ¶ms); df_request_frame(); @@ -8163,7 +8251,7 @@ df_frame(void) { take = 1; params.os_event = event; - d_push_cmd(d_cmd_spec_from_kind(D_CmdKind_OSEvent), ¶ms); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_OSEvent), ¶ms); } //- rjf: take @@ -8174,19 +8262,6 @@ df_frame(void) } } - ////////////////////////////// - //- rjf: gather root-level commands - // - D_CmdList cmds = d_gather_root_cmds(scratch.arena); - - ////////////////////////////// - //- rjf: clear root level commands - // - { - arena_clear(d_state->root_cmd_arena); - MemoryZeroStruct(&d_state->root_cmds); - } - ////////////////////////////// //- rjf: unpack eval-dependent info // @@ -8380,19 +8455,29 @@ df_frame(void) } e_select_interpret_ctx(interpret_ctx); + ////////////////////////////// + //- rjf: autosave if needed + // + { + df_state->seconds_until_autosave -= dt; + if(df_state->seconds_until_autosave <= 0.f) + { + df_cmd(DF_CmdKind_WriteUserData); + df_cmd(DF_CmdKind_WriteProjectData); + df_state->seconds_until_autosave = 5.f; + } + } + ////////////////////////////// //- rjf: process top-level graphical commands // B32 panel_reset_done = 0; { - for(D_CmdNode *cmd_node = cmds.first; - cmd_node != 0; - cmd_node = cmd_node->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { // rjf: unpack command - D_Cmd * cmd = &cmd_node->cmd; D_CmdParams *params = &cmd->params; - D_CmdKind kind = d_cmd_kind_from_string(cmd->spec->info.string); + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); // rjf: request frame df_request_frame(); @@ -8414,12 +8499,12 @@ df_frame(void) { D_CmdParams p = *params; p.view_spec = view_spec; - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_OpenTab)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_OpenTab), &p); } }break; //- rjf: command fast path - case D_CmdKind_RunCommand: + case DF_CmdKind_RunCommand: { D_CmdSpec *spec = params->cmd_spec; if(!d_cmd_spec_is_nil(spec)) @@ -8430,7 +8515,8 @@ df_frame(void) // rjf: command simply executes - just no-op in this layer if(!d_cmd_spec_is_nil(spec) && !(spec->info.query.flags & D_CmdQueryFlag_Required)) { - d_cmd_list_push(scratch.arena, &cmds, params, spec); + d_push_cmd(spec, params); + df_push_cmd(spec, params); } // rjf: command has required query -> prep query @@ -8449,24 +8535,24 @@ df_frame(void) }break; //- rjf: exiting - case D_CmdKind_Exit: + case DF_CmdKind_Exit: { // rjf: save { - d_cmd(D_CmdKind_WriteUserData); - d_cmd(D_CmdKind_WriteProjectData); + df_cmd(DF_CmdKind_WriteUserData); + df_cmd(DF_CmdKind_WriteProjectData); df_state->last_window_queued_save = 1; } // rjf: close all windows for(DF_Window *window = df_state->first_window; window != 0; window = window->next) { - d_cmd(D_CmdKind_CloseWindow, .window = df_handle_from_window(window)); + df_cmd(DF_CmdKind_CloseWindow, .window = df_handle_from_window(window)); } }break; //- rjf: errors - case D_CmdKind_Error: + case DF_CmdKind_Error: { for(DF_Window *w = df_state->first_window; w != 0; w = w->next) { @@ -8478,7 +8564,7 @@ df_frame(void) }break; //- rjf: windows - case D_CmdKind_OpenWindow: + case DF_CmdKind_OpenWindow: { DF_Window *originating_window = df_window_from_handle(params->window); if(originating_window == 0) @@ -8492,7 +8578,7 @@ df_frame(void) MemoryCopy(new_ws->setting_vals, originating_window->setting_vals, sizeof(DF_SettingVal)*DF_SettingCode_COUNT); } }break; - case D_CmdKind_CloseWindow: + case DF_CmdKind_CloseWindow: { DF_Window *ws = df_window_from_handle(params->window); if(ws != 0) @@ -8515,7 +8601,7 @@ df_frame(void) running_processes.count == 1 ? "" : "es"); D_CmdParams p = df_cmd_params_from_window(ws); p.force_confirm = 1; - d_cmd_list_push(df_state->confirm_arena, &df_state->confirm_cmds, &p, d_cmd_spec_from_kind(D_CmdKind_CloseWindow)); + d_cmd_list_push(df_state->confirm_arena, &df_state->confirm_cmds, &p, df_cmd_spec_from_kind(DF_CmdKind_CloseWindow)); } // NOTE(rjf): if this is the last window, and it is being closed, then @@ -8524,9 +8610,9 @@ df_frame(void) else if(ws == df_state->first_window && ws == df_state->last_window && df_state->last_window_queued_save == 0) { df_state->last_window_queued_save = 1; - d_cmd(D_CmdKind_WriteUserData); - d_cmd(D_CmdKind_WriteProjectData); - d_cmd(D_CmdKind_CloseWindow, .force_confirm = 1, .window = df_handle_from_window(ws)); + df_cmd(DF_CmdKind_WriteUserData); + df_cmd(DF_CmdKind_WriteProjectData); + df_cmd(DF_CmdKind_CloseWindow, .force_confirm = 1, .window = df_handle_from_window(ws)); } // NOTE(rjf): if this is the last window and we've queued the final autosave, @@ -8554,7 +8640,7 @@ df_frame(void) } } }break; - case D_CmdKind_ToggleFullscreen: + case DF_CmdKind_ToggleFullscreen: { DF_Window *window = df_window_from_handle(params->window); if(window != 0) @@ -8564,7 +8650,7 @@ df_frame(void) }break; //- rjf: confirmations - case D_CmdKind_ConfirmAccept: + case DF_CmdKind_ConfirmAccept: { df_state->confirm_active = 0; df_state->confirm_key = ui_key_zero(); @@ -8573,33 +8659,25 @@ df_frame(void) d_push_cmd(n->cmd.spec, &n->cmd.params); } }break; - case D_CmdKind_ConfirmCancel: + case DF_CmdKind_ConfirmCancel: { df_state->confirm_active = 0; df_state->confirm_key = ui_key_zero(); }break; - //- rjf: debug control context management operations - case D_CmdKind_SelectThread:goto thread_locator; - case D_CmdKind_SelectUnwind: - thread_locator:; - { - d_cmd_list_push(scratch.arena, &cmds, params, d_cmd_spec_from_kind(D_CmdKind_FindThread)); - }break; - //- rjf: config path saving/loading/applying - case D_CmdKind_OpenRecentProject: + case DF_CmdKind_OpenRecentProject: { D_Entity *entity = d_entity_from_handle(params->entity); if(entity->kind == D_EntityKind_RecentProject) { D_CmdParams p = d_cmd_params_zero(); p.file_path = entity->string; - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_OpenProject)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_OpenProject), &p); } }break; - case D_CmdKind_OpenUser: - case D_CmdKind_OpenProject: + case DF_CmdKind_OpenUser: + case DF_CmdKind_OpenProject: { B32 load_cfg[D_CfgSrc_COUNT] = {0}; for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) @@ -8717,7 +8795,7 @@ df_frame(void) { D_CmdKind cmd_kind = d_cfg_src_apply_cmd_kind_table[src]; D_CmdParams params = d_cmd_params_zero(); - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(cmd_kind)); + df_push_cmd(df_cmd_spec_from_kind(cmd_kind), ¶ms); d_state->cfg_cached_timestamp[src] = cfg_timestamps[src]; } } @@ -8732,7 +8810,7 @@ df_frame(void) { D_CmdKind cmd_kind = d_cfg_src_write_cmd_kind_table[src]; D_CmdParams params = d_cmd_params_zero(); - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(cmd_kind)); + df_push_cmd(df_cmd_spec_from_kind(cmd_kind), ¶ms); } } } @@ -8740,15 +8818,13 @@ df_frame(void) //- rjf: bad file -> alert user if(!file_is_okay) { - D_CmdParams p = *params; - p.string = push_str8f(scratch.arena, "\"%S\" appears to refer to an existing file which is not a RADDBG config file. This would overwrite the file.", new_path); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_Error)); + log_user_errorf("\"%S\" appears to refer to an existing file which is not a RADDBG config file. This would overwrite the file.", new_path); } }break; //- rjf: loading/applying stateful config changes - case D_CmdKind_ApplyUserData: - case D_CmdKind_ApplyProjectData: + case DF_CmdKind_ApplyUserData: + case DF_CmdKind_ApplyProjectData: { D_CfgTable *table = d_cfg_table(); OS_HandleArray monitors = os_push_monitors_array(scratch.arena); @@ -8999,7 +9075,7 @@ df_frame(void) { continue; } - d_cmd(D_CmdKind_CloseWindow, .window = df_handle_from_window(window)); + df_cmd(DF_CmdKind_CloseWindow, .window = df_handle_from_window(window)); } //- rjf: apply fonts @@ -9570,11 +9646,11 @@ df_frame(void) D_CmdParams blank_params = df_cmd_params_from_window(ws); if(monitor_dim.x < 1920) { - d_cmd_list_push(scratch.arena, &cmds, &blank_params, d_cmd_spec_from_kind(D_CmdKind_ResetToCompactPanels)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_ResetToCompactPanels), &blank_params); } else { - d_cmd_list_push(scratch.arena, &cmds, &blank_params, d_cmd_spec_from_kind(D_CmdKind_ResetToDefaultPanels)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_ResetToDefaultPanels), &blank_params); } } @@ -9599,9 +9675,9 @@ df_frame(void) } meta_ctrls[] = { - { d_cmd_spec_from_kind(D_CmdKind_Edit), OS_Key_F2 }, - { d_cmd_spec_from_kind(D_CmdKind_Accept), OS_Key_Return }, - { d_cmd_spec_from_kind(D_CmdKind_Cancel), OS_Key_Esc }, + { df_cmd_spec_from_kind(DF_CmdKind_Edit), OS_Key_F2 }, + { df_cmd_spec_from_kind(DF_CmdKind_Accept), OS_Key_Return }, + { df_cmd_spec_from_kind(DF_CmdKind_Cancel), OS_Key_Esc }, }; for(U64 idx = 0; idx < ArrayCount(meta_ctrls); idx += 1) { @@ -9616,8 +9692,8 @@ df_frame(void) }break; //- rjf: writing config changes - case D_CmdKind_WriteUserData: - case D_CmdKind_WriteProjectData: + case DF_CmdKind_WriteUserData: + case DF_CmdKind_WriteProjectData: { D_CfgSrc src = D_CfgSrc_User; for(D_CfgSrc s = (D_CfgSrc)0; s < D_CfgSrc_COUNT; s = (D_CfgSrc)(s+1)) @@ -9645,28 +9721,28 @@ df_frame(void) }break; //- rjf: code navigation - case D_CmdKind_FindTextForward: - case D_CmdKind_FindTextBackward: + case DF_CmdKind_FindTextForward: + case DF_CmdKind_FindTextBackward: { df_set_search_string(params->string); }break; //- rjf: find next and find prev - case D_CmdKind_FindNext: + case DF_CmdKind_FindNext: { D_CmdParams p = *params; p.string = df_push_search_string(scratch.arena); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindTextForward)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindTextForward), &p); }break; - case D_CmdKind_FindPrev: + case DF_CmdKind_FindPrev: { D_CmdParams p = *params; p.string = df_push_search_string(scratch.arena); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindTextBackward)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindTextBackward), &p); }break; //- rjf: font sizes - case D_CmdKind_IncUIFontScale: + case DF_CmdKind_IncUIFontScale: { DF_Window *window = df_window_from_handle(params->window); if(window != 0) @@ -9676,7 +9752,7 @@ df_frame(void) window->setting_vals[DF_SettingCode_MainFontSize].s32 = clamp_1s32(df_g_setting_code_s32_range_table[DF_SettingCode_MainFontSize], window->setting_vals[DF_SettingCode_MainFontSize].s32); } }break; - case D_CmdKind_DecUIFontScale: + case DF_CmdKind_DecUIFontScale: { DF_Window *window = df_window_from_handle(params->window); if(window != 0) @@ -9686,7 +9762,7 @@ df_frame(void) window->setting_vals[DF_SettingCode_MainFontSize].s32 = clamp_1s32(df_g_setting_code_s32_range_table[DF_SettingCode_MainFontSize], window->setting_vals[DF_SettingCode_MainFontSize].s32); } }break; - case D_CmdKind_IncCodeFontScale: + case DF_CmdKind_IncCodeFontScale: { DF_Window *window = df_window_from_handle(params->window); if(window != 0) @@ -9696,7 +9772,7 @@ df_frame(void) window->setting_vals[DF_SettingCode_CodeFontSize].s32 = clamp_1s32(df_g_setting_code_s32_range_table[DF_SettingCode_CodeFontSize], window->setting_vals[DF_SettingCode_CodeFontSize].s32); } }break; - case D_CmdKind_DecCodeFontScale: + case DF_CmdKind_DecCodeFontScale: { DF_Window *window = df_window_from_handle(params->window); if(window != 0) @@ -9708,11 +9784,11 @@ df_frame(void) }break; //- rjf: panel creation - case D_CmdKind_NewPanelLeft: {split_dir = Dir2_Left;}goto split; - case D_CmdKind_NewPanelUp: {split_dir = Dir2_Up;}goto split; - case D_CmdKind_NewPanelRight:{split_dir = Dir2_Right;}goto split; - case D_CmdKind_NewPanelDown: {split_dir = Dir2_Down;}goto split; - case D_CmdKind_SplitPanel: + case DF_CmdKind_NewPanelLeft: {split_dir = Dir2_Left;}goto split; + case DF_CmdKind_NewPanelUp: {split_dir = Dir2_Up;}goto split; + case DF_CmdKind_NewPanelRight:{split_dir = Dir2_Right;}goto split; + case DF_CmdKind_NewPanelDown: {split_dir = Dir2_Down;}goto split; + case DF_CmdKind_SplitPanel: { split_dir = params->dir2; split_panel = df_panel_from_handle(params->dest_panel); @@ -9789,7 +9865,7 @@ df_frame(void) DF_Panel *move_tab_panel = df_panel_from_handle(params->panel); DF_View *move_tab = df_view_from_handle(params->view); if(!df_panel_is_nil(new_panel) && !df_view_is_nil(move_tab) && !df_panel_is_nil(move_tab_panel) && - kind == D_CmdKind_SplitPanel) + kind == DF_CmdKind_SplitPanel) { df_panel_remove_tab_view(move_tab_panel, move_tab); df_panel_insert_tab_view(new_panel, new_panel->last_tab_view, move_tab); @@ -9807,13 +9883,13 @@ df_frame(void) move_tab_panel != new_panel->prev && move_tab_panel != new_panel->next) { D_CmdParams p = df_cmd_params_from_panel(ws, move_tab_panel); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_ClosePanel)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_ClosePanel), &p); } } }break; //- rjf: panel rotation - case D_CmdKind_RotatePanelColumns: + case DF_CmdKind_RotatePanelColumns: { DF_Window *ws = df_window_from_handle(params->window); DF_Panel *panel = ws->focused_panel; @@ -9840,8 +9916,8 @@ df_frame(void) }break; //- rjf: panel focusing - case D_CmdKind_NextPanel: panel_sib_off = OffsetOf(DF_Panel, next); panel_child_off = OffsetOf(DF_Panel, first); goto cycle; - case D_CmdKind_PrevPanel: panel_sib_off = OffsetOf(DF_Panel, prev); panel_child_off = OffsetOf(DF_Panel, last); goto cycle; + case DF_CmdKind_NextPanel: panel_sib_off = OffsetOf(DF_Panel, next); panel_child_off = OffsetOf(DF_Panel, first); goto cycle; + case DF_CmdKind_PrevPanel: panel_sib_off = OffsetOf(DF_Panel, prev); panel_child_off = OffsetOf(DF_Panel, last); goto cycle; cycle:; { DF_Window *ws = df_window_from_handle(params->window); @@ -9857,12 +9933,12 @@ df_frame(void) { D_CmdParams p = df_cmd_params_from_window(ws); p.panel = df_handle_from_panel(panel); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FocusPanel)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FocusPanel), &p); break; } } }break; - case D_CmdKind_FocusPanel: + case DF_CmdKind_FocusPanel: { DF_Window *ws = df_window_from_handle(params->window); DF_Panel *panel = df_panel_from_handle(params->panel); @@ -9875,10 +9951,10 @@ df_frame(void) }break; //- rjf: directional panel focus changing - case D_CmdKind_FocusPanelRight: panel_change_dir = v2s32(+1, +0); goto focus_panel_dir; - case D_CmdKind_FocusPanelLeft: panel_change_dir = v2s32(-1, +0); goto focus_panel_dir; - case D_CmdKind_FocusPanelUp: panel_change_dir = v2s32(+0, -1); goto focus_panel_dir; - case D_CmdKind_FocusPanelDown: panel_change_dir = v2s32(+0, +1); goto focus_panel_dir; + case DF_CmdKind_FocusPanelRight: panel_change_dir = v2s32(+1, +0); goto focus_panel_dir; + case DF_CmdKind_FocusPanelLeft: panel_change_dir = v2s32(-1, +0); goto focus_panel_dir; + case DF_CmdKind_FocusPanelUp: panel_change_dir = v2s32(+0, -1); goto focus_panel_dir; + case DF_CmdKind_FocusPanelDown: panel_change_dir = v2s32(+0, +1); goto focus_panel_dir; focus_panel_dir:; { DF_Window *ws = df_window_from_handle(params->window); @@ -9915,20 +9991,197 @@ df_frame(void) } D_CmdParams p = df_cmd_params_from_window(ws); p.panel = df_handle_from_panel(dst_panel); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FocusPanel)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FocusPanel), &p); } }break; - //- rjf: focus history - case D_CmdKind_GoBack: + //- rjf: undo/redo + case DF_CmdKind_Undo: { }break; - case D_CmdKind_GoForward: + case DF_CmdKind_Redo: { }break; + //- rjf: focus history + case DF_CmdKind_GoBack: + { + }break; + case DF_CmdKind_GoForward: + { + }break; + + //- rjf: files + case DF_CmdKind_SetCurrentPath: + { + arena_clear(d_state->current_path_arena); + d_state->current_path = push_str8_copy(d_state->current_path_arena, params->file_path); + }break; + + //- rjf: override file links + case DF_CmdKind_SetFileOverrideLinkSrc: + case DF_CmdKind_SetFileOverrideLinkDst: + { + // rjf: unpack args + D_Entity *map = d_entity_from_handle(params->entity); + String8 path = path_normalized_from_string(scratch.arena, params->file_path); + String8 path_folder = str8_chop_last_slash(path); + String8 path_file = str8_skip_last_slash(path); + + // rjf: src -> move map & commit name; dst -> open destination file & refer to it in map + switch(kind) + { + default:{}break; + case DF_CmdKind_SetFileOverrideLinkSrc: + { + D_Entity *map_parent = (params->file_path.size != 0) ? d_entity_from_path(path_folder, D_EntityFromPathFlag_OpenAsNeeded|D_EntityFromPathFlag_OpenMissing) : d_entity_root(); + if(d_entity_is_nil(map)) + { + map = d_entity_alloc(map_parent, D_EntityKind_FilePathMap); + } + else + { + d_entity_change_parent(map, map->parent, map_parent, &d_nil_entity); + } + d_entity_equip_name(map, path_file); + }break; + case DF_CmdKind_SetFileOverrideLinkDst: + { + if(d_entity_is_nil(map)) + { + map = d_entity_alloc(d_entity_root(), D_EntityKind_FilePathMap); + } + D_Entity *map_dst_entity = &d_nil_entity; + if(params->file_path.size != 0) + { + map_dst_entity = d_entity_from_path(path, D_EntityFromPathFlag_All); + } + d_entity_equip_entity_handle(map, d_handle_from_entity(map_dst_entity)); + }break; + } + + // rjf: empty src/dest -> delete + if(!d_entity_is_nil(map) && map->string.size == 0 && d_entity_is_nil(d_entity_from_handle(map->entity_handle))) + { + d_entity_mark_for_deletion(map); + } + }break; + case DF_CmdKind_SetFileReplacementPath: + { + // NOTE(rjf): + // + // C:/foo/bar/baz.c + // D:/foo/bar/baz.c + // -> override C: -> D: + // + // C:/1/2/foo/bar.c + // C:/2/3/foo/bar.c + // -> override C:/1/2 -> C:2/3 + // + // C:/foo/bar/baz.c + // D:/1/2/3.c + // -> override C:/foo/bar/baz.c -> D:/1/2/3.c + + //- rjf: unpack + String8 src_path = params->string; + String8 dst_path = params->file_path; +#if 0 + // TODO(rjf): + + //- rjf: grab src file & chosen replacement + D_Entity *file = d_entity_from_handle(params.entity); + D_Entity *replacement = d_entity_from_path(params.file_path, D_EntityFromPathFlag_OpenAsNeeded|D_EntityFromPathFlag_OpenMissing); + + //- rjf: find + D_Entity *first_diff_src = file; + D_Entity *first_diff_dst = replacement; + for(;!d_entity_is_nil(first_diff_src) && !d_entity_is_nil(first_diff_dst);) + { + if(!str8_match(first_diff_src->string, first_diff_dst->string, StringMatchFlag_CaseInsensitive) || + first_diff_src->parent->kind != D_EntityKind_File || + first_diff_src->parent->parent->kind != D_EntityKind_File || + first_diff_dst->parent->kind != D_EntityKind_File || + first_diff_dst->parent->parent->kind != D_EntityKind_File) + { + break; + } + first_diff_src = first_diff_src->parent; + first_diff_dst = first_diff_dst->parent; + } + + //- rjf: override first different + if(!d_entity_is_nil(first_diff_src) && !d_entity_is_nil(first_diff_dst)) + { + D_Entity *link = d_entity_child_from_string_and_kind(first_diff_src->parent, first_diff_src->name, D_EntityKind_FilePathMap); + if(d_entity_is_nil(link)) + { + link = d_entity_alloc(first_diff_src->parent, D_EntityKind_FilePathMap); + d_entity_equip_name(link, first_diff_src->name); + } + d_entity_equip_entity_handle(link, d_handle_from_entity(first_diff_dst)); + } +#endif + }break; + + //- rjf: auto view rules + case DF_CmdKind_SetAutoViewRuleType: + case DF_CmdKind_SetAutoViewRuleViewRule: + { + D_Entity *map = d_entity_from_handle(params->entity); + if(d_entity_is_nil(map)) + { + map = d_entity_alloc(d_entity_root(), D_EntityKind_AutoViewRule); + d_entity_equip_cfg_src(map, D_CfgSrc_Project); + } + D_Entity *src = d_entity_child_from_kind(map, D_EntityKind_Source); + if(d_entity_is_nil(src)) + { + src = d_entity_alloc(map, D_EntityKind_Source); + } + D_Entity *dst = d_entity_child_from_kind(map, D_EntityKind_Dest); + if(d_entity_is_nil(dst)) + { + dst = d_entity_alloc(map, D_EntityKind_Dest); + } + if(map->kind == D_EntityKind_AutoViewRule) + { + D_Entity *edit_child = (kind == DF_CmdKind_SetAutoViewRuleType ? src : dst); + d_entity_equip_name(edit_child, params->string); + } + if(src->string.size == 0 && dst->string.size == 0) + { + d_entity_mark_for_deletion(map); + } + { + D_AutoViewRuleMapCache *cache = &d_state->auto_view_rule_cache; + if(cache->arena == 0) + { + cache->arena = arena_alloc(); + } + arena_clear(cache->arena); + cache->slots_count = 1024; + cache->slots = push_array(cache->arena, D_AutoViewRuleSlot, cache->slots_count); + D_EntityList maps = d_query_cached_entity_list_with_kind(D_EntityKind_AutoViewRule); + for(D_EntityNode *n = maps.first; n != 0; n = n->next) + { + D_Entity *map = n->entity; + D_Entity *src = d_entity_child_from_kind(map, D_EntityKind_Source); + D_Entity *dst = d_entity_child_from_kind(map, D_EntityKind_Dest); + String8 type = src->string; + String8 view_rule = dst->string; + U64 hash = d_hash_from_string(type); + U64 slot_idx = hash%cache->slots_count; + D_AutoViewRuleSlot *slot = &cache->slots[slot_idx]; + D_AutoViewRuleNode *node = push_array(cache->arena, D_AutoViewRuleNode, 1); + node->type = push_str8_copy(cache->arena, type); + node->view_rule = push_str8_copy(cache->arena, view_rule); + SLLQueuePush(slot->first, slot->last, node); + } + } + }break; + //- rjf: panel removal - case D_CmdKind_ClosePanel: + case DF_CmdKind_ClosePanel: { DF_Window *ws = df_window_from_handle(params->window); DF_Panel *panel = df_panel_from_handle(params->panel); @@ -10021,7 +10274,7 @@ df_frame(void) }break; //- rjf: panel tab controls - case D_CmdKind_NextTab: + case DF_CmdKind_NextTab: { DF_Panel *panel = df_panel_from_handle(params->panel); DF_View *view = df_selected_tab_from_panel(panel); @@ -10037,7 +10290,7 @@ df_frame(void) view = next_view; panel->selected_tab_view = df_handle_from_view(view); }break; - case D_CmdKind_PrevTab: + case DF_CmdKind_PrevTab: { DF_Panel *panel = df_panel_from_handle(params->panel); DF_View *view = df_selected_tab_from_panel(panel); @@ -10053,24 +10306,24 @@ df_frame(void) view = next_view; panel->selected_tab_view = df_handle_from_view(view); }break; - case D_CmdKind_MoveTabRight: - case D_CmdKind_MoveTabLeft: + case DF_CmdKind_MoveTabRight: + case DF_CmdKind_MoveTabLeft: { DF_Window *ws = df_window_from_handle(params->window); DF_Panel *panel = ws->focused_panel; DF_View *view = df_selected_tab_from_panel(panel); - DF_View *prev_view = (kind == D_CmdKind_MoveTabRight ? view->order_next : view->order_prev->order_prev); - if(!df_view_is_nil(prev_view) || kind == D_CmdKind_MoveTabLeft) + DF_View *prev_view = (kind == DF_CmdKind_MoveTabRight ? view->order_next : view->order_prev->order_prev); + if(!df_view_is_nil(prev_view) || kind == DF_CmdKind_MoveTabLeft) { D_CmdParams p = df_cmd_params_from_window(ws); p.panel = df_handle_from_panel(panel); p.dest_panel = df_handle_from_panel(panel); p.view = df_handle_from_view(view); p.prev_view = df_handle_from_view(prev_view); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_MoveTab)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_MoveTab), &p); } }break; - case D_CmdKind_OpenTab: + case DF_CmdKind_OpenTab: { DF_Panel *panel = df_panel_from_handle(params->panel); DF_ViewSpec *spec = params->view_spec; @@ -10099,7 +10352,7 @@ df_frame(void) df_panel_insert_tab_view(panel, panel->last_tab_view, view); } }break; - case D_CmdKind_CloseTab: + case DF_CmdKind_CloseTab: { DF_Panel *panel = df_panel_from_handle(params->panel); DF_View *view = df_view_from_handle(params->view); @@ -10109,7 +10362,7 @@ df_frame(void) df_view_release(view); } }break; - case D_CmdKind_MoveTab: + case DF_CmdKind_MoveTab: { DF_Window *ws = df_window_from_handle(params->window); DF_Panel *src_panel = df_panel_from_handle(params->panel); @@ -10135,23 +10388,23 @@ df_frame(void) if(src_panel_is_empty && src_panel != ws->root_panel) { D_CmdParams p = df_cmd_params_from_panel(ws, src_panel); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_ClosePanel)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_ClosePanel), &p); } } }break; - case D_CmdKind_TabBarTop: + case DF_CmdKind_TabBarTop: { DF_Panel *panel = df_panel_from_handle(params->panel); panel->tab_side = Side_Min; }break; - case D_CmdKind_TabBarBottom: + case DF_CmdKind_TabBarBottom: { DF_Panel *panel = df_panel_from_handle(params->panel); panel->tab_side = Side_Max; }break; //- rjf: files - case D_CmdKind_Open: + case DF_CmdKind_Open: { DF_Window *ws = df_window_from_handle(params->window); String8 path = params->file_path; @@ -10161,14 +10414,14 @@ df_frame(void) D_CmdParams p = *params; p.window = df_handle_from_window(ws); p.panel = df_handle_from_panel(ws->focused_panel); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_PendingFile)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_PendingFile), &p); } else { - d_errorf("Couldn't open file at \"%S\".", path); + log_user_errorf("Couldn't open file at \"%S\".", path); } }break; - case D_CmdKind_Switch: + case DF_CmdKind_Switch: { // TODO(rjf): @msgs #if 0 @@ -10195,7 +10448,7 @@ df_frame(void) } #endif }break; - case D_CmdKind_SwitchToPartnerFile: + case DF_CmdKind_SwitchToPartnerFile: { DF_Panel *panel = df_panel_from_handle(params->panel); DF_View *view = df_selected_tab_from_panel(panel); @@ -10238,8 +10491,8 @@ df_frame(void) }break; //- rjf: panel built-in layout builds - case D_CmdKind_ResetToDefaultPanels: - case D_CmdKind_ResetToCompactPanels: + case DF_CmdKind_ResetToDefaultPanels: + case DF_CmdKind_ResetToCompactPanels: { panel_reset_done = 1; DF_Window *ws = df_window_from_handle(params->window); @@ -10254,8 +10507,8 @@ df_frame(void) switch(kind) { default:{}break; - case D_CmdKind_ResetToDefaultPanels:{layout = Layout_Default;}break; - case D_CmdKind_ResetToCompactPanels:{layout = Layout_Compact;}break; + case DF_CmdKind_ResetToDefaultPanels:{layout = Layout_Default;}break; + case DF_CmdKind_ResetToCompactPanels:{layout = Layout_Compact;}break; } //- rjf: gather all panels in the panel tree - remove & gather views @@ -10606,7 +10859,7 @@ df_frame(void) //- rjf: thread finding - case D_CmdKind_FindThread: + case DF_CmdKind_FindThread: for(DF_Window *ws = df_state->first_window; ws != 0; ws = ws->next) { DI_Scope *scope = di_scope_open(); @@ -10658,7 +10911,7 @@ df_frame(void) params.vaddr = rip_vaddr; params.unwind_index = unwind_index; params.inline_depth = inline_depth; - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindCodeLocation), ¶ms); } // rjf: snap to resolved address w/o line info @@ -10670,18 +10923,18 @@ df_frame(void) params.vaddr = rip_vaddr; params.unwind_index = unwind_index; params.inline_depth = inline_depth; - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindCodeLocation), ¶ms); } // rjf: retry on stopped, pending debug info if(!d_ctrl_targets_running() && (dbgi_pending || missing_rip)) { - d_cmd(D_CmdKind_FindThread, .entity = d_handle_from_entity(thread)); + df_cmd(DF_CmdKind_FindThread, .entity = d_handle_from_entity(thread)); } } di_scope_close(scope); }break; - case D_CmdKind_FindSelectedThread: + case DF_CmdKind_FindSelectedThread: for(DF_Window *ws = df_state->first_window; ws != 0; ws = ws->next) { D_Entity *selected_thread = d_entity_from_handle(d_base_regs()->thread); @@ -10689,11 +10942,11 @@ df_frame(void) params.entity = d_handle_from_entity(selected_thread); params.unwind_index = d_base_regs()->unwind_count; params.inline_depth = d_base_regs()->inline_depth; - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindThread)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindThread), ¶ms); }break; //- rjf: name finding - case D_CmdKind_GoToName: + case DF_CmdKind_GoToName: { String8 name = params->string; if(name.size != 0) @@ -10812,7 +11065,7 @@ df_frame(void) // rjf: process resolved info if(name_resolved == 0) { - d_errorf("`%S` could not be found.", name); + log_user_errorf("`%S` could not be found.", name); } // rjf: name resolved to voff * dbg info @@ -10837,7 +11090,7 @@ df_frame(void) } } } - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindCodeLocation), &p); } } @@ -10848,13 +11101,13 @@ df_frame(void) D_CmdParams p = *params; p.file_path = path; p.text_point = txt_pt(1, 1); - d_cmd_list_push(scratch.arena, &cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_FindCodeLocation), &p); } } }break; //- rjf: editors - case D_CmdKind_EditEntity: + case DF_CmdKind_EditEntity: { D_Entity *entity = d_entity_from_handle(params->entity); switch(entity->kind) @@ -10862,34 +11115,34 @@ df_frame(void) default: break; case D_EntityKind_Target: { - d_cmd_list_push(scratch.arena, &cmds, params, d_cmd_spec_from_kind(D_CmdKind_EditTarget)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_EditTarget), params); }break; } }break; //- rjf: targets - case D_CmdKind_EditTarget: + case DF_CmdKind_EditTarget: { D_Entity *entity = d_entity_from_handle(params->entity); if(!d_entity_is_nil(entity) && entity->kind == D_EntityKind_Target) { - d_cmd_list_push(scratch.arena, &cmds, params, d_cmd_spec_from_kind(D_CmdKind_Target)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_Target), params); } else { - d_errorf("Invalid target."); + log_user_errorf("Invalid target."); } }break; //- rjf: catchall general entity activation paths (drag/drop, clicking) - case D_CmdKind_EntityRefFastPath: + case DF_CmdKind_EntityRefFastPath: { D_Entity *entity = d_entity_from_handle(params->entity); switch(entity->kind) { default: { - d_cmd(D_CmdKind_SpawnEntityView, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_SpawnEntityView, .entity = d_handle_from_entity(entity)); }break; case D_EntityKind_Thread: { @@ -10897,11 +11150,11 @@ df_frame(void) }break; case D_EntityKind_Target: { - d_cmd(D_CmdKind_SelectTarget, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_SelectTarget, .entity = d_handle_from_entity(entity)); }break; } }break; - case D_CmdKind_SpawnEntityView: + case DF_CmdKind_SpawnEntityView: { DF_Window *ws = df_window_from_handle(params->window); DF_Panel *panel = df_panel_from_handle(params->panel); @@ -10914,11 +11167,11 @@ df_frame(void) { D_CmdParams params = df_cmd_params_from_panel(ws, panel); params.entity = d_handle_from_entity(entity); - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_EditTarget)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_EditTarget), ¶ms); }break; } }break; - case D_CmdKind_FindCodeLocation: + case DF_CmdKind_FindCodeLocation: { // NOTE(rjf): This command is where a lot of high-level flow things // in the debugger come together. It's that codepath that runs any @@ -11142,10 +11395,10 @@ df_frame(void) } // rjf: determine if we need a contain or center - D_CmdKind cursor_snap_kind = D_CmdKind_CenterCursor; + DF_CmdKind cursor_snap_kind = DF_CmdKind_CenterCursor; if(!df_panel_is_nil(dst_panel) && dst_view == view_w_this_src_code && df_selected_tab_from_panel(dst_panel) == dst_view) { - cursor_snap_kind = D_CmdKind_ContainCursor; + cursor_snap_kind = DF_CmdKind_ContainCursor; } // rjf: move cursor & snap-to-cursor @@ -11155,8 +11408,8 @@ df_frame(void) dst_panel->selected_tab_view = df_handle_from_view(dst_view); D_CmdParams params = df_cmd_params_from_view(ws, dst_panel, dst_view); params.text_point = point; - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_GoToLine)); - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(cursor_snap_kind)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_GoToLine), ¶ms); + df_push_cmd(df_cmd_spec_from_kind(cursor_snap_kind), ¶ms); panel_used_for_src_code = dst_panel; } } @@ -11189,10 +11442,10 @@ df_frame(void) } // rjf: determine if we need a contain or center - D_CmdKind cursor_snap_kind = D_CmdKind_CenterCursor; + DF_CmdKind cursor_snap_kind = DF_CmdKind_CenterCursor; if(dst_view == view_w_disasm && df_selected_tab_from_panel(dst_panel) == dst_view) { - cursor_snap_kind = D_CmdKind_ContainCursor; + cursor_snap_kind = DF_CmdKind_ContainCursor; } // rjf: move cursor & snap-to-cursor @@ -11202,14 +11455,14 @@ df_frame(void) D_CmdParams params = df_cmd_params_from_view(ws, dst_panel, dst_view); params.entity = d_handle_from_entity(process); params.vaddr = vaddr; - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_GoToAddress)); - d_cmd_list_push(scratch.arena, &cmds, ¶ms, d_cmd_spec_from_kind(cursor_snap_kind)); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_GoToAddress), ¶ms); + df_push_cmd(df_cmd_spec_from_kind(cursor_snap_kind), ¶ms); } } }break; //- rjf: filtering - case D_CmdKind_Filter: + case DF_CmdKind_Filter: { DF_View *view = df_view_from_handle(params->view); DF_Panel *panel = df_panel_from_handle(params->panel); @@ -11230,7 +11483,7 @@ df_frame(void) view->query_mark = txt_pt(1, 1); } }break; - case D_CmdKind_ClearFilter: + case DF_CmdKind_ClearFilter: { DF_View *view = df_view_from_handle(params->view); if(!df_view_is_nil(view)) @@ -11240,7 +11493,7 @@ df_frame(void) view->query_cursor = view->query_mark = txt_pt(1, 1); } }break; - case D_CmdKind_ApplyFilter: + case DF_CmdKind_ApplyFilter: { DF_View *view = df_view_from_handle(params->view); if(!df_view_is_nil(view)) @@ -11250,7 +11503,7 @@ df_frame(void) }break; //- rjf: query completion - case D_CmdKind_CompleteQuery: + case DF_CmdKind_CompleteQuery: { DF_Window *ws = df_window_from_handle(params->window); D_CmdParamSlot slot = ws->query_cmd_spec->info.query.slot; @@ -11276,7 +11529,7 @@ df_frame(void) // rjf: end this query if(!(ws->query_cmd_spec->info.query.flags & D_CmdQueryFlag_KeepOldInput)) { - d_cmd(D_CmdKind_CancelQuery); + df_cmd(DF_CmdKind_CancelQuery); } // rjf: push command if possible @@ -11285,7 +11538,7 @@ df_frame(void) d_push_cmd(ws->query_cmd_spec, &ws->query_cmd_params); } }break; - case D_CmdKind_CancelQuery: + case DF_CmdKind_CancelQuery: { DF_Window *ws = df_window_from_handle(params->window); arena_clear(ws->query_cmd_arena); @@ -11301,11 +11554,354 @@ df_frame(void) }break; //- rjf: developer commands - case D_CmdKind_ToggleDevMenu: + case DF_CmdKind_ToggleDevMenu: { DF_Window *ws = df_window_from_handle(params->window); ws->dev_menu_is_open ^= 1; }break; + + //- rjf: general entity operations + case DF_CmdKind_EnableEntity: + case DF_CmdKind_EnableBreakpoint: + case DF_CmdKind_EnableTarget: + { + D_Entity *entity = d_entity_from_handle(params->entity); + d_entity_equip_disabled(entity, 0); + }break; + case DF_CmdKind_DisableEntity: + case DF_CmdKind_DisableBreakpoint: + case DF_CmdKind_DisableTarget: + { + D_Entity *entity = d_entity_from_handle(params->entity); + d_entity_equip_disabled(entity, 1); + }break; + case DF_CmdKind_RemoveEntity: + case DF_CmdKind_RemoveBreakpoint: + case DF_CmdKind_RemoveTarget: + { + D_Entity *entity = d_entity_from_handle(params->entity); + D_EntityKindFlags kind_flags = d_entity_kind_flags_table[entity->kind]; + if(kind_flags & D_EntityKindFlag_CanDelete) + { + d_entity_mark_for_deletion(entity); + } + }break; + case DF_CmdKind_NameEntity: + { + D_Entity *entity = d_entity_from_handle(params->entity); + String8 string = params->string; + d_entity_equip_name(entity, string); + }break; + case DF_CmdKind_DuplicateEntity: + { + D_Entity *src = d_entity_from_handle(params->entity); + if(!d_entity_is_nil(src)) + { + typedef struct Task Task; + struct Task + { + Task *next; + D_Entity *src_n; + D_Entity *dst_parent; + }; + Task starter_task = {0, src, src->parent}; + Task *first_task = &starter_task; + Task *last_task = &starter_task; + for(Task *task = first_task; task != 0; task = task->next) + { + D_Entity *src_n = task->src_n; + D_Entity *dst_n = d_entity_alloc(task->dst_parent, task->src_n->kind); + if(src_n->flags & D_EntityFlag_HasTextPoint) {d_entity_equip_txt_pt(dst_n, src_n->text_point);} + if(src_n->flags & D_EntityFlag_HasU64) {d_entity_equip_u64(dst_n, src_n->u64);} + if(src_n->flags & D_EntityFlag_HasColor) {d_entity_equip_color_hsva(dst_n, d_hsva_from_entity(src_n));} + if(src_n->flags & D_EntityFlag_HasVAddrRng) {d_entity_equip_vaddr_rng(dst_n, src_n->vaddr_rng);} + if(src_n->flags & D_EntityFlag_HasVAddr) {d_entity_equip_vaddr(dst_n, src_n->vaddr);} + if(src_n->disabled) {d_entity_equip_disabled(dst_n, 1);} + if(src_n->string.size != 0) {d_entity_equip_name(dst_n, src_n->string);} + dst_n->cfg_src = src_n->cfg_src; + for(D_Entity *src_child = task->src_n->first; !d_entity_is_nil(src_child); src_child = src_child->next) + { + Task *child_task = push_array(scratch.arena, Task, 1); + child_task->src_n = src_child; + child_task->dst_parent = dst_n; + SLLQueuePush(first_task, last_task, child_task); + } + } + } + }break; + case DF_CmdKind_RelocateEntity: + { + D_Entity *entity = d_entity_from_handle(params->entity); + D_Entity *location = d_entity_child_from_kind(entity, D_EntityKind_Location); + if(d_entity_is_nil(location)) + { + location = d_entity_alloc(entity, D_EntityKind_Location); + } + location->flags &= ~D_EntityFlag_HasTextPoint; + location->flags &= ~D_EntityFlag_HasVAddr; + if(params->text_point.line != 0) + { + d_entity_equip_txt_pt(location, params->text_point); + } + if(params->vaddr != 0) + { + d_entity_equip_vaddr(location, params->vaddr); + } + if(params->file_path.size != 0) + { + d_entity_equip_name(location, params->file_path); + } + }break; + + //- rjf: breakpoints + case DF_CmdKind_AddBreakpoint: + case DF_CmdKind_ToggleBreakpoint: + { + String8 file_path = params->file_path; + TxtPt pt = params->text_point; + String8 string = params->string; + U64 vaddr = params->vaddr; + B32 removed_already_existing = 0; + if(kind == DF_CmdKind_ToggleBreakpoint) + { + D_EntityList bps = d_query_cached_entity_list_with_kind(D_EntityKind_Breakpoint); + for(D_EntityNode *n = bps.first; n != 0; n = n->next) + { + D_Entity *bp = n->entity; + D_Entity *loc = d_entity_child_from_kind(bp, D_EntityKind_Location); + if((loc->flags & D_EntityFlag_HasTextPoint && path_match_normalized(loc->string, file_path) && loc->text_point.line == pt.line) || + (loc->flags & D_EntityFlag_HasVAddr && loc->vaddr == vaddr) || + (!(loc->flags & D_EntityFlag_HasTextPoint) && str8_match(loc->string, string, 0))) + { + d_entity_mark_for_deletion(bp); + removed_already_existing = 1; + break; + } + } + } + if(!removed_already_existing) + { + D_Entity *bp = d_entity_alloc(d_entity_root(), D_EntityKind_Breakpoint); + d_entity_equip_cfg_src(bp, D_CfgSrc_Project); + D_Entity *loc = d_entity_alloc(bp, D_EntityKind_Location); + if(file_path.size != 0 && pt.line != 0) + { + d_entity_equip_name(loc, file_path); + d_entity_equip_txt_pt(loc, pt); + } + else if(string.size != 0) + { + d_entity_equip_name(loc, string); + } + else if(vaddr != 0) + { + d_entity_equip_vaddr(loc, vaddr); + } + } + }break; + case DF_CmdKind_AddAddressBreakpoint: + case DF_CmdKind_AddFunctionBreakpoint: + { + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_AddBreakpoint), params); + }break; + + //- rjf: watch pins + case DF_CmdKind_AddWatchPin: + case DF_CmdKind_ToggleWatchPin: + { + String8 file_path = params->file_path; + TxtPt pt = params->text_point; + String8 string = params->string; + U64 vaddr = params->vaddr; + B32 removed_already_existing = 0; + if(kind == DF_CmdKind_ToggleWatchPin) + { + D_EntityList wps = d_query_cached_entity_list_with_kind(D_EntityKind_WatchPin); + for(D_EntityNode *n = wps.first; n != 0; n = n->next) + { + D_Entity *wp = n->entity; + D_Entity *loc = d_entity_child_from_kind(wp, D_EntityKind_Location); + if((loc->flags & D_EntityFlag_HasTextPoint && path_match_normalized(loc->string, file_path) && loc->text_point.line == pt.line) || + (loc->flags & D_EntityFlag_HasVAddr && loc->vaddr == vaddr) || + (!(loc->flags & D_EntityFlag_HasTextPoint) && str8_match(loc->string, string, 0))) + { + d_entity_mark_for_deletion(wp); + removed_already_existing = 1; + break; + } + } + } + if(!removed_already_existing) + { + D_Entity *wp = d_entity_alloc(d_entity_root(), D_EntityKind_WatchPin); + d_entity_equip_name(wp, string); + d_entity_equip_cfg_src(wp, D_CfgSrc_Project); + D_Entity *loc = d_entity_alloc(wp, D_EntityKind_Location); + if(file_path.size != 0 && pt.line != 0) + { + d_entity_equip_name(loc, file_path); + d_entity_equip_txt_pt(loc, pt); + } + else if(vaddr != 0) + { + d_entity_equip_vaddr(loc, vaddr); + } + } + }break; + + //- rjf: watches + case DF_CmdKind_ToggleWatchExpression: + if(params->string.size != 0) + { + D_Entity *existing_watch = d_entity_from_name_and_kind(params->string, D_EntityKind_Watch); + if(d_entity_is_nil(existing_watch)) + { + D_Entity *watch = &d_nil_entity; + watch = d_entity_alloc(d_entity_root(), D_EntityKind_Watch); + d_entity_equip_cfg_src(watch, D_CfgSrc_Project); + d_entity_equip_name(watch, cmd->params.string); + } + else + { + d_entity_mark_for_deletion(existing_watch); + } + }break; + + //- rjf: cursor operations + case DF_CmdKind_ToggleBreakpointAtCursor: + { + D_Regs *regs = d_regs(); + D_CmdParams p = d_cmd_params_zero(); + p.file_path = regs->file_path; + p.text_point = regs->cursor; + p.vaddr = regs->vaddr_range.min; + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_ToggleBreakpoint), &p); + }break; + case DF_CmdKind_ToggleWatchPinAtCursor: + { + D_Regs *regs = d_regs(); + D_CmdParams p = d_cmd_params_zero(); + p.file_path = regs->file_path; + p.text_point = regs->cursor; + p.vaddr = regs->vaddr_range.min; + p.string = params->string; + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_ToggleWatchPin), &p); + }break; + case DF_CmdKind_GoToNameAtCursor: + case DF_CmdKind_ToggleWatchExpressionAtCursor: + { + HS_Scope *hs_scope = hs_scope_open(); + TXT_Scope *txt_scope = txt_scope_open(); + D_Regs *regs = d_regs(); + U128 text_key = regs->text_key; + TXT_LangKind lang_kind = regs->lang_kind; + TxtRng range = txt_rng(regs->cursor, regs->mark); + U128 hash = {0}; + TXT_TextInfo info = txt_text_info_from_key_lang(txt_scope, text_key, lang_kind, &hash); + String8 data = hs_data_from_hash(hs_scope, hash); + Rng1U64 expr_off_range = {0}; + if(range.min.column != range.max.column) + { + expr_off_range = r1u64(txt_off_from_info_pt(&info, range.min), txt_off_from_info_pt(&info, range.max)); + } + else + { + expr_off_range = txt_expr_off_range_from_info_data_pt(&info, data, range.min); + } + String8 expr = str8_substr(data, expr_off_range); + D_CmdParams p = d_cmd_params_zero(); + p.string = expr; + df_push_cmd(df_cmd_spec_from_kind(kind == DF_CmdKind_GoToNameAtCursor ? DF_CmdKind_GoToName : + kind == DF_CmdKind_ToggleWatchExpressionAtCursor ? DF_CmdKind_ToggleWatchExpression : + DF_CmdKind_GoToName), + &p); + txt_scope_close(txt_scope); + hs_scope_close(hs_scope); + }break; + + //- rjf: targets + case DF_CmdKind_AddTarget: + { + // rjf: build target + D_Entity *entity = &d_nil_entity; + entity = d_entity_alloc(d_entity_root(), D_EntityKind_Target); + d_entity_equip_disabled(entity, 1); + d_entity_equip_cfg_src(entity, D_CfgSrc_Project); + D_Entity *exe = d_entity_alloc(entity, D_EntityKind_Executable); + d_entity_equip_name(exe, params->file_path); + String8 working_dir = str8_chop_last_slash(params->file_path); + if(working_dir.size != 0) + { + String8 working_dir_path = push_str8f(scratch.arena, "%S/", working_dir); + D_Entity *execution_path = d_entity_alloc(entity, D_EntityKind_WorkingDirectory); + d_entity_equip_name(execution_path, working_dir_path); + } + D_CmdParams p = *params; + p.entity = d_handle_from_entity(entity); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_EditTarget), &p); + df_push_cmd(df_cmd_spec_from_kind(DF_CmdKind_SelectTarget), &p); + }break; + case DF_CmdKind_SelectTarget: + { + D_Entity *entity = d_entity_from_handle(params->entity); + if(entity->kind == D_EntityKind_Target) + { + D_EntityList all_targets = d_query_cached_entity_list_with_kind(D_EntityKind_Target); + B32 is_selected = !entity->disabled; + for(D_EntityNode *n = all_targets.first; n != 0; n = n->next) + { + D_Entity *target = n->entity; + d_entity_equip_disabled(target, 1); + } + if(!is_selected) + { + d_entity_equip_disabled(entity, 0); + } + } + }break; + + //- rjf: jit-debugger registration + case DF_CmdKind_RegisterAsJITDebugger: + { +#if OS_WINDOWS + char filename_cstr[MAX_PATH] = {0}; + GetModuleFileName(0, filename_cstr, sizeof(filename_cstr)); + String8 debugger_binary_path = str8_cstring(filename_cstr); + String8 name8 = str8_lit("Debugger"); + String8 data8 = push_str8f(scratch.arena, "%S --jit_pid:%%ld --jit_code:%%ld --jit_addr:0x%%p", debugger_binary_path); + String16 name16 = str16_from_8(scratch.arena, name8); + String16 data16 = str16_from_8(scratch.arena, data8); + B32 likely_not_in_admin_mode = 0; + { + HKEY reg_key = 0; + LSTATUS status = 0; + status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\", 0, KEY_SET_VALUE, ®_key); + likely_not_in_admin_mode = (status == ERROR_ACCESS_DENIED); + status = RegSetValueExW(reg_key, (LPCWSTR)name16.str, 0, REG_SZ, (BYTE *)data16.str, data16.size*sizeof(U16)+2); + RegCloseKey(reg_key); + } + { + HKEY reg_key = 0; + LSTATUS status = 0; + status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\", 0, KEY_SET_VALUE, ®_key); + likely_not_in_admin_mode = (status == ERROR_ACCESS_DENIED); + status = RegSetValueExW(reg_key, (LPCWSTR)name16.str, 0, REG_SZ, (BYTE *)data16.str, data16.size*sizeof(U16)+2); + RegCloseKey(reg_key); + } + if(likely_not_in_admin_mode) + { + log_user_error(str8_lit("Could not register as the just-in-time debugger, access was denied; try running the debugger as administrator.")); + } +#else + log_user_error(str8_lit("Registering as the just-in-time debugger is currently not supported on this system.")); +#endif + }break; + + //- rjf: developer commands + case DF_CmdKind_LogMarker: + { + log_infof("\"#MARKER\""); + }break; } } } @@ -11366,19 +11962,7 @@ df_frame(void) ////////////////////////////// //- rjf: tick debug engine // - // TODO(rjf): hacking around for @msgs - D_CmdList more_cmds = d_gather_root_cmds(scratch.arena); - if(cmds.first != 0 && more_cmds.first != 0) - { - cmds.last->next = more_cmds.first; - cmds.last = more_cmds.last; - cmds.count += more_cmds.count; - } - else if(more_cmds.first != 0) - { - MemoryCopyStruct(&cmds, &more_cmds); - } - d_tick(scratch.arena, &targets, &breakpoints, di_scope, &cmds, dt); + d_tick(scratch.arena, &targets, &breakpoints, di_scope, dt); ////////////////////////////// //- rjf: apply new rich hover info @@ -11487,7 +12071,7 @@ df_frame(void) } d_push_regs(); d_regs()->window = df_handle_from_window(w); - df_window_update_and_render(scratch.arena, w, &cmds); + df_window_update_and_render(scratch.arena, w); D_Regs *window_regs = d_pop_regs(); if(df_window_from_handle(df_state->last_focused_window) == w) { @@ -11496,6 +12080,14 @@ df_frame(void) } } + ////////////////////////////// + //- rjf: clear commands + // + { + arena_clear(df_state->cmds_arena); + MemoryZeroStruct(&df_state->cmds); + } + ////////////////////////////// //- rjf: simulate lag // diff --git a/src/dbg_frontend/dbg_frontend_core.h b/src/dbg_frontend/dbg_frontend_core.h index 6faa8b0f..4b7d187e 100644 --- a/src/dbg_frontend/dbg_frontend_core.h +++ b/src/dbg_frontend/dbg_frontend_core.h @@ -75,7 +75,7 @@ typedef struct DF_View DF_View; #define DF_VIEW_SETUP_FUNCTION_DEF(name) internal DF_VIEW_SETUP_FUNCTION_SIG(DF_VIEW_SETUP_FUNCTION_NAME(name)) typedef DF_VIEW_SETUP_FUNCTION_SIG(DF_ViewSetupFunctionType); -#define DF_VIEW_CMD_FUNCTION_SIG(name) void name(DF_View *view, MD_Node *params, String8 string, D_CmdList *cmds) +#define DF_VIEW_CMD_FUNCTION_SIG(name) void name(DF_View *view, MD_Node *params, String8 string) #define DF_VIEW_CMD_FUNCTION_NAME(name) df_view_cmds_##name #define DF_VIEW_CMD_FUNCTION_DEF(name) internal DF_VIEW_CMD_FUNCTION_SIG(DF_VIEW_CMD_FUNCTION_NAME(name)) typedef DF_VIEW_CMD_FUNCTION_SIG(DF_ViewCmdFunctionType); @@ -623,9 +623,16 @@ struct DF_State Arena *arena; B32 quit; + // rjf: commands + Arena *cmds_arena; + D_CmdList cmds; + // rjf: frame request state U64 num_frames_requested; + // rjf: autosave timer + F32 seconds_until_autosave; + // rjf: key map table Arena *key_map_arena; U64 key_map_table_size; @@ -887,7 +894,7 @@ internal DF_Window *df_window_open(Vec2F32 size, OS_Handle preferred_monitor, D_ internal DF_Window *df_window_from_os_handle(OS_Handle os); -internal void df_window_update_and_render(Arena *arena, DF_Window *ws, D_CmdList *cmds); +internal void df_window_update_and_render(Arena *arena, DF_Window *ws); //////////////////////////////// //~ rjf: Eval Viz @@ -960,10 +967,31 @@ internal String8 df_stop_explanation_string_icon_from_ctrl_event(Arena *arena, C internal void df_request_frame(void); +//////////////////////////////// +//~ rjf: Commands + +// TODO(rjf): @msgs temporary glue +internal D_CmdSpec *df_cmd_spec_from_kind(DF_CmdKind kind); +internal DF_CmdKind df_cmd_kind_from_string(String8 string); + +//- rjf: pushing +internal void df_push_cmd(D_CmdSpec *spec, D_CmdParams *params); +#define df_cmd(kind, ...) df_push_cmd(df_cmd_spec_from_kind(kind), \ +&(D_CmdParams) \ +{ \ +.window = d_regs()->window, \ +.panel = d_regs()->panel, \ +.view = d_regs()->view, \ +__VA_ARGS__ \ +}) + +//- rjf: iterating +internal B32 df_next_cmd(D_Cmd **cmd); + //////////////////////////////// //~ rjf: Main Layer Top-Level Calls -internal void df_init(void); +internal void df_init(CmdLine *cmdln); internal void df_frame(void); #endif // DBG_FRONTEND_CORE_H diff --git a/src/dbg_frontend/dbg_frontend_views.c b/src/dbg_frontend/dbg_frontend_views.c index 85bc80d5..55f3b94d 100644 --- a/src/dbg_frontend/dbg_frontend_views.c +++ b/src/dbg_frontend/dbg_frontend_views.c @@ -19,12 +19,10 @@ df_code_view_init(DF_CodeViewState *cv, DF_View *view) } internal void -df_code_view_cmds(DF_View *view, DF_CodeViewState *cv, D_CmdList *cmds, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key) +df_code_view_cmds(DF_View *view, DF_CodeViewState *cv, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key) { - for(D_CmdNode *n = cmds->first; n != 0; n = n->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { - D_Cmd *cmd = &n->cmd; - // rjf: mismatched window/panel => skip if(!d_handle_match(d_regs()->window, cmd->params.window) || !d_handle_match(d_regs()->panel, cmd->params.panel)) @@ -33,33 +31,33 @@ df_code_view_cmds(DF_View *view, DF_CodeViewState *cv, D_CmdList *cmds, String8 } // rjf: process - D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); - switch(core_cmd_kind) + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); + switch(kind) { default: break; - case D_CmdKind_GoToLine: + case DF_CmdKind_GoToLine: { cv->goto_line_num = cmd->params.text_point.line; }break; - case D_CmdKind_CenterCursor: + case DF_CmdKind_CenterCursor: { cv->center_cursor = 1; }break; - case D_CmdKind_ContainCursor: + case DF_CmdKind_ContainCursor: { cv->contain_cursor = 1; }break; - case D_CmdKind_FindTextForward: + case DF_CmdKind_FindTextForward: { arena_clear(cv->find_text_arena); cv->find_text_fwd = push_str8_copy(cv->find_text_arena, cmd->params.string); }break; - case D_CmdKind_FindTextBackward: + case DF_CmdKind_FindTextBackward: { arena_clear(cv->find_text_arena); cv->find_text_bwd = push_str8_copy(cv->find_text_arena, cmd->params.string); }break; - case D_CmdKind_ToggleWatchExpressionAtMouse: + case DF_CmdKind_ToggleWatchExpressionAtMouse: { cv->watch_expr_at_mouse = 1; }break; @@ -145,13 +143,13 @@ df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeVie B32 search_query_is_active = 0; { DF_Window *window = df_window_from_handle(d_regs()->window); - D_CmdKind query_cmd_kind = d_cmd_kind_from_string(window->query_cmd_spec->info.string); - if(query_cmd_kind == D_CmdKind_FindTextForward || - query_cmd_kind == D_CmdKind_FindTextBackward) + DF_CmdKind query_cmd_kind = df_cmd_kind_from_string(window->query_cmd_spec->info.string); + if(query_cmd_kind == DF_CmdKind_FindTextForward || + query_cmd_kind == DF_CmdKind_FindTextBackward) { search_query = str8(window->query_view_stack_top->query_buffer, window->query_view_stack_top->query_string_size); search_query_is_active = 1; - search_query_side = (query_cmd_kind == D_CmdKind_FindTextForward) ? Side_Max : Side_Min; + search_query_side = (query_cmd_kind == DF_CmdKind_FindTextForward) ? Side_Max : Side_Min; } } @@ -438,7 +436,7 @@ df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeVie cv->center_cursor = found; if(found == 0) { - d_errorf("Could not find \"%S\"", cv->find_text_fwd); + log_user_errorf("Could not find \"%S\"", cv->find_text_fwd); } scratch_end(scratch); } @@ -499,7 +497,7 @@ df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeVie cv->center_cursor = found; if(found == 0) { - d_errorf("Could not find \"%S\"", cv->find_text_bwd); + log_user_errorf("Could not find \"%S\"", cv->find_text_bwd); } scratch_end(scratch); } @@ -552,7 +550,7 @@ df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeVie //- rjf: press code slice? -> focus panel if(ui_pressed(sig.base)) { - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } //- rjf: dragging & outside region? -> contain cursor @@ -572,14 +570,14 @@ df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeVie if(ui_pressed(sig.base) && sig.base.event_flags & OS_EventFlag_Ctrl) { ui_kill_action(); - d_cmd(D_CmdKind_GoToName, .string = txt_string_from_info_data_txt_rng(text_info, text_data, sig.mouse_expr_rng)); + df_cmd(DF_CmdKind_GoToName, .string = txt_string_from_info_data_txt_rng(text_info, text_data, sig.mouse_expr_rng)); } //- rjf: watch expr at mouse if(cv->watch_expr_at_mouse) { cv->watch_expr_at_mouse = 0; - d_cmd(D_CmdKind_ToggleWatchExpression, .string = txt_string_from_info_data_txt_rng(text_info, text_data, sig.mouse_expr_rng)); + df_cmd(DF_CmdKind_ToggleWatchExpression, .string = txt_string_from_info_data_txt_rng(text_info, text_data, sig.mouse_expr_rng)); } //- rjf: selected text on single line, no query? -> set search text @@ -724,11 +722,11 @@ df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeVie ui_eat_event(evt); if(evt->delta_2f32.y < 0) { - d_cmd(D_CmdKind_IncCodeFontScale); + df_cmd(DF_CmdKind_IncCodeFontScale); } else if(evt->delta_2f32.y > 0) { - d_cmd(D_CmdKind_DecCodeFontScale); + df_cmd(DF_CmdKind_DecCodeFontScale); } } } @@ -1602,10 +1600,10 @@ df_watch_view_build(DF_View *view, DF_WatchViewState *ewv, B32 modifiable, U32 d } if(row->expand_ui_rule_spec != &df_nil_view_rule_spec && row->expand_ui_rule_spec != 0) { - d_cmd(D_CmdKind_OpenTab, - .string = e_string_from_expr(scratch.arena, row->expr), - .view_spec = df_view_spec_from_string(row->expand_ui_rule_spec->info.string), - .params_tree = row->expand_ui_rule_params); + df_cmd(DF_CmdKind_OpenTab, + .string = e_string_from_expr(scratch.arena, row->expr), + .view_spec = df_view_spec_from_string(row->expand_ui_rule_spec->info.string), + .params_tree = row->expand_ui_rule_params); } } } @@ -1638,11 +1636,11 @@ df_watch_view_build(DF_View *view, DF_WatchViewState *ewv, B32 modifiable, U32 d file_path = lines.first->v.file_path; pt = lines.first->v.pt; } - d_cmd(D_CmdKind_FindCodeLocation, - .entity = d_handle_from_entity(process), - .vaddr = vaddr, - .file_path = file_path, - .text_point= pt); + df_cmd(DF_CmdKind_FindCodeLocation, + .entity = d_handle_from_entity(process), + .vaddr = vaddr, + .file_path = file_path, + .text_point= pt); } if(1 <= selection_tbl.min.y && selection_tbl.min.y <= frame_rows_count) { @@ -1766,7 +1764,7 @@ df_watch_view_build(DF_View *view, DF_WatchViewState *ewv, B32 modifiable, U32 d } if(!success) { - d_error(str8_lit("Could not commit value successfully.")); + log_user_error(str8_lit("Could not commit value successfully.")); } }break; case DF_WatchViewColumnKind_Type:{}break; @@ -2309,10 +2307,10 @@ df_watch_view_build(DF_View *view, DF_WatchViewState *ewv, B32 modifiable, U32 d if(ui_clicked(sig)) { DF_ViewSpec *canvas_view_spec = df_view_spec_from_string(row->expand_ui_rule_spec->info.string); - d_cmd(D_CmdKind_OpenTab, - .string = e_string_from_expr(scratch.arena, row->expr), - .view_spec = canvas_view_spec, - .params_tree = row->expand_ui_rule_params); + df_cmd(DF_CmdKind_OpenTab, + .string = e_string_from_expr(scratch.arena, row->expr), + .view_spec = canvas_view_spec, + .params_tree = row->expand_ui_rule_params); } } @@ -2617,7 +2615,7 @@ df_watch_view_build(DF_View *view, DF_WatchViewState *ewv, B32 modifiable, U32 d if(ui_double_clicked(sig) && cell_can_edit) { ui_kill_action(); - d_cmd(D_CmdKind_Edit); + df_cmd(DF_CmdKind_Edit); } // rjf: double-click, not editable -> go-to-location @@ -2635,11 +2633,11 @@ df_watch_view_build(DF_View *view, DF_WatchViewState *ewv, B32 modifiable, U32 d file_path = lines.first->v.file_path; pt = lines.first->v.pt; } - d_cmd(D_CmdKind_FindCodeLocation, - .entity = d_handle_from_entity(process), - .vaddr = vaddr, - .file_path = file_path, - .text_point = pt); + df_cmd(DF_CmdKind_FindCodeLocation, + .entity = d_handle_from_entity(process), + .vaddr = vaddr, + .file_path = file_path, + .text_point = pt); } // rjf: double-click, not editable, callstack frame -> select frame @@ -2833,7 +2831,7 @@ df_watch_view_build(DF_View *view, DF_WatchViewState *ewv, B32 modifiable, U32 d // if(pressed) { - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } scratch_end(scratch); @@ -2870,7 +2868,7 @@ DF_VIEW_UI_FUNCTION_DEF(empty) { if(ui_clicked(df_icon_buttonf(DF_IconKind_X, 0, "Close Panel"))) { - d_cmd(D_CmdKind_ClosePanel); + df_cmd(DF_CmdKind_ClosePanel); } } } @@ -2941,7 +2939,7 @@ DF_VIEW_UI_FUNCTION_DEF(getting_started) DF_Palette(DF_PaletteCode_NeutralPopButton) if(ui_clicked(df_icon_buttonf(DF_IconKind_Add, 0, "Add Target"))) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(D_CmdKind_AddTarget)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(DF_CmdKind_AddTarget)); } }break; @@ -2997,7 +2995,7 @@ DF_VIEW_UI_FUNCTION_DEF(getting_started) UI_Padding(ui_pct(1, 0)) { ui_labelf("use"); - D_CmdSpec *spec = d_cmd_spec_from_kind(D_CmdKind_RunCommand); + D_CmdSpec *spec = df_cmd_spec_from_kind(DF_CmdKind_RunCommand); UI_Flags(UI_BoxFlag_DrawBorder) UI_TextAlignment(UI_TextAlign_Center) df_cmd_binding_buttons(spec); ui_labelf("to open command menu"); } @@ -3170,7 +3168,7 @@ DF_VIEW_UI_FUNCTION_DEF(commands) //- rjf: submit best match when hitting enter w/ no selection if(cv->selected_cmd_spec == &d_nil_cmd_spec && ui_slot_press(UI_EventActionSlot_Accept)) { - d_cmd(D_CmdKind_CompleteQuery, .cmd_spec = (cmd_array.count > 0 ? cmd_array.v[0].cmd_spec : &d_nil_cmd_spec)); + df_cmd(DF_CmdKind_CompleteQuery, .cmd_spec = (cmd_array.count > 0 ? cmd_array.v[0].cmd_spec : &d_nil_cmd_spec)); } //- rjf: selected kind -> cursor @@ -3239,7 +3237,7 @@ DF_VIEW_UI_FUNCTION_DEF(commands) UI_HeightFill UI_TextAlignment(UI_TextAlign_Center) { - D_CmdKind cmd_kind = d_cmd_kind_from_string(item->cmd_spec->info.string); + DF_CmdKind cmd_kind = df_cmd_kind_from_string(item->cmd_spec->info.string); DF_IconKind icon = df_cmd_kind_icon_kind_table[cmd_kind]; if(icon != DF_IconKind_Null) { @@ -3283,7 +3281,7 @@ DF_VIEW_UI_FUNCTION_DEF(commands) UI_Signal sig = ui_signal_from_box(box); if(ui_clicked(sig)) { - d_cmd(D_CmdKind_CompleteQuery, .cmd_spec = item->cmd_spec); + df_cmd(DF_CmdKind_CompleteQuery, .cmd_spec = item->cmd_spec); } } } @@ -3544,7 +3542,7 @@ DF_VIEW_UI_FUNCTION_DEF(file_system) // choose the most recent change to a file browser path, and live with the // consequences). { - d_cmd(D_CmdKind_SetCurrentPath, .file_path = path_query.path); + df_cmd(DF_CmdKind_SetCurrentPath, .file_path = path_query.path); } //- rjf: get files, filtered @@ -3632,7 +3630,7 @@ DF_VIEW_UI_FUNCTION_DEF(file_system) // rjf: command search part is empty, but directory matches some file: if(path_query_path_props.created != 0 && path_query.search.size == 0) { - d_cmd(D_CmdKind_CompleteQuery, .file_path = query_normalized_with_opt_slash); + df_cmd(DF_CmdKind_CompleteQuery, .file_path = query_normalized_with_opt_slash); } // rjf: command argument exactly matches some file: @@ -3648,14 +3646,14 @@ DF_VIEW_UI_FUNCTION_DEF(file_system) // rjf: is a file -> complete view else { - d_cmd(D_CmdKind_CompleteQuery, .file_path = query_normalized_with_opt_slash); + df_cmd(DF_CmdKind_CompleteQuery, .file_path = query_normalized_with_opt_slash); } } // rjf: command argument is empty, picking folders -> use current folder else if(path_query.search.size == 0 && dir_selection) { - d_cmd(D_CmdKind_CompleteQuery, .file_path = path_query.path); + df_cmd(DF_CmdKind_CompleteQuery, .file_path = path_query.path); } // rjf: command argument does not exactly match any file, but lister results are in: @@ -3671,14 +3669,14 @@ DF_VIEW_UI_FUNCTION_DEF(file_system) else { String8 file_path = push_str8f(scratch.arena, "%S%S", path_query.path, filename); - d_cmd(D_CmdKind_CompleteQuery, .file_path = file_path); + df_cmd(DF_CmdKind_CompleteQuery, .file_path = file_path); } } // rjf: command argument does not match any file, and lister is empty (new file) else { - d_cmd(D_CmdKind_CompleteQuery, .file_path = query); + df_cmd(DF_CmdKind_CompleteQuery, .file_path = query); } } @@ -3877,7 +3875,7 @@ DF_VIEW_UI_FUNCTION_DEF(file_system) } else { - d_cmd(D_CmdKind_CompleteQuery, .file_path = new_path); + df_cmd(DF_CmdKind_CompleteQuery, .file_path = new_path); } } } @@ -4098,7 +4096,7 @@ DF_VIEW_UI_FUNCTION_DEF(system_processes) if(sp->selected_pid == 0 && process_info_array.count > 0 && ui_slot_press(UI_EventActionSlot_Accept)) { DF_ProcessInfo *info = &process_info_array.v[0]; - d_cmd(D_CmdKind_CompleteQuery, .id = info->info.pid); + df_cmd(DF_CmdKind_CompleteQuery, .id = info->info.pid); } //- rjf: selected PID -> cursor @@ -4186,7 +4184,7 @@ DF_VIEW_UI_FUNCTION_DEF(system_processes) // rjf: click => activate this specific process if(ui_clicked(sig)) { - d_cmd(D_CmdKind_CompleteQuery, .id = info->info.pid); + df_cmd(DF_CmdKind_CompleteQuery, .id = info->info.pid); } } } @@ -4336,7 +4334,7 @@ DF_VIEW_UI_FUNCTION_DEF(entity_lister) if(d_entity_is_nil(d_entity_from_handle(fev->selected_entity_handle)) && ent_arr.count != 0 && ui_slot_press(UI_EventActionSlot_Accept)) { D_Entity *ent = ent_arr.v[0].entity; - d_cmd(D_CmdKind_CompleteQuery, .entity = d_handle_from_entity(ent)); + df_cmd(DF_CmdKind_CompleteQuery, .entity = d_handle_from_entity(ent)); } //- rjf: selected entity -> cursor @@ -4415,7 +4413,7 @@ DF_VIEW_UI_FUNCTION_DEF(entity_lister) } if(ui_clicked(ui_signal_from_box(box))) { - d_cmd(D_CmdKind_CompleteQuery, .entity = d_handle_from_entity(ent)); + df_cmd(DF_CmdKind_CompleteQuery, .entity = d_handle_from_entity(ent)); } } } @@ -4493,7 +4491,7 @@ DF_VIEW_UI_FUNCTION_DEF(symbol_lister) String8 name = str8(name_base, name_size); if(name.size != 0) { - d_cmd(D_CmdKind_CompleteQuery, .string = name); + df_cmd(DF_CmdKind_CompleteQuery, .string = name); } break; } @@ -4583,7 +4581,7 @@ DF_VIEW_UI_FUNCTION_DEF(symbol_lister) UI_Signal sig = ui_signal_from_box(box); if(ui_clicked(sig)) { - d_cmd(D_CmdKind_CompleteQuery, .string = name); + df_cmd(DF_CmdKind_CompleteQuery, .string = name); } if(ui_hovering(sig)) UI_Tooltip { @@ -4651,10 +4649,8 @@ DF_VIEW_CMD_FUNCTION_DEF(target) D_Entity *entity = d_entity_from_eval_string(string); // rjf: process commands - for(D_CmdNode *n = cmds->first; n != 0; n = n->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { - D_Cmd *cmd = &n->cmd; - // rjf: mismatched window/panel => skip if(!d_handle_match(d_regs()->window, cmd->params.window) || !d_handle_match(d_regs()->panel, cmd->params.panel)) @@ -4663,12 +4659,12 @@ DF_VIEW_CMD_FUNCTION_DEF(target) } // rjf: process command - D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); - switch(core_cmd_kind) + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); + switch(kind) { default:break; - case D_CmdKind_PickFile: - case D_CmdKind_PickFolder: + case DF_CmdKind_PickFile: + case DF_CmdKind_PickFolder: { String8 pick_string = cmd->params.file_path; D_Entity *storage_entity = entity; @@ -4861,7 +4857,7 @@ DF_VIEW_UI_FUNCTION_DEF(target) // rjf: focus panel on press if(ui_pressed(sig)) { - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } // rjf: begin editing on double-click @@ -4903,7 +4899,7 @@ DF_VIEW_UI_FUNCTION_DEF(target) UI_TextAlignment(UI_TextAlign_Center) if(ui_clicked(ui_buttonf("Browse..."))) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(kv_info[idx].fill_with_file ? D_CmdKind_PickFile : D_CmdKind_PickFolder)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(kv_info[idx].fill_with_file ? DF_CmdKind_PickFile : DF_CmdKind_PickFolder)); tv->pick_dst_kind = kv_info[idx].storage_child_kind; } } @@ -5026,7 +5022,7 @@ DF_VIEW_UI_FUNCTION_DEF(targets) add_sig = df_icon_buttonf(DF_IconKind_Add, 0, "Add New Target"); if(ui_clicked(add_sig)) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(D_CmdKind_AddTarget)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(DF_CmdKind_AddTarget)); } } @@ -5046,7 +5042,7 @@ DF_VIEW_UI_FUNCTION_DEF(targets) UI_Signal sig = df_icon_buttonf(!target->disabled ? DF_IconKind_CheckFilled : DF_IconKind_CheckHollow, 0, "###ebl_%p", target); if(ui_clicked(sig)) { - d_cmd(!target->disabled ? D_CmdKind_DisableTarget : D_CmdKind_EnableTarget, .entity = d_handle_from_entity(target)); + df_cmd(!target->disabled ? DF_CmdKind_DisableTarget : DF_CmdKind_EnableTarget, .entity = d_handle_from_entity(target)); } } @@ -5063,14 +5059,15 @@ DF_VIEW_UI_FUNCTION_DEF(targets) { DF_IconKind icon; String8 text; - D_CmdKind cmd; + D_CmdKind d_cmd; + DF_CmdKind df_cmd; } ctrls[] = { { DF_IconKind_PlayStepForward, str8_lit("Launch and Initialize"), D_CmdKind_LaunchAndInit }, { DF_IconKind_Play, str8_lit("Launch and Run"), D_CmdKind_LaunchAndRun }, - { DF_IconKind_Pencil, str8_lit("Edit"), D_CmdKind_Target }, - { DF_IconKind_Trash, str8_lit("Delete"), D_CmdKind_RemoveTarget }, + { DF_IconKind_Pencil, str8_lit("Edit"), D_CmdKind_Null, DF_CmdKind_Target }, + { DF_IconKind_Trash, str8_lit("Delete"), D_CmdKind_Null, DF_CmdKind_RemoveTarget }, }; for(U64 ctrl_idx = 0; ctrl_idx < ArrayCount(ctrls); ctrl_idx += 1) { @@ -5085,7 +5082,14 @@ DF_VIEW_UI_FUNCTION_DEF(targets) } if(ui_clicked(sig)) { - d_cmd(ctrls[ctrl_idx].cmd, .entity = d_handle_from_entity(target)); + if(ctrls[ctrl_idx].d_cmd != D_CmdKind_Null) + { + d_cmd(ctrls[ctrl_idx].d_cmd, .entity = d_handle_from_entity(target)); + } + if(ctrls[ctrl_idx].df_cmd != DF_CmdKind_Null) + { + df_cmd(ctrls[ctrl_idx].df_cmd, .entity = d_handle_from_entity(target)); + } } } } @@ -5138,10 +5142,8 @@ DF_VIEW_CMD_FUNCTION_DEF(file_path_map) DF_FilePathMapViewState *fpms = df_view_user_state(view, DF_FilePathMapViewState); // rjf: process commands - for(D_CmdNode *n = cmds->first; n != 0; n = n->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { - D_Cmd *cmd = &n->cmd; - // rjf: mismatched window/panel => skip if(!d_handle_match(d_regs()->window, cmd->params.window) || !d_handle_match(d_regs()->panel, cmd->params.panel)) @@ -5150,22 +5152,22 @@ DF_VIEW_CMD_FUNCTION_DEF(file_path_map) } //rjf: process - D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); - switch(core_cmd_kind) + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); + switch(kind) { default:break; - case D_CmdKind_PickFile: - case D_CmdKind_PickFolder: - case D_CmdKind_PickFileOrFolder: + case DF_CmdKind_PickFile: + case DF_CmdKind_PickFolder: + case DF_CmdKind_PickFileOrFolder: { String8 pick_string = cmd->params.file_path; Side pick_side = fpms->pick_file_dst_side; D_Entity *storage_entity = d_entity_from_handle(fpms->pick_file_dst_map); - d_cmd(pick_side == Side_Min ? - D_CmdKind_SetFileOverrideLinkSrc : - D_CmdKind_SetFileOverrideLinkDst, - .entity = d_handle_from_entity(storage_entity), - .file_path = pick_string); + df_cmd(pick_side == Side_Min ? + DF_CmdKind_SetFileOverrideLinkSrc : + DF_CmdKind_SetFileOverrideLinkDst, + .entity = d_handle_from_entity(storage_entity), + .file_path = pick_string); }break; } } @@ -5300,7 +5302,7 @@ DF_VIEW_UI_FUNCTION_DEF(file_path_map) // rjf: focus panel on press if(ui_pressed(sig)) { - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } // rjf: begin editing on double-click @@ -5335,7 +5337,7 @@ DF_VIEW_UI_FUNCTION_DEF(file_path_map) UI_PrefWidth(ui_text_dim(10, 1)) if(ui_clicked(ui_buttonf("Browse..."))) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(D_CmdKind_PickFileOrFolder)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(DF_CmdKind_PickFileOrFolder)); fpms->pick_file_dst_map = d_handle_from_entity(map); fpms->pick_file_dst_side = Side_Min; } @@ -5370,7 +5372,7 @@ DF_VIEW_UI_FUNCTION_DEF(file_path_map) // rjf: focus panel on press if(ui_pressed(sig)) { - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } // rjf: begin editing on double-click @@ -5406,7 +5408,7 @@ DF_VIEW_UI_FUNCTION_DEF(file_path_map) UI_PrefWidth(ui_text_dim(10, 1)) if(ui_clicked(ui_buttonf("Browse..."))) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(D_CmdKind_PickFileOrFolder)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(DF_CmdKind_PickFileOrFolder)); fpms->pick_file_dst_map = d_handle_from_entity(map); fpms->pick_file_dst_side = Side_Max; } @@ -5419,11 +5421,11 @@ DF_VIEW_UI_FUNCTION_DEF(file_path_map) if(edit_commit && commit_side != Side_Invalid) { String8 new_string = str8(fpms->input_buffer, fpms->input_size); - d_cmd(commit_side == Side_Min ? - D_CmdKind_SetFileOverrideLinkSrc : - D_CmdKind_SetFileOverrideLinkDst, - .entity = commit_map, - .file_path = new_string); + df_cmd(commit_side == Side_Min ? + DF_CmdKind_SetFileOverrideLinkSrc : + DF_CmdKind_SetFileOverrideLinkDst, + .entity = commit_map, + .file_path = new_string); } //- rjf: apply editing finish @@ -5773,10 +5775,8 @@ DF_VIEW_SETUP_FUNCTION_DEF(modules) DF_VIEW_CMD_FUNCTION_DEF(modules) { DF_ModulesViewState *mv = df_view_user_state(view, DF_ModulesViewState); - for(D_CmdNode *n = cmds->first; n != 0; n = n->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { - D_Cmd *cmd = &n->cmd; - // rjf: mismatched window/panel => skip if(!d_handle_match(d_regs()->window, cmd->params.window) || !d_handle_match(d_regs()->panel, cmd->params.panel)) @@ -5785,11 +5785,11 @@ DF_VIEW_CMD_FUNCTION_DEF(modules) } //rjf: process - D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); - switch(core_cmd_kind) + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); + switch(kind) { default:break; - case D_CmdKind_PickFile: + case DF_CmdKind_PickFile: { Temp scratch = scratch_begin(0, 0); String8 pick_string = cmd->params.file_path; @@ -5966,7 +5966,7 @@ DF_VIEW_UI_FUNCTION_DEF(modules) if(ui_pressed(sig)) { next_cursor = v2s64(1, (S64)idx+1); - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } } UI_TableCell @@ -6006,7 +6006,7 @@ DF_VIEW_UI_FUNCTION_DEF(modules) { edit_commit = (mv->txt_editing && !txt_is_selected); next_cursor = v2s64(2, (S64)idx+1); - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } // rjf: double-click -> begin editing @@ -6031,7 +6031,7 @@ DF_VIEW_UI_FUNCTION_DEF(modules) { if(ui_clicked(ui_buttonf("Browse...")) || (brw_is_selected && edit_begin)) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(D_CmdKind_PickFile)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(DF_CmdKind_PickFile)); mv->pick_file_dst_entity = d_handle_from_entity(entity); } } @@ -6242,10 +6242,8 @@ DF_VIEW_CMD_FUNCTION_DEF(pending_file) DF_PendingFileViewState *pves = df_view_user_state(view, DF_PendingFileViewState); //- rjf: process commands - for(D_CmdNode *n = cmds->first; n != 0; n = n->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { - D_Cmd *cmd = &n->cmd; - // rjf: mismatched window/panel => skip if(!d_handle_match(d_regs()->window, cmd->params.window) || !d_handle_match(d_regs()->panel, cmd->params.panel)) @@ -6254,16 +6252,16 @@ DF_VIEW_CMD_FUNCTION_DEF(pending_file) } // rjf: process - D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); - switch(core_cmd_kind) + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); + switch(kind) { default:break; // rjf: gather deferred commands to redispatch when entity is ready - case D_CmdKind_GoToLine: - case D_CmdKind_GoToAddress: - case D_CmdKind_CenterCursor: - case D_CmdKind_ContainCursor: + case DF_CmdKind_GoToLine: + case DF_CmdKind_GoToAddress: + case DF_CmdKind_CenterCursor: + case DF_CmdKind_ContainCursor: { d_cmd_list_push(pves->deferred_cmd_arena, &pves->deferred_cmds, &cmd->params, cmd->spec); }break; @@ -6346,7 +6344,7 @@ DF_VIEW_CMD_FUNCTION_DEF(pending_file) //- rjf: if entity is ready, but we have no viewer for it, then just close this tab if(file_is_ready && viewer_kind == DF_ViewKind_Null) { - d_cmd(D_CmdKind_CloseTab); + df_cmd(DF_CmdKind_CloseTab); } scratch_end(scratch); @@ -6384,13 +6382,11 @@ DF_VIEW_CMD_FUNCTION_DEF(text) String8 data = hs_data_from_hash(hs_scope, hash); //- rjf: process general code-view commands - df_code_view_cmds(view, cv, cmds, data, &info, 0, r1u64(0, 0), di_key_zero()); + df_code_view_cmds(view, cv, data, &info, 0, r1u64(0, 0), di_key_zero()); //- rjf: process code-file commands - for(D_CmdNode *n = cmds->first; n != 0; n = n->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { - D_Cmd *cmd = &n->cmd; - // rjf: mismatched window/panel => skip if(!d_handle_match(d_regs()->window, cmd->params.window) || !d_handle_match(d_regs()->panel, cmd->params.panel)) @@ -6399,20 +6395,20 @@ DF_VIEW_CMD_FUNCTION_DEF(text) } // rjf: process - D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); - switch(core_cmd_kind) + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); + switch(kind) { default:{}break; // rjf: override file picking - case D_CmdKind_PickFile: + case DF_CmdKind_PickFile: { String8 src = d_file_path_from_eval_string(scratch.arena, str8(view->query_buffer, view->query_string_size)); String8 dst = cmd->params.file_path; if(src.size != 0 && dst.size != 0) { // rjf: record src -> dst mapping - d_cmd(D_CmdKind_SetFileReplacementPath, .string = src, .file_path = dst); + df_cmd(DF_CmdKind_SetFileReplacementPath, .string = src, .file_path = dst); // rjf: switch this view to viewing replacement file view->query_string_size = Min(sizeof(view->query_buffer), dst.size); @@ -6485,7 +6481,7 @@ DF_VIEW_UI_FUNCTION_DEF(text) UI_TextAlignment(UI_TextAlign_Center) if(ui_clicked(ui_buttonf("Find alternative..."))) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = d_cmd_spec_from_kind(D_CmdKind_PickFile)); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = df_cmd_spec_from_kind(DF_CmdKind_PickFile)); } scratch_end(scratch); } @@ -6703,14 +6699,13 @@ DF_VIEW_CMD_FUNCTION_DEF(disasm) ////////////////////////////// //- rjf: process general code-view commands // - df_code_view_cmds(view, &dv->cv, cmds, dasm_text_data, &dasm_text_info, &dasm_info.lines, range, dbgi_key); + df_code_view_cmds(view, &dv->cv, dasm_text_data, &dasm_text_info, &dasm_info.lines, range, dbgi_key); ////////////////////////////// //- rjf: process disassembly-specific commands // - for(D_CmdNode *n = cmds->first; n != 0; n = n->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { - D_Cmd *cmd = &n->cmd; D_CmdParams params = cmd->params; // rjf: mismatched window/panel => skip @@ -6721,11 +6716,11 @@ DF_VIEW_CMD_FUNCTION_DEF(disasm) } // rjf: process - D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); - switch(core_cmd_kind) + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); + switch(kind) { default: break; - case D_CmdKind_GoToAddress: + case DF_CmdKind_GoToAddress: { D_Entity *process = &d_nil_entity; { @@ -6745,8 +6740,8 @@ DF_VIEW_CMD_FUNCTION_DEF(disasm) } dv->goto_vaddr = params.vaddr; }break; - case D_CmdKind_ToggleCodeBytesVisibility: {dv->style_flags ^= DASM_StyleFlag_CodeBytes;}break; - case D_CmdKind_ToggleAddressVisibility: {dv->style_flags ^= DASM_StyleFlag_Addresses;}break; + case DF_CmdKind_ToggleCodeBytesVisibility: {dv->style_flags ^= DASM_StyleFlag_CodeBytes;}break; + case DF_CmdKind_ToggleAddressVisibility: {dv->style_flags ^= DASM_StyleFlag_Addresses;}break; } } @@ -6929,7 +6924,7 @@ DF_VIEW_CMD_FUNCTION_DEF(output) U128 hash = {0}; TXT_TextInfo info = txt_text_info_from_key_lang(txt_scope, d_regs()->text_key, d_regs()->lang_kind, &hash); String8 data = hs_data_from_hash(hs_scope, hash); - df_code_view_cmds(view, cv, cmds, data, &info, 0, r1u64(0, 0), di_key_zero()); + df_code_view_cmds(view, cv, data, &info, 0, r1u64(0, 0), di_key_zero()); txt_scope_close(txt_scope); hs_scope_close(hs_scope); scratch_end(scratch); @@ -7014,25 +7009,24 @@ DF_VIEW_SETUP_FUNCTION_DEF(memory) DF_VIEW_CMD_FUNCTION_DEF(memory) { DF_MemoryViewState *mv = df_view_user_state(view, DF_MemoryViewState); - for(D_CmdNode *n = cmds->first; n != 0; n = n->next) + for(D_Cmd *cmd = 0; df_next_cmd(&cmd);) { - D_Cmd *cmd = &n->cmd; - D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string); + DF_CmdKind kind = df_cmd_kind_from_string(cmd->spec->info.string); D_CmdParams *params = &cmd->params; - switch(core_cmd_kind) + switch(kind) { default: break; - case D_CmdKind_CenterCursor: + case DF_CmdKind_CenterCursor: if(df_view_from_handle(params->view) == view) { mv->center_cursor = 1; }break; - case D_CmdKind_ContainCursor: + case DF_CmdKind_ContainCursor: if(df_view_from_handle(params->view) == view) { mv->contain_cursor = 1; }break; - case D_CmdKind_GoToAddress: + case DF_CmdKind_GoToAddress: { // NOTE(rjf): go-to-address occurs with disassembly snaps, and we don't // generally want to respond to those in thise view, so just skip any @@ -7043,7 +7037,7 @@ DF_VIEW_CMD_FUNCTION_DEF(memory) // TODO(rjf) } }break; - case D_CmdKind_SetColumns: + case DF_CmdKind_SetColumns: if(df_view_from_handle(params->view) == view) { // TODO(rjf) @@ -7526,7 +7520,7 @@ DF_VIEW_UI_FUNCTION_DEF(memory) // rjf: press -> focus panel if(ui_pressed(sig)) { - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } // rjf: click & drag -> select @@ -7553,11 +7547,11 @@ DF_VIEW_UI_FUNCTION_DEF(memory) ui_eat_event(evt); if(evt->delta_2f32.y < 0) { - d_cmd(D_CmdKind_IncCodeFontScale); + df_cmd(DF_CmdKind_IncCodeFontScale); } else if(evt->delta_2f32.y > 0) { - d_cmd(D_CmdKind_DecCodeFontScale); + df_cmd(DF_CmdKind_DecCodeFontScale); } } } @@ -8004,7 +7998,7 @@ DF_VIEW_UI_FUNCTION_DEF(bitmap) { if(ui_pressed(canvas_sig)) { - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); ui_store_drag_struct(&view_center_pos); } Vec2F32 start_view_center_pos = *ui_get_drag_struct(Vec2F32); @@ -8333,7 +8327,7 @@ DF_VIEW_UI_FUNCTION_DEF(geo3d) { if(ui_pressed(sig)) { - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); Vec2F32 data = v2f32(yaw_target, pitch_target); ui_store_drag_struct(&data); } @@ -9141,7 +9135,7 @@ DF_VIEW_UI_FUNCTION_DEF(settings) ui_ctx_menu_open(color_ctx_menu_keys[item->color], item_box->key, v2f32(0, dim_2f32(item_box->rect).y)); sv->color_ctx_menu_color = item->color; sv->color_ctx_menu_color_hsva = v4f32(hsv.x, hsv.y, hsv.z, rgba.w); - d_cmd(D_CmdKind_FocusPanel); + df_cmd(DF_CmdKind_FocusPanel); } if((item->kind == DF_SettingsItemKind_GlobalSetting || item->kind == DF_SettingsItemKind_WindowSetting) && is_toggler && ui_clicked(sig)) diff --git a/src/dbg_frontend/dbg_frontend_views.h b/src/dbg_frontend/dbg_frontend_views.h index 18bfed34..085676ea 100644 --- a/src/dbg_frontend/dbg_frontend_views.h +++ b/src/dbg_frontend/dbg_frontend_views.h @@ -155,7 +155,7 @@ struct DF_WatchViewState //~ rjf: Code View Functions internal void df_code_view_init(DF_CodeViewState *cv, DF_View *view); -internal void df_code_view_cmds(DF_View *view, DF_CodeViewState *cv, D_CmdList *cmds, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key); +internal void df_code_view_cmds(DF_View *view, DF_CodeViewState *cv, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key); internal DF_CodeViewBuildResult df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeViewBuildFlags flags, Rng2F32 rect, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key); //////////////////////////////// diff --git a/src/dbg_frontend/dbg_frontend_widgets.c b/src/dbg_frontend/dbg_frontend_widgets.c index 6773f52b..e47c0743 100644 --- a/src/dbg_frontend/dbg_frontend_widgets.c +++ b/src/dbg_frontend/dbg_frontend_widgets.c @@ -177,7 +177,7 @@ df_cmd_binding_buttons(D_CmdSpec *spec) { if((binding.key == OS_Key_Esc || binding.key == OS_Key_Delete) && binding.flags == 0) { - d_error(str8_lit("Cannot rebind; this command uses a reserved keybinding.")); + log_user_error(str8_lit("Cannot rebind; this command uses a reserved keybinding.")); } else { @@ -294,7 +294,7 @@ df_cmd_spec_button(D_CmdSpec *spec) "###cmd_%p", spec); UI_Parent(box) UI_HeightFill UI_Padding(ui_em(1.f, 1.f)) { - D_CmdKind kind = d_cmd_kind_from_string(spec->info.string); + DF_CmdKind kind = df_cmd_kind_from_string(spec->info.string); DF_IconKind canonical_icon = df_cmd_kind_icon_kind_table[kind]; if(canonical_icon != DF_IconKind_Null) { @@ -328,17 +328,17 @@ df_cmd_spec_button(D_CmdSpec *spec) } internal void -df_cmd_list_menu_buttons(U64 count, D_CmdKind *cmds, U32 *fastpath_codepoints) +df_cmd_list_menu_buttons(U64 count, D_CmdSpec **cmd_specs, U32 *fastpath_codepoints) { Temp scratch = scratch_begin(0, 0); for(U64 idx = 0; idx < count; idx += 1) { - D_CmdSpec *spec = d_cmd_spec_from_kind(cmds[idx]); + D_CmdSpec *spec = cmd_specs[idx]; ui_set_next_fastpath_codepoint(fastpath_codepoints[idx]); UI_Signal sig = df_cmd_spec_button(spec); if(ui_clicked(sig)) { - d_cmd(D_CmdKind_RunCommand, .cmd_spec = spec); + df_cmd(DF_CmdKind_RunCommand, .cmd_spec = spec); ui_ctx_menu_close(); DF_Window *window = df_window_from_handle(d_regs()->window); window->menu_bar_focused = 0; @@ -736,7 +736,7 @@ df_entity_desc_button(D_Entity *entity, FuzzyMatchRangeList *name_matches, Strin // rjf: click => fastpath for this entity if(ui_clicked(sig)) { - d_cmd(D_CmdKind_EntityRefFastPath, .entity = d_handle_from_entity(entity)); + df_cmd(DF_CmdKind_EntityRefFastPath, .entity = d_handle_from_entity(entity)); } // rjf: right-click => context menu for this entity @@ -793,7 +793,7 @@ df_src_loc_button(String8 file_path, TxtPt point) // rjf: click => find code location if(ui_clicked(sig)) { - d_cmd(D_CmdKind_FindCodeLocation, .file_path = file_path, .text_point = point); + df_cmd(DF_CmdKind_FindCodeLocation, .file_path = file_path, .text_point = point); } // rjf: hover => show full path @@ -1390,7 +1390,7 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe // rjf: click => remove breakpoint if(ui_clicked(bp_sig)) { - d_cmd(D_CmdKind_RemoveBreakpoint, .entity = d_handle_from_entity(bp)); + df_cmd(DF_CmdKind_RemoveBreakpoint, .entity = d_handle_from_entity(bp)); } // rjf: drag start @@ -1448,7 +1448,7 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe // rjf: click => remove pin if(ui_clicked(pin_sig)) { - d_cmd(D_CmdKind_RemoveEntity, .entity = d_handle_from_entity(pin)); + df_cmd(DF_CmdKind_RemoveEntity, .entity = d_handle_from_entity(pin)); } // rjf: drag start @@ -1474,10 +1474,10 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe UI_Signal line_margin_sig = ui_signal_from_box(line_margin_box); if(ui_clicked(line_margin_sig)) { - d_cmd(D_CmdKind_AddBreakpoint, - .file_path = d_regs()->file_path, - .text_point = txt_pt(line_num, 1), - .vaddr = params->line_vaddrs[line_idx]); + df_cmd(DF_CmdKind_AddBreakpoint, + .file_path = d_regs()->file_path, + .text_point = txt_pt(line_num, 1), + .vaddr = params->line_vaddrs[line_idx]); } } } @@ -1876,11 +1876,11 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe case D_EntityKind_Breakpoint: case D_EntityKind_WatchPin: { - d_cmd(D_CmdKind_RelocateEntity, - .entity = d_handle_from_entity(dropped_entity), - .file_path = d_regs()->file_path, - .text_point = txt_pt(line_num, 1), - .vaddr = line_vaddr); + df_cmd(DF_CmdKind_RelocateEntity, + .entity = d_handle_from_entity(dropped_entity), + .file_path = d_regs()->file_path, + .text_point = txt_pt(line_num, 1), + .vaddr = line_vaddr); }break; case D_EntityKind_Thread: { diff --git a/src/dbg_frontend/dbg_frontend_widgets.h b/src/dbg_frontend/dbg_frontend_widgets.h index 13798a58..f0e3b10e 100644 --- a/src/dbg_frontend/dbg_frontend_widgets.h +++ b/src/dbg_frontend/dbg_frontend_widgets.h @@ -87,7 +87,7 @@ internal void df_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U6 internal void df_cmd_binding_buttons(D_CmdSpec *spec); internal UI_Signal df_menu_bar_button(String8 string); internal UI_Signal df_cmd_spec_button(D_CmdSpec *spec); -internal void df_cmd_list_menu_buttons(U64 count, D_CmdKind *cmds, U32 *fastpath_codepoints); +internal void df_cmd_list_menu_buttons(U64 count, D_CmdSpec **cmd_specs, U32 *fastpath_codepoints); internal UI_Signal df_icon_button(DF_IconKind kind, FuzzyMatchRangeList *matches, String8 string); internal UI_Signal df_icon_buttonf(DF_IconKind kind, FuzzyMatchRangeList *matches, char *fmt, ...); internal void df_entity_tooltips(D_Entity *entity); diff --git a/src/dbg_frontend/generated/dbg_frontend.meta.c b/src/dbg_frontend/generated/dbg_frontend.meta.c index 5b842759..5e366897 100644 --- a/src/dbg_frontend/generated/dbg_frontend.meta.c +++ b/src/dbg_frontend/generated/dbg_frontend.meta.c @@ -4,6 +4,217 @@ //- GENERATED CODE C_LINKAGE_BEGIN +DF_CmdKind d_cfg_src_load_cmd_kind_table[4] = +{ +DF_CmdKind_OpenUser, +DF_CmdKind_OpenProject, +DF_CmdKind_Null, +DF_CmdKind_Null, +}; + +DF_CmdKind d_cfg_src_write_cmd_kind_table[4] = +{ +DF_CmdKind_WriteUserData, +DF_CmdKind_WriteProjectData, +DF_CmdKind_Null, +DF_CmdKind_Null, +}; + +DF_CmdKind d_cfg_src_apply_cmd_kind_table[4] = +{ +DF_CmdKind_ApplyUserData, +DF_CmdKind_ApplyProjectData, +DF_CmdKind_Null, +DF_CmdKind_Null, +}; + +D_CmdSpecInfo df_cmd_kind_spec_info_table[183] = +{ +{ str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp("Exit"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp("Run Command"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_CmdSpec, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("error"), str8_lit_comp("Notifies of an error."), str8_lit_comp(""), str8_lit_comp("Error"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("OS Event"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("inc_ui_font_scale"), str8_lit_comp("Increases the font size used for UI."), str8_lit_comp(""), str8_lit_comp("Increase UI Font Scale"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("dec_ui_font_scale"), str8_lit_comp("Decreases the font size used for UI."), str8_lit_comp(""), str8_lit_comp("Decrease UI Font Scale"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("inc_code_font_scale"), str8_lit_comp("Increases the font size used for code."), str8_lit_comp(""), str8_lit_comp("Increase Code Font Scale"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("dec_code_font_scale"), str8_lit_comp("Decreases the font size used for code."), str8_lit_comp(""), str8_lit_comp("Decrease Code Font Scale"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("open_window"), str8_lit_comp("Opens a new window."), str8_lit_comp(""), str8_lit_comp("Open New Window"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("close_window"), str8_lit_comp("Closes an opened window."), str8_lit_comp(""), str8_lit_comp("Close Window"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_fullscreen"), str8_lit_comp("Toggles fullscreen view on the active window."), str8_lit_comp(""), str8_lit_comp("Toggle Fullscreen"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("confirm_accept"), str8_lit_comp("Accepts the active confirmation prompt."), str8_lit_comp(""), str8_lit_comp("Confirm Accept"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("confirm_cancel"), str8_lit_comp("Cancels the active confirmation prompt."), str8_lit_comp(""), str8_lit_comp("Confirm Cancel"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("reset_to_default_panels"), str8_lit_comp("Resets the window to the default panel layout."), str8_lit_comp("panel"), str8_lit_comp("Reset To Default Panel Layout"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("reset_to_compact_panels"), str8_lit_comp("Resets the window to the compact panel layout."), str8_lit_comp("panel"), str8_lit_comp("Reset To Compact Panel Layout"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("new_panel_left"), str8_lit_comp("Creates a new panel to the left of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Left"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("new_panel_up"), str8_lit_comp("Creates a new panel at the top of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Up"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("new_panel_right"), str8_lit_comp("Creates a new panel to the right of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Right"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("new_panel_down"), str8_lit_comp("Creates a new panel at the bottom of the active panel."), str8_lit_comp("panel"), str8_lit_comp("Split Panel Down"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("split_panel"), str8_lit_comp("Creates a new panel in a given direction, and moves a tab to it, if specified."), str8_lit_comp(""), str8_lit_comp("Split Panel"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("rotate_panel_columns"), str8_lit_comp("Rotates all panels at the closest column level of the panel hierarchy."), str8_lit_comp(""), str8_lit_comp("Rotate Panel Columns"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("next_panel"), str8_lit_comp("Cycles the active panel forward."), str8_lit_comp(""), str8_lit_comp("Focus Next Panel"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("prev_panel"), str8_lit_comp("Cycles the active panel backwards."), str8_lit_comp(""), str8_lit_comp("Focus Previous Panel"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("focus_panel"), str8_lit_comp("Focuses a new panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("focus_panel_right"), str8_lit_comp("Focuses a panel rightward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Right"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("focus_panel_left"), str8_lit_comp("Focuses a panel leftward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Left"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("focus_panel_up"), str8_lit_comp("Focuses a panel upward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Up"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("focus_panel_down"), str8_lit_comp("Focuses a panel downward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp("Focus Panel Down"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("undo"), str8_lit_comp("Undoes the previous action."), str8_lit_comp(""), str8_lit_comp("Undo"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("redo"), str8_lit_comp("Redoes the first previously undone action."), str8_lit_comp(""), str8_lit_comp("Redo"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("go_back"), str8_lit_comp("Returns to the previously selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp("Go Back"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("go_forward"), str8_lit_comp("Returns to the next selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp("Go Forward"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("close_panel"), str8_lit_comp("Closes the currently active panel."), str8_lit_comp(""), str8_lit_comp("Close Panel"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("next_tab"), str8_lit_comp("Focuses the next tab on the active panel."), str8_lit_comp(""), str8_lit_comp("Focus Next Tab"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("prev_tab"), str8_lit_comp("Focuses the previous tab on the active panel."), str8_lit_comp(""), str8_lit_comp("Focus Previous Tab"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_tab_right"), str8_lit_comp("Moves the selected tab right one slot."), str8_lit_comp(""), str8_lit_comp("Move Tab Right"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_tab_left"), str8_lit_comp("Moves the selected tab left one slot."), str8_lit_comp(""), str8_lit_comp("Move Tab Left"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("open_tab"), str8_lit_comp("Opens a new tab with the parameterized view specification."), str8_lit_comp(""), str8_lit_comp("Open Tab"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("Close Tab"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_tab"), str8_lit_comp("Moves a tab to a new panel."), str8_lit_comp(""), str8_lit_comp("Move Tab"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("tab_bar_top"), str8_lit_comp("Anchors a panel's tab bar to the top of the panel."), str8_lit_comp(""), str8_lit_comp("Anchor Tab Bar To Top"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("tab_bar_bottom"), str8_lit_comp("Anchors a panel's tab bar to the bottom of the panel."), str8_lit_comp(""), str8_lit_comp("Anchor Tab Bar To Bottom"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("set_current_path"), str8_lit_comp("Sets the debugger's current path, which is used as a starting point when browsing for files."), str8_lit_comp(""), str8_lit_comp("Set Current Path"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("open"), str8_lit_comp("Opens a file."), str8_lit_comp("code,source,file"), str8_lit_comp("Open"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("switch"), str8_lit_comp("Switches to a loaded file."), str8_lit_comp("code,source,file"), str8_lit_comp("Switch"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_File, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("switch_to_partner_file"), str8_lit_comp("Switches to the focused file's partner; or from header to implementation or vice versa."), str8_lit_comp("code,source,file"), str8_lit_comp("Switch To Partner File"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("go_to_disassembly"), str8_lit_comp("Goes to the disassembly, if any, for a given source code line."), str8_lit_comp("code,source,disassembly,disasm"), str8_lit_comp("Go To Disassembly"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("go_to_source"), str8_lit_comp("Goes to the source code, if any, for a given disassembly line."), str8_lit_comp("code,source,disassembly,disasm"), str8_lit_comp("Go To Source"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("set_file_override_link_src"), str8_lit_comp("Sets the source path for an override file link."), str8_lit_comp(""), str8_lit_comp("Set File Override Link Source"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("set_file_override_link_dst"), str8_lit_comp("Sets the destination path for an override file link."), str8_lit_comp(""), str8_lit_comp("Set File Override Link Destination"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("set_file_replacement_path"), str8_lit_comp("Sets the path which should be used as the replacement for the passed file."), str8_lit_comp(""), str8_lit_comp("Set File Replacement Path"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("set_auto_view_rule_type"), str8_lit_comp("Sets the type for an auto view rule."), str8_lit_comp(""), str8_lit_comp("Set Auto View Rule Type"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("set_auto_view_rule_view_rule"), str8_lit_comp("Sets the view rule string for an auto view rule."), str8_lit_comp(""), str8_lit_comp("Set Auto View Rule View Rule"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("open_user"), str8_lit_comp("Opens a user file path, immediately loading it, and begins autosaving to it."), str8_lit_comp("load,user,project,layout"), str8_lit_comp("Open User"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("open_project"), str8_lit_comp("Opens a project file path, immediately loading it, and begins autosaving to it."), str8_lit_comp("project,project,session"), str8_lit_comp("Open Project"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("open_recent_project"), str8_lit_comp("Opens a recently used project file."), str8_lit_comp("project,project,session"), str8_lit_comp("Open Recent Project"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_RecentProject, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("apply_user_data"), str8_lit_comp("Applies user data from the active user file."), str8_lit_comp(""), str8_lit_comp("Apply User Data"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("apply_project_data"), str8_lit_comp("Applies project data from the active project file."), str8_lit_comp(""), str8_lit_comp("Apply Project Data"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("write_user_data"), str8_lit_comp("Writes user data to the active user file."), str8_lit_comp(""), str8_lit_comp("Write User Data"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("write_project_data"), str8_lit_comp("Writes project data to the active project file."), str8_lit_comp(""), str8_lit_comp("Write Project Data"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("edit"), str8_lit_comp("Edits the current selection."), str8_lit_comp(""), str8_lit_comp("Edit"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("accept"), str8_lit_comp("Accepts current changes, or answers prompts in the affirmative."), str8_lit_comp(""), str8_lit_comp("Accept"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("cancel"), str8_lit_comp("Rejects current changes, exits temporary menus, or answers prompts in the negative."), str8_lit_comp(""), str8_lit_comp("Cancel"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_left"), str8_lit_comp("Moves the cursor or selection left."), str8_lit_comp(""), str8_lit_comp("Move Left"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_right"), str8_lit_comp("Moves the cursor or selection right."), str8_lit_comp(""), str8_lit_comp("Move Right"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up"), str8_lit_comp("Moves the cursor or selection up."), str8_lit_comp(""), str8_lit_comp("Move Up"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down"), str8_lit_comp("Moves the cursor or selection down."), str8_lit_comp(""), str8_lit_comp("Move Down"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_left_select"), str8_lit_comp("Moves the cursor or selection left, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Left Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_right_select"), str8_lit_comp("Moves the cursor or selection right, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Right Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up_select"), str8_lit_comp("Moves the cursor or selection up, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down_select"), str8_lit_comp("Moves the cursor or selection down, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_left_chunk"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp("Move Left Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_right_chunk"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp("Move Right Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up_chunk"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp("Move Up Chunk"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down_chunk"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp("Move Down Chunk"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up_page"), str8_lit_comp("Moves the cursor or selection up one page."), str8_lit_comp(""), str8_lit_comp("Move Up Page"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down_page"), str8_lit_comp("Moves the cursor or selection down one page."), str8_lit_comp(""), str8_lit_comp("Move Down Page"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up_whole"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content."), str8_lit_comp(""), str8_lit_comp("Move Up Whole"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down_whole"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content."), str8_lit_comp(""), str8_lit_comp("Move Down Whole"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_left_chunk_select"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp("Move Left Chunk Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_right_chunk_select"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp("Move Right Chunk Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up_chunk_select"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp("Move Up Chunk Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down_chunk_select"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp("Move Down Chunk Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up_page_select"), str8_lit_comp("Moves the cursor or selection up one page, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Page Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down_page_select"), str8_lit_comp("Moves the cursor or selection down one page, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Page Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up_whole_select"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Up Whole Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down_whole_select"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Down Whole Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_up_reorder"), str8_lit_comp("Moves the cursor or selection up, while swapping the currently selected element with that upward."), str8_lit_comp(""), str8_lit_comp("Move Up Reorder"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_down_reorder"), str8_lit_comp("Moves the cursor or selection down, while swapping the currently selected element with that downward."), str8_lit_comp(""), str8_lit_comp("Move Down Reorder"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_home"), str8_lit_comp("Moves the cursor to the beginning of the line."), str8_lit_comp(""), str8_lit_comp("Move Home"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_end"), str8_lit_comp("Moves the cursor to the end of the line."), str8_lit_comp(""), str8_lit_comp("Move End"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_home_select"), str8_lit_comp("Moves the cursor to the beginning of the line, while selecting."), str8_lit_comp(""), str8_lit_comp("Move Home Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("move_end_select"), str8_lit_comp("Moves the cursor to the end of the line, while selecting."), str8_lit_comp(""), str8_lit_comp("Move End Select"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("select_all"), str8_lit_comp("Selects everything possible."), str8_lit_comp(""), str8_lit_comp("Select All"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("delete_single"), str8_lit_comp("Deletes a single element to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Delete Single"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("delete_chunk"), str8_lit_comp("Deletes a chunk to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Delete Chunk"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("backspace_single"), str8_lit_comp("Deletes a single element to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Backspace Single"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("backspace_chunk"), str8_lit_comp("Deletes a chunk to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp("Backspace Chunk"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("copy"), str8_lit_comp("Copies the active selection to the clipboard."), str8_lit_comp(""), str8_lit_comp("Copy"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("cut"), str8_lit_comp("Copies the active selection to the clipboard, then deletes it."), str8_lit_comp(""), str8_lit_comp("Cut"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("paste"), str8_lit_comp("Pastes the current contents of the clipboard."), str8_lit_comp(""), str8_lit_comp("Paste"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("insert_text"), str8_lit_comp("Inserts the text that was used to cause this command."), str8_lit_comp(""), str8_lit_comp("Insert Text"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("goto_line"), str8_lit_comp("Jumps to a line number in the current code file."), str8_lit_comp(""), str8_lit_comp("Go To Line"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_TextPoint, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("goto_address"), str8_lit_comp("Jumps to an address in the current memory or disassembly view."), str8_lit_comp(""), str8_lit_comp("Go To Address"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_VirtualAddr, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("center_cursor"), str8_lit_comp("Snaps the current code view to center the cursor."), str8_lit_comp(""), str8_lit_comp("Center Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("contain_cursor"), str8_lit_comp("Snaps the current code view to contain the cursor."), str8_lit_comp(""), str8_lit_comp("Contain Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("find_text_forward"), str8_lit_comp("Searches the current code file forward (from the cursor) for a string."), str8_lit_comp(""), str8_lit_comp("Find Text (Forward)"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*1)|(D_CmdQueryFlag_SelectOldInput*1)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("find_text_backward"), str8_lit_comp("Searches the current code file backwards (from the cursor) for a string."), str8_lit_comp(""), str8_lit_comp("Find Text (Backwards)"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*1)|(D_CmdQueryFlag_SelectOldInput*1)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("find_next"), str8_lit_comp("Searches the current code file forward (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp("Find Next"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*1)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("find_prev"), str8_lit_comp("Searches the current code file backwards (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp("Find Previous"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*1)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("find_thread"), str8_lit_comp("Jumps to the passed thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp("Find Thread"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Thread, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("find_selected_thread"), str8_lit_comp("Jumps to the selected thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp("Find Selected Thread"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("goto_name"), str8_lit_comp("Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("Go To Name"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("goto_name_at_cursor"), str8_lit_comp("Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("Go To Name At Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_watch_expr"), str8_lit_comp("Adds or removes an expression to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_watch_expr_at_cursor"), str8_lit_comp("Adds or removes the expression that the cursor or selection is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression At Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_watch_expr_at_mouse"), str8_lit_comp("Adds or removes the expression that the mouse is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Expression At Mouse"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("set_columns"), str8_lit_comp("Sets the number of columns for a memory view."), str8_lit_comp(""), str8_lit_comp("Set Columns"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Index, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("toggle_address_visibility"), str8_lit_comp("Toggles the visibility of addresses in a disassembly view."), str8_lit_comp(""), str8_lit_comp("Toggle Address Visibility"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_code_bytes_visibility"), str8_lit_comp("Toggles the visibility of machine code bytes in a disassembly view."), str8_lit_comp(""), str8_lit_comp("Toggle Code Bytes Visibility"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("enable_entity"), str8_lit_comp("Enables an entity."), str8_lit_comp(""), str8_lit_comp("Enable Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("disable_entity"), str8_lit_comp("Disables an entity."), str8_lit_comp(""), str8_lit_comp("Disable Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("remove_entity"), str8_lit_comp("Removes an entity."), str8_lit_comp(""), str8_lit_comp("Remove Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("name_entity"), str8_lit_comp("Equips an entity with a name."), str8_lit_comp(""), str8_lit_comp("Name Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("edit_entity"), str8_lit_comp("Opens the editor for an entity."), str8_lit_comp(""), str8_lit_comp("Edit Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("duplicate_entity"), str8_lit_comp("Duplicates an entity."), str8_lit_comp(""), str8_lit_comp("Duplicate Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("relocate_entity"), str8_lit_comp("Relocates an entity."), str8_lit_comp(""), str8_lit_comp("Relocate Entity"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("add_breakpoint"), str8_lit_comp("Places a breakpoint at a given location (file path and line number, address, or symbol name)."), str8_lit_comp(""), str8_lit_comp("Add Breakpoint"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("add_address_breakpoint"), str8_lit_comp("Places a breakpoint on the specified address."), str8_lit_comp(""), str8_lit_comp("Add Address Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_VirtualAddr, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("add_function_breakpoint"), str8_lit_comp("Places a breakpoint on the first address(es) of the specified function."), str8_lit_comp(""), str8_lit_comp("Add Function Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("toggle_breakpoint"), str8_lit_comp("Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)."), str8_lit_comp(""), str8_lit_comp("Toggle Breakpoint"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("remove_breakpoint"), str8_lit_comp("Removes an existing breakpoint."), str8_lit_comp(""), str8_lit_comp("Remove Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Breakpoint, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("enable_breakpoint"), str8_lit_comp("Enables a breakpoint."), str8_lit_comp(""), str8_lit_comp("Enable Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Breakpoint, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("disable_breakpoint"), str8_lit_comp("Disables a breakpoint."), str8_lit_comp(""), str8_lit_comp("Disable Breakpoint"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Breakpoint, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("add_watch_pin"), str8_lit_comp("Places a watch pin at a given location (file path and line number or address)."), str8_lit_comp(""), str8_lit_comp("Add Watch Pin"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_watch_pin"), str8_lit_comp("Places or removes a watch pin at a given location (file path and line number or address)."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Pin"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_breakpoint_cursor"), str8_lit_comp("Places or removes a breakpoint on the line on which the active cursor sits."), str8_lit_comp(""), str8_lit_comp("Toggle Breakpoint At Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_watch_pin_at_cursor"), str8_lit_comp("Places or removes a watch pin at the cursor on the currently active file."), str8_lit_comp(""), str8_lit_comp("Toggle Watch Pin At Cursor"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_String, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*1)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("add_target"), str8_lit_comp("Adds a new target."), str8_lit_comp("application,executable,debug"), str8_lit_comp("Add Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("remove_target"), str8_lit_comp("Removes an existing target."), str8_lit_comp("delete,remove,target"), str8_lit_comp("Remove Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("edit_target"), str8_lit_comp("Edits an existing target."), str8_lit_comp(""), str8_lit_comp("Edit Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("select_target"), str8_lit_comp("Selects a target."), str8_lit_comp(""), str8_lit_comp("Select Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("enable_target"), str8_lit_comp("Enables a target, in addition to all targets currently enabled."), str8_lit_comp(""), str8_lit_comp("Enable Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("disable_target"), str8_lit_comp("Disables a target."), str8_lit_comp(""), str8_lit_comp("Disable Target"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Entity, D_EntityKind_Target, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("register_as_jit_debugger"), str8_lit_comp("Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system."), str8_lit_comp(""), str8_lit_comp("Register As Just-In-Time (JIT) Debugger"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("entity_ref_fast_path"), str8_lit_comp("Activates the default behavior when clicking an entity reference."), str8_lit_comp(""), str8_lit_comp("Entity Reference Fast Path"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("spawn_entity_view"), str8_lit_comp("Spawns a new view, given an entity and other parameterizations."), str8_lit_comp(""), str8_lit_comp("Spawn Entity View"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("find_code_location"), str8_lit_comp("Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary."), str8_lit_comp(""), str8_lit_comp("Find Code Location"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("filter"), str8_lit_comp("Begins filtering the active view."), str8_lit_comp("sort,search,filter,find"), str8_lit_comp("Filter"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("apply_filter"), str8_lit_comp("Applies the typed filter to the active view."), str8_lit_comp("sort,search,filter,find,apply"), str8_lit_comp("Apply Filter"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("clear_filter"), str8_lit_comp("Clears the filter applied to the active view."), str8_lit_comp("sort,search,filter,find,clear"), str8_lit_comp("Clear Filter"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("getting_started"), str8_lit_comp("Opens the menu for information on getting started."), str8_lit_comp("tutorial,help"), str8_lit_comp("Getting Started"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("commands"), str8_lit_comp("Opens the list of all commands."), str8_lit_comp(""), str8_lit_comp("Commands"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("target"), str8_lit_comp("Opens the editor for a target."), str8_lit_comp(""), str8_lit_comp("Target"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("targets"), str8_lit_comp("Opens the list of all targets."), str8_lit_comp(""), str8_lit_comp("Targets"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("file_path_map"), str8_lit_comp("Opens the file path mapping editor."), str8_lit_comp(""), str8_lit_comp("File Path Map"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("auto_view_rules"), str8_lit_comp("Opens the auto view rule editor."), str8_lit_comp(""), str8_lit_comp("Auto View Rules"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("breakpoints"), str8_lit_comp("Opens the breakpoints view."), str8_lit_comp(""), str8_lit_comp("Breakpoints"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("watch_pins"), str8_lit_comp("Opens the watch pins view."), str8_lit_comp(""), str8_lit_comp("Watch Pins"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("scheduler"), str8_lit_comp("Opens the scheduler view, for process and thread controls."), str8_lit_comp("threads,processes,targets"), str8_lit_comp("Scheduler"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("call_stack"), str8_lit_comp("Opens the call stack view."), str8_lit_comp("callstack,thread,unwind"), str8_lit_comp("Call Stack"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("modules"), str8_lit_comp("Opens the modules view."), str8_lit_comp(""), str8_lit_comp("Modules"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("watch"), str8_lit_comp("Opens a watch view."), str8_lit_comp(""), str8_lit_comp("Watch"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("locals"), str8_lit_comp("Opens a locals view."), str8_lit_comp(""), str8_lit_comp("Locals"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("registers"), str8_lit_comp("Opens a registers view."), str8_lit_comp(""), str8_lit_comp("Registers"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("globals"), str8_lit_comp("Opens a globals view."), str8_lit_comp(""), str8_lit_comp("Globals"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("thread_locals"), str8_lit_comp("Opens a thread locals view."), str8_lit_comp(""), str8_lit_comp("Thread Locals"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("types"), str8_lit_comp("Opens a types view."), str8_lit_comp(""), str8_lit_comp("Types"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("procedures"), str8_lit_comp("Opens a procedures view."), str8_lit_comp(""), str8_lit_comp("Procedures"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("pending_file"), str8_lit_comp("Opens a view which asynchronously analyzes the file path parameter, then picks an appropriate viewer for it."), str8_lit_comp(""), str8_lit_comp("Pending File"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("disassembly"), str8_lit_comp("Opens the disassembly view."), str8_lit_comp("disasm"), str8_lit_comp("Disassembly"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("output"), str8_lit_comp("Opens an output view."), str8_lit_comp(""), str8_lit_comp("Output"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("memory"), str8_lit_comp("Opens a memory view."), str8_lit_comp(""), str8_lit_comp("Memory"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("exception_filters"), str8_lit_comp("Opens the exception filters view."), str8_lit_comp("exceptions,filters"), str8_lit_comp("Exception Filters"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("settings"), str8_lit_comp("Opens the settings view."), str8_lit_comp("theme,color,scheme,options"), str8_lit_comp("Settings"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("pick_file"), str8_lit_comp("Opens the file browser to pick a file."), str8_lit_comp(""), str8_lit_comp("Pick File"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("pick_folder"), str8_lit_comp("Opens the file browser to pick a folder."), str8_lit_comp(""), str8_lit_comp("Pick Folder"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*1)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("pick_file_or_folder"), str8_lit_comp("Opens the file browser to pick a file or folder."), str8_lit_comp(""), str8_lit_comp("Pick File/Folder"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_FilePath, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*1)|(D_CmdQueryFlag_AllowFolders*1)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*1)}}, +{ str8_lit_comp("complete_query"), str8_lit_comp("Completes a query."), str8_lit_comp(""), str8_lit_comp("Complete Query"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("cancel_query"), str8_lit_comp("Cancels a query."), str8_lit_comp(""), str8_lit_comp("Cancel Query"), (D_CmdSpecFlag_ListInUI*0)|(D_CmdSpecFlag_ListInIPCDocs*0), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("toggle_dev_menu"), str8_lit_comp("Opens and closes the developer menu."), str8_lit_comp(""), str8_lit_comp("Toggle Developer Menu"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +{ str8_lit_comp("log_marker"), str8_lit_comp("Logs a marker in the application log, to denote specific points in time within the log."), str8_lit_comp(""), str8_lit_comp("Log Marker"), (D_CmdSpecFlag_ListInUI*1)|(D_CmdSpecFlag_ListInIPCDocs*1), {D_CmdParamSlot_Null, D_EntityKind_Nil, (D_CmdQueryFlag_AllowFiles*0)|(D_CmdQueryFlag_AllowFolders*0)|(D_CmdQueryFlag_CodeInput*0)|(D_CmdQueryFlag_KeepOldInput*0)|(D_CmdQueryFlag_SelectOldInput*0)|(D_CmdQueryFlag_Required*0)}}, +}; + DF_StringBindingPair df_g_default_binding_table[110] = { {str8_lit_comp("kill_all"), {OS_Key_F5, 0 |OS_EventFlag_Shift }}, @@ -289,47 +500,13 @@ DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[34] = {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|1*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("settings"), str8_lit_comp("Settings"), DF_IconKind_Gear, DF_VIEW_SETUP_FUNCTION_NAME(settings), DF_VIEW_CMD_FUNCTION_NAME(settings), DF_VIEW_UI_FUNCTION_NAME(settings)}, }; -DF_IconKind df_cmd_kind_icon_kind_table[220] = +DF_IconKind df_cmd_kind_icon_kind_table[183] = { DF_IconKind_Null, DF_IconKind_X, DF_IconKind_Null, DF_IconKind_Null, DF_IconKind_Null, -DF_IconKind_Play, -DF_IconKind_PlayStepForward, -DF_IconKind_Stop, -DF_IconKind_Stop, -DF_IconKind_Null, -DF_IconKind_Play, -DF_IconKind_StepInto, -DF_IconKind_StepOver, -DF_IconKind_StepInto, -DF_IconKind_StepOver, -DF_IconKind_StepOut, -DF_IconKind_Pause, -DF_IconKind_Refresh, -DF_IconKind_Null, -DF_IconKind_Play, -DF_IconKind_PlayStepForward, -DF_IconKind_Play, -DF_IconKind_Redo, -DF_IconKind_StepInto, -DF_IconKind_StepOver, -DF_IconKind_Play, -DF_IconKind_RightArrow, -DF_IconKind_Null, -DF_IconKind_Null, -DF_IconKind_UpArrow, -DF_IconKind_DownArrow, -DF_IconKind_Locked, -DF_IconKind_Unlocked, -DF_IconKind_Locked, -DF_IconKind_Unlocked, -DF_IconKind_Locked, -DF_IconKind_Unlocked, -DF_IconKind_Machine, -DF_IconKind_Machine, DF_IconKind_Null, DF_IconKind_Null, DF_IconKind_Null, @@ -453,8 +630,6 @@ DF_IconKind_Null, DF_IconKind_Null, DF_IconKind_Null, DF_IconKind_Null, -DF_IconKind_Null, -DF_IconKind_Null, DF_IconKind_CircleFilled, DF_IconKind_CircleFilled, DF_IconKind_CircleFilled, @@ -475,7 +650,6 @@ DF_IconKind_CheckHollow, DF_IconKind_Null, DF_IconKind_Null, DF_IconKind_Null, -DF_IconKind_Null, DF_IconKind_FileOutline, DF_IconKind_Find, DF_IconKind_Find, diff --git a/src/dbg_frontend/generated/dbg_frontend.meta.h b/src/dbg_frontend/generated/dbg_frontend.meta.h index 7af85c96..7da3ea5a 100644 --- a/src/dbg_frontend/generated/dbg_frontend.meta.h +++ b/src/dbg_frontend/generated/dbg_frontend.meta.h @@ -6,6 +6,194 @@ #ifndef DBG_FRONTEND_META_H #define DBG_FRONTEND_META_H +typedef enum DF_CmdKind +{ +DF_CmdKind_Null, +DF_CmdKind_Exit, +DF_CmdKind_RunCommand, +DF_CmdKind_Error, +DF_CmdKind_OSEvent, +DF_CmdKind_IncUIFontScale, +DF_CmdKind_DecUIFontScale, +DF_CmdKind_IncCodeFontScale, +DF_CmdKind_DecCodeFontScale, +DF_CmdKind_OpenWindow, +DF_CmdKind_CloseWindow, +DF_CmdKind_ToggleFullscreen, +DF_CmdKind_ConfirmAccept, +DF_CmdKind_ConfirmCancel, +DF_CmdKind_ResetToDefaultPanels, +DF_CmdKind_ResetToCompactPanels, +DF_CmdKind_NewPanelLeft, +DF_CmdKind_NewPanelUp, +DF_CmdKind_NewPanelRight, +DF_CmdKind_NewPanelDown, +DF_CmdKind_SplitPanel, +DF_CmdKind_RotatePanelColumns, +DF_CmdKind_NextPanel, +DF_CmdKind_PrevPanel, +DF_CmdKind_FocusPanel, +DF_CmdKind_FocusPanelRight, +DF_CmdKind_FocusPanelLeft, +DF_CmdKind_FocusPanelUp, +DF_CmdKind_FocusPanelDown, +DF_CmdKind_Undo, +DF_CmdKind_Redo, +DF_CmdKind_GoBack, +DF_CmdKind_GoForward, +DF_CmdKind_ClosePanel, +DF_CmdKind_NextTab, +DF_CmdKind_PrevTab, +DF_CmdKind_MoveTabRight, +DF_CmdKind_MoveTabLeft, +DF_CmdKind_OpenTab, +DF_CmdKind_CloseTab, +DF_CmdKind_MoveTab, +DF_CmdKind_TabBarTop, +DF_CmdKind_TabBarBottom, +DF_CmdKind_SetCurrentPath, +DF_CmdKind_Open, +DF_CmdKind_Switch, +DF_CmdKind_SwitchToPartnerFile, +DF_CmdKind_GoToDisassembly, +DF_CmdKind_GoToSource, +DF_CmdKind_SetFileOverrideLinkSrc, +DF_CmdKind_SetFileOverrideLinkDst, +DF_CmdKind_SetFileReplacementPath, +DF_CmdKind_SetAutoViewRuleType, +DF_CmdKind_SetAutoViewRuleViewRule, +DF_CmdKind_OpenUser, +DF_CmdKind_OpenProject, +DF_CmdKind_OpenRecentProject, +DF_CmdKind_ApplyUserData, +DF_CmdKind_ApplyProjectData, +DF_CmdKind_WriteUserData, +DF_CmdKind_WriteProjectData, +DF_CmdKind_Edit, +DF_CmdKind_Accept, +DF_CmdKind_Cancel, +DF_CmdKind_MoveLeft, +DF_CmdKind_MoveRight, +DF_CmdKind_MoveUp, +DF_CmdKind_MoveDown, +DF_CmdKind_MoveLeftSelect, +DF_CmdKind_MoveRightSelect, +DF_CmdKind_MoveUpSelect, +DF_CmdKind_MoveDownSelect, +DF_CmdKind_MoveLeftChunk, +DF_CmdKind_MoveRightChunk, +DF_CmdKind_MoveUpChunk, +DF_CmdKind_MoveDownChunk, +DF_CmdKind_MoveUpPage, +DF_CmdKind_MoveDownPage, +DF_CmdKind_MoveUpWhole, +DF_CmdKind_MoveDownWhole, +DF_CmdKind_MoveLeftChunkSelect, +DF_CmdKind_MoveRightChunkSelect, +DF_CmdKind_MoveUpChunkSelect, +DF_CmdKind_MoveDownChunkSelect, +DF_CmdKind_MoveUpPageSelect, +DF_CmdKind_MoveDownPageSelect, +DF_CmdKind_MoveUpWholeSelect, +DF_CmdKind_MoveDownWholeSelect, +DF_CmdKind_MoveUpReorder, +DF_CmdKind_MoveDownReorder, +DF_CmdKind_MoveHome, +DF_CmdKind_MoveEnd, +DF_CmdKind_MoveHomeSelect, +DF_CmdKind_MoveEndSelect, +DF_CmdKind_SelectAll, +DF_CmdKind_DeleteSingle, +DF_CmdKind_DeleteChunk, +DF_CmdKind_BackspaceSingle, +DF_CmdKind_BackspaceChunk, +DF_CmdKind_Copy, +DF_CmdKind_Cut, +DF_CmdKind_Paste, +DF_CmdKind_InsertText, +DF_CmdKind_GoToLine, +DF_CmdKind_GoToAddress, +DF_CmdKind_CenterCursor, +DF_CmdKind_ContainCursor, +DF_CmdKind_FindTextForward, +DF_CmdKind_FindTextBackward, +DF_CmdKind_FindNext, +DF_CmdKind_FindPrev, +DF_CmdKind_FindThread, +DF_CmdKind_FindSelectedThread, +DF_CmdKind_GoToName, +DF_CmdKind_GoToNameAtCursor, +DF_CmdKind_ToggleWatchExpression, +DF_CmdKind_ToggleWatchExpressionAtCursor, +DF_CmdKind_ToggleWatchExpressionAtMouse, +DF_CmdKind_SetColumns, +DF_CmdKind_ToggleAddressVisibility, +DF_CmdKind_ToggleCodeBytesVisibility, +DF_CmdKind_EnableEntity, +DF_CmdKind_DisableEntity, +DF_CmdKind_RemoveEntity, +DF_CmdKind_NameEntity, +DF_CmdKind_EditEntity, +DF_CmdKind_DuplicateEntity, +DF_CmdKind_RelocateEntity, +DF_CmdKind_AddBreakpoint, +DF_CmdKind_AddAddressBreakpoint, +DF_CmdKind_AddFunctionBreakpoint, +DF_CmdKind_ToggleBreakpoint, +DF_CmdKind_RemoveBreakpoint, +DF_CmdKind_EnableBreakpoint, +DF_CmdKind_DisableBreakpoint, +DF_CmdKind_AddWatchPin, +DF_CmdKind_ToggleWatchPin, +DF_CmdKind_ToggleBreakpointAtCursor, +DF_CmdKind_ToggleWatchPinAtCursor, +DF_CmdKind_AddTarget, +DF_CmdKind_RemoveTarget, +DF_CmdKind_EditTarget, +DF_CmdKind_SelectTarget, +DF_CmdKind_EnableTarget, +DF_CmdKind_DisableTarget, +DF_CmdKind_RegisterAsJITDebugger, +DF_CmdKind_EntityRefFastPath, +DF_CmdKind_SpawnEntityView, +DF_CmdKind_FindCodeLocation, +DF_CmdKind_Filter, +DF_CmdKind_ApplyFilter, +DF_CmdKind_ClearFilter, +DF_CmdKind_GettingStarted, +DF_CmdKind_Commands, +DF_CmdKind_Target, +DF_CmdKind_Targets, +DF_CmdKind_FilePathMap, +DF_CmdKind_AutoViewRules, +DF_CmdKind_Breakpoints, +DF_CmdKind_WatchPins, +DF_CmdKind_Scheduler, +DF_CmdKind_CallStack, +DF_CmdKind_Modules, +DF_CmdKind_Watch, +DF_CmdKind_Locals, +DF_CmdKind_Registers, +DF_CmdKind_Globals, +DF_CmdKind_ThreadLocals, +DF_CmdKind_Types, +DF_CmdKind_Procedures, +DF_CmdKind_PendingFile, +DF_CmdKind_Disassembly, +DF_CmdKind_Output, +DF_CmdKind_Memory, +DF_CmdKind_ExceptionFilters, +DF_CmdKind_Settings, +DF_CmdKind_PickFile, +DF_CmdKind_PickFolder, +DF_CmdKind_PickFileOrFolder, +DF_CmdKind_CompleteQuery, +DF_CmdKind_CancelQuery, +DF_CmdKind_ToggleDevMenu, +DF_CmdKind_LogMarker, +DF_CmdKind_COUNT, +} DF_CmdKind; + typedef enum DF_IconKind { DF_IconKind_Null, @@ -353,13 +541,16 @@ DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(no_addr); DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(checkbox); DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(color_rgba); C_LINKAGE_BEGIN +extern DF_CmdKind d_cfg_src_load_cmd_kind_table[4]; +extern DF_CmdKind d_cfg_src_write_cmd_kind_table[4]; +extern DF_CmdKind d_cfg_src_apply_cmd_kind_table[4]; extern DF_StringBindingPair df_g_default_binding_table[110]; extern String8 df_g_binding_version_remap_old_name_table[7]; extern String8 df_g_binding_version_remap_new_name_table[7]; extern String8 df_g_icon_kind_text_table[69]; extern String8 df_view_kind_name_lower_table[34]; extern DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[34]; -extern DF_IconKind df_cmd_kind_icon_kind_table[220]; +extern DF_IconKind df_cmd_kind_icon_kind_table[183]; extern DF_IconKind df_entity_kind_icon_kind_table[30]; extern D_CmdParamSlot df_g_cmd_param_slot_2_view_spec_src_map[7]; extern String8 df_g_cmd_param_slot_2_view_spec_dst_map[7]; diff --git a/src/raddbg/raddbg_main.c b/src/raddbg/raddbg_main.c index cf1c4a2e..f6ba2fa7 100644 --- a/src/raddbg/raddbg_main.c +++ b/src/raddbg/raddbg_main.c @@ -695,7 +695,7 @@ frame(void) os_append_data_to_file_path(main_thread_log_path, log.strings[LogMsgKind_Info]); if(log.strings[LogMsgKind_UserError].size != 0) { - d_error(log.strings[LogMsgKind_UserError]); + // TODO(rjf): @msgs } } @@ -797,8 +797,8 @@ entry_point(CmdLine *cmd_line) tex_init(); geo_init(); fnt_init(); - d_init(cmd_line); - df_init(); + d_init(); + df_init(cmd_line); } //- rjf: setup initial target from command line args @@ -925,13 +925,13 @@ entry_point(CmdLine *cmd_line) } else { - d_error(error); + log_user_error(error); df_request_frame(); } } else { - d_errorf("\"%S\" is not a command.", cmd_spec_string); + log_user_errorf("\"%S\" is not a command.", cmd_spec_string); df_request_frame(); } }