Skip to content

Commit ccbf1da

Browse files
committed
added simple command line parser
1 parent cfe3752 commit ccbf1da

File tree

5 files changed

+108
-8
lines changed

5 files changed

+108
-8
lines changed

Adria/Adria.vcxproj

+1
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@
251251
<ClInclude Include="Threading\TaskSystem.h" />
252252
<ClInclude Include="Threading\ThreadPool.h" />
253253
<ClInclude Include="Utilities\AllocatorUtil.h" />
254+
<ClInclude Include="Utilities\CommandLineParser.h" />
254255
<ClInclude Include="Utilities\FilesUtil.h" />
255256
<ClInclude Include="Utilities\Heightmap.h" />
256257
<ClInclude Include="Utilities\LinearAllocator.h" />

Adria/Adria.vcxproj.filters

+3
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,9 @@
419419
<ClInclude Include="Utilities\Heightmap.h">
420420
<Filter>Utilities</Filter>
421421
</ClInclude>
422+
<ClInclude Include="Utilities\CommandLineParser.h">
423+
<Filter>Utilities</Filter>
424+
</ClInclude>
422425
</ItemGroup>
423426
<ItemGroup>
424427
<ResourceCompile Include="Adria.rc">

Adria/Utilities/CommandLineParser.cpp

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#include "CommandLineParser.h"
2+
3+
namespace adria
4+
{
5+
6+
command_line_config_info_t ParseCommandLine(LPWSTR command_line)
7+
{
8+
command_line_config_info_t config{};
9+
10+
int argc = 0;
11+
LPWSTR* argv = CommandLineToArgvW(command_line, &argc);
12+
if (argv == NULL)
13+
{
14+
OutputDebugStringW(L"Cannot parse command line, returning default configuration\n");
15+
return config;
16+
}
17+
18+
if (argc > 0)
19+
{
20+
CHAR str[256];
21+
INT32 i = 0;
22+
while (i < argc)
23+
{
24+
wcstombs(str, argv[i], sizeof(str));
25+
26+
if (strcmp(str, "-width") == 0)
27+
{
28+
i++;
29+
wcstombs(str, argv[i], sizeof(str));
30+
config.window_width = atoi(str);
31+
}
32+
else if (strcmp(str, "-height") == 0)
33+
{
34+
i++;
35+
wcstombs(str, argv[i], sizeof(str));
36+
config.window_height = atoi(str);
37+
}
38+
else if (strcmp(str, "-title") == 0)
39+
{
40+
i++;
41+
wcstombs(str, argv[i], sizeof(str));
42+
config.window_title = str;
43+
}
44+
else if (strcmp(str, "-max") == 0)
45+
{
46+
i++;
47+
wcstombs(str, argv[i], sizeof(str));
48+
if (strcmp(str, "true") == 0) config.window_maximize = true;
49+
else if (strcmp(str, "false") == 0) config.window_maximize = false;
50+
//else use default
51+
}
52+
else if (strcmp(str, "-vsync") == 0)
53+
{
54+
i++;
55+
wcstombs(str, argv[i], sizeof(str));
56+
if (strcmp(str, "true") == 0) config.vsync = true;
57+
else if (strcmp(str, "false") == 0) config.vsync = false;
58+
//else use default
59+
}
60+
else if (strcmp(str, "-log") == 0)
61+
{
62+
i++;
63+
wcstombs(str, argv[i], sizeof(str));
64+
config.log_file = (atoi(str) > 0);
65+
}
66+
i++;
67+
}
68+
}
69+
70+
LocalFree(argv);
71+
return config;
72+
}
73+
74+
}

Adria/Utilities/CommandLineParser.h

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#pragma once
2+
#include <string>
3+
#include "../Core/Definitions.h"
4+
#include <shellapi.h>
5+
6+
namespace adria
7+
{
8+
9+
struct command_line_config_info_t
10+
{
11+
u32 window_width = 1080;
12+
u32 window_height = 720;
13+
std::string window_title = "adria";
14+
bool window_maximize = false;
15+
bool vsync = true;
16+
std::string log_file = "adria.log";
17+
};
18+
19+
command_line_config_info_t ParseCommandLine(LPWSTR command_line);
20+
}

Adria/main.cpp

+10-8
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
#define STB_IMAGE_IMPLEMENTATION
66
#include <stb_image.h>
7-
#include "Utilities/MemoryLeak.h"
87
#include "Core/Window.h"
98
#include "Core/Engine.h"
109
#include "Editor/Editor.h"
11-
10+
#include "Utilities/MemoryLeak.h"
11+
#include "Utilities/CommandLineParser.h"
1212

1313
using namespace adria;
1414

@@ -25,22 +25,24 @@ int APIENTRY wWinMain(
2525
instance usage to avoid false memory check
2626
*/
2727
//MemoryLeak::Checkpoint();
28+
29+
command_line_config_info_t cmd_line_info = ParseCommandLine(lpCmdLine);
2830
{
2931
window_init_t window_init{};
3032
window_init.instance = hInstance;
31-
window_init.width = 1080;
32-
window_init.height = 720;
33-
window_init.title = "Adria";
34-
window_init.maximize = true;
33+
window_init.width = cmd_line_info.window_width;
34+
window_init.height = cmd_line_info.window_height;
35+
window_init.title = cmd_line_info.window_title;
36+
window_init.maximize = cmd_line_info.window_maximize;
3537
Window::Initialize(window_init);
3638

3739
engine_init_t engine_init{};
38-
engine_init.vsync = false;
40+
engine_init.vsync = cmd_line_info.vsync;
3941
engine_init.load_default_scene = true;
4042

4143
editor_init_t editor_init{};
4244
editor_init.engine_init = std::move(engine_init);
43-
editor_init.log_file = "adria.log";
45+
editor_init.log_file = cmd_line_info.log_file;
4446

4547
Editor editor{ editor_init };
4648

0 commit comments

Comments
 (0)