#help_index "God" U0 BibleInit() { DefineListLoad("ST_BIBLE_BOOKS", "Genesis\0" "Exodus\0" "Leviticus\0" "Numbers\0" "Deuteronomy\0" "Joshua\0" "Judges\0" "Ruth\0" "1 Samuel\0" "2 Samuel\0" "1 Kings\0" "2 Kings\0" "1 Chronicles\0" "2 Chronicles\0" "Ezra\0" "Nehemiah\0" "Esther\0" "Job\0" "Psalms\0" "Proverbs\0" "Ecclesiastes\0" "Song of Songs\0" "Isaiah\0" "Jeremiah\0" "Lamentations\0" "Ezekiel\0" "Daniel\0" "Hosea\0" "Joel\0" "Amos\0" "Obadiah\0" "Jonah\0" "Micah\0" "Nahum\0" "Habakkuk\0" "Zephaniah\0" "Haggai\0" "Zechariah\0" "Malachi\0" "Matthew\0" "Mark\0" "Luke\0" "John\0" "Acts\0" "Romans\0" "1 Corinthians\0" "2 Corinthians\0" "Galatians\0" "Ephesians\0" "Philippians\0" "Colossians\0" "1 Thessalonians\0" "2 Thessalonians\0" "1 Timothy\0" "2 Timothy\0" "Titus\0" "Philemon\0" "Hebrews\0" "James\0" "1 Peter\0" "2 Peter\0" "1 John\0" "2 John\0" "3 John\0" "Jude\0" "Revelation\0"); DefineListLoad("ST_BIBLE_BOOK_LINES", "297\0" "5068\0" "9123\0" "12005\0" "15977\0" "19168\0" "21329\0" "23598\0" "23902\0" "26892\0" "29345\0" "32241\0" "34961\0" "37633\0" "40756\0" "41671\0" "42963\0" "43605\0" "46190\0" "53793\0" "56267\0" "56966\0" "57332\0" "61806\0" "66736\0" "67217\0" "71804\0" "73189\0" "73876\0" "74130\0" "74615\0" "74697\0" "74860\0" "75241\0" "75416\0" "75604\0" "75806\0" "75932\0" "76684\0" "76908\0" "79970\0" "81941\0" "85266\0" "87803\0" "90914\0" "92110\0" "93323\0" "94088\0" "94514\0" "94869\0" "95153\0" "95402\0" "95647\0" "95772\0" "96090\0" "96320\0" "96440\0" "96500\0" "97370\0" "97687\0" "97976\0" "98163\0" "98506\0" "98552\0" "98597\0" "98684\0" "100111\0"); DefinePrint("ST_BIBLE_LINES","%d", Str2I64(DefineSub(DefineCount("ST_BIBLE_BOOK_LINES") - 1, "ST_BIBLE_BOOK_LINES")) - 1); } BibleInit; public U8 *BibleLine2Verse(I64 line, I64 separate_ch=CH_SPACE) {//Line number to verse str, Malloc()ed. //Separate with <SPACE> or ','. If you pass '%', it uses "%20". CDoc *doc; CDocEntry *doc_e; I64 i = 0, count = DefineCount("ST_BIBLE_BOOKS"), start = 0, last_start = 0; U8 *ptr = DefineSub(0, "ST_BIBLE_BOOK_LINES"), *ptr2; while (i <= count) { last_start = start; start = Str2I64(ptr); if (line < start) break; i++; ptr += StrLen(ptr) + 1; } if (0 <= --i < count) { doc = DocRead(BIBLE_FILENAME, DOCF_PLAIN_TEXT | DOCF_NO_CURSOR); DocGoToLine(doc, line); //one based doc_e = doc->cur_entry; while (doc_e != doc && (doc_e->type_u8 != DOCT_TEXT || !*doc_e->tag)) doc_e = doc_e->next; if (doc_e->type_u8 == DOCT_TEXT && '0' <= *doc_e->tag <= '9') { ptr = ptr2=doc_e->tag; while ('0' <= *ptr2 <= '9' || *ptr2 == ':') ptr2++; *ptr2 = 0; if (separate_ch == '%') ptr = MStrPrint("%Z%%20%s", i, "ST_BIBLE_BOOKS", ptr); else ptr = MStrPrint("%Z%c%s", i, "ST_BIBLE_BOOKS", separate_ch, ptr); } else { while (TRUE) { doc_e = doc_e->last; if (doc_e == doc) { ptr = NULL; break; } if (doc_e->y + 1 < last_start) { ptr = MStrPrint("%Z", i, "ST_BIBLE_BOOKS"); break; } if (doc_e->type_u8 == DOCT_TEXT && StrLen(doc_e->tag) >= 3) { ptr = doc_e->tag + StrLen(doc_e->tag) - 1; while (ptr > doc_e->tag && (!('0' <= *(ptr - 1) <= '9') || *ptr != ':' || !('0' <= *(ptr + 1) <= '9'))) ptr--; ptr--; while (ptr >= doc_e->tag && '0' <= *ptr <= '9') ptr--; ptr2 = ++ptr; if ('0' <= *ptr2++ <= '9') { while ('0' <= *ptr2 <= '9') ptr2++; if (*ptr2++ == ':' && '0' <= *ptr2++ <= '9') { while ('0' <= *ptr2 <= '9') ptr2++; *ptr2 = 0; if (separate_ch == '%') ptr = MStrPrint("%Z%%20%s", i, "ST_BIBLE_BOOKS", ptr); else ptr = MStrPrint("%Z%c%s", i, "ST_BIBLE_BOOKS", separate_ch, ptr); break; } } } } } DocDel(doc); return ptr; } else return NULL; } public U0 BookLines(CDoc *doc_out=NULL, I64 start, I64 lines, U8 *book_filename=BIBLE_FILENAME) {//Put N line starting at line M into doc. CDoc *doc_in; CDocEntry *doc_e; if (!doc_out) doc_out = DocPut; if (doc_out && FileFind(book_filename)) { doc_in = DocRead(book_filename, DOCF_PLAIN_TEXT | DOCF_NO_CURSOR); DocGoToLine(doc_in, start); //one based doc_e = doc_in->cur_entry; while (lines > 0 && doc_e != doc_in) { if (doc_e->type_u8 == DOCT_TEXT) DocPrint(doc_out, "%s", doc_e->tag); else if (doc_e->type_u8 == DOCT_NEW_LINE) { DocPutKey(doc_out, '\n'); lines--; } doc_e = doc_e->next; } DocDel(doc_in); } } public U0 BibleVerse(CDoc *doc_out=NULL, U8 *verse, I64 lines) {//Put N lines starting at verse str into doc. I64 i; CDoc *doc_in; CDocEntry *doc_e; U8 *st, *st2; if (!doc_out) doc_out = DocPut; if (doc_out && FileFind(BIBLE_FILENAME)) { st = StrNew(verse); st2 = StrNew(verse); if (StrOcc(st, ',')) StrLastRemove(st, ",", st2); else *st2 = 0; i = DefineMatch(st, "ST_BIBLE_BOOKS", LMF_IGNORE_CASE); if (i >= 0) { i = Str2I64(DefineSub(i, "ST_BIBLE_BOOK_LINES")); doc_in = DocRead(BIBLE_FILENAME, DOCF_PLAIN_TEXT | DOCF_NO_CURSOR); DocGoToLine(doc_in, i); //one based if (*st2) { StrCopy(doc_in->find_replace->find_text, st2); EdFindNext(doc_in); } doc_e = doc_in->cur_entry; while (lines > 0 && doc_e != doc_in) { if (doc_e->type_u8 == DOCT_TEXT) DocPrint(doc_out, "%s", doc_e->tag); else if (doc_e->type_u8 == DOCT_NEW_LINE) { DocPutKey(doc_out, '\n'); lines--; } doc_e = doc_e->next; } DocDel(doc_in); } Free(st); Free(st2); } } public CDoc *BibleDoc() {//Return Bible as DolDoc with trees. CDoc *res = DocRead(BIBLE_FILENAME); CDocEntry *doc_e = res->head.next,*doc_e1; Bool open_chapter = FALSE; U8 *ptr = Define("ST_BIBLE_BOOK_LINES"); I64 book, book_count = DefineCount("ST_BIBLE_BOOK_LINES") - 1, chapter, line = Str2I64(ptr,, &ptr); ptr++; for (book = 0; book < book_count; book++) { while (doc_e->y + 1 < line) { doc_e1 = doc_e->next; DocEntryDel(res, doc_e); doc_e = doc_e1; } res->cur_entry = doc_e; res->cur_col = 0; DocPrint(res, "$TR,\"%Z\"$\n$ID,2$", book, "ST_BIBLE_BOOKS"); line = Str2I64(ptr,, &ptr); ptr++; chapter = 1; while (doc_e->y + 1 < line) { doc_e1 = doc_e->next; if (doc_e->type_u8 == DOCT_TEXT && StrMatch(":1 ", doc_e->tag)) { res->cur_entry = doc_e; res->cur_col = 0; if (open_chapter) { DocPrint(res, "$ID,-2$"); open_chapter = FALSE; } DocPrint(res, "$TR,\"%d\"$\n$ID,2$", chapter++); open_chapter = TRUE; } else if (chapter == 1) { doc_e1 = doc_e->next; DocEntryDel(res, doc_e); doc_e = doc_e1; } doc_e = doc_e1; } res->cur_entry = doc_e; res->cur_col = 0; if (open_chapter) { DocPrint(res, "$ID,-2$"); open_chapter = FALSE; } DocPrint(res, "$ID,-2$"); } while (doc_e != res) { doc_e1 = doc_e->next; DocEntryDel(res, doc_e); doc_e = doc_e1; } return res; } public U0 BibleView() {//View Bible as DolDoc with trees. U8 buf[STR_LEN]; CDoc *doc = BibleDoc; StrPrint(buf, "AL:%d,1", doc); Ed(buf); DocDel(doc); } U0 CtrlAltB(I64) { PopUp("BibleView;"); } CtrlAltCBSet('B', &CtrlAltB, "Cmd /Bible");