aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/texts/ztext/makeidx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/texts/ztext/makeidx.c')
-rw-r--r--src/modules/texts/ztext/makeidx.c146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/modules/texts/ztext/makeidx.c b/src/modules/texts/ztext/makeidx.c
new file mode 100644
index 0000000..311103e
--- /dev/null
+++ b/src/modules/texts/ztext/makeidx.c
@@ -0,0 +1,146 @@
+#include <stdio.h>
+#include <fcntl.h>
+
+
+char findbreak(int fp, int *offset, int *num1, int *num2, short *size);
+
+
+main(int argc, char **argv)
+{
+ int fp, vfp, cfp, bfp;
+ long pos;
+ short size, tmp;
+ int num1, num2, offset, curbook = 0, curchap = 0, curverse = 0;
+ char buf[127];
+
+ if (argc != 2) {
+ fprintf(stderr, "usage: %s <file to process>\n", argv[0]);
+ exit(1);
+ }
+
+ if ((fp = open(argv[1], O_RDONLY)) == -1) {
+ fprintf(stderr, "Couldn't open file: %s\n", argv[1]);
+ exit(1);
+ }
+
+ sprintf(buf, "%s.vss", argv[1]);
+ if ((vfp = open(buf, O_CREAT|O_WRONLY)) == -1) {
+ fprintf(stderr, "Couldn't open file: %s\n", buf);
+ exit(1);
+ }
+
+ sprintf(buf, "%s.cps", argv[1]);
+ if ((cfp = open(buf, O_CREAT|O_WRONLY)) == -1) {
+ fprintf(stderr, "Couldn't open file: %s\n", buf);
+ exit(1);
+ }
+
+ sprintf(buf, "%s.bks", argv[1]);
+ if ((bfp = open(buf, O_CREAT|O_WRONLY)) == -1) {
+ fprintf(stderr, "Couldn't open file: %s\n", buf);
+ exit(1);
+ }
+
+ pos = 0;
+ write(bfp, &pos, 4); /* Book offset for testament intros */
+ pos = 4;
+ write(cfp, &pos, 4); /* Chapter offset for testament intro */
+
+
+/* Right now just zero out intros until parsing correctly */
+ pos = 0;
+ size = 0;
+ write(vfp, &pos, 4); /* Module intro */
+ write(vfp, &size, 2);
+ write(vfp, &pos, 4); /* Testament intro */
+ write(vfp, &size, 2);
+
+ while (!findbreak(fp, &offset, &num1, &num2, &size)) {
+
+ if (num2 == 1) { /* if we're at a new chapter */
+ if (num1 == 1) { /* if we're at a new book */
+ pos = lseek(cfp, 0, SEEK_CUR);
+ write(bfp, &pos, 4);
+ pos = lseek(vfp, 0, SEEK_CUR); /* Book intro (cps) */
+ write(cfp, &pos, 4);
+ pos = 0;
+ tmp = 0;
+ write(vfp, &pos, 4); /* Book intro (vss) */
+ write(vfp, &tmp, 2);
+ curbook++;
+ curchap = 0;
+ }
+ pos = lseek(vfp, 0, SEEK_CUR);
+ write(cfp, &pos, 4);
+ curverse = 1;
+ pos = 0;
+ tmp = 0;
+ write(vfp, &pos, 4); /* Chapter intro */
+ write(vfp, &tmp, 2);
+ curchap++;
+ }
+ else curverse++;
+
+ printf("%2d:%3d:%3d found at offset: %7d\n", curbook, num1, num2, offset);
+
+ if (num1 != curchap) {
+ fprintf(stderr, "Error: Found chaptures out of sequence\n", buf);
+ break;
+ }
+ if (num2 != curverse) {
+ fprintf(stderr, "Error: Found verses out of sequence\n", buf);
+ break;
+ }
+ write(vfp, &offset, 4);
+ write(vfp, &size, 2);
+ }
+
+ close(vfp);
+ close(cfp);
+ close(bfp);
+ close(fp);
+}
+
+
+char findbreak(int fp, int *offset, int *num1, int *num2, short *size)
+{
+ char buf[7];
+ char buf2[7];
+ char loop;
+ int offset2, ch2, vs2;
+
+ memset(buf, ' ', 7);
+
+ while (1) {
+ if (buf[3] == ':') {
+ memcpy(buf2, buf, 7);
+ for (loop = 0; loop < 7; loop++) {
+ if (!isdigit(buf2[loop]))
+ buf2[loop] = ' ';
+ }
+ buf2[3] = 0;
+ *num1 = atoi(buf2);
+ *num2 = atoi(&buf2[4]);
+ if (*num1 && *num2) {
+ *offset = lseek(fp, 0, SEEK_CUR);
+ sprintf(buf2, "%d", *num2);
+ *offset -= 2 - strlen(buf2);
+ if (size) {
+ if (findbreak(fp, &offset2, &ch2, &vs2, 0)) {
+ *size = (short) (lseek(fp, 0, SEEK_END) - (*offset));
+ }
+ else {
+ sprintf(buf2, "%d:%d", ch2, vs2);
+ *size = (offset2 - (*offset)) - (strlen(buf2) + 2);
+ }
+ lseek(fp, *offset, SEEK_SET);
+ }
+ return 0;
+ }
+ }
+ memmove(buf, &buf[1], 6);
+ if (read(fp, &buf[6], 1) != 1)
+ return 1;
+ }
+}
+