diff --git a/lean/include/shuffle3.h b/lean/include/shuffle3.h new file mode 100644 index 0000000..085719a --- /dev/null +++ b/lean/include/shuffle3.h @@ -0,0 +1,30 @@ +#ifndef _SHUFFLE3_H +#define _SHUFFLE3_H + +#ifdef __cplusplus +#define _UNIQUE __restrict +extern "C" { +#else +#define _UNIQUE restrict +#endif + +#ifdef DEBUG +#define _FORCE_INLINE __attribute__((gnu_inline)) static inline +#else +#define _FORCE_INLINE __attribute__((gnu_inline)) extern inline +#endif + +struct panicinfo { + const char* file; + const char* function; + int line; +}; + +void _do_panic(struct panicinfo pi, const char* fmt, ...) __attribute__((noreturn, cold)); +#define panic(fmt, ...) _do_panic( (struct panicinfo){.file = __FILE__, .function = __func__, .line = __LINE__}, fmt __VA_OPT__(,) __VA_ARGS__) + +#ifdef __cplusplus +} +#endif + +#endif /* _SHUFFLE3_H */ diff --git a/lean/src/main.c b/lean/src/main.c new file mode 100644 index 0000000..0372a6d --- /dev/null +++ b/lean/src/main.c @@ -0,0 +1,17 @@ + +#include + +static void shuffle_file(const char* filename) +{ + panic("unimplemented"); +} + +static void unshuffle_file(const char* filename) +{ + panic("unimplemented"); +} + +int main(int argc, char** argv) +{ + return 0; +} diff --git a/lean/src/panic.c b/lean/src/panic.c new file mode 100644 index 0000000..b6f4b0d --- /dev/null +++ b/lean/src/panic.c @@ -0,0 +1,16 @@ +#include +#include +#include + +#include + +__attribute__((noreturn, cold)) void _do_panic(struct panicinfo info, const char* fmt, ...) +{ + va_list li; + va_start(li, fmt); + fprintf(stderr, "[!] (%s->%s:%d) fatal error: ", info.file, info.function, info.line); + vfprintf(stderr, fmt, li); + fprintf(stderr, "\n"); + va_end(li); + abort(); +}