349 lines
6.9 KiB
HolyC
Executable File
349 lines
6.9 KiB
HolyC
Executable File
#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$$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");
|