#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 /* C99 */ /* A set of verses. */ union kjvcite { struct { unsigned verse : 12, chapter : 13, book : 7; }; /* C11 */ uint32_t u32; };