mirror of
https://github.com/thunderbrewhq/squall.git
synced 2025-12-12 02:22:30 +00:00
121 lines
3.6 KiB
C++
121 lines
3.6 KiB
C++
#ifndef STORM_COMMAND_HPP
|
|
#define STORM_COMMAND_HPP
|
|
|
|
#include "storm/List.hpp"
|
|
|
|
#include <cstdint>
|
|
|
|
#define STORM_COMMAND_WHITESPACE_CHARS " ,;\"\t\n\r\x1A"
|
|
|
|
#define STORM_COMMAND_EXTRA_CASE_SENSITIVE (1 << 8)
|
|
|
|
// Type flags
|
|
#define STORM_COMMAND_TYPE_BOOL (0 << 16)
|
|
#define STORM_COMMAND_TYPE_NUMBER (1 << 16)
|
|
#define STORM_COMMAND_TYPE_STRING (2 << 16)
|
|
#define STORM_COMMAND_TYPE_MASK (STORM_COMMAND_TYPE_BOOL | STORM_COMMAND_TYPE_NUMBER | STORM_COMMAND_TYPE_STRING)
|
|
|
|
// Bool value
|
|
#define STORM_COMMAND_BOOL_SET 0
|
|
#define STORM_COMMAND_BOOL_CLEAR 1
|
|
#define STORM_COMMAND_BOOL_MASK (STORM_COMMAND_BOOL_CLEAR | STORM_COMMAND_BOOL_SET)
|
|
|
|
// Numeric value
|
|
#define STORM_COMMAND_NUM_UNSIGNED 0
|
|
#define STORM_COMMAND_NUM_SIGNED 1
|
|
#define STORM_COMMAND_NUM_MASK (STORM_COMMAND_NUM_UNSIGNED | STORM_COMMAND_NUM_SIGNED)
|
|
|
|
// Argument
|
|
#define STORM_COMMAND_ARG_FLAGGED (0 << 24)
|
|
#define STORM_COMMAND_ARG_OPTIONAL (1 << 24)
|
|
#define STORM_COMMAND_ARG_REQUIRED (2 << 24)
|
|
#define STORM_COMMAND_ARG_MASK (STORM_COMMAND_ARG_FLAGGED | STORM_COMMAND_ARG_OPTIONAL | STORM_COMMAND_ARG_REQUIRED)
|
|
|
|
// Getters
|
|
#define STORM_COMMAND_GET_TYPE(u32) (u32 & STORM_COMMAND_TYPE_MASK)
|
|
#define STORM_COMMAND_GET_ARG(u32) (u32 & STORM_COMMAND_ARG_MASK)
|
|
#define STORM_COMMAND_GET_BOOL(u32) (u32 & STORM_COMMAND_BOOL_MASK)
|
|
#define STORM_COMMAND_GET_NUM(u32) (u32 & STORM_COMMAND_NUM_MASK)
|
|
|
|
class CMDERROR;
|
|
class CMDPARAMS;
|
|
|
|
// Callback types
|
|
typedef int32_t (*CMDEXTRACALLBACK)(const char*);
|
|
typedef int32_t (*CMDERRORCALLBACK)(CMDERROR*);
|
|
typedef int32_t (*CMDPARAMSCALLBACK)(CMDPARAMS*, const char*);
|
|
|
|
// Details a command line argument
|
|
class ARGLIST {
|
|
public:
|
|
uint32_t flags;
|
|
uint32_t id;
|
|
const char* name;
|
|
CMDPARAMSCALLBACK callback;
|
|
};
|
|
|
|
// Parameters passed to argument callback
|
|
class CMDPARAMS {
|
|
public:
|
|
uint32_t flags;
|
|
uint32_t id;
|
|
const char* name;
|
|
void* variable;
|
|
uint32_t setvalue;
|
|
uint32_t setmask;
|
|
union {
|
|
int32_t boolvalue;
|
|
int32_t signedvalue;
|
|
uint32_t unsignedvalue;
|
|
const char* stringvalue;
|
|
};
|
|
};
|
|
|
|
// Command definitions
|
|
class CMDDEF : public TSLinkedNode<CMDDEF> {
|
|
public:
|
|
uint32_t flags;
|
|
uint32_t id;
|
|
char name[16];
|
|
int32_t namelength;
|
|
uint32_t setvalue;
|
|
uint32_t setmask;
|
|
void* variableptr;
|
|
uint32_t variablebytes;
|
|
CMDPARAMSCALLBACK callback;
|
|
int32_t found;
|
|
union {
|
|
uint32_t currvalue;
|
|
char* currvaluestr;
|
|
};
|
|
};
|
|
|
|
class CMDERROR {
|
|
public:
|
|
uint32_t errorcode;
|
|
const char* itemstr;
|
|
const char* errorstr;
|
|
};
|
|
|
|
class PROCESSING {
|
|
public:
|
|
CMDDEF* ptr;
|
|
char name[16];
|
|
int32_t namelength;
|
|
};
|
|
|
|
int32_t SCmdRegisterArgument(uint32_t flags, uint32_t id, const char* name, void* variableptr, uint32_t variablebytes, uint32_t setvalue, uint32_t setmask, CMDPARAMSCALLBACKFCN callback);
|
|
|
|
int32_t SCmdRegisterArgList(ARGLIST* listptr, uint32_t numargs);
|
|
|
|
int32_t SCmdProcessCommandLine(CMDEXTRACALLBACKFCN extracallback, CMDERRORCALLBACKFCN errorcallback);
|
|
|
|
int32_t SCmdProcess(const char* cmdline, int32_t skipprogname, CMDEXTRACALLBACKFCN extracallback, CMDERRORCALLBACKFCN errorcallback);
|
|
|
|
uint32_t SCmdGetNum(uint32_t id);
|
|
|
|
int32_t SCmdGetBool(uint32_t id);
|
|
|
|
int32_t SCmdGetString(uint32_t id, char* buffer, uint32_t bufferchars);
|
|
|
|
#endif
|