diff --git a/derived/.gitignore b/derived/.gitignore index d6b7ef3..11f4586 100644 --- a/derived/.gitignore +++ b/derived/.gitignore @@ -1,2 +1,5 @@ * !.gitignore +!interpret +!kjv/ +!kjv/* diff --git a/derived/interpret b/derived/interpret new file mode 100644 index 0000000..07eb8ac --- /dev/null +++ b/derived/interpret @@ -0,0 +1 @@ +../../journal/ diff --git a/kjv/1 Genesis - King James Version (KJV).txt b/derived/kjv/1 Genesis - King James Version (KJV).txt similarity index 100% rename from kjv/1 Genesis - King James Version (KJV).txt rename to derived/kjv/1 Genesis - King James Version (KJV).txt diff --git a/kjv/10 2 Samuel - King James Version (KJV).txt b/derived/kjv/10 2 Samuel - King James Version (KJV).txt similarity index 100% rename from kjv/10 2 Samuel - King James Version (KJV).txt rename to derived/kjv/10 2 Samuel - King James Version (KJV).txt diff --git a/kjv/11 1 Kings - King James Version (KJV).txt b/derived/kjv/11 1 Kings - King James Version (KJV).txt similarity index 100% rename from kjv/11 1 Kings - King James Version (KJV).txt rename to derived/kjv/11 1 Kings - King James Version (KJV).txt diff --git a/kjv/12 2 Kings - King James Version (KJV).txt b/derived/kjv/12 2 Kings - King James Version (KJV).txt similarity index 100% rename from kjv/12 2 Kings - King James Version (KJV).txt rename to derived/kjv/12 2 Kings - King James Version (KJV).txt diff --git a/kjv/13 1 Chronicles - King James Version (KJV).txt b/derived/kjv/13 1 Chronicles - King James Version (KJV).txt similarity index 100% rename from kjv/13 1 Chronicles - King James Version (KJV).txt rename to derived/kjv/13 1 Chronicles - King James Version (KJV).txt diff --git a/kjv/14 2 Chronicles - King James Version (KJV).txt b/derived/kjv/14 2 Chronicles - King James Version (KJV).txt similarity index 100% rename from kjv/14 2 Chronicles - King James Version (KJV).txt rename to derived/kjv/14 2 Chronicles - King James Version (KJV).txt diff --git a/kjv/15 Ezra - King James Version (KJV).txt b/derived/kjv/15 Ezra - King James Version (KJV).txt similarity index 100% rename from kjv/15 Ezra - King James Version (KJV).txt rename to derived/kjv/15 Ezra - King James Version (KJV).txt diff --git a/kjv/16 Nehemiah - King James Version (KJV).txt b/derived/kjv/16 Nehemiah - King James Version (KJV).txt similarity index 100% rename from kjv/16 Nehemiah - King James Version (KJV).txt rename to derived/kjv/16 Nehemiah - King James Version (KJV).txt diff --git a/kjv/17 Esther - King James Version (KJV).txt b/derived/kjv/17 Esther - King James Version (KJV).txt similarity index 100% rename from kjv/17 Esther - King James Version (KJV).txt rename to derived/kjv/17 Esther - King James Version (KJV).txt diff --git a/kjv/18 Job - King James Version (KJV).txt b/derived/kjv/18 Job - King James Version (KJV).txt similarity index 100% rename from kjv/18 Job - King James Version (KJV).txt rename to derived/kjv/18 Job - King James Version (KJV).txt diff --git a/kjv/19 Psalms - King James Version (KJV).txt b/derived/kjv/19 Psalms - King James Version (KJV).txt similarity index 100% rename from kjv/19 Psalms - King James Version (KJV).txt rename to derived/kjv/19 Psalms - King James Version (KJV).txt diff --git a/kjv/2 Exodus - King James Version (KJV).txt b/derived/kjv/2 Exodus - King James Version (KJV).txt similarity index 100% rename from kjv/2 Exodus - King James Version (KJV).txt rename to derived/kjv/2 Exodus - King James Version (KJV).txt diff --git a/kjv/20 Proverbs - King James Version (KJV).txt b/derived/kjv/20 Proverbs - King James Version (KJV).txt similarity index 100% rename from kjv/20 Proverbs - King James Version (KJV).txt rename to derived/kjv/20 Proverbs - King James Version (KJV).txt diff --git a/kjv/21 Ecclesiastes - King James Version (KJV).txt b/derived/kjv/21 Ecclesiastes - King James Version (KJV).txt similarity index 100% rename from kjv/21 Ecclesiastes - King James Version (KJV).txt rename to derived/kjv/21 Ecclesiastes - King James Version (KJV).txt diff --git a/kjv/22 Song of Solomon - King James Version (KJV).txt b/derived/kjv/22 Song of Solomon - King James Version (KJV).txt similarity index 100% rename from kjv/22 Song of Solomon - King James Version (KJV).txt rename to derived/kjv/22 Song of Solomon - King James Version (KJV).txt diff --git a/kjv/23 Isaiah - King James Version (KJV).txt b/derived/kjv/23 Isaiah - King James Version (KJV).txt similarity index 100% rename from kjv/23 Isaiah - King James Version (KJV).txt rename to derived/kjv/23 Isaiah - King James Version (KJV).txt diff --git a/kjv/24 Jeremiah - King James Version (KJV).txt b/derived/kjv/24 Jeremiah - King James Version (KJV).txt similarity index 100% rename from kjv/24 Jeremiah - King James Version (KJV).txt rename to derived/kjv/24 Jeremiah - King James Version (KJV).txt diff --git a/kjv/25 Lamentations - King James Version (KJV).txt b/derived/kjv/25 Lamentations - King James Version (KJV).txt similarity index 100% rename from kjv/25 Lamentations - King James Version (KJV).txt rename to derived/kjv/25 Lamentations - King James Version (KJV).txt diff --git a/kjv/26 Ezekiel - King James Version (KJV).txt b/derived/kjv/26 Ezekiel - King James Version (KJV).txt similarity index 100% rename from kjv/26 Ezekiel - King James Version (KJV).txt rename to derived/kjv/26 Ezekiel - King James Version (KJV).txt diff --git a/kjv/27 Daniel - King James Version (KJV).txt b/derived/kjv/27 Daniel - King James Version (KJV).txt similarity index 100% rename from kjv/27 Daniel - King James Version (KJV).txt rename to derived/kjv/27 Daniel - King James Version (KJV).txt diff --git a/kjv/28 Hosea - King James Version (KJV).txt b/derived/kjv/28 Hosea - King James Version (KJV).txt similarity index 100% rename from kjv/28 Hosea - King James Version (KJV).txt rename to derived/kjv/28 Hosea - King James Version (KJV).txt diff --git a/kjv/29 Joel - King James Version (KJV).txt b/derived/kjv/29 Joel - King James Version (KJV).txt similarity index 100% rename from kjv/29 Joel - King James Version (KJV).txt rename to derived/kjv/29 Joel - King James Version (KJV).txt diff --git a/kjv/3 Leviticus - King James Version (KJV).txt b/derived/kjv/3 Leviticus - King James Version (KJV).txt similarity index 100% rename from kjv/3 Leviticus - King James Version (KJV).txt rename to derived/kjv/3 Leviticus - King James Version (KJV).txt diff --git a/kjv/30 Amos - King James Version (KJV).txt b/derived/kjv/30 Amos - King James Version (KJV).txt similarity index 100% rename from kjv/30 Amos - King James Version (KJV).txt rename to derived/kjv/30 Amos - King James Version (KJV).txt diff --git a/kjv/31 Obadiah - King James Version (KJV).txt b/derived/kjv/31 Obadiah - King James Version (KJV).txt similarity index 100% rename from kjv/31 Obadiah - King James Version (KJV).txt rename to derived/kjv/31 Obadiah - King James Version (KJV).txt diff --git a/kjv/32 Jonah - King James Version (KJV).txt b/derived/kjv/32 Jonah - King James Version (KJV).txt similarity index 100% rename from kjv/32 Jonah - King James Version (KJV).txt rename to derived/kjv/32 Jonah - King James Version (KJV).txt diff --git a/kjv/33 Micah - King James Version (KJV).txt b/derived/kjv/33 Micah - King James Version (KJV).txt similarity index 100% rename from kjv/33 Micah - King James Version (KJV).txt rename to derived/kjv/33 Micah - King James Version (KJV).txt diff --git a/kjv/34 Nahum - King James Version (KJV).txt b/derived/kjv/34 Nahum - King James Version (KJV).txt similarity index 100% rename from kjv/34 Nahum - King James Version (KJV).txt rename to derived/kjv/34 Nahum - King James Version (KJV).txt diff --git a/kjv/35 Habakkuk - King James Version (KJV).txt b/derived/kjv/35 Habakkuk - King James Version (KJV).txt similarity index 100% rename from kjv/35 Habakkuk - King James Version (KJV).txt rename to derived/kjv/35 Habakkuk - King James Version (KJV).txt diff --git a/kjv/36 Zephaniah - King James Version (KJV).txt b/derived/kjv/36 Zephaniah - King James Version (KJV).txt similarity index 100% rename from kjv/36 Zephaniah - King James Version (KJV).txt rename to derived/kjv/36 Zephaniah - King James Version (KJV).txt diff --git a/kjv/37 Haggai - King James Version (KJV).txt b/derived/kjv/37 Haggai - King James Version (KJV).txt similarity index 100% rename from kjv/37 Haggai - King James Version (KJV).txt rename to derived/kjv/37 Haggai - King James Version (KJV).txt diff --git a/kjv/38 Zechariah - King James Version (KJV).txt b/derived/kjv/38 Zechariah - King James Version (KJV).txt similarity index 100% rename from kjv/38 Zechariah - King James Version (KJV).txt rename to derived/kjv/38 Zechariah - King James Version (KJV).txt diff --git a/kjv/39 Malachi - King James Version (KJV).txt b/derived/kjv/39 Malachi - King James Version (KJV).txt similarity index 100% rename from kjv/39 Malachi - King James Version (KJV).txt rename to derived/kjv/39 Malachi - King James Version (KJV).txt diff --git a/kjv/4 Numbers - King James Version (KJV).txt b/derived/kjv/4 Numbers - King James Version (KJV).txt similarity index 100% rename from kjv/4 Numbers - King James Version (KJV).txt rename to derived/kjv/4 Numbers - King James Version (KJV).txt diff --git a/kjv/40 Matthew - King James Version (KJV).txt b/derived/kjv/40 Matthew - King James Version (KJV).txt similarity index 100% rename from kjv/40 Matthew - King James Version (KJV).txt rename to derived/kjv/40 Matthew - King James Version (KJV).txt diff --git a/kjv/41 Mark - King James Version (KJV).txt b/derived/kjv/41 Mark - King James Version (KJV).txt similarity index 100% rename from kjv/41 Mark - King James Version (KJV).txt rename to derived/kjv/41 Mark - King James Version (KJV).txt diff --git a/kjv/42 Luke - King James Version (KJV).txt b/derived/kjv/42 Luke - King James Version (KJV).txt similarity index 100% rename from kjv/42 Luke - King James Version (KJV).txt rename to derived/kjv/42 Luke - King James Version (KJV).txt diff --git a/kjv/43 John - King James Version (KJV).txt b/derived/kjv/43 John - King James Version (KJV).txt similarity index 100% rename from kjv/43 John - King James Version (KJV).txt rename to derived/kjv/43 John - King James Version (KJV).txt diff --git a/kjv/44 Acts - King James Version (KJV).txt b/derived/kjv/44 Acts - King James Version (KJV).txt similarity index 100% rename from kjv/44 Acts - King James Version (KJV).txt rename to derived/kjv/44 Acts - King James Version (KJV).txt diff --git a/kjv/45 Romans - King James Version (KJV).txt b/derived/kjv/45 Romans - King James Version (KJV).txt similarity index 100% rename from kjv/45 Romans - King James Version (KJV).txt rename to derived/kjv/45 Romans - King James Version (KJV).txt diff --git a/kjv/46 1 Corinthians - King James Version (KJV).txt b/derived/kjv/46 1 Corinthians - King James Version (KJV).txt similarity index 100% rename from kjv/46 1 Corinthians - King James Version (KJV).txt rename to derived/kjv/46 1 Corinthians - King James Version (KJV).txt diff --git a/kjv/47 2 Corinthians - King James Version (KJV).txt b/derived/kjv/47 2 Corinthians - King James Version (KJV).txt similarity index 100% rename from kjv/47 2 Corinthians - King James Version (KJV).txt rename to derived/kjv/47 2 Corinthians - King James Version (KJV).txt diff --git a/kjv/48 Galatians - King James Version (KJV).txt b/derived/kjv/48 Galatians - King James Version (KJV).txt similarity index 100% rename from kjv/48 Galatians - King James Version (KJV).txt rename to derived/kjv/48 Galatians - King James Version (KJV).txt diff --git a/kjv/49 Ephesians - King James Version (KJV).txt b/derived/kjv/49 Ephesians - King James Version (KJV).txt similarity index 100% rename from kjv/49 Ephesians - King James Version (KJV).txt rename to derived/kjv/49 Ephesians - King James Version (KJV).txt diff --git a/kjv/5 Deuteronomy - King James Version (KJV).txt b/derived/kjv/5 Deuteronomy - King James Version (KJV).txt similarity index 100% rename from kjv/5 Deuteronomy - King James Version (KJV).txt rename to derived/kjv/5 Deuteronomy - King James Version (KJV).txt diff --git a/kjv/50 Philippians - King James Version (KJV).txt b/derived/kjv/50 Philippians - King James Version (KJV).txt similarity index 100% rename from kjv/50 Philippians - King James Version (KJV).txt rename to derived/kjv/50 Philippians - King James Version (KJV).txt diff --git a/kjv/51 Colossians - King James Version (KJV).txt b/derived/kjv/51 Colossians - King James Version (KJV).txt similarity index 100% rename from kjv/51 Colossians - King James Version (KJV).txt rename to derived/kjv/51 Colossians - King James Version (KJV).txt diff --git a/kjv/52 1 Thessalonians - King James Version (KJV).txt b/derived/kjv/52 1 Thessalonians - King James Version (KJV).txt similarity index 100% rename from kjv/52 1 Thessalonians - King James Version (KJV).txt rename to derived/kjv/52 1 Thessalonians - King James Version (KJV).txt diff --git a/kjv/53 2 Thessalonians - King James Version (KJV).txt b/derived/kjv/53 2 Thessalonians - King James Version (KJV).txt similarity index 100% rename from kjv/53 2 Thessalonians - King James Version (KJV).txt rename to derived/kjv/53 2 Thessalonians - King James Version (KJV).txt diff --git a/kjv/54 1 Timothy - King James Version (KJV).txt b/derived/kjv/54 1 Timothy - King James Version (KJV).txt similarity index 100% rename from kjv/54 1 Timothy - King James Version (KJV).txt rename to derived/kjv/54 1 Timothy - King James Version (KJV).txt diff --git a/kjv/55 2 Timothy - King James Version (KJV).txt b/derived/kjv/55 2 Timothy - King James Version (KJV).txt similarity index 100% rename from kjv/55 2 Timothy - King James Version (KJV).txt rename to derived/kjv/55 2 Timothy - King James Version (KJV).txt diff --git a/kjv/56 Titus - King James Version (KJV).txt b/derived/kjv/56 Titus - King James Version (KJV).txt similarity index 100% rename from kjv/56 Titus - King James Version (KJV).txt rename to derived/kjv/56 Titus - King James Version (KJV).txt diff --git a/kjv/57 Philemon - King James Version (KJV).txt b/derived/kjv/57 Philemon - King James Version (KJV).txt similarity index 100% rename from kjv/57 Philemon - King James Version (KJV).txt rename to derived/kjv/57 Philemon - King James Version (KJV).txt diff --git a/kjv/58 Hebrews - King James Version (KJV).txt b/derived/kjv/58 Hebrews - King James Version (KJV).txt similarity index 100% rename from kjv/58 Hebrews - King James Version (KJV).txt rename to derived/kjv/58 Hebrews - King James Version (KJV).txt diff --git a/kjv/59 James - King James Version (KJV).txt b/derived/kjv/59 James - King James Version (KJV).txt similarity index 100% rename from kjv/59 James - King James Version (KJV).txt rename to derived/kjv/59 James - King James Version (KJV).txt diff --git a/kjv/6 Joshua - King James Version (KJV).txt b/derived/kjv/6 Joshua - King James Version (KJV).txt similarity index 100% rename from kjv/6 Joshua - King James Version (KJV).txt rename to derived/kjv/6 Joshua - King James Version (KJV).txt diff --git a/kjv/60 1 Peter - King James Version (KJV).txt b/derived/kjv/60 1 Peter - King James Version (KJV).txt similarity index 100% rename from kjv/60 1 Peter - King James Version (KJV).txt rename to derived/kjv/60 1 Peter - King James Version (KJV).txt diff --git a/kjv/61 2 Peter - King James Version (KJV).txt b/derived/kjv/61 2 Peter - King James Version (KJV).txt similarity index 100% rename from kjv/61 2 Peter - King James Version (KJV).txt rename to derived/kjv/61 2 Peter - King James Version (KJV).txt diff --git a/kjv/62 1 John - King James Version (KJV).txt b/derived/kjv/62 1 John - King James Version (KJV).txt similarity index 100% rename from kjv/62 1 John - King James Version (KJV).txt rename to derived/kjv/62 1 John - King James Version (KJV).txt diff --git a/kjv/63 2 John - King James Version (KJV).txt b/derived/kjv/63 2 John - King James Version (KJV).txt similarity index 100% rename from kjv/63 2 John - King James Version (KJV).txt rename to derived/kjv/63 2 John - King James Version (KJV).txt diff --git a/kjv/64 3 John - King James Version (KJV).txt b/derived/kjv/64 3 John - King James Version (KJV).txt similarity index 100% rename from kjv/64 3 John - King James Version (KJV).txt rename to derived/kjv/64 3 John - King James Version (KJV).txt diff --git a/kjv/65 Jude - King James Version (KJV).txt b/derived/kjv/65 Jude - King James Version (KJV).txt similarity index 100% rename from kjv/65 Jude - King James Version (KJV).txt rename to derived/kjv/65 Jude - King James Version (KJV).txt diff --git a/kjv/66 Revelation - King James Version (KJV).txt b/derived/kjv/66 Revelation - King James Version (KJV).txt similarity index 100% rename from kjv/66 Revelation - King James Version (KJV).txt rename to derived/kjv/66 Revelation - King James Version (KJV).txt diff --git a/kjv/7 Judges - King James Version (KJV).txt b/derived/kjv/7 Judges - King James Version (KJV).txt similarity index 100% rename from kjv/7 Judges - King James Version (KJV).txt rename to derived/kjv/7 Judges - King James Version (KJV).txt diff --git a/kjv/8 Ruth - King James Version (KJV).txt b/derived/kjv/8 Ruth - King James Version (KJV).txt similarity index 100% rename from kjv/8 Ruth - King James Version (KJV).txt rename to derived/kjv/8 Ruth - King James Version (KJV).txt diff --git a/kjv/9 1 Samuel - King James Version (KJV).txt b/derived/kjv/9 1 Samuel - King James Version (KJV).txt similarity index 100% rename from kjv/9 1 Samuel - King James Version (KJV).txt rename to derived/kjv/9 1 Samuel - King James Version (KJV).txt diff --git a/kjv/source.txt b/derived/kjv/source.txt similarity index 100% rename from kjv/source.txt rename to derived/kjv/source.txt diff --git a/src/driver.c b/src/driver.c index f90f046..c7f81e5 100644 --- a/src/driver.c +++ b/src/driver.c @@ -10,41 +10,73 @@ #include #include #include +#include /* getcwd, chdir */ int main(void) { const char *intent = "start"; struct journal jrnl = {0}; struct scan scn = {0}; + int showhelp = 1; + FILE *fpwhere = 0; + char cwd[PATH_MAX], jdir[PATH_MAX]; + errno = 0; - intent = "journal (cwd)"; + intent = "current directory"; + if(!getcwd(cwd, sizeof(cwd))) goto catch; + + intent = "interpret"; + if(!(fpwhere = fopen(intent, "r"))) goto catch; + if(!fgets(jdir, sizeof jdir, fpwhere)) { + if(!errno) errno = EDOM; + fprintf(stderr, "first line error\n"); + goto catch; + } + if(fgetc(fpwhere) != EOF) { + fprintf(stderr, "expected eof\n"); + errno = EDOM; goto catch; + } + /* Could be something other than EOF. */ + if(errno || (fclose(fpwhere) == EOF && (fpwhere = 0, 1))) goto catch; + fpwhere = 0; + jdir[strcspn(jdir, "\n")] = '\0'; /* Strip. */ + if(chdir(jdir)) { + fprintf(stderr, "while switching to directory: %s\n", jdir); + goto catch; + } + showhelp = 0; + + intent = "journal"; jrnl = journal(); fprintf(stderr, "Journal: %s.\n", journal_to_string(&jrnl)); if(errno) goto catch; + intent = cwd; + if(chdir(cwd)) goto catch; + intent = "parse"; scn = scan(&jrnl); //fprintf(stderr, "Scan: %s.\n", scan_to_string(&scrs)); // <- Not sure what that would do. if(errno) goto catch; - intent = "derived/score.gnu"; + intent = "score.gnu"; if(!freopen(intent, "w", stdout)) goto catch; scan_score_graph(&scn); - intent = "derived/glider.gnu"; + intent = "glider.gnu"; if(!freopen(intent, "w", stdout)) goto catch; scan_glider_graph(&scn); - intent = "derived/flight.gnu"; + intent = "flight.gnu"; if(!freopen(intent, "w", stdout)) goto catch; scan_flight_graph(&scn); - intent = "derived/kjv.gnu"; + intent = "kjv.gnu"; if(!freopen(intent, "w", stdout)) goto catch; scan_kjv_graph(&scn); - intent = "derived/dream.gnu"; + intent = "dream.gnu"; if(!freopen(intent, "w", stdout)) goto catch; scan_dream_graph(&scn); @@ -55,7 +87,16 @@ catch: finally: /* fixme: ~scan should be idempotent but it's not on disabling ASLR, which debug mode is in. */ + if(fpwhere && fclose(fpwhere) == EOF) + intent = "interpret", perror(intent); scan_(&scn); journal_(&jrnl); + if(intent && showhelp) + fprintf(stderr, "\nMeant to be run in a directory with a file called " + "\"interpret\".\n" + "The contents of that file shall be a directory wherein\n" + "//.txt, eg 2000/12/01.txt.\n" + "Loads all journal entries and parses them, outputting to the " + "current directory.\n\n"); return intent ? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/src/journal.re.c b/src/journal.re.c index 1fae205..805141f 100644 --- a/src/journal.re.c +++ b/src/journal.re.c @@ -215,7 +215,7 @@ struct journal journal(void/*const char *const dir_journal*/) { m = 0, int_array_clear(&months); if(chdir("..") == -1) goto catch; } - if(/*chdir("../..") == -1 ||*/ !day_tree_bulk_finish(&j.days)) goto catch; + if(!day_tree_bulk_finish(&j.days)) goto catch; /* Structure is now stable because we aren't going to move it; convert all of offsets back to pointers. */ diff --git a/src/scan.re.c b/src/scan.re.c index 3d7c6e0..6dfa33b 100644 --- a/src/scan.re.c +++ b/src/scan.re.c @@ -1166,7 +1166,7 @@ void scan_score_graph(struct scan *const scan) { "myTimeFmt = \"%%Y-%%m-%%d\"\n" "set format x myTimeFmt timedate\n" "set xtics format myTimeFmt rotate by -30\n" - "set ylabel \"meaning CDF (person·day)\"\n" + "set ylabel \"person·day cdf\"\n" "set grid\n" "set key out reverse Left noautotitle\n" "set style fill solid 0.5\n"