#help_index "God"
U0 BibleInit()
{
DefineLstLoad("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");
DefineLstLoad("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(DefineCnt("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,cnt=DefineCnt("ST_BIBLE_BOOKS"),start=0,last_start=0;
U8 *ptr=DefineSub(0,"ST_BIBLE_BOOK_LINES"),*ptr2;
while (i<=cnt) {
last_start=start;
start=Str2I64(ptr);
if (line<start)
break;
i++;
ptr+=StrLen(ptr)+1;
}
if (0<=--i<cnt) {
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,','))
StrLastRem(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) {
StrCpy(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_cnt=DefineCnt("ST_BIBLE_BOOK_LINES")-1,
chapter,
line=Str2I64(ptr,,&ptr);
ptr++;
for (book=0;book<book_cnt;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$
$",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,"$
$");
open_chapter=FALSE;
}
DocPrint(res,"$TR,\"%d\"$\n$
$",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,"$
$");
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");