#ifdef MD_INTELLISENSE_DIRECTIVES #pragma once #include "base_types.h" #include #include "strings.h" #endif // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) //////////////////////////////// //~ rjf: Parsed Command Line Types typedef struct CmdLineOpt CmdLineOpt; struct CmdLineOpt { CmdLineOpt *next; CmdLineOpt *hash_next; U64 hash; String8 string; String8List value_strings; String8 value_string; }; typedef struct CmdLineOptList CmdLineOptList; struct CmdLineOptList { U64 count; CmdLineOpt *first; CmdLineOpt *last; }; typedef struct CmdLine CmdLine; struct CmdLine { String8 exe_name; CmdLineOptList options; String8List inputs; U64 option_table_size; CmdLineOpt **option_table; }; //////////////////////////////// //~ NOTE(rjf): Command Line Option Parsing internal U64 cmd_line_hash_from_string(String8 string); internal CmdLineOpt** cmd_line_slot_from_string(CmdLine *cmd_line, String8 string); internal CmdLineOpt* cmd_line_opt_from_slot(CmdLineOpt **slot, String8 string); internal void cmd_line_push_opt(CmdLineOptList *list, CmdLineOpt *var); internal CmdLineOpt* cmd_line_insert_opt(Arena *arena, CmdLine *cmd_line, String8 string, String8List values); internal CmdLine cmd_line_from_string_list(Arena *arena, String8List arguments); internal CmdLineOpt* cmd_line_opt_from_string(CmdLine *cmd_line, String8 name); internal String8List cmd_line_strings(CmdLine *cmd_line, String8 name); internal String8 cmd_line_string(CmdLine *cmd_line, String8 name); internal B32 cmd_line_has_flag(CmdLine *cmd_line, String8 name); internal B32 cmd_line_has_argument(CmdLine *cmd_line, String8 name); #endif // BASE_COMMAND_LINE_H