diff options
Diffstat (limited to 'olb/Doinit.c')
-rw-r--r-- | olb/Doinit.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/olb/Doinit.c b/olb/Doinit.c new file mode 100644 index 0000000..aa905b6 --- /dev/null +++ b/olb/Doinit.c @@ -0,0 +1,132 @@ +#include <online.dcl> +struct zonline online; +struct zversion version; +struct zref ref; +struct zstdindex stdindex; +struct ztrace trace; +/* + Initialises the System + + Inputs: + pointer to path for files + e.g. c:\bible\scholar +*/ +void DOINIT(CHAR *olbpath) +{ + static CHAR *titles[10] = + {"\\id.dat", "\\text.dat", "\\textndx.dat", "\\tokens.dat", + "\\version.dat", "\\xref.dat", "\\xrefndx.dat", "\\xrefndxs.dat", + "\\cxref\\cxref.dat", "\\cxref\\cxrefndx.dat"}; + + CHAR path[64]; + static long int zero ={0}; + + struct + { + CHAR key; + CHAR size[2]; + INT indexsize; + int token_blksize; + } record; + + int i; + int j; + + /* + Open Files + */ + + trace.level = -1; + X("Doinit"); + for (i = 0; i < 8; i++) + { + STRCPY(path, olbpath, 64, "Doinit-1"); + STRCAT(path, titles[i], 64,"Doinit-2"); + call OPEN(i, path); + online.lrecl[i] = 0; + } + + /* + Initialise Version Structure + */ + call READ(fp_version, sizeof(version), &version.version_id); + call CLOSE(fp_version); + call DUMPLINE("VERSION.DAT", 16, &version.version_id); + /* convert PLI strings to C-Weed format */ +/* + for (i = 0; i < 128; i++) + call PLITOC(&(version.hot_words[i][0]), 9); +*/ + for (i = 0; i < 66; i++) + call PLITOC(&(version.books[i][0]), 15); + + /* + setup access to TEXT.DAT file + */ + call DREAD(fp_textndx, 3, &record.key, zero); + call DUMPLINE("TEXTNDX.DAT", 3, &record.key); + + online.textndxsz = record.size[0]; + if (record.key == 0) then + online.lrecl[fp_textndx] = 3; + else + online.lrecl[fp_textndx] = record.size[0]; + + /* + setup access to XREF.DAT file + */ + call DREAD(fp_xrefndx, 7, &record.key, zero); + call DUMPLINE("XREFNDX.DAT", 7, &record.key); + online.lrecl[fp_xrefndx] = record.size[0] + record.size[1]; + online.xrefndxsz[0] = record.size[0]; + online.xrefndxsz[1] = record.size[1]; + if (record.key == 2) then + { + online.indexsize = record.indexsize; + online.tokenblksize = record.token_blksize * 2; + online.tokenarea = &online.tokenwork[0]; + } + else + online.tokenblksize = 0; + /* + setup access to XREFNDXS.DAT file + */ + call DREAD(fp_xrefndxs, 3, &record.key, zero); + call DUMPLINE("XREFNDXS.DAT", 3, &record.key); + if (record.key == 0) then + online.lrecl[fp_xrefndxs] = 3; + else + online.lrecl[fp_xrefndxs] = record.size[0]; + + online.version_mark = 3; + /* + Setup Version ID for multiple versions + */ + call VERINIT(); + + /* + Setup Cross Reference Files + */ + for (i = 8; i < 10; i++) + { + STRCPY(path, olbpath, 64, "Doinit-3"); + j = strlen(path); + while(path[j] != '\\') + j--; + path[j] = 0; + STRCAT(path, titles[i], 64, "Doinit-4"); + call OPEN(i, path); + online.lrecl[i] = 0; + } + /* + setup access to CXREF.DAT file + */ + call DREAD(fp_cxrefndx, 3, &record.key, zero); + call DUMPLINE("CXREFNDX.DAT", 3, &record.key); + if (record.key == 0) then + online.lrecl[fp_cxrefndx] = 3; + else + online.lrecl[fp_cxrefndx] = record.size[0]; + trace.traceflag = 1; + Y(); +} |