summaryrefslogtreecommitdiff
path: root/source/core/slang-command-line.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/slang-command-line.h')
-rw-r--r--source/core/slang-command-line.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/source/core/slang-command-line.h b/source/core/slang-command-line.h
new file mode 100644
index 000000000..85ba1a331
--- /dev/null
+++ b/source/core/slang-command-line.h
@@ -0,0 +1,60 @@
+// slang-command-line.h
+#ifndef SLANG_COMMAND_LINE_H
+#define SLANG_COMMAND_LINE_H
+
+#include "slang-string.h"
+#include "slang-list.h"
+
+namespace Slang {
+
+struct CommandLine
+{
+ enum class ExecutableType
+ {
+ Unknown, ///< The executable is not specified
+ Path, ///< The executable is set as a path (ie won't be searched for)
+ Filename, ///< The executable is set as a filename
+ };
+
+ /// Add args - assumed unescaped
+ void addArg(const String& in) { m_args.add(in); }
+ void addArgs(const String* args, Int argsCount) { for (Int i = 0; i < argsCount; ++i) addArg(args[i]); }
+
+ /// Find the index of an arg which is exact match for slice
+ SLANG_INLINE Index findArgIndex(const UnownedStringSlice& slice) const { return m_args.indexOf(slice); }
+
+ /// Set the executable path.
+ /// NOTE! On some targets the executable path *must* include an extension to be able to start as a process
+ void setExecutablePath(const String& path) { m_executableType = ExecutableType::Path; m_executable = path; }
+
+ /// Set the executable path from a base directory and an executable name (no suffix such as '.exe' needed)
+ void setExecutable(const String& dir, const String& name);
+
+ /// Set a filename (such that the path will be looked up
+ void setExecutableFilename(const String& filename) { m_executableType = ExecutableType::Filename; m_executable = filename; }
+
+ /// For handling args where the switch is placed directly in front of the path
+ void addPrefixPathArg(const char* prefix, const String& path, const char* pathPostfix = nullptr);
+
+ /// Get the total number of args
+ SLANG_FORCE_INLINE Index getArgCount() const { return m_args.getCount(); }
+
+ /// Reset to the initial state
+ void reset() { *this = CommandLine(); }
+
+ /// Append the command line to out
+ void append(StringBuilder& out) const;
+ /// convert into a string
+ String toString() const;
+
+ /// Ctor
+ CommandLine():m_executableType(ExecutableType::Unknown) {}
+
+ ExecutableType m_executableType; ///< How the executable is specified
+ String m_executable; ///< Executable to run. Note that the executable is never escaped.
+ List<String> m_args; ///< The arguments (Stored *unescaped*)
+};
+
+}
+
+#endif // SLANG_COMMAND_LINE_H