annotate foosdk/sdk/libPPUI/commandline_parser.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "stdafx.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "commandline_parser.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 commandline_parser::commandline_parser() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 init(pfc::stringcvt::string_utf8_from_os(GetCommandLine()));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 void commandline_parser::init(const char * cmd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 pfc::string8_fastalloc temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 pfc::chain_list_v2_t<pfc::string8> out;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 while(*cmd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 temp.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 while(*cmd && *cmd!=' ')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 if (*cmd=='\"')
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 cmd++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 while(*cmd && *cmd!='\"') temp.add_byte(*(cmd++));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 if (*cmd == '\"') cmd++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 else temp.add_byte(*(cmd++));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 out.insert_last(temp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 while(*cmd==' ') cmd++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 pfc::list_to_array(m_data,out);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 size_t commandline_parser::find_param(const char * ptr) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 for(size_t n=1;n<m_data.get_size();n++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 const char * cmd = m_data[n];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 if (cmd[0]=='/') {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 if (!strcmp(cmd+1,ptr)) return n;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 return SIZE_MAX;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 bool commandline_parser::check_param(const char * ptr) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 return find_param(ptr) != SIZE_MAX;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 void commandline_parser::build_string(pfc::string_base & out)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 out.reset();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 unsigned n;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 for(n=0;n<m_data.get_size();n++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 const char * cmd = m_data[n];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 if (!out.is_empty()) out += " ";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 if (strchr(cmd,' '))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 out += "\"";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 out += cmd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 out += "\"";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 out += cmd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 }