#include #include /********************************************************************* * TABLES * * DESCRIPTION: the Enochian Elemental Tablets * * NOTES: * *********************************************************************/ static char *ltable[] = { " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " }; static char *rtable[] = { /* Recensa of 1587 */ "rZilafAytlpaeTaOAdvptDnim", "ardZaidpaLam aabcooromebb", "czonsaroYavbxTogconxmalGm", "ToiTtzoPacoCanhodDialeaoc", "SigasomrbznhrpatAxioVsPsn", "fmondaTdiaripSaaixaarVroi", "oroibAhaozpi mpharslgaiol", "tNabrVixgasdhMamgloinLirx", "oiiitTpalOai olaaDngaTapa", "abamoooaCucaCpaLcoidxPacn", "NaocOTtnprnTondazNziVaasa", "ocanmagotroimiidPonsdAspi", "Shialrapmzoxaxrinhtarndil", "motib aTnan nanTa bitom", "bOaZaRophaRaadonpaTdanVaa", "uNnaxoPSondn oloaGeoobaua", "aigranoomaggmOPamnoVGmdnm", "orpmningbealoaplsTedecaop", "rsOnizirlemvCscmioonAmlox", "izinrCziaMhlhVarsGdLbriap", "MOrdialhCtGa oiPteaapDoce", "oCanchiasomtppsuacnrZirZa", "arbizmiilpiz Siodaoinrzfm", "OpanaLamSmaPrdaltTdnadire", "dOloPinianbaadixomonsiosp", "rxpaocsizixpxOoDpziApanli", "axtirVastrimergoannPaCrar" }; static char *otable[] = { /* Recensa in original orientation */ "rZilafAytlpaebOaZaRophaRa", "ardZaidpaLam uNnaxoPSondn", "czonsaroYavbxaigranoomagg", "ToiTtzoPacoCaorpmningbeal", "SigasomrbznhrrsOnizirlemv", "fmondaTdiaripizinrCziaMhl", "oroibAhaozpi MOrdialhCtGa", "tNabrVixgasdhoCanchiasomt", "oiiitTpalOai arbizmiilpiz", "abamoooaCucaCOpanaLamSmaP", "NaocOTtnprnTodOloPinianba", "ocanmagotroimrxpaocsizixp", "ShialrapmzoxaaxtirVastrim", "motib atnan nanTa bitom", "donpaTdanVaaaTaOAdvptDnim", "oloaGeoobaua aabcooromebb", "OPamnoVGmdnmmTogconxmalGm", "aplsTedecaoponhodDialeaoc", "scmioonAmloxcpatAxioVsPsn", "VarsGdLbriaphSaaixaarVroi", "oiPteaapDoce mpharslgaiol", "psuacnrZirZapMamgloinlirx", "Siodaoinrzfm olaaDngaTapa", "daltTdnadirerpaLcoidxPacn", "dixomonsiospandazNziVaasa", "OoDpziApanlixiidPonsdAspi", "rgoannPaCrarexrinhtarndil" }; static char *dtable[] = { /* derived table */ "rZilafAvtlpaebOaZaRophaRa", "ardZaidpaLam uNnaxoPSondn", "czonsaroYavbxaigranoomagg", "ToiTtxoPacoCaorpmningbeal", "SigasomrbznhrrsOnizirlemv", "fmondaTdiaripizinrCziaMhl", "oroibAhaozpi MOrdialhCtGa", "cNabrVixgazdhrOcanchiasom", "oiiitTpalOai arbizmillpiz", "abamoooaCucaCOpanaBamSmaL", "NaocOTtnpraTodOloPinianba", "ocanmagotroimrxpaocsizixp", "ShialrapmzoxaaxtirVastrim", "motib aTnan nanTa bitom", "donpaTdanVaaaTaOAdvptDnim", "oloaGeoobaua oalcooromebb", "OPamnoOGmdnmmTagconxmalGm", "aplsTedecaoponhodDialeaoc", "scmioonAmloxCpatAxioVsPsn", "VarsGdLbriaphSaaizaarVroi", "oiPteaapDoce mpharslgaiol", "psuacnrZirZapMamgloinLirx", "Siodaoinrzfm olaaDagaTapa", "daltTdnadirerpaLcoidxPacn", "dixomonsiospandazNxiVaasa", "OoDpziApanlixiidPonsdAspi", "rgoannPaCrarexrinhtarnail" }; static char *xdtable[] = { /* derived, uppercase letters are diffs from Recensa */ "rzilafaVtlpaeboazarophara", "ardzaidpalam unnaxopsondn", "czonsaroyavbxaigranoomagg", "toittXopacocaorpmningbeal", "sigasomrbznhrrsonizirlemv", "fmondatdiaripizinrcziamhl", "oroibahaozpi mordialhctga", "CnabrvixgaZdhROCANCHIASOM", "oiiittpaloai arbizmiLlpiz", "abamoooacucacopanaBamsmaL", "naocottnprAtodolopinianba", "ocanmagotroimrxpaocsizixp", "shialrapmzoxaaxtirvastrim", "motib atnan nanta bitom", "donpatdanvaaataoadvptdnim", "oloageoobaua OaLcooromebb", "opamnoOgmdnmmtAgconxmalgm", "aplstedecaoponhoddialeaoc", "scmioonamloxcpataxiovspsn", "varsgdlbriaphsaaiZaarvroi", "oipteaapdoce mpharslgaiol", "psuacnrzirzapmamgloinlirx", "siodaoinrzfm olaadAgatapa", "dalttdnadirerpalcoidxpacn", "dixomonsiospandaznXivaasa", "oodpziapanlixiidponsdaspi", "rgoannpacrarexrinhtarnAil" }; /********************************************************************* * STRINGS * * DESCRIPTION: Descriptive Strings for Enochian Angelic Names * * NOTES: * *********************************************************************/ static char *title[] = { "", "3 Letter God Name", "4 Letter God Name", "5 Letter God Name", "Elemental King", "Senior", "Invoking Angelic Name", "Commanding Angelic Name", "Archangel", "Kerubic Angel", "Lesser Angel", "Cacodaemon", "Governor" }; static char *element[] = { "", "Air ", "Earth", "Water", "Fire " }; static char *direction[] = { "", "the East", "the South", "the West", "the North" }; static char *sphere[] = { "", "Mars ", "Jupiter", "Moon ", "Venus ", "Saturn ", "Mercury", "Lil", "Arn", "Zom", "Paz", "Lat", "Maz", "Deo", "Zid", "Zip", "Zax", "Ich", "Loe", "Zim", "Vta", "Oxo", "Lea", "Tan", "Zen", "Pop", "Chr", "Asp", "Lin", "Tor", "Nia", "Vti", "Des", "Zaa", "Bag", "Rii", "Tex" }; static char *dsphere[] = { "", "First ", "Second", "Third ", "Fourth", "Fifth ", "Sixth ", "Lil", "Arn", "Zom", "Paz", "Lat", "Maz", "Deo", "Zid", "Zip", "Zax", "Ich", "Loe", "Zim", "Vta", "Oxo", "Lea", "Tan", "Zen", "Pop", "Chr", "Asp", "Lin", "Tor", "Nia", "Vti", "Des", "Zaa", "Bag", "Rii", "Tex" }; /********************************************************************* * DATA DEFINITIONS * * DESCRIPTION: data definitions used by the extraction code * * NOTES: * *********************************************************************/ /* maximum filename length */ #define NAMELEN 80 /* maximum separator length */ #define SEPLEN 32 /* maximum buffer size */ #define BFRSIZ 128 /* ending coordinate */ #define END -1,-1 typedef enum { FALSE, TRUE, } BOOLEAN; typedef enum { ABS_HORZ, ABS, REL, } ORIG; typedef enum { NO_NAME, NAME_OF_3_LETTERS,NAME_OF_4_LETTERS,NAME_OF_5_LETTERS,ELEMENTAL_KING, SENIOR,INVOKING_ANGELIC_NAME,COMMANDING_ANGELIC_NAME, ARCHANGEL,KERUBIC_ANGEL,LESSER_ANGEL,CACODAEMON,GOVERNOR } NAME_TYPE; typedef enum { NO_ELEMENT, AIR, EARTH, WATER, FIRE } ELEMENT_TYPE; typedef enum { NO_SPHERE,MARS,JUPITER,MOON,VENUS,SATURN,MERCURY, LIL,ARN,ZOM,PAZ,LAT,MAZ,DEO,ZID,ZIP,ZAX,ICH,LOE, ZIM,VTA,OXO,LEA,TAN,ZEN,POP,CHR,ASP,LIN,TOR,NIA, VTI,DES,ZAA,BAG,RII,TEX } SPHERE_TYPE; typedef struct option { char *keyword; char *opt; short match_len; short copy_len; BOOLEAN requires_parameter; BOOLEAN present; } OPTION; typedef struct coord_struct { short row; short column; } COORD; typedef struct label_struct { NAME_TYPE name; ELEMENT_TYPE sub_element; SPHERE_TYPE sphere; ELEMENT_TYPE element; } LABEL; typedef struct rule_struct { COORD *coord; LABEL *label; ORIG *origin; } RULE; typedef struct string_struct { char **title; char **sub_element; char **sphere; char **element; } STRING; /********************************************************************* * RULES * * DESCRIPTION: Extraction rules for Enochian Angelic Names * * NOTES: * *********************************************************************/ COORD sub_tablet[] = {0,0, 0,13, 14,0, 14,13, END}; COORD osub_tablet[] = {0,0, 14,13, 0,13, 14,0, END}; LABEL element_name[] = {NO_NAME, NO_ELEMENT, NO_SPHERE, AIR, NO_NAME, NO_ELEMENT, NO_SPHERE, WATER, NO_NAME, NO_ELEMENT, NO_SPHERE, EARTH, NO_NAME, NO_ELEMENT, NO_SPHERE, FIRE}; RULE tablets = {sub_tablet, element_name, NULL}; STRING strings = {title, element, sphere, element}; COORD cnog3[] = {6,0, 6,1, 6,2, END}; LABEL lnog3[] = {NAME_OF_3_LETTERS, NO_ELEMENT, NO_SPHERE, NO_ELEMENT}; RULE nog_3 = {cnog3, lnog3, NULL}; COORD cnog4[] = {6,3, 6,4, 6,5, 6,6, END}; LABEL lnog4[] = {NAME_OF_4_LETTERS, NO_ELEMENT, NO_SPHERE, NO_ELEMENT}; RULE nog_4 = {cnog4, lnog4, NULL}; COORD cnog5[] = {6,7, 6,8, 6,9, 6,10, 6,11, END}; LABEL lnog5[] = {NAME_OF_5_LETTERS, NO_ELEMENT, NO_SPHERE, NO_ELEMENT}; RULE nog_5 = {cnog5, lnog5, NULL}; COORD cking[] = {6,4, 5,5, 5,6, 6,7, 7,6, 7,5, 6,5, 6,6, END}; LABEL lking[] = {ELEMENTAL_KING, NO_ELEMENT, NO_SPHERE, NO_ELEMENT}; RULE king = {cking, lking, NULL}; COORD csen1[] = {6,6, 6,5, 6,4, 6,3, 6,2, 6,1, 6,0, END}; LABEL lsen1[] = {SENIOR,NO_ELEMENT,MARS, NO_ELEMENT}; RULE sen_1 = {csen1, lsen1, NULL}; COORD csen2[] = {6,5, 5,5, 4,5, 3,5, 2,5, 1,5, 0,5, END}; LABEL lsen2[] = {SENIOR,NO_ELEMENT,JUPITER, NO_ELEMENT}; RULE sen_2 = {csen2, lsen2, NULL}; COORD csen3[] = {6,6, 5,6, 4,6, 3,6, 2,6, 1,6, 0,6, END}; LABEL lsen3[] = {SENIOR,NO_ELEMENT,MOON, NO_ELEMENT}; RULE sen_3 = {csen3, lsen3, NULL}; COORD csen4[] = {6,5, 6,6, 6,7, 6,8, 6,9, 6,10, 6,11, END}; LABEL lsen4[] = {SENIOR,NO_ELEMENT,VENUS, NO_ELEMENT}; RULE sen_4 = {csen4, lsen4, NULL}; COORD csen5[] = {6,6, 7,6, 8,6, 9,6, 10,6, 11,6, 12,6, END}; LABEL lsen5[] = {SENIOR,NO_ELEMENT,SATURN, NO_ELEMENT}; RULE sen_5 = {csen5, lsen5, NULL}; COORD csen6[] = {6,5, 7,5, 8,5, 9,5, 10,5, 11,5, 12,5, END}; LABEL lsen6[] = {SENIOR,NO_ELEMENT,MERCURY, NO_ELEMENT}; RULE sen_6 = {csen6, lsen6, NULL}; COORD cinva[] = {0,2, 1,2, 2,2, 3,2, 4,2, 5,2, END}; LABEL linva[] = {INVOKING_ANGELIC_NAME,AIR,NO_SPHERE, NO_ELEMENT}; RULE inv_a = {cinva, linva, NULL}; COORD cinvw[] = {0,9, 1,9, 2,9, 3,9, 4,9, 5,9, END}; LABEL linvw[] = {INVOKING_ANGELIC_NAME,WATER,NO_SPHERE, NO_ELEMENT}; RULE inv_w = {cinvw, linvw, NULL}; COORD cinve[] = {7,2, 8,2, 9,2, 10,2, 11,2, 12,2, END}; LABEL linve[] = {INVOKING_ANGELIC_NAME,EARTH,NO_SPHERE, NO_ELEMENT}; RULE inv_e = {cinve, linve, NULL}; COORD cinvf[] = {7,9, 8,9, 9,9, 10,9, 11,9, 12,9, END}; LABEL linvf[] = {INVOKING_ANGELIC_NAME,FIRE,NO_SPHERE, NO_ELEMENT}; RULE inv_f = {cinvf, linvf, NULL}; COORD ccoma[] = {1,0, 1,1, 1,2, 1,3, 1,4, END}; LABEL lcoma[] = {COMMANDING_ANGELIC_NAME,AIR,NO_SPHERE, NO_ELEMENT}; RULE com_a = {ccoma, lcoma, NULL}; COORD ccomw[] = {1,7, 1,8, 1,9, 1,10, 1,11, END}; LABEL lcomw[] = {COMMANDING_ANGELIC_NAME,WATER,NO_SPHERE, NO_ELEMENT}; RULE com_w = {ccomw, lcomw, NULL}; COORD ccome[] = {8,0, 8,1, 8,2, 8,3, 8,4, END}; LABEL lcome[] = {COMMANDING_ANGELIC_NAME,EARTH,NO_SPHERE, NO_ELEMENT}; RULE com_e = {ccome, lcome, NULL}; COORD ccomf[] = {8,7, 8,8, 8,9, 8,10, 8,11, END}; LABEL lcomf[] = {COMMANDING_ANGELIC_NAME,FIRE,NO_SPHERE, NO_ELEMENT}; RULE com_f = {ccomf, lcomf, NULL}; COORD carca[] = {0,12, 0,0, 0,1, 0,3, 0,4, END}; LABEL larca[] = {ARCHANGEL,AIR,NO_SPHERE, NO_ELEMENT}; ORIG oarca[] = {ABS_HORZ, REL, REL, REL, REL}; RULE arc_a = {carca, larca, oarca}; COORD carcw[] = {0,12, 0,7, 0,8, 0,10, 0,11, END}; LABEL larcw[] = {ARCHANGEL,WATER,NO_SPHERE, NO_ELEMENT}; ORIG oarcw[] = {ABS_HORZ, REL, REL, REL, REL}; RULE arc_w = {carcw, larcw, oarcw}; COORD carce[] = {7,12, 7,0, 7,1, 7,3, 7,4, END}; LABEL larce[] = {ARCHANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; ORIG oarce[] = {ABS_HORZ, REL, REL, REL, REL}; RULE arc_e = {carce, larce, oarce}; COORD carcf[] = {7,12, 7,7, 7,8, 7,10, 7,11, END}; LABEL larcf[] = {ARCHANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; ORIG oarcf[] = {ABS_HORZ, REL, REL, REL, REL}; RULE arc_f = {carcf, larcf, oarcf}; COORD ckera1[] = {0,0, 0,1, 0,3, 0,4, END}; LABEL lkera1[] = {KERUBIC_ANGEL,AIR,NO_SPHERE, NO_ELEMENT}; RULE ker_a1 = {ckera1, lkera1, NULL}; COORD ckera2[] = {0,1, 0,3, 0,4, 0,0, END}; LABEL lkera2[] = {KERUBIC_ANGEL,AIR,NO_SPHERE, NO_ELEMENT}; RULE ker_a2 = {ckera2, lkera2, NULL}; COORD ckera3[] = {0,3, 0,4, 0,0, 0,1, END}; LABEL lkera3[] = {KERUBIC_ANGEL,AIR,NO_SPHERE, NO_ELEMENT}; RULE ker_a3 = {ckera3, lkera3, NULL}; COORD ckera4[] = {0,4, 0,0, 0,1, 0,3, END}; LABEL lkera4[] = {KERUBIC_ANGEL,AIR,NO_SPHERE, NO_ELEMENT}; RULE ker_a4 = {ckera4, lkera4, NULL}; COORD ckerw1[] = {0,7, 0,8, 0,10, 0,11, END}; LABEL lkerw1[] = {KERUBIC_ANGEL,WATER,NO_SPHERE, NO_ELEMENT}; RULE ker_w1 = {ckerw1, lkerw1, NULL}; COORD ckerw2[] = {0,8, 0,10, 0,11, 0,7, END}; LABEL lkerw2[] = {KERUBIC_ANGEL,WATER,NO_SPHERE, NO_ELEMENT}; RULE ker_w2 = {ckerw2, lkerw2, NULL}; COORD ckerw3[] = {0,10, 0,11, 0,7, 0,8, END}; LABEL lkerw3[] = {KERUBIC_ANGEL,WATER,NO_SPHERE, NO_ELEMENT}; RULE ker_w3 = {ckerw3, lkerw3, NULL}; COORD ckerw4[] = {0,11, 0,7, 0,8, 0,10, END}; LABEL lkerw4[] = {KERUBIC_ANGEL,WATER,NO_SPHERE, NO_ELEMENT}; RULE ker_w4 = {ckerw4, lkerw4, NULL}; COORD ckere1[] = {7,0, 7,1, 7,3, 7,4, END}; LABEL lkere1[] = {KERUBIC_ANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; RULE ker_e1 = {ckere1, lkere1, NULL}; COORD ckere2[] = {7,1, 7,3, 7,4, 7,0, END}; LABEL lkere2[] = {KERUBIC_ANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; RULE ker_e2 = {ckere2, lkere2, NULL}; COORD ckere3[] = {7,3, 7,4, 7,0, 7,1, END}; LABEL lkere3[] = {KERUBIC_ANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; RULE ker_e3 = {ckere3, lkere3, NULL}; COORD ckere4[] = {7,4, 7,0, 7,1, 7,3, END}; LABEL lkere4[] = {KERUBIC_ANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; RULE ker_e4 = {ckere4, lkere4, NULL}; COORD ckerf1[] = {7,7, 7,8, 7,10, 7,11, END}; LABEL lkerf1[] = {KERUBIC_ANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; RULE ker_f1 = {ckerf1, lkerf1, NULL}; COORD ckerf2[] = {7,8, 7,10, 7,11, 7,7, END}; LABEL lkerf2[] = {KERUBIC_ANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; RULE ker_f2 = {ckerf2, lkerf2, NULL}; COORD ckerf3[] = {7,10, 7,11, 7,7, 7,8, END}; LABEL lkerf3[] = {KERUBIC_ANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; RULE ker_f3 = {ckerf3, lkerf3, NULL}; COORD ckerf4[] = {7,11, 7,7, 7,8, 7,10, END}; LABEL lkerf4[] = {KERUBIC_ANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; RULE ker_f4 = {ckerf4, lkerf4, NULL}; COORD cle1a[] = {2,0, 2,1, 2,3, 2,4, END}; LABEL lle1a[] = {LESSER_ANGEL,AIR,NO_SPHERE, NO_ELEMENT}; RULE le1_a = {cle1a, lle1a, NULL}; COORD cle2a[] = {3,0, 3,1, 3,3, 3,4, END}; LABEL lle2a[] = {LESSER_ANGEL,AIR,NO_SPHERE, NO_ELEMENT}; RULE le2_a = {cle2a, lle2a, NULL}; COORD cle3a[] = {4,0, 4,1, 4,3, 4,4, END}; LABEL lle3a[] = {LESSER_ANGEL,AIR,NO_SPHERE, NO_ELEMENT}; RULE le3_a = {cle3a, lle3a, NULL}; COORD cle4a[] = {5,0, 5,1, 5,3, 5,4, END}; LABEL lle4a[] = {LESSER_ANGEL,AIR,NO_SPHERE, NO_ELEMENT}; RULE le4_a = {cle4a, lle4a, NULL}; COORD cle1w[] = {2,7, 2,8, 2,10, 2,11, END}; LABEL lle1w[] = {LESSER_ANGEL,WATER,NO_SPHERE, NO_ELEMENT}; RULE le1_w = {cle1w, lle1w, NULL}; COORD cle2w[] = {3,7, 3,8, 3,10, 3,11, END}; LABEL lle2w[] = {LESSER_ANGEL,WATER,NO_SPHERE, NO_ELEMENT}; RULE le2_w = {cle2w, lle2w, NULL}; COORD cle3w[] = {4,7, 4,8, 4,10, 4,11, END}; LABEL lle3w[] = {LESSER_ANGEL,WATER,NO_SPHERE, NO_ELEMENT}; RULE le3_w = {cle3w, lle3w, NULL}; COORD cle4w[] = {5,7, 5,8, 5,10, 5,11, END}; LABEL lle4w[] = {LESSER_ANGEL,WATER,NO_SPHERE, NO_ELEMENT}; RULE le4_w = {cle4w, lle4w, NULL}; COORD cle1e[] = {9,0, 9,1, 9,3, 9,4, END}; LABEL lle1e[] = {LESSER_ANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; RULE le1_e = {cle1e, lle1e, NULL}; COORD cle2e[] = {10,0, 10,1, 10,3, 10,4, END}; LABEL lle2e[] = {LESSER_ANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; RULE le2_e = {cle2e, lle2e, NULL}; COORD cle3e[] = {11,0, 11,1, 11,3, 11,4, END}; LABEL lle3e[] = {LESSER_ANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; RULE le3_e = {cle3e, lle3e, NULL}; COORD cle4e[] = {12,0, 12,1, 12,3, 12,4, END}; LABEL lle4e[] = {LESSER_ANGEL,EARTH,NO_SPHERE, NO_ELEMENT}; RULE le4_e = {cle4e, lle4e, NULL}; COORD cle1f[] = {9,7, 9,8, 9,10, 9,11, END}; LABEL lle1f[] = {LESSER_ANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; RULE le1_f = {cle1f, lle1f, NULL}; COORD cle2f[] = {10,7, 10,8, 10,10, 10,11, END}; LABEL lle2f[] = {LESSER_ANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; RULE le2_f = {cle2f, lle2f, NULL}; COORD cle3f[] = {11,7, 11,8, 11,10, 11,11, END}; LABEL lle3f[] = {LESSER_ANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; RULE le3_f = {cle3f, lle3f, NULL}; COORD cle4f[] = {12,7, 12,8, 12,10, 12,11, END}; LABEL lle4f[] = {LESSER_ANGEL,FIRE,NO_SPHERE, NO_ELEMENT}; RULE le4_f = {cle4f, lle4f, NULL}; COORD cca1a[] = {2, 12, 2,0, 2,1, END}; LABEL lca1a[] = {CACODAEMON,AIR,NO_SPHERE, NO_ELEMENT}; ORIG oca1a[] = {ABS_HORZ, REL, REL}; RULE ca1_a = {cca1a, lca1a, oca1a}; COORD cca2a[] = {3, 12, 3,0, 3,1, END}; LABEL lca2a[] = {CACODAEMON,AIR,NO_SPHERE, NO_ELEMENT}; ORIG oca2a[] = {ABS_HORZ, REL, REL}; RULE ca2_a = {cca2a, lca2a, oca2a}; COORD cca3a[] = {4, 12, 4,0, 4,1, END}; LABEL lca3a[] = {CACODAEMON,AIR,NO_SPHERE, NO_ELEMENT}; ORIG oca3a[] = {ABS_HORZ, REL, REL}; RULE ca3_a = {cca3a, lca3a, oca3a}; COORD cca4a[] = {5, 12, 5,0, 5,1, END}; LABEL lca4a[] = {CACODAEMON,AIR,NO_SPHERE, NO_ELEMENT}; ORIG oca4a[] = {ABS_HORZ, REL, REL}; RULE ca4_a = {cca4a, lca4a, oca4a}; COORD cca1w[] = {2, 12, 2,7, 2,8, END}; LABEL lca1w[] = {CACODAEMON,WATER,NO_SPHERE, NO_ELEMENT}; ORIG oca1w[] = {ABS_HORZ, REL, REL}; RULE ca1_w = {cca1w, lca1w, oca1w}; COORD cca2w[] = {3, 12, 3,7, 3,8, END}; LABEL lca2w[] = {CACODAEMON,WATER,NO_SPHERE, NO_ELEMENT}; ORIG oca2w[] = {ABS_HORZ, REL, REL}; RULE ca2_w = {cca2w, lca2w, oca2w}; COORD cca3w[] = {4, 12, 4,7, 4,8, END}; LABEL lca3w[] = {CACODAEMON,WATER,NO_SPHERE, NO_ELEMENT}; ORIG oca3w[] = {ABS_HORZ, REL, REL}; RULE ca3_w = {cca3w, lca3w, oca3w}; COORD cca4w[] = {5, 12, 5,7, 5,8, END}; LABEL lca4w[] = {CACODAEMON,WATER,NO_SPHERE, NO_ELEMENT}; ORIG oca4w[] = {ABS_HORZ, REL, REL}; RULE ca4_w = {cca4w, lca4w, oca4w}; COORD cca1e[] = {9, 12, 9,0, 9,1, END}; LABEL lca1e[] = {CACODAEMON,EARTH,NO_SPHERE, NO_ELEMENT}; ORIG oca1e[] = {ABS_HORZ, REL, REL}; RULE ca1_e = {cca1e, lca1e, oca1e}; COORD cca2e[] = {10, 12, 10,0, 10,1, END}; LABEL lca2e[] = {CACODAEMON,EARTH,NO_SPHERE, NO_ELEMENT}; ORIG oca2e[] = {ABS_HORZ, REL, REL}; RULE ca2_e = {cca2e, lca2e, oca2e}; COORD cca3e[] = {11, 12, 11,0, 11,1, END}; LABEL lca3e[] = {CACODAEMON,EARTH,NO_SPHERE, NO_ELEMENT}; ORIG oca3e[] = {ABS_HORZ, REL, REL}; RULE ca3_e = {cca3e, lca3e, oca3e}; COORD cca4e[] = {12, 12, 12,0, 12,1, END}; LABEL lca4e[] = {CACODAEMON,EARTH,NO_SPHERE, NO_ELEMENT}; ORIG oca4e[] = {ABS_HORZ, REL, REL}; RULE ca4_e = {cca4e, lca4e, oca4e}; COORD cca1f[] = {9, 12, 9,7, 9,8, END}; LABEL lca1f[] = {CACODAEMON,FIRE,NO_SPHERE, NO_ELEMENT}; ORIG oca1f[] = {ABS_HORZ, REL, REL}; RULE ca1_f = {cca1f, lca1f, oca1f}; COORD cca2f[] = {10, 12, 10,7, 10,8, END}; LABEL lca2f[] = {CACODAEMON,FIRE,NO_SPHERE, NO_ELEMENT}; ORIG oca2f[] = {ABS_HORZ, REL, REL}; RULE ca2_f = {cca2f, lca2f, oca2f}; COORD cca3f[] = {11, 12, 11,7, 11,8, END}; LABEL lca3f[] = {CACODAEMON,FIRE,NO_SPHERE, NO_ELEMENT}; ORIG oca3f[] = {ABS_HORZ, REL, REL}; RULE ca3_f = {cca3f, lca3f, oca3f}; COORD cca4f[] = {12, 12, 12,7, 12,8, END}; LABEL lca4f[] = {CACODAEMON,FIRE,NO_SPHERE, NO_ELEMENT}; ORIG oca4f[] = {ABS_HORZ, REL, REL}; RULE ca4_f = {cca4f, lca4f, oca4f}; ORIG ogov[] = {ABS,ABS,ABS,ABS,ABS,ABS,ABS}; LABEL lair1[] = {GOVERNOR, NO_ELEMENT, LIL, NO_ELEMENT}; LABEL lair2[] = {GOVERNOR, NO_ELEMENT, ARN, NO_ELEMENT}; LABEL lair3[] = {GOVERNOR, NO_ELEMENT, ZOM, NO_ELEMENT}; LABEL lair4[] = {GOVERNOR, NO_ELEMENT, PAZ, NO_ELEMENT}; LABEL lair5[] = {GOVERNOR, NO_ELEMENT, LAT, NO_ELEMENT}; LABEL lair6[] = {GOVERNOR, NO_ELEMENT, MAZ, NO_ELEMENT}; LABEL lair7[] = {GOVERNOR, NO_ELEMENT, DEO, NO_ELEMENT}; LABEL lair8[] = {GOVERNOR, NO_ELEMENT, ZID, NO_ELEMENT}; LABEL lair9[] = {GOVERNOR, NO_ELEMENT, ZIP, NO_ELEMENT}; LABEL lair10[] = {GOVERNOR, NO_ELEMENT, ZAX, NO_ELEMENT}; LABEL lair11[] = {GOVERNOR, NO_ELEMENT, ICH, NO_ELEMENT}; LABEL lair12[] = {GOVERNOR, NO_ELEMENT, LOE, NO_ELEMENT}; LABEL lair13[] = {GOVERNOR, NO_ELEMENT, ZIM, NO_ELEMENT}; LABEL lair14[] = {GOVERNOR, NO_ELEMENT, VTA, NO_ELEMENT}; LABEL lair15[] = {GOVERNOR, NO_ELEMENT, OXO, NO_ELEMENT}; LABEL lair16[] = {GOVERNOR, NO_ELEMENT, LEA, NO_ELEMENT}; LABEL lair17[] = {GOVERNOR, NO_ELEMENT, TAN, NO_ELEMENT}; LABEL lair18[] = {GOVERNOR, NO_ELEMENT, ZEN, NO_ELEMENT}; LABEL lair19[] = {GOVERNOR, NO_ELEMENT, POP, NO_ELEMENT}; LABEL lair20[] = {GOVERNOR, NO_ELEMENT, CHR, NO_ELEMENT}; LABEL lair21[] = {GOVERNOR, NO_ELEMENT, ASP, NO_ELEMENT}; LABEL lair22[] = {GOVERNOR, NO_ELEMENT, LIN, NO_ELEMENT}; LABEL lair23[] = {GOVERNOR, NO_ELEMENT, TOR, NO_ELEMENT}; LABEL lair24[] = {GOVERNOR, NO_ELEMENT, NIA, NO_ELEMENT}; LABEL lair25[] = {GOVERNOR, NO_ELEMENT, VTI, NO_ELEMENT}; LABEL lair26[] = {GOVERNOR, NO_ELEMENT, DES, NO_ELEMENT}; LABEL lair27[] = {GOVERNOR, NO_ELEMENT, ZAA, NO_ELEMENT}; LABEL lair28[] = {GOVERNOR, NO_ELEMENT, BAG, NO_ELEMENT}; LABEL lair29[] = {GOVERNOR, NO_ELEMENT, RII, NO_ELEMENT}; LABEL lair30[] = {GOVERNOR, NO_ELEMENT, TEX, NO_ELEMENT}; COORD cgov1[] = { 0,15, 1,16, 2,16, 2,17, 3,16, 1,17, 2,18, END}; COORD cgov2[] = { 4,22, 3,22, 4,23, 3,24, 3,23, 2,24, 1,24, END}; COORD cgov3[] = { 4,20, 5,19, 6,19, 6,20, 6,21, 5,20, 4,21, END}; COORD cgov4[] = { 8,17, 7,18, 8,18, 8,19, 7,20, 7,19, 6,18, END}; COORD cgov5[] = { 9,21, 9,22, 9,23, 10,22, 10,23, 9,24, 10,24, END}; COORD cgov6[] = { 3,17, 3,18, 3,19, 3,20, 4,19, 4,18, 5,18, END}; COORD cgov7[] = { 5,13, 5,14, 6,13, 7,14, 6,14, 6,15, 5,15, END}; COORD cgov8[] = { 5,21, 6,22, 5,22, 5,23, 6,23, 6,24, 5,24, END}; COORD cgov9[] = {11,21, 12,21, 12,22, 12,23, 11,22, 11,23, 11,24, END}; COORD cgov10[] = { 2,13, 3,14, 3,15, 4,15, 4,14, 3,13, 4,13, END}; COORD cgov11[] = { 4,16, 4,17, 5,17, 5,16, 6,16, 6,17, 7,16, END}; COORD cgov12[] = {11,16, 11,17, 12,18, 12,17, 12,16, 12,15, 12,14, END}; COORD cgov13[] = { 9,15, 10,15, 10,16, 11,15, 11,14, 12,13, 11,13, END}; COORD cgov14[] = {10,17, 9,17, 9,16, 8,15, 7,15, 8,16, 7,17, END}; COORD cgov15[] = { 8,21, 7,22, 8,22, 7,23, 8,23, 8,24, 7,24, END}; COORD cgov16[] = {22,13, 23,14, 24,15, 23,16, 24,16, 24,17, 25,16, END}; COORD cgov17[] = {14,22, 14,23, 15,23, 14,24, 15,24, 16,24, 17,24, END}; COORD cgov18[] = {21,20, 21,21, 21,22, 22,22, 23,22, 22,21, 23,21, END}; COORD cgov19[] = {16,13, 17,14, 18,15, 19,14, 18,14, 17,13, 18,13, END}; COORD cgov20[] = {19,17, 20,17, 21,18, 22,17, 22,16, 22,15, 23,15, END}; COORD cgov21[] = {25,19, 24,20, 25,20, 24,21, 25,21, 24,22, 25,22, END}; COORD cgov22[] = {21,23, 21,24, 22,24, 22,23, 23,23, 23,24, 24,23, END}; COORD cgov23[] = {23,17, 22,18, 23,18, 23,19, 23,20, 24,18, 24,19, END}; COORD cgov24[] = {20,15, 19,15, 18,16, 19,16, 20,16, 21,16, 21,17, END}; COORD cgov25[] = {25,13, 24,13, 23,13, 24,14, 25,14, 26,13, 26,14, END}; COORD cgov26[] = {26,21, 26,22, 26,23, 25,23, 24,24, 25,24, 26,24, END}; COORD cgov27[] = {25,15, 26,15, 26,16, 26,17, 25,17, 25,18, 26,18, END}; COORD cgov28[] = { 1,9, 0,12, 2,12, 3,12, 4,12, 5,12, 7,12, END}; COORD cgov29[] = { 9,12, 10,12, 11,12, 12,12, 13,13, 13,14, 13,15, END}; COORD cgov30[] = {13,16, 13,17, 13,20, 13,21, 13,22, 13,23, 13,24, END}; COORD cgov31[] = { 7,13, 8,13, 8,14, 9,13, 9,14, 10,13, 10,14, END}; COORD cgov32[] = {10,20, 11,19, 11,18, 12,19, 12,20, 11,20, 10,21, END}; COORD cgov33[] = {16,14, 15,15, 14,15, 14,14, 14,13, 15,13, 15,14, END}; COORD cgov34[] = {14,18, 14,17, 14,16, 15,16, 16,16, 16,15, 17,15, END}; COORD cgov35[] = {15,17, 15,18, 14,19, 15,19, 16,18, 16,17, 17,16, END}; COORD cgov36[] = {18,20, 18,21, 19,20, 19,21, 19,22, 18,23, 18,22, END}; COORD cgov37[] = {16,20, 17,20, 17,21, 17,22, 17,23, 16,23, 16,22, END}; COORD cgov38[] = {19,19, 20,19, 20,20, 20,18, 21,19, 22,19, 22,20, END}; COORD cgov39[] = {20,21, 20,22, 20,23, 20,24, 19,24, 19,23, 18,24, END}; COORD cgov40[] = {17,17, 17,18, 17,19, 18,18, 18,17, 18,19, 19,18, END}; COORD cgov41[] = {19,13, 20,14, 21,15, 22,14, 21,13, 20,13, 21,14, END}; COORD cgov42[] = {16,19, 15,20, 14,20, 14,21, 15,22, 16,21, 15,21, END}; COORD cgov43[] = { 5,6, 6,7, 6,6, 5,5, 4,6, 5,7, 6,8, END}; COORD cgov44[] = { 7,1, 6,0, 7,0, 8,1, 7,2, 7,3, 8,3, END}; COORD cgov45[] = { 3,3, 4,3, 4,4, 3,4, 4,5, 3,5, 3,6, END}; COORD cgov46[] = { 9,8, 9,9, 9,10, 10,10, 10,9, 10,8, 11,8, END}; COORD cgov47[] = { 1,9, 1,10, 2,10, 2,9, 3,9, 3,10, 4,10, END}; COORD cgov48[] = {12,0, 11,0, 11,1, 12,1, 12,2, 12,3, 12,4, END}; COORD cgov49[] = { 4,0, 4,1, 4,2, 5,1, 5,2, 6,1, 5,0, END}; COORD cgov50[] = { 0,6, 0,7, 1,6, 2,6, 2,7, 1,7, 0,8, END}; COORD cgov51[] = { 3,0, 3,1, 2,0, 1,0, 0,0, 2,1, 3,2, END}; COORD cgov52[] = {10,0, 10,1, 9,1, 9,2, 10,2, 9,3, 8,2, END}; COORD cgov53[] = { 1,3, 0,4, 0,5, 1,4, 2,4, 2,5, 1,5, END}; COORD cgov54[] = { 2,8, 1,8, 0,9, 0,10, 0,11, 1,11, 2,11, END}; COORD cgov55[] = {10,11, 11,10, 11,9, 12,9, 12,10, 12,11, 11,11, END}; COORD cgov56[] = { 6,5, 6,4, 7,4, 6,3, 6,2, 5,3, 5,4, END}; COORD cgov57[] = {10,4, 11,4, 11,5, 11,6, 12,5, 12,6, 12,7, END}; COORD cgov58[] = { 0,1, 0,2, 0,3, 1,2, 1,1, 2,2, 2,3, END}; COORD cgov59[] = { 3,7, 3,8, 4,7, 4,9, 5,8, 4,8, 5,9, END}; COORD cgov60[] = { 8,5, 9,5, 8,4, 9,4, 10,3, 11,2, 11,3, END}; COORD cgov61[] = { 3,11, 4,11, 5,11, 5,10, 6,9, 6,10, 7,9, END}; COORD cgov62[] = {10,5, 9,6, 9,7, 10,7, 10,6, 11,7, 12,8, END}; COORD cgov63[] = { 7,5, 7,6, 7,7, 8,6, 8,7, 8,8, 7,8, END}; COORD cgov64[] = { 8,9, 7,10, 6,11, 7,11, 8,10, 8,11, 9,11, END}; /* coordinates produced by the sigil, but not = Paraoan/Paoaoan COORD cgov65[] = { 7,21, 8,20, 9,20, 9,19, 10,19, 10,18, 9,18, END}; */ COORD cgov65[] = {26,19, 26,20, 21,0, 22,0, 8,0, 9,0, 4,24, END}; COORD cgov66[] = {19,5, 20,5, 20,6, 19,6, 19,7, 18,7, 17,7, END}; COORD cgov67[] = {14,5, 15,5, 16,5, 16,6, 16,7, 16,8, 17,8, END}; COORD cgov68[] = {18,2, 18,3, 18,4, 18,5, 18,6, 17,3, 17,2, END}; COORD cgov69[] = {14,3, 14,4, 15,4, 16,4, 17,4, 17,5, 17,6, END}; COORD cgov70[] = {20,1, 20,2, 21,2, 21,3, 21,4, 20,4, 19,4, END}; COORD cgov71[] = {20,8, 20,7, 21,7, 21,8, 22,8, 22,9, 21,9, END}; COORD cgov72[] = {15,7, 15,8, 16,9, 16,10, 17,9, 18,9, 18,8, END}; COORD cgov73[] = {20,0, 19,0, 18,0, 19,1, 19,2, 19,3, 20,3, END}; COORD cgov74[] = {14,1, 14,0, 15,0, 16,0, 17,0, 17,1, 18,1, END}; COORD cgov75[] = {14,10, 14,11, 15,11, 16,11, 17,11, 17,10, 18,10, END}; COORD cgov76[] = {15,6, 14,6, 14,7, 14,8, 14,9, 15,9, 15,10, END}; COORD cgov77[] = {15,1, 16,1, 16,2, 16,3, 15,3, 15,2, 14,2, END}; COORD cgov78[] = {23,5, 23,4, 22,4, 21,5, 21,6, 22,7, 23,7, END}; COORD cgov79[] = {23,8, 24,8, 25,8, 24,7, 23,6, 22,5, 22,6, END}; COORD cgov80[] = {19,9, 19,8, 20,9, 19,10, 18,11, 19,11, 20,11, END}; COORD cgov81[] = {21,1, 22,1, 23,1, 23,2, 23,3, 22,3, 22,2, END}; COORD cgov82[] = {23,11, 24,11, 24,10, 24,9, 25,9, 25,10, 25,11, END}; COORD cgov83[] = {24,4, 25,4, 25,5, 24,5, 25,6, 24,6, 25,7, END}; COORD cgov84[] = {24,1, 25,1, 24,2, 24,3, 25,2, 25,3, 26,4, END}; COORD cgov85[] = {26,5, 26,6, 26,7, 26,8, 26,9, 26,10, 26,11, END}; COORD cgov86[] = {23,0, 24,0, 25,0, 26,0, 26,1, 26,2, 26,3, END}; COORD cgov87[] = {20,10, 21,10, 21,11, 22,11, 22,10, 23,10, 23,9, END}; COORD cgov88[] = { 0,13, 0,14, 1,13, 2,14, 2,15, 1,15, 1,14, END}; COORD cgov89[] = { 2,23, 1,22, 1,21, 0,22, 0,23, 0,24, 1,23, END}; COORD cgov90[] = { 0,16, 0,17, 0,18, 1,18, 1,19, 0,19, 0,20, END}; COORD cgov91[] = { 0,21, 1,20, 2,19, 2,20, 2,21, 3,21, 2,22, END}; RULE gov1 = {cgov1, lair1, ogov}; RULE gov2 = {cgov2, lair1, ogov}; RULE gov3 = {cgov3, lair1, ogov}; RULE gov4 = {cgov4, lair2, ogov}; RULE gov5 = {cgov5, lair2, ogov}; RULE gov6 = {cgov6, lair2, ogov}; RULE gov7 = {cgov7, lair3, ogov}; RULE gov8 = {cgov8, lair3, ogov}; RULE gov9 = {cgov9, lair3, ogov}; RULE gov10 = {cgov10, lair4, ogov}; RULE gov11 = {cgov11, lair4, ogov}; RULE gov12 = {cgov12, lair4, ogov}; RULE gov13 = {cgov13, lair5, ogov}; RULE gov14 = {cgov14, lair5, ogov}; RULE gov15 = {cgov15, lair5, ogov}; RULE gov16 = {cgov16, lair6, ogov}; RULE gov17 = {cgov17, lair6, ogov}; RULE gov18 = {cgov18, lair6, ogov}; RULE gov19 = {cgov19, lair7, ogov}; RULE gov20 = {cgov20, lair7, ogov}; RULE gov21 = {cgov21, lair7, ogov}; RULE gov22 = {cgov22, lair8, ogov}; RULE gov23 = {cgov23, lair8, ogov}; RULE gov24 = {cgov24, lair8, ogov}; RULE gov25 = {cgov25, lair9, ogov}; RULE gov26 = {cgov26, lair9, ogov}; RULE gov27 = {cgov27, lair9, ogov}; RULE gov28 = {cgov28, lair10, ogov}; RULE gov29 = {cgov29, lair10, ogov}; RULE gov30 = {cgov30, lair10, ogov}; RULE gov31 = {cgov31, lair11, ogov}; RULE gov32 = {cgov32, lair11, ogov}; RULE gov33 = {cgov33, lair11, ogov}; RULE gov34 = {cgov34, lair12, ogov}; RULE gov35 = {cgov35, lair12, ogov}; RULE gov36 = {cgov36, lair12, ogov}; RULE gov37 = {cgov37, lair13, ogov}; RULE gov38 = {cgov38, lair13, ogov}; RULE gov39 = {cgov39, lair13, ogov}; RULE gov40 = {cgov40, lair14, ogov}; RULE gov41 = {cgov41, lair14, ogov}; RULE gov42 = {cgov42, lair14, ogov}; RULE gov43 = {cgov43, lair15, ogov}; RULE gov44 = {cgov44, lair15, ogov}; RULE gov45 = {cgov45, lair15, ogov}; RULE gov46 = {cgov46, lair16, ogov}; RULE gov47 = {cgov47, lair16, ogov}; RULE gov48 = {cgov48, lair16, ogov}; RULE gov49 = {cgov49, lair17, ogov}; RULE gov50 = {cgov50, lair17, ogov}; RULE gov51 = {cgov51, lair17, ogov}; RULE gov52 = {cgov52, lair18, ogov}; RULE gov53 = {cgov53, lair18, ogov}; RULE gov54 = {cgov54, lair18, ogov}; RULE gov55 = {cgov55, lair19, ogov}; RULE gov56 = {cgov56, lair19, ogov}; RULE gov57 = {cgov57, lair19, ogov}; RULE gov58 = {cgov58, lair20, ogov}; RULE gov59 = {cgov59, lair20, ogov}; RULE gov60 = {cgov60, lair20, ogov}; RULE gov61 = {cgov61, lair21, ogov}; RULE gov62 = {cgov62, lair21, ogov}; RULE gov63 = {cgov63, lair21, ogov}; RULE gov64 = {cgov64, lair22, ogov}; RULE gov65 = {cgov65, lair22, ogov}; RULE gov66 = {cgov66, lair22, ogov}; RULE gov67 = {cgov67, lair23, ogov}; RULE gov68 = {cgov68, lair23, ogov}; RULE gov69 = {cgov69, lair23, ogov}; RULE gov70 = {cgov70, lair24, ogov}; RULE gov71 = {cgov71, lair24, ogov}; RULE gov72 = {cgov72, lair24, ogov}; RULE gov73 = {cgov73, lair25, ogov}; RULE gov74 = {cgov74, lair25, ogov}; RULE gov75 = {cgov75, lair25, ogov}; RULE gov76 = {cgov76, lair26, ogov}; RULE gov77 = {cgov77, lair26, ogov}; RULE gov78 = {cgov78, lair26, ogov}; RULE gov79 = {cgov79, lair27, ogov}; RULE gov80 = {cgov80, lair27, ogov}; RULE gov81 = {cgov81, lair27, ogov}; RULE gov82 = {cgov82, lair28, ogov}; RULE gov83 = {cgov83, lair28, ogov}; RULE gov84 = {cgov84, lair28, ogov}; RULE gov85 = {cgov85, lair29, ogov}; RULE gov86 = {cgov86, lair29, ogov}; RULE gov87 = {cgov87, lair29, ogov}; RULE gov88 = {cgov88, lair30, ogov}; RULE gov89 = {cgov89, lair30, ogov}; RULE gov90 = {cgov90, lair30, ogov}; RULE gov91 = {cgov91, lair30, ogov}; COORD correction[] = { 14,0,14,0,14,0,14,0,14,0,14,0,14,0,14,0,14,0,14,0,14,0,14,0,14,0,14,0,14,0, 0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13, 0,0, /* Lexarph */ 0,0, /* Comanan */ 0,0, /* Tabitom */ 14,0,14,0, 0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13,0,-13, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,-1, /* PARAOAN , use 14,0 for sigil-derived name */ -14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13, -14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13,-14,13, 14,0,14,0,14,0,14,0 }; COORD pcorrection[] = { /* used only for Paraoan/Paoaoan */ 0,-13, 0,-13, -14,13, -14,13, 0,0, 0,0, 14,0 }; /********************************************************************* * MAPS * * DESCRIPTION: arrays of pointers to extraction rules for Enochian * Angelic names * * NOTES: * *********************************************************************/ RULE *nog_map[] = { /* 3,4 & 5-fold Holy Names */ &nog_3, &nog_4, &nog_5, NULL }; RULE *kin_map[] = { /* Elemental King */ &king, NULL }; RULE *sen_map[] = { /* Seniors */ &sen_1, &sen_2, &sen_3, &sen_4, &sen_5, &sen_6, NULL }; RULE *inv_map[] = { /* Invoking Names */ &inv_a, &inv_w, &inv_e, &inv_f, NULL }; RULE *com_map[] = { /* Commanding Names */ &com_a, &com_w, &com_e, &com_f, NULL }; RULE *les_map[] = { /* Lesser Angelic Names */ &le1_a, &le2_a, &le3_a, &le4_a, &le1_w, &le2_w, &le3_w, &le4_w, &le1_e, &le2_e, &le3_e, &le4_e, &le1_f, &le2_f, &le3_f, &le4_f, NULL }; RULE *cac_map[] = { /* Cacodaemonic Names */ &ca1_a, &ca2_a, &ca3_a, &ca4_a, &ca1_w, &ca2_w, &ca3_w, &ca4_w, &ca1_e, &ca2_e, &ca3_e, &ca4_e, &ca1_f, &ca2_f, &ca3_f, &ca4_f, NULL }; RULE *arc_map[] = { /* Archangelic Names */ &arc_a, &arc_w, &arc_e, &arc_f, NULL }; RULE *ker_map[] = { /* Kerubic Angelic Names */ &ker_a1, &ker_a2, &ker_a3, &ker_a4, &ker_w1, &ker_w2, &ker_w3, &ker_w4, &ker_e1, &ker_e2, &ker_e3, &ker_e4, &ker_f1, &ker_f2, &ker_f3, &ker_f4, NULL }; RULE *gov_map[] = { /* Governors Names */ &gov1, &gov2, &gov3, &gov4, &gov5, &gov6, &gov7, &gov8, &gov9, &gov10, &gov11, &gov12, &gov13, &gov14, &gov15, &gov16, &gov17, &gov18, &gov19, &gov20, &gov21, &gov22, &gov23, &gov24, &gov25, &gov26, &gov27, &gov28, &gov29, &gov30, &gov31, &gov32, &gov33, &gov34, &gov35, &gov36, &gov37, &gov38, &gov39, &gov40, &gov41, &gov42, &gov43, &gov44, &gov45, &gov46, &gov47, &gov48, &gov49, &gov50, &gov51, &gov52, &gov53, &gov54, &gov55, &gov56, &gov57, &gov58, &gov59, &gov60, &gov61, &gov62, &gov63, &gov64, &gov65, &gov66, &gov67, &gov68, &gov69, &gov70, &gov71, &gov72, &gov73, &gov74, &gov75, &gov76, &gov77, &gov78, &gov79, &gov80, &gov81, &gov82, &gov83, &gov84, &gov85, &gov86, &gov87, &gov88, &gov89, &gov90, &gov91, NULL }; /********************************************************************* * OPTIONS * * DESCRIPTION: command-line options * * NOTES: * *********************************************************************/ static char filename[NAMELEN+1]; static char separator[SEPLEN+1] = {"\t"}; typedef enum { TABLE_OPT, TAB_OPT, TITLE_OPT, ALL_OPT, HOLY_OPT, KING_OPT, SENIOR_OPT, INVOKE_OPT, COMMAND_OPT, LESSER_OPT, ARCH_OPT, KERUB_OPT, CAC_OPT, GOV_OPT, GREAT_OPT, AIR_OPT, WATER_OPT, EARTH_OPT, FIRE_OPT, LOAD_OPT, UPPER_OPT, LOWER_OPT, ORG_OPT, DER_OPT, DIR_OPT, DIFF_OPT, SEP_OPT, HELP_OPT, LAST_OPT } COMMAND_ARG; static OPTION table_option = {"-table", NULL, 5, 0, FALSE, FALSE }; static OPTION tab_option = {"-tab", NULL, 3, 0, FALSE, FALSE }; static OPTION title_option = {"-title", NULL, 3, 0, FALSE, FALSE }; static OPTION all_option = {"-all", NULL, 3, 0, FALSE, FALSE }; static OPTION holy_option = {"-holy", NULL, 3, 0, FALSE, FALSE }; static OPTION king_option = {"-king", NULL, 3, 0, FALSE, FALSE }; static OPTION senior_option = {"-senior", NULL, 3, 0, FALSE, FALSE }; static OPTION invoke_option = {"-invoke", NULL, 3, 0, FALSE, FALSE }; static OPTION command_option = {"-command", NULL, 3, 0, FALSE, FALSE }; static OPTION lesser_option = {"-lesser", NULL, 3, 0, FALSE, FALSE }; static OPTION arch_option = {"-arch", NULL, 3, 0, FALSE, FALSE }; static OPTION kerub_option = {"-kerub", NULL, 3, 0, FALSE, FALSE }; static OPTION cac_option = {"-cac", NULL, 3, 0, FALSE, FALSE }; static OPTION gov_option = {"-gov", NULL, 3, 0, FALSE, FALSE }; static OPTION great_option = {"-great", NULL, 3, 0, FALSE, FALSE }; static OPTION air_option = {"-air", NULL, 3, 0, FALSE, FALSE }; static OPTION water_option = {"-water", NULL, 3, 0, FALSE, FALSE }; static OPTION earth_option = {"-earth", NULL, 3, 0, FALSE, FALSE }; static OPTION fire_option = {"-fire", NULL, 3, 0, FALSE, FALSE }; static OPTION load_option = {"-load", filename, 4, NAMELEN, TRUE, FALSE }; static OPTION upper_option = {"-upper", NULL, 2, 0, FALSE, FALSE }; static OPTION lower_option = {"-lower", NULL, 4, 0, FALSE, FALSE }; static OPTION org_option = {"-org", NULL, 2, 0, FALSE, FALSE }; static OPTION der_option = {"-der", NULL, 3, 0, FALSE, FALSE }; static OPTION dir_option = {"-dir", NULL, 4, 0, FALSE, FALSE }; static OPTION diff_option = {"-diff", NULL, 4, 0, FALSE, FALSE }; static OPTION sep_option = {"-separator", separator, 3, SEPLEN, TRUE, FALSE }; static OPTION help_option = {"-help", NULL, 2, 0, FALSE, FALSE }; static OPTION nul_option = {NULL, NULL, 0, 0, FALSE, FALSE }; static OPTION *parameter_array[] = { &table_option, &tab_option, &title_option, &all_option, &holy_option, &king_option, &senior_option, &invoke_option, &command_option, &lesser_option, &arch_option, &kerub_option, &cac_option, &gov_option, &great_option, &air_option, &water_option, &earth_option, &fire_option, &load_option, &upper_option, &lower_option, &org_option, &der_option, &dir_option, &diff_option, &sep_option, &help_option, &nul_option }; /********************************************************************* * GETOPTS * * DESCRIPTION: acquires and stores command-line options * * NOTES: * *********************************************************************/ static short getopts(int argc, char **argv) { short optind, a, args; for (args = 0, optind = 1;(optind < argc) && (argv[optind][0] == '-');optind++) { for (a = 0;parameter_array[a]->keyword;a++) { if (!strncmp(parameter_array[a]->keyword, argv[optind], parameter_array[a]->match_len) && (parameter_array[a]->present == FALSE) ) { if (parameter_array[a]->requires_parameter) { strncpy(parameter_array[a]->opt, argv[optind + 1], parameter_array[a]->copy_len); ++optind; } parameter_array[a]->present = TRUE; ++args; break; } } } return(args); } /********************************************************************* * GET ARG * * DESCRIPTION: returns a pointer to the specified option block * * NOTES: * *********************************************************************/ static OPTION * get_arg(COMMAND_ARG arg) { return(parameter_array[arg]); } /********************************************************************* * STRPAD * * DESCRIPTION: pads or truncates a string to the specified length * * NOTES: * *********************************************************************/ static char * strpad(char *wrk, short newlen) { short len; if ((len = strlen(wrk)) == newlen) return (wrk); else { if (len > newlen) len = newlen; else { while (len < newlen) wrk[len++] = ' '; } } wrk[len] = 0x00; return (wrk); } /********************************************************************* * EXTRACT NAME * * DESCRIPTION: extracts a name from the table using the specified * map, map entry index, and table index, and copies it * to bfr * * NOTES: * *********************************************************************/ static char * extract_name(short tabndx, RULE **map, short map_entry, char *bfr, char **table, BOOLEAN upper) { short j; for (j = 0;map[map_entry]->coord[j].row > -1;j++) { if (map[map_entry]->origin && (map[map_entry]->origin[j] == ABS)) { if (tablets.coord == osub_tablet) { if (correction[map_entry].row != -1) { bfr[j] = table[ map[map_entry]->coord[j].row + correction[map_entry].row] [ map[map_entry]->coord[j].column + correction[map_entry].column ]; if (j == 0) table[ map[map_entry]->coord[j].row + correction[map_entry].row] [ map[map_entry]->coord[j].column + correction[map_entry].column ] = toupper(bfr[j]); } else { bfr[j] = table[ map[map_entry]->coord[j].row + pcorrection[j].row] [ map[map_entry]->coord[j].column + pcorrection[j].column ]; if (j == 0) table[ map[map_entry]->coord[j].row + pcorrection[j].row] [ map[map_entry]->coord[j].column + pcorrection[j].column ] = toupper(bfr[j]); } } else { bfr[j] = table[ map[map_entry]->coord[j].row ] [ map[map_entry]->coord[j].column ]; if (j == 0) table[ map[map_entry]->coord[j].row ] [ map[map_entry]->coord[j].column ] = toupper(bfr[j]); } } else { if (map[map_entry]->origin && (map[map_entry]->origin[j] == ABS_HORZ)) { bfr[j] = table[ map[map_entry]->coord[j].row + tablets.coord[tabndx].row] [ map[map_entry]->coord[j].column ]; } else { bfr[j] = table[ map[map_entry]->coord[j].row + tablets.coord[tabndx].row ] [map[map_entry]->coord[j].column + tablets.coord[tabndx].column]; } } if (upper == -1) bfr[j] = tolower(bfr[j]); else { if (upper == 1) bfr[j] = toupper(bfr[j]); } } bfr[j] = 0; return(bfr); } /********************************************************************* * PRINT NAMES * * DESCRIPTION: prints, and optionally describes, all names associated * with the specified map and table index * * NOTES: * *********************************************************************/ static void print_names(BOOLEAN print_title, short tabndx, RULE **map, char **table, BOOLEAN upper) { short map_entry; char bfr[17]; char bfr2[17]; for (map_entry = 0;map[map_entry];map_entry++) { if (get_arg(DIFF_OPT)->present) { if (get_arg(ORG_OPT)->present || get_arg(DER_OPT)->present) tablets.coord = sub_tablet; if (get_arg(TAB_OPT)->present) strcat(extract_name(tabndx, map, map_entry, bfr, rtable, upper), "\t"); else strpad(extract_name(tabndx, map, map_entry, bfr, rtable, upper), 10); if (get_arg(ORG_OPT)->present || get_arg(DER_OPT)->present) tablets.coord = osub_tablet; if (get_arg(TAB_OPT)->present) strcat(extract_name(tabndx, map, map_entry, bfr2, table, upper), "\t"); else strpad(extract_name(tabndx, map, map_entry, bfr2, table, upper), 10); if (!strcmp(bfr, bfr2)) *bfr = ' '; } else { *bfr2 = 0x00; if (get_arg(TAB_OPT)->present) strcat(extract_name(tabndx, map, map_entry, bfr, table, upper), "\t"); else strpad(extract_name(tabndx, map, map_entry, bfr, table, upper), 10); } if (*bfr != ' ') { if (print_title) { if (tabndx >= 0) { if (map[map_entry]->label->sub_element != NO_ELEMENT) printf("%s%s%s, %s of %s\n", bfr, bfr2, strings.title[map[map_entry]->label->name], strings.sub_element[map[map_entry]->label->sub_element], strings.element[tablets.label[tabndx].element]); else { if (map[map_entry]->label->sphere != NO_SPHERE) printf("%s%s%s %s of %s\n", bfr, bfr2, strings.sphere[map[map_entry]->label->sphere], strings.title[map[map_entry]->label->name], strings.element[tablets.label[tabndx].element]); else printf("%s%s%s of %s\n", bfr, bfr2, strings.title[map[map_entry]->label->name], strings.element[tablets.label[tabndx].element]); } } else printf("%s%s%s %d of %s\n", bfr, bfr2, strings.title[map[map_entry]->label->name], map_entry + 1, strings.sphere[map[map_entry]->label->sphere]); } else printf("%s%s%s\n", bfr, bfr2, separator); } } } /********************************************************************* * PRINT TABLE * * DESCRIPTION: prints the elemental table given by tabndx * * NOTES: * *********************************************************************/ static void print_table(short tabndx, char **table, BOOLEAN upper) { short i, j; char bfr[32]; sprintf(bfr, "\nTablet of the %s\n", strings.element[tablets.label[tabndx].element]); puts(bfr); for (i = tablets.coord[tabndx].row;i < (tablets.coord[tabndx].row + 13);i++) { for (j = tablets.coord[tabndx].column;j < (tablets.coord[tabndx].column + 12);j++) { putchar(upper ? toupper(table[i][j]) : table[i][j]); putchar('\t'); } putchar('\n'); } putchar('\n'); } /********************************************************************* * EXTRACT * * DESCRIPTION: performs specified name extractions on the elemental * table given by tabndx * * NOTES: * *********************************************************************/ static void extract(short tabndx, char **table, BOOLEAN all, BOOLEAN print_title, BOOLEAN upper) { if (get_arg(TABLE_OPT)->present) print_table(tabndx, table, upper); if (all || get_arg(HOLY_OPT)->present) print_names(print_title, tabndx, nog_map, table, upper); if (all || get_arg(KING_OPT)->present) print_names(print_title, tabndx, kin_map, table, upper); if (all || get_arg(SENIOR_OPT)->present) print_names(print_title, tabndx, sen_map, table, upper); if (all || get_arg(INVOKE_OPT)->present) print_names(print_title, tabndx, inv_map, table, upper); if (all || get_arg(COMMAND_OPT)->present) print_names(print_title, tabndx, com_map, table, upper); if (all || get_arg(LESSER_OPT)->present) print_names(print_title, tabndx, les_map, table, upper); if (all || get_arg(ARCH_OPT)->present) print_names(print_title, tabndx, arc_map, table, upper); if (all || get_arg(KERUB_OPT)->present) print_names(print_title, tabndx, ker_map, table, upper); if (all || get_arg(CAC_OPT)->present) print_names(print_title, tabndx, cac_map, table, upper); } /********************************************************************* * LOAD TABLE * * DESCRIPTION: loads the reference Enochian Table from disk * * NOTES: * *********************************************************************/ static BOOLEAN load_table(void) { short i; FILE *fd; char *fn, bfr[BFRSIZ+1]; BOOLEAN status; status = FALSE; if ((fd = fopen((fn = get_arg(LOAD_OPT)->opt), "r")) != NULL) { status = TRUE; for (i = 0;i < 27;i++) { fgets(bfr, BFRSIZ, fd); strpad(bfr, 25); strncpy(ltable[i], bfr, 25); } fclose(fd); fprintf(stderr, "*** Loaded Enochian Tablets from %s ***\n", fn); } else fprintf(stderr, "*** Unable to Load Enochian Tablets from %s ***\n", fn); return(status); } /********************************************************************* * MAIN * * DESCRIPTION: program main entry point * * NOTES: * *********************************************************************/ main(int argc, char **argv) { BOOLEAN status, great, all, print_title, upper; char **table; int x; getopts(argc, argv); all = get_arg(ALL_OPT)->present; print_title = get_arg(TITLE_OPT)->present; great = get_arg(GREAT_OPT)->present; if (get_arg(UPPER_OPT)->present) upper = 1; else if (get_arg(LOWER_OPT)->present) upper = -1; else upper = 0; if (!get_arg(HELP_OPT)->present) { if (get_arg(LOAD_OPT)->present) { if (load_table() == TRUE) { table = (char **)ltable; if (get_arg(ORG_OPT)->present) tablets.coord = osub_tablet; } else table = rtable; } else { if (get_arg(DER_OPT)->present) { table = dtable; tablets.coord = osub_tablet; } else { if (get_arg(ORG_OPT)->present) { table = otable; tablets.coord = osub_tablet; } else table = rtable; } } if (get_arg(DIR_OPT)->present) { strings.element = direction; strings.sphere = dsphere; } if (great || get_arg(AIR_OPT)->present) extract(0, table, all, print_title, upper); if (great || get_arg(WATER_OPT)->present) extract(1, table, all, print_title, upper); if (great || get_arg(EARTH_OPT)->present) extract(2, table, all, print_title, upper); if (great || get_arg(FIRE_OPT)->present) extract(3, table, all, print_title, upper); if (get_arg(GOV_OPT)->present) { print_names(print_title, -1, gov_map, table, upper); if (get_arg(TABLE_OPT)->present) for (x = 0; x<27; x++) printf("%s\n", table[x]); } } else { fprintf(stderr, "Usage: %s [options...]\n", argv[0]); fprintf(stderr, "Options: -tabl[e] - prints the selected Tablet\n"); fprintf(stderr, "Options: -ta[b] - prints tab after names\n"); fprintf(stderr, "Options: -ti[tle] - prints titles of extracted Names\n"); fprintf(stderr, "Options: -se[parator] {string} - print before end of line\n"); fprintf(stderr, "Options: -u[ppercase] - prints all names in upper case\n"); fprintf(stderr, "Options: -low[ercase] - prints all names in lower case\n"); fprintf(stderr, "Options: -o[riginal] - use original tablet arrangement\n"); fprintf(stderr, "Options: -de[rived] - use Table derived from Sloane 3191\n"); fprintf(stderr, "Options: -di[rection] - use directions instead of elements\n"); fprintf(stderr, "Options: -loa[d] {file} - load Tablets from file\n"); fprintf(stderr, "Options: -dif[ference] - only print the names which differ\n"); fprintf(stderr, " - between the Recensa and another\n"); fprintf(stderr, "Options: -gr[eat] - extracts Names from all Tablets\n"); fprintf(stderr, "Options: -ai[r] - extracts Names from the Air Tablet\n"); fprintf(stderr, "Options: -wa[ter] - extracts Names from the Water Tablet\n"); fprintf(stderr, "Options: -ea[rth] - extracts Names from the Earth Tablet\n"); fprintf(stderr, "Options: -fi[re] - extracts Names from the Fire Tablet\n"); fprintf(stderr, "Options: -al[l] - extracts all Names\n"); fprintf(stderr, "Options: -ho[ly] - extracts 3/4/5 letter Names\n"); fprintf(stderr, "Options: -ki[ng] - extracts Elemental King Names\n"); fprintf(stderr, "Options: -se[nior] - extracts Elemental Senior Names\n"); fprintf(stderr, "Options: -in[voke] - extracts Invoking Angelic Names\n"); fprintf(stderr, "Options: -co[mmand] - extracts Commanding Angelic Names\n"); fprintf(stderr, "Options: -le[sser] - extracts Lesser Angelic Names\n"); fprintf(stderr, "Options: -ke[rub] - extracts Kerubic Angelic Names\n"); fprintf(stderr, "Options: -ca[codaemons] - extracts Cacodaemonic Names\n"); fprintf(stderr, "Options: -go[vernors] - extracts Governors Names\n"); fprintf(stderr, "Options: -h[elp] - prints this message\n"); fprintf(stderr, "Example: %s -load wombat -air -seniors\n", argv[0]); } return(0); }