Files
metadesk/code/base/command_line.h
T
2025-02-01 22:58:35 -05:00

55 lines
1.8 KiB
C

#ifdef MD_INTELLISENSE_DIRECTIVES
# pragma once
# 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);