interpret/src/kjv.h

121 lines
2.3 KiB
C
Raw Normal View History

2022-12-28 04:45:57 +00:00
#ifndef OMIT_BASE /* <!-- base */
2022-12-27 07:31:08 +00:00
#define BOOKS \
X(Genesis),\
X(Exodus),\
X(Leviticus),\
X(Numbers),\
X(Deuteronomy),\
X(Joshua),\
X(Judges),\
X(Ruth),\
X(ISamuel),\
X(IISamuel),\
X(IKings),\
X(IIKings),\
X(IChronicles),\
X(IIChronicles),\
X(Ezra),\
X(Nehemiah),\
X(Esther),\
X(Job),\
X(Psalms),\
X(Proverbs),\
X(Ecclesiastes),\
X(Song_of_Solomon),\
X(Isaiah),\
X(Jeremiah),\
X(Lamentations),\
X(Ezekiel),\
X(Daniel),\
X(Hosea),\
X(Joel),\
X(Amos),\
X(Obadiah),\
X(Jonah),\
X(Micah),\
X(Nahum),\
X(Habakkuk),\
X(Zephaniah),\
X(Haggai),\
X(Zechariah),\
X(Malachi),\
\
X(Matthew),\
X(Mark),\
X(Luke),\
X(John),\
X(Acts),\
X(Romans),\
X(ICorinthians),\
X(IICorinthians),\
X(Galatians),\
X(Ephesians),\
X(Philippians),\
X(Colossians),\
X(IThessalonians),\
X(IIThessalonians),\
X(ITimothy),\
X(IITimothy),\
X(Titus),\
X(Philemon),\
X(Hebrews),\
X(James),\
X(IPeter),\
X(IIPeter),\
X(IJohn),\
X(IIJohn),\
X(IIIJohn),\
X(Jude),\
X(Revelation),\
X(KJV_BOOK_SIZE)
#define X(book) book
enum kjv_book { BOOKS };
#undef X
#define X(book) #book
static const char *kjv_book_string[] = { BOOKS };
#undef X
#undef BOOKS
#include <stdint.h> /* C99 */
union kjvcite {
2022-12-28 04:45:57 +00:00
struct { uint32_t verse : 12, chapter : 13, book : 7; }; /* C11, reverse */
2022-12-27 07:31:08 +00:00
uint32_t u32;
};
2022-12-29 07:54:59 +00:00
void kjvcite_to_string(const union kjvcite, char (*)[12]);
2022-12-27 20:28:04 +00:00
#else /* base --><!-- !base */
2022-12-28 04:45:57 +00:00
#undef OMIT_BASE
2022-12-27 20:28:04 +00:00
#endif /* !base --> */
2022-12-28 04:45:57 +00:00
#ifndef OMIT_VERSES /* <!-- verses: For external inclusion. */
2022-12-27 21:01:51 +00:00
struct table_kjvset_bucket;
struct kjvset_table {
struct table_kjvset_bucket *buckets;
uint32_t log_capacity, size, top;
};
2022-12-27 20:28:04 +00:00
struct table_verse_bucket;
struct verse_table {
struct table_verse_bucket *buckets;
uint32_t log_capacity, size, top;
};
#else /* verses --><!-- !verses */
2022-12-28 04:45:57 +00:00
#undef OMIT_VERSES
2022-12-27 20:28:04 +00:00
#endif /* !verses --> */
2022-12-28 04:45:57 +00:00
#ifndef OMIT_PROTO /* <!-- proto */
2022-12-27 20:28:04 +00:00
#include <stddef.h>
2022-12-27 21:01:51 +00:00
struct kjv {
struct kjvset_table set;
struct verse_table verses;
2022-12-30 05:51:44 +00:00
struct { size_t total, set, verse; } words;
2022-12-27 21:01:51 +00:00
};
2022-12-27 20:28:04 +00:00
struct kjv kjv(void);
void kjv_(struct kjv *);
2022-12-27 21:48:45 +00:00
int kjv_is_valid(const struct kjv *const kjv);
2022-12-27 21:01:51 +00:00
int kjv_add(struct kjv *const kjv, const union kjvcite cite);
const char *kjv_to_string(const struct kjv *const kjv);
const char *kjv_set_to_string(const struct kjv *const kjv);
2022-12-27 20:28:04 +00:00
#else /* proto --><!-- !proto */
2022-12-28 04:45:57 +00:00
#undef OMIT_PROTO
2022-12-27 20:28:04 +00:00
#endif /* !proto --> */