summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorC. McEnroe2020-02-01 02:33:17 -0500
committerC. McEnroe2020-02-01 02:33:17 -0500
commit03cb0d7c04d287ba95b26924620ece0855002ad5 (patch)
tree1906bd93e28d13b03b31da2e06ef70b1729b7252
parent2b3a8bfb9c022269307feed01419c903ba754508 (diff)
Add IDs and names
-rw-r--r--chat.c7
-rw-r--r--chat.h22
2 files changed, 29 insertions, 0 deletions
diff --git a/chat.c b/chat.c
index 5796085..462faa0 100644
--- a/chat.c
+++ b/chat.c
@@ -23,6 +23,13 @@
#include "chat.h"
+char *idNames[IDCap] = {
+ [None] = "<none>",
+ [Debug] = "<debug>",
+ [Network] = "<network>",
+};
+size_t idNext = Network + 1;
+
struct Self self;
int main(int argc, char *argv[]) {
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) \