dagon/libscomp_amalg.h

66 lines
1.3 KiB
C

#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define LIBSCOMP_VERSION "0.1.0"
#include <stddef.h>
#define LIBSCOMP_MAXARG 32
#define LIBSCOMP_MAXBUF 1024
struct libscomp_line {
size_t name;
char *buf[LIBSCOMP_MAXARG];
size_t len;
};
struct libscomp_input {
int state;
char intbuf[LIBSCOMP_MAXBUF];
size_t len;
};
enum libscomp_input_r {
LIBSCOMP_MORE,
LIBSCOMP_OVERFLOW,
LIBSCOMP_ARG_OVERFLOW,
LIBSCOMP_COMPLETE
};
void libscomp_reset(struct libscomp_input *);
enum libscomp_input_r libscomp_read(struct libscomp_input *,
char **,
struct libscomp_line *);
enum libscomp_cmd_r {
LIBSCOMP_NOT_FOUND = -1,
LIBSCOMP_CMD_OK = 0
};
struct libscomp_cmd {
const char *name;
int (*exec)(struct libscomp_line *, void *);
};
struct libscomp_cmd_store {
struct libscomp_cmd *arr;
size_t len;
};
#if defined(__STDC_VERSION__)
#define libscomp_mkcmds(...) {(struct libscomp_cmd []){__VA_ARGS__}, \
sizeof((struct libscomp_cmd []){__VA_ARGS__}) / \
sizeof((struct libscomp_cmd []){__VA_ARGS__}[0])}
#endif
int libscomp_exec(const struct libscomp_cmd_store *cmds,
struct libscomp_line *ln,
void *ptr
);
#ifdef __cplusplus
} // extern "C"
#endif