diff options
author | June McEnroe <june@causal.agency> | 2020-02-01 02:33:17 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-02-01 02:33:17 -0500 |
commit | 03cb0d7c04d287ba95b26924620ece0855002ad5 (patch) | |
tree | 1906bd93e28d13b03b31da2e06ef70b1729b7252 /chat.h | |
parent | Add -v flag (diff) | |
download | catgirl-03cb0d7c04d287ba95b26924620ece0855002ad5.tar.gz catgirl-03cb0d7c04d287ba95b26924620ece0855002ad5.zip |
Add IDs and names
Diffstat (limited to 'chat.h')
-rw-r--r-- | chat.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/chat.h b/chat.h index 4dd4732..8c13d49 100644 --- a/chat.h +++ b/chat.h @@ -14,13 +14,35 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ +#include <err.h> #include <stdbool.h> +#include <string.h> +#include <sysexits.h> +#include <time.h> #define ARRAY_LEN(a) (sizeof(a) / sizeof(a[0])) #define BIT(x) x##Bit, x = 1 << x##Bit, x##Bit_ = x##Bit typedef unsigned char byte; +enum { None, Debug, Network, IDCap = 256 }; +extern char *idNames[IDCap]; +extern size_t idNext; + +static inline size_t idFind(const char *name) { + for (size_t id = 0; id < idNext; ++id) { + if (!strcmp(idNames[id], name)) return id; + } + return None; +} +static inline size_t idFor(const char *name) { + size_t id = idFind(name); + if (id) return id; + idNames[idNext] = strdup(name); + if (!idNames[idNext]) err(EX_OSERR, "strdup"); + return idNext++; +} + #define ENUM_CAP \ X("sasl", CapSASL) \ X("server-time", CapServerTime) \ |