/*
##########
#
# kjvSelect.cpp
# Version 1.00
# MDJ 1999-05-11
#
# Compile to kjvSelect.cgi
# Drive with http://www.bds-soft.com/kjvSelect.html
#
# Display the selected KJV file
#
# This version is specific to Saturn
# Services' g++ which is not fully
# ANSI compliant.
#
# Note: iostream and fstream includes must have .h
# but string include must not.
#
# 1999-05-11 WORKS ONLINE!
# Note that c++ should NOT append
's to lines from
# HTML files or "Object Expected" errors in JavaScripts
# will occur.
's SHOULD be appended to ends of lines
# from text files.
#
##########
*/
#include
#include
#include
#include
#include
#include
void ReplaceChar(char *pCString, char cOld, char cNew);
void ReplaceCHex(char *pEncoded);
static int cHex2Int(char *pChars);
int main() {
// Declare Form Variables
char kjvFNum[64]; // File Number string
long kjvFNX; // File Number numeric
// Declare Token Variables
char varName[128][64];
char valName[128][64];
long maxTokCnt = 128;
long tokCount;
// Establish Filenames Array
char kjvFN[233][13];
strcpy(kjvFN[0], "GEN01.TXT"); // Genesis 1 - 7
strcpy(kjvFN[1], "GEN02.TXT"); // Genesis 8 - 14
strcpy(kjvFN[2], "GEN03.TXT"); // Genesis 15 - 20
strcpy(kjvFN[3], "GEN04.TXT"); // Genesis 21 - 25
strcpy(kjvFN[4], "GEN05.TXT"); // Genesis 26 - 29
strcpy(kjvFN[5], "GEN06.TXT"); // Genesis 30 - 33
strcpy(kjvFN[6], "GEN07.TXT"); // Genesis 34 - 38
strcpy(kjvFN[7], "GEN08.TXT"); // Genesis 39 - 42
strcpy(kjvFN[8], "GEN09.TXT"); // Genesis 43 - 46
strcpy(kjvFN[9], "GEN10.TXT"); // Genesis 47 - 50
strcpy(kjvFN[10], "EXO01.TXT"); // Exodus 1 - 6
strcpy(kjvFN[11], "EXO02.TXT"); // Exodus 7 - 11
strcpy(kjvFN[12], "EXO03.TXT"); // Exodus 12 - 15
strcpy(kjvFN[13], "EXO04.TXT"); // Exodus 16 - 21
strcpy(kjvFN[14], "EXO05.TXT"); // Exodus 22 - 26
strcpy(kjvFN[15], "EXO06.TXT"); // Exodus 27 - 30
strcpy(kjvFN[16], "EXO07.TXT"); // Exodus 31 - 35
strcpy(kjvFN[17], "EXO08.TXT"); // Exodus 36 - 39
strcpy(kjvFN[18], "EXO09.TXT"); // Exodus 40
strcpy(kjvFN[19], "LEV01.TXT"); // Leviticus 1 - 6
strcpy(kjvFN[20], "LEV02.TXT"); // Leviticus 7 - 11
strcpy(kjvFN[21], "LEV03.TXT"); // Leviticus 12 - 14
strcpy(kjvFN[22], "LEV04.TXT"); // Leviticus 15 - 19
strcpy(kjvFN[23], "LEV05.TXT"); // Leviticus 20 - 24
strcpy(kjvFN[24], "LEV06.TXT"); // Leviticus 25 - 27
strcpy(kjvFN[25], "NUM01.TXT"); // Numbers 1 - 3
strcpy(kjvFN[26], "NUM02.TXT"); // Numbers 4 - 6
strcpy(kjvFN[27], "NUM03.TXT"); // Numbers 7 - 10
strcpy(kjvFN[28], "NUM04.TXT"); // Numbers 11 - 14
strcpy(kjvFN[29], "NUM05.TXT"); // Numbers 15 - 18
strcpy(kjvFN[30], "NUM06.TXT"); // Numbers 19 - 22
strcpy(kjvFN[31], "NUM07.TXT"); // Numbers 23 - 27
strcpy(kjvFN[32], "NUM08.TXT"); // Numbers 28 - 31
strcpy(kjvFN[33], "NUM09.TXT"); // Numbers 32 - 36
strcpy(kjvFN[34], "DEU01.TXT"); // Deuteronomy 1 - 3
strcpy(kjvFN[35], "DEU02.TXT"); // Deuteronomy 4 - 8
strcpy(kjvFN[36], "DEU03.TXT"); // Deuteronomy 9 - 13
strcpy(kjvFN[37], "DEU04.TXT"); // Deuteronomy 14 - 19
strcpy(kjvFN[38], "DEU05.TXT"); // Deuteronomy 20 - 25
strcpy(kjvFN[39], "DEU06.TXT"); // Deuteronomy 26 - 29
strcpy(kjvFN[40], "DEU07.TXT"); // Deuteronomy 30 - 34
strcpy(kjvFN[41], "JOS01.TXT"); // Joshua 1 - 6
strcpy(kjvFN[42], "JOS02.TXT"); // Joshua 7 - 10
strcpy(kjvFN[43], "JOS03.TXT"); // Joshua 11 - 16
strcpy(kjvFN[44], "JOS04.TXT"); // Joshua 17 - 21
strcpy(kjvFN[45], "JOS05.TXT"); // Joshua 22 - 24
strcpy(kjvFN[46], "JDG01.TXT"); // Judges 1 - 5
strcpy(kjvFN[47], "JDG02.TXT"); // Judges 6 - 8
strcpy(kjvFN[48], "JDG03.TXT"); // Judges 9 - 12
strcpy(kjvFN[49], "JDG04.TXT"); // Judges 13 - 18
strcpy(kjvFN[50], "JDG05.TXT"); // Judges 19 - 21
strcpy(kjvFN[51], "RUT01.TXT"); // Ruth 1 - 4
strcpy(kjvFN[52], "ISAM01.TXT"); // I Samuel 1 - 6
strcpy(kjvFN[53], "ISAM02.TXT"); // I Samuel 7 - 12
strcpy(kjvFN[54], "ISAM03.TXT"); // I Samuel 13 - 16
strcpy(kjvFN[55], "ISAM04.TXT"); // I Samuel 17 - 19
strcpy(kjvFN[56], "ISAM05.TXT"); // I Samuel 20 - 24
strcpy(kjvFN[57], "ISAM06.TXT"); // I Samuel 25 - 29
strcpy(kjvFN[58], "ISAM07.TXT"); // I Samuel 30 - 31
strcpy(kjvFN[59], "IISAM01.TXT"); // II Samuel 1 - 5
strcpy(kjvFN[60], "IISAM02.TXT"); // II Samuel 6 - 11
strcpy(kjvFN[61], "IISAM03.TXT"); // II Samuel 12 - 14
strcpy(kjvFN[62], "IISAM04.TXT"); // II Samuel 15 - 18
strcpy(kjvFN[63], "IISAM05.TXT"); // II Samuel 19 - 22
strcpy(kjvFN[64], "IISAM06.TXT"); // II Samuel 23 - 24
strcpy(kjvFN[65], "IKIN01.TXT"); // I Kings 1 - 3
strcpy(kjvFN[66], "IKIN02.TXT"); // I Kings 4 - 7
strcpy(kjvFN[67], "IKIN03.TXT"); // I Kings 8 - 10
strcpy(kjvFN[68], "IKIN04.TXT"); // I Kings 11 - 14
strcpy(kjvFN[69], "IKIN05.TXT"); // I Kings 15 - 18
strcpy(kjvFN[70], "IKIN06.TXT"); // I Kings 19 - 21
strcpy(kjvFN[71], "IKIN07.TXT"); // I Kings 22
strcpy(kjvFN[72], "IIKIN01.TXT"); // II Kings 1 - 4
strcpy(kjvFN[73], "IIKIN02.TXT"); // II Kings 5 - 8
strcpy(kjvFN[74], "IIKIN03.TXT"); // II Kings 9 - 12
strcpy(kjvFN[75], "IIKIN04.TXT"); // II Kings 13 - 16
strcpy(kjvFN[76], "IIKIN05.TXT"); // II Kings 17 - 20
strcpy(kjvFN[77], "IIKIN06.TXT"); // II Kings 21 - 24
strcpy(kjvFN[78], "IIKIN07.TXT"); // II Kings 25
strcpy(kjvFN[79], "ICHR01.TXT"); // I Chronicles 1 - 5
strcpy(kjvFN[80], "ICHR02.TXT"); // I Chronicles 6 - 9
strcpy(kjvFN[81], "ICHR03.TXT"); // I Chronicles 10 - 15
strcpy(kjvFN[82], "ICHR04.TXT"); // I Chronicles 16 - 21
strcpy(kjvFN[83], "ICHR05.TXT"); // I Chronicles 22 - 27
strcpy(kjvFN[84], "ICHR06.TXT"); // I Chronicles 28 - 29
strcpy(kjvFN[85], "IICHR01.TXT"); // II Chronicles 1 - 6
strcpy(kjvFN[86], "IICHR02.TXT"); // II Chronicles 7 - 12
strcpy(kjvFN[87], "IICHR03.TXT"); // II Chronicles 13 - 19
strcpy(kjvFN[88], "IICHR04.TXT"); // II Chronicles 20 - 24
strcpy(kjvFN[89], "IICHR05.TXT"); // II Chronicles 25 - 29
strcpy(kjvFN[90], "IICHR06.TXT"); // II Chronicles 30 - 33
strcpy(kjvFN[91], "IICHR07.TXT"); // II Chronicles 34 - 36
strcpy(kjvFN[92], "EZR01.TXT"); // Ezra 1 - 6
strcpy(kjvFN[93], "EZR02.TXT"); // Ezra 7 - 10
strcpy(kjvFN[94], "NEH01.TXT"); // Nehemiah 1 - 6
strcpy(kjvFN[95], "NEH02.TXT"); // Nehemiah 7 - 10
strcpy(kjvFN[96], "NEH03.TXT"); // Nehemiah 11 - 13
strcpy(kjvFN[97], "EST01.TXT"); // Esther 1 - 7
strcpy(kjvFN[98], "EST02.TXT"); // Esther 8 - 10
strcpy(kjvFN[99], "JOB01.TXT"); // Job 1 - 9
strcpy(kjvFN[100], "JOB02.TXT"); // Job 10 - 18
strcpy(kjvFN[101], "JOB03.TXT"); // Job 19 - 28
strcpy(kjvFN[102], "JOB04.TXT"); // Job 29 - 36
strcpy(kjvFN[103], "JOB05.TXT"); // Job 37 - 42
strcpy(kjvFN[104], "PSA01.TXT"); // Psalms 1 - 17
strcpy(kjvFN[105], "PSA02.TXT"); // Psalms 18 - 29
strcpy(kjvFN[106], "PSA03.TXT"); // Psalms 30 - 39
strcpy(kjvFN[107], "PSA04.TXT"); // Psalms 40 - 51
strcpy(kjvFN[108], "PSA05.TXT"); // Psalms 52 - 67
strcpy(kjvFN[109], "PSA06.TXT"); // Psalms 68 - 76
strcpy(kjvFN[110], "PSA07.TXT"); // Psalms 77 - 87
strcpy(kjvFN[111], "PSA08.TXT"); // Psalms 88 - 101
strcpy(kjvFN[112], "PSA09.TXT"); // Psalms 102 - 108
strcpy(kjvFN[113], "PSA10.TXT"); // Psalms 109 - 118
strcpy(kjvFN[114], "PSA11.TXT"); // Psalms 119 - 129
strcpy(kjvFN[115], "PSA12.TXT"); // Psalms 130 - 146
strcpy(kjvFN[116], "PSA13.TXT"); // Psalms 147 - 150
strcpy(kjvFN[117], "PRO01.TXT"); // Proverbs 1 - 8
strcpy(kjvFN[118], "PRO02.TXT"); // Proverbs 9 - 16
strcpy(kjvFN[119], "PRO03.TXT"); // Proverbs 17 - 23
strcpy(kjvFN[120], "PRO04.TXT"); // Proverbs 24 - 31
strcpy(kjvFN[121], "ECC01.TXT"); // Ecclesiastes 1 - 8
strcpy(kjvFN[122], "ECC02.TXT"); // Ecclesiastes 9 - 12
strcpy(kjvFN[123], "SON01.TXT"); // Song of Solomon 1 - 8
strcpy(kjvFN[124], "ISA01.TXT"); // Isaiah 1 - 7
strcpy(kjvFN[125], "ISA02.TXT"); // Isaiah 8 - 15
strcpy(kjvFN[126], "ISA03.TXT"); // Isaiah 16 - 24
strcpy(kjvFN[127], "ISA04.TXT"); // Isaiah 25 - 30
strcpy(kjvFN[128], "ISA05.TXT"); // Isaiah 31 - 37
strcpy(kjvFN[129], "ISA06.TXT"); // Isaiah 38 - 43
strcpy(kjvFN[130], "ISA07.TXT"); // Isaiah 44 - 49
strcpy(kjvFN[131], "ISA08.TXT"); // Isaiah 50 - 58
strcpy(kjvFN[132], "ISA09.TXT"); // Isaiah 59 - 66
strcpy(kjvFN[133], "JER01.TXT"); // Jeremiah 1 - 5
strcpy(kjvFN[134], "JER02.TXT"); // Jeremiah 6 - 10
strcpy(kjvFN[135], "JER03.TXT"); // Jeremiah 11 - 16
strcpy(kjvFN[136], "JER04.TXT"); // Jeremiah 17 - 22
strcpy(kjvFN[137], "JER05.TXT"); // Jeremiah 23 - 26
strcpy(kjvFN[138], "JER06.TXT"); // Jeremiah 27 - 31
strcpy(kjvFN[139], "JER07.TXT"); // Jeremiah 32 - 35
strcpy(kjvFN[140], "JER08.TXT"); // Jeremiah 36 - 40
strcpy(kjvFN[141], "JER09.TXT"); // Jeremiah 41 - 47
strcpy(kjvFN[142], "JER10.TXT"); // Jeremiah 48 - 50
strcpy(kjvFN[143], "JER11.TXT"); // Jeremiah 51 - 52
strcpy(kjvFN[144], "LAM01.TXT"); // Lamentations 1 - 5
strcpy(kjvFN[145], "EZE01.TXT"); // Ezekiel 1 - 7
strcpy(kjvFN[146], "EZE02.TXT"); // Ezekiel 8 - 13
strcpy(kjvFN[147], "EZE03.TXT"); // Ezekiel 14 - 17
strcpy(kjvFN[148], "EZE04.TXT"); // Ezekiel 18 - 21
strcpy(kjvFN[149], "EZE05.TXT"); // Ezekiel 22 - 26
strcpy(kjvFN[150], "EZE06.TXT"); // Ezekiel 27 - 31
strcpy(kjvFN[151], "EZE07.TXT"); // Ezekiel 32 - 35
strcpy(kjvFN[152], "EZE08.TXT"); // Ezekiel 36 - 39
strcpy(kjvFN[153], "EZE09.TXT"); // Ezekiel 40 - 43
strcpy(kjvFN[154], "EZE10.TXT"); // Ezekiel 44 - 47
strcpy(kjvFN[155], "EZE11.TXT"); // Ezekiel 48
strcpy(kjvFN[156], "DAN01.TXT"); // Daniel 1 - 4
strcpy(kjvFN[157], "DAN02.TXT"); // Daniel 5 - 8
strcpy(kjvFN[158], "DAN03.TXT"); // Daniel 9 - 12
strcpy(kjvFN[159], "HOS01.TXT"); // Hosea 1 - 11
strcpy(kjvFN[160], "HOS02.TXT"); // Hosea 12 - 14
strcpy(kjvFN[161], "JOE01.TXT"); // Joel 1 - 3
strcpy(kjvFN[162], "AMO01.TXT"); // Amos 1 - 9
strcpy(kjvFN[163], "OBA01.TXT"); // Obadiah
strcpy(kjvFN[164], "JON01.TXT"); // Jonah 1 - 4
strcpy(kjvFN[165], "MIC01.TXT"); // Micah 1 - 7
strcpy(kjvFN[166], "NAH01.TXT"); // Nahum 1 - 3
strcpy(kjvFN[167], "HAB01.TXT"); // Habakkuk 1 - 3
strcpy(kjvFN[168], "ZEP01.TXT"); // Zephaniah 1 - 3
strcpy(kjvFN[169], "HAG01.TXT"); // Haggai 1 - 2
strcpy(kjvFN[170], "ZEC01.TXT"); // Zechariah 1 - 10
strcpy(kjvFN[171], "ZEC02.TXT"); // Zechariah 11 - 14
strcpy(kjvFN[172], "MAL01.TXT"); // Malachi 1 - 4
strcpy(kjvFN[173], "MAT01.TXT"); // Matthew 1 - 6
strcpy(kjvFN[174], "MAT02.TXT"); // Matthew 7 - 11
strcpy(kjvFN[175], "MAT03.TXT"); // Matthew 12 - 14
strcpy(kjvFN[176], "MAT04.TXT"); // Matthew 15 - 19
strcpy(kjvFN[177], "MAT05.TXT"); // Matthew 20 - 23
strcpy(kjvFN[178], "MAT06.TXT"); // Matthew 24 - 26
strcpy(kjvFN[179], "MAT07.TXT"); // Matthew 27 - 28
strcpy(kjvFN[180], "MAR01.TXT"); // Mark 1 - 5
strcpy(kjvFN[181], "MAR02.TXT"); // Mark 6 - 9
strcpy(kjvFN[182], "MAR03.TXT"); // Mark 10 - 13
strcpy(kjvFN[183], "MAR04.TXT"); // Mark 14 - 16
strcpy(kjvFN[184], "LUK01.TXT"); // Luke 1 - 3
strcpy(kjvFN[185], "LUK02.TXT"); // Luke 4 - 6
strcpy(kjvFN[186], "LUK03.TXT"); // Luke 7 - 9
strcpy(kjvFN[187], "LUK04.TXT"); // Luke 10 - 12
strcpy(kjvFN[188], "LUK05.TXT"); // Luke 13 - 17
strcpy(kjvFN[189], "LUK06.TXT"); // Luke 18 - 21
strcpy(kjvFN[190], "LUK07.TXT"); // Luke 22 - 24
strcpy(kjvFN[191], "JOH01.TXT"); // John 1 - 4
strcpy(kjvFN[192], "JOH02.TXT"); // John 5 - 7
strcpy(kjvFN[193], "JOH03.TXT"); // John 8 - 11
strcpy(kjvFN[194], "JOH04.TXT"); // John 12 - 16
strcpy(kjvFN[195], "JOH05.TXT"); // John 17 - 21
strcpy(kjvFN[196], "ACT01.TXT"); // Acts 1 - 5
strcpy(kjvFN[197], "ACT02.TXT"); // Acts 6 - 9
strcpy(kjvFN[198], "ACT03.TXT"); // Acts 10 - 13
strcpy(kjvFN[199], "ACT04.TXT"); // Acts 14 - 18
strcpy(kjvFN[200], "ACT05.TXT"); // Acts 19 - 22
strcpy(kjvFN[201], "ACT06.TXT"); // Acts 23 - 27
strcpy(kjvFN[202], "ACT07.TXT"); // Acts 28
strcpy(kjvFN[203], "ROM01.TXT"); // Romans 1 - 7
strcpy(kjvFN[204], "ROM02.TXT"); // Romans 8 - 14
strcpy(kjvFN[205], "ROM03.TXT"); // Romans 15 - 16
strcpy(kjvFN[206], "ICOR01.TXT"); // I Corinthians 1 - 8
strcpy(kjvFN[207], "ICOR02.TXT"); // I Corinthians 9 - 14
strcpy(kjvFN[208], "ICOR03.TXT"); // I Corinthians 15 - 16
strcpy(kjvFN[209], "IICOR01.TXT"); // II Corinthians 1 - 9
strcpy(kjvFN[210], "IICOR02.TXT"); // II Corinthians 10 - 13
strcpy(kjvFN[211], "GAL01.TXT"); // Galatians 1 - 6
strcpy(kjvFN[212], "EPH01.TXT"); // Ephesians 1 - 6
strcpy(kjvFN[213], "PHI01.TXT"); // Philippians 1 - 4
strcpy(kjvFN[214], "COL01.TXT"); // Colossians 1 - 4
strcpy(kjvFN[215], "ITHE01.TXT"); // I Thessalonians 1 - 5
strcpy(kjvFN[216], "IITHE01.TXT"); // II Thessalonians 1 - 3
strcpy(kjvFN[217], "ITIM01.TXT"); // I Timothy 1 - 6
strcpy(kjvFN[218], "IITIM01.TXT"); // II Timothy 1 - 4
strcpy(kjvFN[219], "TIT01.TXT"); // Titus 1 - 3
strcpy(kjvFN[220], "PHM01.TXT"); // Philemon
strcpy(kjvFN[221], "HEB01.TXT"); // Hebrews 1 - 9
strcpy(kjvFN[222], "HEB02.TXT"); // Hebrews 10 - 13
strcpy(kjvFN[223], "JAM01.TXT"); // James 1 - 5
strcpy(kjvFN[224], "IPET01.TXT"); // I Peter 1 - 5
strcpy(kjvFN[225], "IIPET01.TXT"); // II Peter 1 - 3
strcpy(kjvFN[226], "IJOH01.TXT"); // I John 1 - 5
strcpy(kjvFN[227], "IIJOH01.TXT"); // II John
strcpy(kjvFN[228], "IIIJOH01.TXT"); // III John
strcpy(kjvFN[229], "JUD01.TXT"); // Jude
strcpy(kjvFN[230], "REV01.TXT"); // Revelation 1 - 8
strcpy(kjvFN[231], "REV02.TXT"); // Revelation 9 - 16
strcpy(kjvFN[232], "REV03.TXT"); // Revelation 17 - 22
// Establish File Titles Array
char kjvTT[233][23];
strcpy(kjvTT[0], "Genesis 1 - 7");
strcpy(kjvTT[1], "Genesis 8 - 14");
strcpy(kjvTT[2], "Genesis 15 - 20");
strcpy(kjvTT[3], "Genesis 21 - 25");
strcpy(kjvTT[4], "Genesis 26 - 29");
strcpy(kjvTT[5], "Genesis 30 - 33");
strcpy(kjvTT[6], "Genesis 34 - 38");
strcpy(kjvTT[7], "Genesis 39 - 42");
strcpy(kjvTT[8], "Genesis 43 - 46");
strcpy(kjvTT[9], "Genesis 47 - 50");
strcpy(kjvTT[10], "Exodus 1 - 6");
strcpy(kjvTT[11], "Exodus 7 - 11");
strcpy(kjvTT[12], "Exodus 12 - 15");
strcpy(kjvTT[13], "Exodus 16 - 21");
strcpy(kjvTT[14], "Exodus 22 - 26");
strcpy(kjvTT[15], "Exodus 27 - 30");
strcpy(kjvTT[16], "Exodus 31 - 35");
strcpy(kjvTT[17], "Exodus 36 - 39");
strcpy(kjvTT[18], "Exodus 40");
strcpy(kjvTT[19], "Leviticus 1 - 6");
strcpy(kjvTT[20], "Leviticus 7 - 11");
strcpy(kjvTT[21], "Leviticus 12 - 14");
strcpy(kjvTT[22], "Leviticus 15 - 19");
strcpy(kjvTT[23], "Leviticus 20 - 24");
strcpy(kjvTT[24], "Leviticus 25 - 27");
strcpy(kjvTT[25], "Numbers 1 - 3");
strcpy(kjvTT[26], "Numbers 4 - 6");
strcpy(kjvTT[27], "Numbers 7 - 10");
strcpy(kjvTT[28], "Numbers 11 - 14");
strcpy(kjvTT[29], "Numbers 15 - 18");
strcpy(kjvTT[30], "Numbers 19 - 22");
strcpy(kjvTT[31], "Numbers 23 - 27");
strcpy(kjvTT[32], "Numbers 28 - 31");
strcpy(kjvTT[33], "Numbers 32 - 36");
strcpy(kjvTT[34], "Deuteronomy 1 - 3");
strcpy(kjvTT[35], "Deuteronomy 4 - 8");
strcpy(kjvTT[36], "Deuteronomy 9 - 13");
strcpy(kjvTT[37], "Deuteronomy 14 - 19");
strcpy(kjvTT[38], "Deuteronomy 20 - 25");
strcpy(kjvTT[39], "Deuteronomy 26 - 29");
strcpy(kjvTT[40], "Deuteronomy 30 - 34");
strcpy(kjvTT[41], "Joshua 1 - 6");
strcpy(kjvTT[42], "Joshua 7 - 10");
strcpy(kjvTT[43], "Joshua 11 - 16");
strcpy(kjvTT[44], "Joshua 17 - 21");
strcpy(kjvTT[45], "Joshua 22 - 24");
strcpy(kjvTT[46], "Judges 1 - 5");
strcpy(kjvTT[47], "Judges 6 - 8");
strcpy(kjvTT[48], "Judges 9 - 12");
strcpy(kjvTT[49], "Judges 13 - 18");
strcpy(kjvTT[50], "Judges 19 - 21");
strcpy(kjvTT[51], "Ruth 1 - 4");
strcpy(kjvTT[52], "I Samuel 1 - 6");
strcpy(kjvTT[53], "I Samuel 7 - 12");
strcpy(kjvTT[54], "I Samuel 13 - 16");
strcpy(kjvTT[55], "I Samuel 17 - 19");
strcpy(kjvTT[56], "I Samuel 20 - 24");
strcpy(kjvTT[57], "I Samuel 25 - 29");
strcpy(kjvTT[58], "I Samuel 30 - 31");
strcpy(kjvTT[59], "II Samuel 1 - 5");
strcpy(kjvTT[60], "II Samuel 6 - 11");
strcpy(kjvTT[61], "II Samuel 12 - 14");
strcpy(kjvTT[62], "II Samuel 15 - 18");
strcpy(kjvTT[63], "II Samuel 19 - 22");
strcpy(kjvTT[64], "II Samuel 23 - 24");
strcpy(kjvTT[65], "I Kings 1 - 3");
strcpy(kjvTT[66], "I Kings 4 - 7");
strcpy(kjvTT[67], "I Kings 8 - 10");
strcpy(kjvTT[68], "I Kings 11 - 14");
strcpy(kjvTT[69], "I Kings 15 - 18");
strcpy(kjvTT[70], "I Kings 19 - 21");
strcpy(kjvTT[71], "I Kings 22");
strcpy(kjvTT[72], "II Kings 1 - 4");
strcpy(kjvTT[73], "II Kings 5 - 8");
strcpy(kjvTT[74], "II Kings 9 - 12");
strcpy(kjvTT[75], "II Kings 13 - 16");
strcpy(kjvTT[76], "II Kings 17 - 20");
strcpy(kjvTT[77], "II Kings 21 - 24");
strcpy(kjvTT[78], "II Kings 25");
strcpy(kjvTT[79], "I Chronicles 1 - 5");
strcpy(kjvTT[80], "I Chronicles 6 - 9");
strcpy(kjvTT[81], "I Chronicles 10 - 15");
strcpy(kjvTT[82], "I Chronicles 16 - 21");
strcpy(kjvTT[83], "I Chronicles 22 - 27");
strcpy(kjvTT[84], "I Chronicles 28 - 29");
strcpy(kjvTT[85], "II Chronicles 1 - 6");
strcpy(kjvTT[86], "II Chronicles 7 - 12");
strcpy(kjvTT[87], "II Chronicles 13 - 19");
strcpy(kjvTT[88], "II Chronicles 20 - 24");
strcpy(kjvTT[89], "II Chronicles 25 - 29");
strcpy(kjvTT[90], "II Chronicles 30 - 33");
strcpy(kjvTT[91], "II Chronicles 34 - 36");
strcpy(kjvTT[92], "Ezra 1 - 6");
strcpy(kjvTT[93], "Ezra 7 - 10");
strcpy(kjvTT[94], "Nehemiah 1 - 6");
strcpy(kjvTT[95], "Nehemiah 7 - 10");
strcpy(kjvTT[96], "Nehemiah 11 - 13");
strcpy(kjvTT[97], "Esther 1 - 7");
strcpy(kjvTT[98], "Esther 8 - 10");
strcpy(kjvTT[99], "Job 1 - 9");
strcpy(kjvTT[100], "Job 10 - 18");
strcpy(kjvTT[101], "Job 19 - 28");
strcpy(kjvTT[102], "Job 29 - 36");
strcpy(kjvTT[103], "Job 37 - 42");
strcpy(kjvTT[104], "Psalms 1 - 17");
strcpy(kjvTT[105], "Psalms 18 - 29");
strcpy(kjvTT[106], "Psalms 30 - 39");
strcpy(kjvTT[107], "Psalms 40 - 51");
strcpy(kjvTT[108], "Psalms 52 - 67");
strcpy(kjvTT[109], "Psalms 68 - 76");
strcpy(kjvTT[110], "Psalms 77 - 87");
strcpy(kjvTT[111], "Psalms 88 - 101");
strcpy(kjvTT[112], "Psalms 102 - 108");
strcpy(kjvTT[113], "Psalms 109 - 118");
strcpy(kjvTT[114], "Psalms 119 - 129");
strcpy(kjvTT[115], "Psalms 130 - 146");
strcpy(kjvTT[116], "Psalms 147 - 150");
strcpy(kjvTT[117], "Proverbs 1 - 8");
strcpy(kjvTT[118], "Proverbs 9 - 16");
strcpy(kjvTT[119], "Proverbs 17 - 23");
strcpy(kjvTT[120], "Proverbs 24 - 31");
strcpy(kjvTT[121], "Ecclesiastes 1 - 8");
strcpy(kjvTT[122], "Ecclesiastes 9 - 12");
strcpy(kjvTT[123], "Song of Solomon 1 - 8");
strcpy(kjvTT[124], "Isaiah 1 - 7");
strcpy(kjvTT[125], "Isaiah 8 - 15");
strcpy(kjvTT[126], "Isaiah 16 - 24");
strcpy(kjvTT[127], "Isaiah 25 - 30");
strcpy(kjvTT[128], "Isaiah 31 - 37");
strcpy(kjvTT[129], "Isaiah 38 - 43");
strcpy(kjvTT[130], "Isaiah 44 - 49");
strcpy(kjvTT[131], "Isaiah 50 - 58");
strcpy(kjvTT[132], "Isaiah 59 - 66");
strcpy(kjvTT[133], "Jeremiah 1 - 5");
strcpy(kjvTT[134], "Jeremiah 6 - 10");
strcpy(kjvTT[135], "Jeremiah 11 - 16");
strcpy(kjvTT[136], "Jeremiah 17 - 22");
strcpy(kjvTT[137], "Jeremiah 23 - 26");
strcpy(kjvTT[138], "Jeremiah 27 - 31");
strcpy(kjvTT[139], "Jeremiah 32 - 35");
strcpy(kjvTT[140], "Jeremiah 36 - 40");
strcpy(kjvTT[141], "Jeremiah 41 - 47");
strcpy(kjvTT[142], "Jeremiah 48 - 50");
strcpy(kjvTT[143], "Jeremiah 51 - 52");
strcpy(kjvTT[144], "Lamentations 1 - 5");
strcpy(kjvTT[145], "Ezekiel 1 - 7");
strcpy(kjvTT[146], "Ezekiel 8 - 13");
strcpy(kjvTT[147], "Ezekiel 14 - 17");
strcpy(kjvTT[148], "Ezekiel 18 - 21");
strcpy(kjvTT[149], "Ezekiel 22 - 26");
strcpy(kjvTT[150], "Ezekiel 27 - 31");
strcpy(kjvTT[151], "Ezekiel 32 - 35");
strcpy(kjvTT[152], "Ezekiel 36 - 39");
strcpy(kjvTT[153], "Ezekiel 40 - 43");
strcpy(kjvTT[154], "Ezekiel 44 - 47");
strcpy(kjvTT[155], "Ezekiel 48");
strcpy(kjvTT[156], "Daniel 1 - 4");
strcpy(kjvTT[157], "Daniel 5 - 8");
strcpy(kjvTT[158], "Daniel 9 - 12");
strcpy(kjvTT[159], "Hosea 1 - 11");
strcpy(kjvTT[160], "Hosea 12 - 14");
strcpy(kjvTT[161], "Joel 1 - 3");
strcpy(kjvTT[162], "Amos 1 - 9");
strcpy(kjvTT[163], "Obadiah");
strcpy(kjvTT[164], "Jonah 1 - 4");
strcpy(kjvTT[165], "Micah 1 - 7");
strcpy(kjvTT[166], "Nahum 1 - 3");
strcpy(kjvTT[167], "Habakkuk 1 - 3");
strcpy(kjvTT[168], "Zephaniah 1 - 3");
strcpy(kjvTT[169], "Haggai 1 - 2");
strcpy(kjvTT[170], "Zechariah 1 - 10");
strcpy(kjvTT[171], "Zechariah 11 - 14");
strcpy(kjvTT[172], "Malachi 1 - 4");
strcpy(kjvTT[173], "Matthew 1 - 6");
strcpy(kjvTT[174], "Matthew 7 - 11");
strcpy(kjvTT[175], "Matthew 12 - 14");
strcpy(kjvTT[176], "Matthew 15 - 19");
strcpy(kjvTT[177], "Matthew 20 - 23");
strcpy(kjvTT[178], "Matthew 24 - 26");
strcpy(kjvTT[179], "Matthew 27 - 28");
strcpy(kjvTT[180], "Mark 1 - 5");
strcpy(kjvTT[181], "Mark 6 - 9");
strcpy(kjvTT[182], "Mark 10 - 13");
strcpy(kjvTT[183], "Mark 14 - 16");
strcpy(kjvTT[184], "Luke 1 - 3");
strcpy(kjvTT[185], "Luke 4 - 6");
strcpy(kjvTT[186], "Luke 7 - 9");
strcpy(kjvTT[187], "Luke 10 - 12");
strcpy(kjvTT[188], "Luke 13 - 17");
strcpy(kjvTT[189], "Luke 18 - 21");
strcpy(kjvTT[190], "Luke 22 - 24");
strcpy(kjvTT[191], "John 1 - 4");
strcpy(kjvTT[192], "John 5 - 7");
strcpy(kjvTT[193], "John 8 - 11");
strcpy(kjvTT[194], "John 12 - 16");
strcpy(kjvTT[195], "John 17 - 21");
strcpy(kjvTT[196], "Acts 1 - 5");
strcpy(kjvTT[197], "Acts 6 - 9");
strcpy(kjvTT[198], "Acts 10 - 13");
strcpy(kjvTT[199], "Acts 14 - 18");
strcpy(kjvTT[200], "Acts 19 - 22");
strcpy(kjvTT[201], "Acts 23 - 27");
strcpy(kjvTT[202], "Acts 28");
strcpy(kjvTT[203], "Romans 1 - 7");
strcpy(kjvTT[204], "Romans 8 - 14");
strcpy(kjvTT[205], "Romans 15 - 16");
strcpy(kjvTT[206], "I Corinthians 1 - 8");
strcpy(kjvTT[207], "I Corinthians 9 - 14");
strcpy(kjvTT[208], "I Corinthians 15 - 16");
strcpy(kjvTT[209], "II Corinthians 1 - 9");
strcpy(kjvTT[210], "II Corinthians 10 - 13");
strcpy(kjvTT[211], "Galatians 1 - 6");
strcpy(kjvTT[212], "Ephesians 1 - 6");
strcpy(kjvTT[213], "Philippians 1 - 4");
strcpy(kjvTT[214], "Colossians 1 - 4");
strcpy(kjvTT[215], "I Thessalonians 1 - 5");
strcpy(kjvTT[216], "II Thessalonians 1 - 3");
strcpy(kjvTT[217], "I Timothy 1 - 6");
strcpy(kjvTT[218], "II Timothy 1 - 4");
strcpy(kjvTT[219], "Titus 1 - 3");
strcpy(kjvTT[220], "Philemon");
strcpy(kjvTT[221], "Hebrews 1 - 9");
strcpy(kjvTT[222], "Hebrews 10 - 13");
strcpy(kjvTT[223], "James 1 - 5");
strcpy(kjvTT[224], "I Peter 1 - 5");
strcpy(kjvTT[225], "II Peter 1 - 3");
strcpy(kjvTT[226], "I John 1 - 5");
strcpy(kjvTT[227], "II John");
strcpy(kjvTT[228], "III John");
strcpy(kjvTT[229], "Jude");
strcpy(kjvTT[230], "Revelation 1 - 8");
strcpy(kjvTT[231], "Revelation 9 - 16");
strcpy(kjvTT[232], "Revelation 17 - 22");
// Set STDOUT to unbuffered
setvbuf(stdout, NULL, _IONBF, 0);
// Set-up HTML Output
cout << "Content-type: text/html\n\n";
// Set allowable Referrer's identifying substring
char *pRefAllow = "www.bds-soft.com";
// Verify Referer
char *pReferer;
pReferer = getenv("HTTP_REFERER");
if (strstr(pReferer, pRefAllow) == NULL) {
cout << "ERROR: Unauthorized Referer\n\n";
exit(1);
}
// Verify the POST Request Method
char *pRequestMethod;
pRequestMethod = getenv("REQUEST_METHOD");
if (strcmp(pRequestMethod, "POST") != 0) {
cout << "ERROR: Request Method != Post\n\n";
exit(1);
}
// Set variables for Reading from STDIN
char *pContentLength;
char IBuffer[1024];
int ContentLength; // Value of CONTENT_LENGTH string
int i, x;
// Verify STDIN
pContentLength = getenv("CONTENT_LENGTH");
if (pContentLength == NULL) {
cout << "ERROR: STDIN Content == NULL\n\n";
exit(1);
}
// Convert string to numeric & verify acceptable length
ContentLength = atoi(pContentLength);
if (ContentLength > (sizeof(IBuffer) - 1)) {
cout << "ERROR: STDIN exceeds IBuffer capacity\n\n";
exit(1);
}
// Read STDIN
i = 0;
while (i < ContentLength) {
x = fgetc(stdin);
if (x == EOF) {
break;
}
IBuffer[i++] = x;
}
// Terminate IBuffer
IBuffer[i] = '\0';
ContentLength = i;
// Separate the POST var = val pairs
char *pToken; // split at "&", left part
char *pEqualS; // pointer to equals sign
char *pTokenVar; // split at "=", left part
char *pTokenVal; // split at "=", right part
pToken = strtok(IBuffer, "&"); // Find the initial token
tokCount = -1; // Initialize token counter
while (pToken != NULL) {
tokCount++; // Increment and check counter
if (tokCount >= maxTokCnt) {
cout << "\n\nERROR: Too many pairs!\n\n";
exit(1);
}
pEqualS = strchr(pToken, '='); // Find the equals sign
*pEqualS++ = '\0'; // Terminate left part
pTokenVar = pToken; // Set variable name
ReplaceChar(pTokenVar, '+', ' ');
ReplaceCHex(pTokenVar);
strcpy(varName[tokCount], pTokenVar);
pTokenVal = pEqualS; // Set value
ReplaceChar(pTokenVal, '+', ' ');
ReplaceCHex(pTokenVal);
strcpy(valName[tokCount], pTokenVal);
pToken = strtok(NULL, "&"); // Find the next token
}
// Find kjvFNum value
strcpy(kjvFNum, "thisisadummy");
for (int i1 = 0; i1 < tokCount + 1; i1++) {
if (strcmp(varName[i1], "kjvFNum") == 0) {
strcpy(kjvFNum, valName[i1]);
break;
}
}
if (strcmp(kjvFNum, "thisisadummy") == 0) {
cout << "\n\nERROR: No kjvFNum match!\n\n";
exit(1);
}
kjvFNX = atol(kjvFNum);
// Set the "Previous Page" Number
long kjvPNum = kjvFNX - 1;
if (kjvPNum < 0) {
kjvPNum = 0;
}
// Set the "Next Page" Number
long kjvNNum = kjvFNX + 1;
if (kjvNNum > 232) {
kjvNNum = 232;
}
//##########
//#
// Print Output Page Header file
// Note that this file should be HTML and thus
// insertion of
's will not be required
// Open the file to be displayed as a C-Style file
FILE *fpA;
char *filenameA = "bdsHead.txt";
fpA = fopen(filenameA, "r");
if (fpA == NULL) {
cout << "\n\nCould not open " << filenameA << "\n\n";
exit(1);
}
// Display loop
char nA;
for (;;) {
nA = fgetc(fpA);
if (feof(fpA) != 0) {
break;
}
cout << nA;
}
// Close the file
fclose(fpA);
//#
//##########
//#
// Print Output Page Title file
// Note that this file should be HTML and thus
// insertion of
's will not be required
// Open the file to be displayed as a C-Style file
FILE *fpB;
char *filenameB = "kjvTitle.txt";
fpB = fopen(filenameB, "r");
if (fpB == NULL) {
cout << "\n\nCould not open " << filenameB << "\n\n";
exit(1);
}
// Display loop
char nB;
for (;;) {
nB = fgetc(fpB);
if (feof(fpB) != 0) {
break;
}
cout << nB;
}
// Close the file
fclose(fpB);
//#
//##########
//#
// Print the File Identification
cout << "" << kjvTT[kjvFNX] << "\n\n";
cout << "\n\n";
cout << "\n";
cout << "\n";
cout << "\n\n";
cout << "\n\n";
//#
//##########
//#
// Print KJV File
// Note that this file should be text and thus
// insertion of
's will be required
cout << "\n\n";
// Open the file to be displayed as a C-Style file
FILE *fp;
char filename1[128] = "../../kjv/archive/";
strcat(filename1, kjvFN[kjvFNX]);
// note that ../../ works with
// Saturn's g++ under C-Style while
// http://www.bds-soft.com does not.
fp = fopen(filename1, "r");
if (fp == NULL) {
cout << "\n\nCould not open " << filename1 << "\n\n";
exit(1);
}
// Display loop
char nl; // note this is nl, not n1 (en-el, not en-one)
for (;;) {
nl = fgetc(fp);
if (feof(fp) != 0) {
break;
}
if (nl == '\n') {
cout << "
";
}
cout << nl;
}
// Close the file
fclose(fp);
//#
//##########
//#
// Setup "Previous" and "Next" Buttons
//TODO: At some point in the future, add code to
// produce links based on
// kjvPNum and kjvNNum respectively.
cout << "\n
\n\n";
//#
//##########
//#
// Print Output Page Footer file
// Note that this file should be HTML and thus
// insertion of
's will not be required
// Open the file to be displayed as a C-Style file
FILE *fpC;
char *filenameC = "bdsFoot.txt";
fpC = fopen(filenameC, "r");
if (fpC == NULL) {
cout << "\n\nCould not open " << filenameC << "\n\n";
exit(1);
}
// Display loop
char nC;
for (;;) {
nC = fgetc(fpC);
if (feof(fpC) != 0) {
break;
}
cout << nC;
}
// Close the file
fclose(fpC);
//#
//##########
// Flush STDOUT
fflush(stdout);
// Normal Exit
return 0;
}
/*
##########
#
# ReplaceChar
# MDJ 1999-05-06
#
# Loops through a cstring and replaces each instance of
# character "cOld" with character "cNew".
#
# char *pCString = pointer to a cstring
# char cOld = old character
# char cNew = new character
#
##########
*/
void ReplaceChar(char *pCString, char cOld, char cNew) {
int CSLen;
CSLen = strlen(pCString);
for (int j = 0; j < CSLen; j++) {
if (pCString[j] == cOld) {
pCString[j] = cNew;
}
}
}
/*
##########
#
# ReplaceCHex
# MDJ 1999-05-06
#
# Loops through a cstring and replaces each instance of
# an escaped hexadecimal byte with its unescaped
# character equivalent.
#
# An escaped hexadecimal byte is of the form %XX
# where: X = character 0-9, A-F, or a-f
#
# For example:
# "this%20is%20an%20escaped%20%2F%20character%2E"
#
# would become:
# "this is an escaped / character."
#
# char *pEncoded = pointer to an encoded cstring
#
# int k = source pointer
# int k1 = target pointer
#
# Since the decoded string will at all times be equal to
# or shorter than the encoded string (i.e. k >= k1 for
# all k/k1 pairing) inplace substitutions are valid.
#
##########
*/
void ReplaceCHex(char *pEncoded) {
int k1 = 0;
int ELen;
ELen = strlen(pEncoded);
for (int k = 0; k < ELen; k++) {
if (k < (ELen - 2)) {
if (pEncoded[k] == '%') {
if (isxdigit(pEncoded[k+1]) && isxdigit(pEncoded[k+2])) {
pEncoded[k1] = (char)cHex2Int(&pEncoded[k+1]);
k += 2; // point past escaped hexadecimal byte
}
else {
pEncoded[k1] = pEncoded[k];
}
}
else {
pEncoded[k1] = pEncoded[k];
}
}
else {
pEncoded[k1] = pEncoded[k];
}
k1++;
}
pEncoded[k1] = '\0';
}
/*
##########
#
# cHex2Int
# MDJ 1999-05-06
#
# char *pChars = pointer to a 2-character string
# representing an unsigned
# hexadecimal byte.
#
# int Result = the decimal numeric equivalent.
# (= -17 if pChars is not valid)
#
##########
*/
static int cHex2Int(char *pChars) {
char Hi, Lo;
int Result, IHi, ILo;
Hi = pChars[0];
Lo = pChars[1];
// Convert first character
if ('0' <= Hi && Hi <= '9') {
IHi = Hi - 48;
}
else if ('A' <= Hi && Hi <= 'F') {
IHi = Hi - 55;
}
else if ('a' <= Hi && Hi <= 'f') {
IHi = Hi - 87;
}
else {
IHi = -1;
}
// Convert second character
if ('0' <= Lo && Lo <= '9') {
ILo = Lo - 48;
}
else if ('A' <= Lo && Lo <= 'F') {
ILo = Lo - 55;
}
else if ('a' <= Lo && Lo <= 'f') {
ILo = Lo - 87;
}
else {
ILo = -1;
}
// Form integer equivalent
Result = (16 * IHi) + ILo;
return (Result);
}
/*
##########
#
# end of kjvSelect.cpp
#
##########
*/