-- Need KIND_ENTRY and IO -- Need to modify TRANS with TEXT_IO; with DIRECT_IO; with INFLECTIONS_PACKAGE; use INFLECTIONS_PACKAGE; package DICTIONARY_PACKAGE is use TEXT_IO; ZZZ_STEM : constant STEM_TYPE := "zzz" & (4..MAX_STEM_SIZE => ' '); type STEMS_TYPE is array (STEM_KEY_TYPE range 1..4) of STEM_TYPE; NULL_STEMS_TYPE : constant STEMS_TYPE := (others => NULL_STEM_TYPE); type DICTIONARY_KIND is (X, -- null ADDONS, -- For FIXES XXX, -- TRICKS YYY, -- Syncope NNN, -- Unknown Name RRR, -- Roman Numerals PPP, -- Compounds GENERAL, SPECIAL, LOCAL, UNIQUE); package DICTIONARY_KIND_IO is new TEXT_IO.ENUMERATION_IO(DICTIONARY_KIND); EXT : array (DICTIONARY_KIND) of STRING(1..3) := ("X ", "ADD", "XXX", "YYY", "NNN", "RRR", "PPP", "GEN", "SPE", "LOC", "UNI"); DEFAULT_DICTIONARY_KIND : DICTIONARY_KIND := X; DICTIONARY_AVAILABLE : array (DICTIONARY_KIND) of BOOLEAN := (FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, -- don't SEARCH FALSE, FALSE, FALSE, FALSE); -- Start out as FALSE and set to TRUE when the DICT is loaded type AREA_TYPE is ( X, -- All or none A, -- Agriculture, Flora, Fauna, Land, Equipment, Rural B, -- Biological, Medical, Body Parts D, -- Drama, Music, Theater, Art, Painting, Sculpture E, -- Ecclesiastic, Biblical, Religious G, -- Grammar, Retoric, Logic, Literature, Schools L, -- Legal, Government, Tax, Financial, Political, Titles P, -- Poetic S, -- Science, Philosophy, Mathematics, Units/Measures T, -- Technical, Architecture, Topography, Surveying W, -- War, Military, Naval, Ships, Armor Y -- Mythology ); package AREA_TYPE_IO is new TEXT_IO.ENUMERATION_IO(AREA_TYPE); type GEO_TYPE is ( X, -- All or none A, -- Africa B, -- Britian C, -- China D, -- Scandinavia E, -- Egypt F, -- France, Gaul G, -- Germany H, -- Greece I, -- Italy, Rome J, -- India K, -- Balkans N, -- Netherlands P, -- Persia Q, -- Near East R, -- Russia S, -- Spain, Iberia U -- Eastern Europe ); package GEO_TYPE_IO is new TEXT_IO.ENUMERATION_IO(GEO_TYPE); type SOURCE_TYPE is ( X, -- General or unknown or too common to say A, B, -- C.H.Beeson, A Primer of Medieval Latin, 1925 (Bee) C, -- Charles Beard, Cassell's Latin Dictionary 1892 (Cas) D, -- J.N.Adams, Latin Sexual Vocabulary, 1982 (Sex) E, -- L.F.Stelten, Dictionary of Eccles. Latin, 1995 (Ecc) F, -- Roy J. Deferrari, Dictionary of St. Thomas Aquinas, 1960 (DeF) G, -- Gildersleeve + Lodge, Latin Grammar 1895 (G+L) H, -- Collatinus Dictionary by Yves Ouvrard I, -- Leverett, F.P., Lexicon of the Latin Language, Boston 1845 J, -- Bracton: De Legibus Et Consuetudinibus Angliæ K, -- Calepinus Novus, modern Latin, by Guy Licoppe (Cal) L, -- Lewis, C.S., Elementary Latin Dictionary 1891 M, -- Latham, Revised Medieval Word List, 1980 (Latham) N, -- Lynn Nelson, Wordlist (Nel) O, -- Oxford Latin Dictionary, 1982 (OLD) P, -- Souter, A Glossary of Later Latin to 600 A.D., Oxford 1949 (Souter) Q, -- Other, cited or unspecified dictionaries R, -- Plater + White, A Grammar of the Vulgate, Oxford 1926 (Plater) S, -- Lewis and Short, A Latin Dictionary, 1879 (L+S) T, -- Found in a translation -- no dictionary reference U, -- V, -- Vademecum in opus Saxonis - Franz Blatt (Saxo) W, -- My personal guess, mostly obvious extrapolation (Whitaker or W) Y, -- Temp special code Z -- Sent by user -- no dictionary reference -- Mostly John White of Blitz Latin -- Consulted but used only indirectly -- Liddell + Scott Greek-English Lexicon (Lid) -- Oxford English Dictionary 2002 (OED) -- Consulted but used only occasionally, seperately referenced -- D.A. Kidd, Collins Latin Gem Dictionary, 1957 (Col) -- Allen + Greenough, New Latin Grammar, 1888 (A+G) -- Harrington/Pucci/Elliott, Medieval Latin 2nd Ed 1997 (Harr) -- C.C./C.L. Scanlon Latin Grammar/Second Latin, TAN 1976 (SCANLON) -- W. M. Lindsay, Short Historical Latin Grammar, 1895 (Lindsay) -- Du Cange -- Oxford English Dictionary (OED) -- Note that the WORDS dictionary is not just a copy of source info, but the -- indicated SOURCE is a main reference/check point used to derive the entry ); package SOURCE_TYPE_IO is new TEXT_IO.ENUMERATION_IO(SOURCE_TYPE); type KIND_ENTRY(POFS : PART_OF_SPEECH_TYPE := X) is record case POFS is when N => N_KIND : NOUN_KIND_TYPE := X; when PRON => PRON_KIND : PRONOUN_KIND_TYPE := X; when PACK => PACK_KIND : PRONOUN_KIND_TYPE := X; when ADJ => null; when NUM => NUM_VALUE : NUMERAL_VALUE_TYPE := 0; when V => V_KIND : VERB_KIND_TYPE := X; when VPAR => VPAR_KIND : VERB_KIND_TYPE := X; when SUPINE => SUPINE_KIND : VERB_KIND_TYPE := X; when others => null; end case; end record; package KIND_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; PS : in PART_OF_SPEECH_TYPE; P : out KIND_ENTRY); procedure GET(PS : in PART_OF_SPEECH_TYPE; P : out KIND_ENTRY); procedure PUT(F : in FILE_TYPE; PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY); procedure PUT(PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY); procedure GET(S : in STRING; PS : in PART_OF_SPEECH_TYPE; P : out KIND_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY); end KIND_ENTRY_IO; NULL_KIND_ENTRY : KIND_ENTRY; type TRANSLATION_RECORD is record AGE : AGE_TYPE := X; AREA : AREA_TYPE := X; GEO : GEO_TYPE := X; FREQ : FREQUENCY_TYPE := X; SOURCE : SOURCE_TYPE := X; end record; NULL_TRANSLATION_RECORD : TRANSLATION_RECORD; package TRANSLATION_RECORD_IO is DEFAULT_WIDTH : TEXT_IO.FIELD; procedure GET(F : in TEXT_IO.FILE_TYPE; TR : out TRANSLATION_RECORD); procedure GET(TR : out TRANSLATION_RECORD); procedure PUT(F : in TEXT_IO.FILE_TYPE; TR : in TRANSLATION_RECORD); procedure PUT(TR : in TRANSLATION_RECORD); procedure GET(S : in STRING; TR : out TRANSLATION_RECORD; LAST : out INTEGER); procedure PUT(S : out STRING; TR : in TRANSLATION_RECORD); end TRANSLATION_RECORD_IO; type NOUN_ENTRY is record DECL : DECN_RECORD := (0, 0); GENDER : GENDER_TYPE := X; KIND : NOUN_KIND_TYPE := X; end record; package NOUN_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; N : out NOUN_ENTRY); procedure GET(N : out NOUN_ENTRY); procedure PUT(F : in FILE_TYPE; N : in NOUN_ENTRY); procedure PUT(N : in NOUN_ENTRY); procedure GET(S : in STRING; N : out NOUN_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; N : in NOUN_ENTRY); end NOUN_ENTRY_IO; type PRONOUN_ENTRY is record DECL : DECN_RECORD := (0,0); KIND : PRONOUN_KIND_TYPE := X; end record; package PRONOUN_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; P : out PRONOUN_ENTRY); procedure GET(P : out PRONOUN_ENTRY); procedure PUT(F : in FILE_TYPE; P : in PRONOUN_ENTRY); procedure PUT(P : in PRONOUN_ENTRY); procedure GET(S : in STRING; P : out PRONOUN_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; P : in PRONOUN_ENTRY); end PRONOUN_ENTRY_IO; type PROPACK_ENTRY is record DECL : DECN_RECORD := (0,0); KIND : PRONOUN_KIND_TYPE := X; end record; package PROPACK_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; P : out PROPACK_ENTRY); procedure GET(P : out PROPACK_ENTRY); procedure PUT(F : in FILE_TYPE; P : in PROPACK_ENTRY); procedure PUT(P : in PROPACK_ENTRY); procedure GET(S : in STRING; P : out PROPACK_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; P : in PROPACK_ENTRY); end PROPACK_ENTRY_IO; type ADJECTIVE_ENTRY is record DECL : DECN_RECORD := (0, 0); CO : COMPARISON_TYPE := X; end record; package ADJECTIVE_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; A : out ADJECTIVE_ENTRY); procedure GET(A : out ADJECTIVE_ENTRY); procedure PUT(F : in FILE_TYPE; A : in ADJECTIVE_ENTRY); procedure PUT(A : in ADJECTIVE_ENTRY); procedure GET(S : in STRING; A : out ADJECTIVE_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; A : in ADJECTIVE_ENTRY); end ADJECTIVE_ENTRY_IO; type NUMERAL_ENTRY is record DECL : DECN_RECORD := (0,0); SORT : NUMERAL_SORT_TYPE := X; VALUE : NUMERAL_VALUE_TYPE := 0; end record; package NUMERAL_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; NUM : out NUMERAL_ENTRY); procedure GET(NUM : out NUMERAL_ENTRY); procedure PUT(F : in FILE_TYPE; NUM : in NUMERAL_ENTRY); procedure PUT(NUM : in NUMERAL_ENTRY); procedure GET(S : in STRING; NUM : out NUMERAL_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; NUM : in NUMERAL_ENTRY); end NUMERAL_ENTRY_IO; type ADVERB_ENTRY is record CO : COMPARISON_TYPE := X; end record; package ADVERB_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; A : out ADVERB_ENTRY); procedure GET(A : out ADVERB_ENTRY); procedure PUT(F : in FILE_TYPE; A : in ADVERB_ENTRY); procedure PUT(A : in ADVERB_ENTRY); procedure GET(S : in STRING; A : out ADVERB_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; A : in ADVERB_ENTRY); end ADVERB_ENTRY_IO; type VERB_ENTRY is record CON : DECN_RECORD := (0,0); KIND : VERB_KIND_TYPE := X; end record; package VERB_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; V : out VERB_ENTRY); procedure GET(V : out VERB_ENTRY); procedure PUT(F : in FILE_TYPE; V : in VERB_ENTRY); procedure PUT(V : in VERB_ENTRY); procedure GET(S : in STRING; V : out VERB_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; V : in VERB_ENTRY); end VERB_ENTRY_IO; type PREPOSITION_ENTRY is record OBJ : CASE_TYPE := X; end record; package PREPOSITION_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; P : out PREPOSITION_ENTRY); procedure GET(P : out PREPOSITION_ENTRY); procedure PUT(F : in FILE_TYPE; P : in PREPOSITION_ENTRY); procedure PUT(P : in PREPOSITION_ENTRY); procedure GET(S : in STRING; P : out PREPOSITION_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; P : in PREPOSITION_ENTRY); end PREPOSITION_ENTRY_IO; type CONJUNCTION_ENTRY is record null; end record; package CONJUNCTION_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; C : out CONJUNCTION_ENTRY); procedure GET(C : out CONJUNCTION_ENTRY); procedure PUT(F : in FILE_TYPE; C : in CONJUNCTION_ENTRY); procedure PUT(C : in CONJUNCTION_ENTRY); procedure GET(S : in STRING; C : out CONJUNCTION_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; C : in CONJUNCTION_ENTRY); end CONJUNCTION_ENTRY_IO; type INTERJECTION_ENTRY is record null; end record; package INTERJECTION_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; I : out INTERJECTION_ENTRY); procedure GET(I : out INTERJECTION_ENTRY); procedure PUT(F : in FILE_TYPE; I : in INTERJECTION_ENTRY); procedure PUT(I : in INTERJECTION_ENTRY); procedure GET(S : in STRING; I : out INTERJECTION_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; I : in INTERJECTION_ENTRY); end INTERJECTION_ENTRY_IO; type PART_ENTRY(POFS : PART_OF_SPEECH_TYPE := X) is record case POFS is when N => N : NOUN_ENTRY; when PRON => PRON : PRONOUN_ENTRY; when PACK => PACK : PROPACK_ENTRY; when ADJ => ADJ : ADJECTIVE_ENTRY; when NUM => NUM : NUMERAL_ENTRY; when ADV => ADV : ADVERB_ENTRY; when V => V : VERB_ENTRY; when VPAR => null; -- There will be no VPAR dictionary entries when SUPINE => null; -- There will be no SUPINE dictionary entries when PREP => PREP : PREPOSITION_ENTRY; when CONJ => CONJ : CONJUNCTION_ENTRY; when INTERJ => INTERJ : INTERJECTION_ENTRY; when others => null; end case; end record; package PART_ENTRY_IO is DEFAULT_WIDTH : NATURAL; procedure GET(F : in FILE_TYPE; P : out PART_ENTRY); procedure GET(P : out PART_ENTRY); procedure PUT(F : in FILE_TYPE; P : in PART_ENTRY); procedure PUT(P : in PART_ENTRY); procedure GET(S : in STRING; P : out PART_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; P : in PART_ENTRY); end PART_ENTRY_IO; NULL_PART_ENTRY : PART_ENTRY; function "<" (LEFT, RIGHT : PART_ENTRY) return BOOLEAN; type DICTIONARY_ENTRY is record STEMS : STEMS_TYPE := NULL_STEMS_TYPE; PART : PART_ENTRY := NULL_PART_ENTRY; -- KIND : KIND_ENTRY := NULL_KIND_ENTRY; TRAN : TRANSLATION_RECORD := NULL_TRANSLATION_RECORD; MEAN : MEANING_TYPE := NULL_MEANING_TYPE; end record; package DICTIONARY_ENTRY_IO is DEFAULT_WIDTH : FIELD; procedure GET(F : in FILE_TYPE; D : out DICTIONARY_ENTRY); procedure GET(D : out DICTIONARY_ENTRY); procedure PUT(F : in FILE_TYPE; D : in DICTIONARY_ENTRY); procedure PUT(D : in DICTIONARY_ENTRY); procedure GET(S : in STRING; D : out DICTIONARY_ENTRY; LAST : out INTEGER); procedure PUT(S : out STRING; D : in DICTIONARY_ENTRY); end DICTIONARY_ENTRY_IO; NULL_DICTIONARY_ENTRY : DICTIONARY_ENTRY; package DICT_IO is new DIRECT_IO(DICTIONARY_ENTRY); DICT_FILE : array (DICTIONARY_KIND) of DICT_IO.FILE_TYPE; package MNPC_IO is new TEXT_IO.INTEGER_IO(DICT_IO.COUNT); subtype MNPC_TYPE is DICT_IO.COUNT; NULL_MNPC : DICT_IO.COUNT := DICT_IO.COUNT'FIRST; type PARSE_RECORD is record STEM : STEM_TYPE := NULL_STEM_TYPE; IR : INFLECTION_RECORD := NULL_INFLECTION_RECORD; D_K : DICTIONARY_KIND := DEFAULT_DICTIONARY_KIND; MNPC : DICT_IO.COUNT := NULL_MNPC; end record; NULL_PARSE_RECORD : PARSE_RECORD; package PARSE_RECORD_IO is DEFAULT_WIDTH : TEXT_IO.FIELD; procedure GET(F : in TEXT_IO.FILE_TYPE; PR : out PARSE_RECORD); procedure GET(PR : out PARSE_RECORD); procedure PUT(F : in TEXT_IO.FILE_TYPE; PR : in PARSE_RECORD); procedure PUT(PR : in PARSE_RECORD); procedure GET(S : in STRING; PR : out PARSE_RECORD; LAST : out INTEGER); procedure PUT(S : out STRING; PR : in PARSE_RECORD); end PARSE_RECORD_IO; type PARSE_ARRAY is array (INTEGER range <>) of PARSE_RECORD; function NUMBER_OF_STEMS(P : PART_OF_SPEECH_TYPE) return STEM_KEY_TYPE; function "<=" (LEFT, RIGHT : AREA_TYPE) return BOOLEAN; end DICTIONARY_PACKAGE;