1-- Need KIND_ENTRY and IO 2-- Need to modify TRANS 3 with TEXT_IO; 4 with DIRECT_IO; 5 with INFLECTIONS_PACKAGE; use INFLECTIONS_PACKAGE; 6 package DICTIONARY_PACKAGE is 7 use TEXT_IO; 8 9 ZZZ_STEM : constant STEM_TYPE := "zzz" & (4..MAX_STEM_SIZE => ' '); 10 type STEMS_TYPE is array (STEM_KEY_TYPE range 1..4) of STEM_TYPE; 11 NULL_STEMS_TYPE : constant STEMS_TYPE := (others => NULL_STEM_TYPE); 12 13 14 type DICTIONARY_KIND is (X, -- null 15 ADDONS, -- For FIXES 16 XXX, -- TRICKS 17 YYY, -- Syncope 18 NNN, -- Unknown Name 19 RRR, -- Roman Numerals 20 PPP, -- Compounds 21 GENERAL, SPECIAL, LOCAL, UNIQUE); 22 23 package DICTIONARY_KIND_IO is new TEXT_IO.ENUMERATION_IO(DICTIONARY_KIND); 24 25 EXT : array (DICTIONARY_KIND) of STRING(1..3) := ("X ", "ADD", "XXX", "YYY", 26 "NNN", "RRR", "PPP", 27 "GEN", "SPE", "LOC", 28 "UNI"); 29 30 DEFAULT_DICTIONARY_KIND : DICTIONARY_KIND := X; 31 32 DICTIONARY_AVAILABLE : array (DICTIONARY_KIND) of BOOLEAN := (FALSE, 33 FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, -- don't SEARCH 34 FALSE, FALSE, FALSE, FALSE); 35 -- Start out as FALSE and set to TRUE when the DICT is loaded 36 37 type AREA_TYPE is ( 38 X, -- All or none 39 A, -- Agriculture, Flora, Fauna, Land, Equipment, Rural 40 B, -- Biological, Medical, Body Parts 41 D, -- Drama, Music, Theater, Art, Painting, Sculpture 42 E, -- Ecclesiastic, Biblical, Religious 43 G, -- Grammar, Retoric, Logic, Literature, Schools 44 L, -- Legal, Government, Tax, Financial, Political, Titles 45 P, -- Poetic 46 S, -- Science, Philosophy, Mathematics, Units/Measures 47 T, -- Technical, Architecture, Topography, Surveying 48 W, -- War, Military, Naval, Ships, Armor 49 Y -- Mythology 50 ); 51 52 package AREA_TYPE_IO is new TEXT_IO.ENUMERATION_IO(AREA_TYPE); 53 54 type GEO_TYPE is ( 55 X, -- All or none 56 A, -- Africa 57 B, -- Britian 58 C, -- China 59 D, -- Scandinavia 60 E, -- Egypt 61 F, -- France, Gaul 62 G, -- Germany 63 H, -- Greece 64 I, -- Italy, Rome 65 J, -- India 66 K, -- Balkans 67 N, -- Netherlands 68 P, -- Persia 69 Q, -- Near East 70 R, -- Russia 71 S, -- Spain, Iberia 72 U -- Eastern Europe 73 ); 74 75 package GEO_TYPE_IO is new TEXT_IO.ENUMERATION_IO(GEO_TYPE); 76 77 type SOURCE_TYPE is ( 78 X, -- General or unknown or too common to say 79 A, 80 B, -- C.H.Beeson, A Primer of Medieval Latin, 1925 (Bee) 81 C, -- Charles Beard, Cassell's Latin Dictionary 1892 (Cas) 82 D, -- J.N.Adams, Latin Sexual Vocabulary, 1982 (Sex) 83 E, -- L.F.Stelten, Dictionary of Eccles. Latin, 1995 (Ecc) 84 F, -- Roy J. Deferrari, Dictionary of St. Thomas Aquinas, 1960 (DeF) 85 G, -- Gildersleeve + Lodge, Latin Grammar 1895 (G+L) 86 H, -- Collatinus Dictionary by Yves Ouvrard 87 I, -- Leverett, F.P., Lexicon of the Latin Language, Boston 1845 88 J, -- Bracton: De Legibus Et Consuetudinibus Angli� 89 K, -- Calepinus Novus, modern Latin, by Guy Licoppe (Cal) 90 L, -- Lewis, C.S., Elementary Latin Dictionary 1891 91 M, -- Latham, Revised Medieval Word List, 1980 (Latham) 92 N, -- Lynn Nelson, Wordlist (Nel) 93 O, -- Oxford Latin Dictionary, 1982 (OLD) 94 P, -- Souter, A Glossary of Later Latin to 600 A.D., Oxford 1949 (Souter) 95 Q, -- Other, cited or unspecified dictionaries 96 R, -- Plater + White, A Grammar of the Vulgate, Oxford 1926 (Plater) 97 S, -- Lewis and Short, A Latin Dictionary, 1879 (L+S) 98 T, -- Found in a translation -- no dictionary reference 99 U, -- 100 V, -- Vademecum in opus Saxonis - Franz Blatt (Saxo) 101 W, -- My personal guess, mostly obvious extrapolation (Whitaker or W) 102 Y, -- Temp special code 103 Z -- Sent by user -- no dictionary reference 104 -- Mostly John White of Blitz Latin 105 106 -- Consulted but used only indirectly 107 -- Liddell + Scott Greek-English Lexicon (Lid) 108 -- Oxford English Dictionary 2002 (OED) 109 110 -- Consulted but used only occasionally, seperately referenced 111 -- D.A. Kidd, Collins Latin Gem Dictionary, 1957 (Col) 112 -- Allen + Greenough, New Latin Grammar, 1888 (A+G) 113 -- Harrington/Pucci/Elliott, Medieval Latin 2nd Ed 1997 (Harr) 114 -- C.C./C.L. Scanlon Latin Grammar/Second Latin, TAN 1976 (SCANLON) 115 -- W. M. Lindsay, Short Historical Latin Grammar, 1895 (Lindsay) 116 -- Du Cange 117 -- Oxford English Dictionary (OED) 118 119 -- Note that the WORDS dictionary is not just a copy of source info, but the 120 -- indicated SOURCE is a main reference/check point used to derive the entry 121 122 ); 123 124 125 package SOURCE_TYPE_IO is new TEXT_IO.ENUMERATION_IO(SOURCE_TYPE); 126 127 128 type KIND_ENTRY(POFS : PART_OF_SPEECH_TYPE := X) is 129 record 130 case POFS is 131 when N => 132 N_KIND : NOUN_KIND_TYPE := X; 133 when PRON => 134 PRON_KIND : PRONOUN_KIND_TYPE := X; 135 when PACK => 136 PACK_KIND : PRONOUN_KIND_TYPE := X; 137 when ADJ => 138 null; 139 when NUM => 140 NUM_VALUE : NUMERAL_VALUE_TYPE := 0; 141 when V => 142 V_KIND : VERB_KIND_TYPE := X; 143 when VPAR => 144 VPAR_KIND : VERB_KIND_TYPE := X; 145 when SUPINE => 146 SUPINE_KIND : VERB_KIND_TYPE := X; 147 when others => 148 null; 149 end case; 150 end record; 151 152 package KIND_ENTRY_IO is 153 DEFAULT_WIDTH : NATURAL; 154 procedure GET(F : in FILE_TYPE; 155 PS : in PART_OF_SPEECH_TYPE; P : out KIND_ENTRY); 156 procedure GET(PS : in PART_OF_SPEECH_TYPE; P : out KIND_ENTRY); 157 procedure PUT(F : in FILE_TYPE; 158 PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY); 159 procedure PUT(PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY); 160 procedure GET(S : in STRING; PS : in PART_OF_SPEECH_TYPE; 161 P : out KIND_ENTRY; LAST : out INTEGER); 162 procedure PUT(S : out STRING; 163 PS : in PART_OF_SPEECH_TYPE; P : in KIND_ENTRY); 164 end KIND_ENTRY_IO; 165 166 NULL_KIND_ENTRY : KIND_ENTRY; 167 168 169 170 171 type TRANSLATION_RECORD is 172 record 173 AGE : AGE_TYPE := X; 174 AREA : AREA_TYPE := X; 175 GEO : GEO_TYPE := X; 176 FREQ : FREQUENCY_TYPE := X; 177 SOURCE : SOURCE_TYPE := X; 178 end record; 179 180 NULL_TRANSLATION_RECORD : TRANSLATION_RECORD; 181 182 package TRANSLATION_RECORD_IO is 183 DEFAULT_WIDTH : TEXT_IO.FIELD; 184 procedure GET(F : in TEXT_IO.FILE_TYPE; TR : out TRANSLATION_RECORD); 185 procedure GET(TR : out TRANSLATION_RECORD); 186 procedure PUT(F : in TEXT_IO.FILE_TYPE; TR : in TRANSLATION_RECORD); 187 procedure PUT(TR : in TRANSLATION_RECORD); 188 procedure GET(S : in STRING; TR : out TRANSLATION_RECORD; LAST : out INTEGER); 189 procedure PUT(S : out STRING; TR : in TRANSLATION_RECORD); 190 end TRANSLATION_RECORD_IO; 191 192 193 194 195 type NOUN_ENTRY is 196 record 197 DECL : DECN_RECORD := (0, 0); 198 GENDER : GENDER_TYPE := X; 199 KIND : NOUN_KIND_TYPE := X; 200 end record; 201 202 package NOUN_ENTRY_IO is 203 DEFAULT_WIDTH : NATURAL; 204 procedure GET(F : in FILE_TYPE; N : out NOUN_ENTRY); 205 procedure GET(N : out NOUN_ENTRY); 206 procedure PUT(F : in FILE_TYPE; N : in NOUN_ENTRY); 207 procedure PUT(N : in NOUN_ENTRY); 208 procedure GET(S : in STRING; N : out NOUN_ENTRY; LAST : out INTEGER); 209 procedure PUT(S : out STRING; N : in NOUN_ENTRY); 210 end NOUN_ENTRY_IO; 211 212 213 214 type PRONOUN_ENTRY is 215 record 216 DECL : DECN_RECORD := (0,0); 217 KIND : PRONOUN_KIND_TYPE := X; 218 end record; 219 220 package PRONOUN_ENTRY_IO is 221 DEFAULT_WIDTH : NATURAL; 222 procedure GET(F : in FILE_TYPE; P : out PRONOUN_ENTRY); 223 procedure GET(P : out PRONOUN_ENTRY); 224 procedure PUT(F : in FILE_TYPE; P : in PRONOUN_ENTRY); 225 procedure PUT(P : in PRONOUN_ENTRY); 226 procedure GET(S : in STRING; P : out PRONOUN_ENTRY; LAST : out INTEGER); 227 procedure PUT(S : out STRING; P : in PRONOUN_ENTRY); 228 end PRONOUN_ENTRY_IO; 229 230 231 type PROPACK_ENTRY is 232 record 233 DECL : DECN_RECORD := (0,0); 234 KIND : PRONOUN_KIND_TYPE := X; 235 end record; 236 237 package PROPACK_ENTRY_IO is 238 DEFAULT_WIDTH : NATURAL; 239 procedure GET(F : in FILE_TYPE; P : out PROPACK_ENTRY); 240 procedure GET(P : out PROPACK_ENTRY); 241 procedure PUT(F : in FILE_TYPE; P : in PROPACK_ENTRY); 242 procedure PUT(P : in PROPACK_ENTRY); 243 procedure GET(S : in STRING; P : out PROPACK_ENTRY; LAST : out INTEGER); 244 procedure PUT(S : out STRING; P : in PROPACK_ENTRY); 245 end PROPACK_ENTRY_IO; 246 247 248 249 type ADJECTIVE_ENTRY is 250 record 251 DECL : DECN_RECORD := (0, 0); 252 CO : COMPARISON_TYPE := X; 253 end record; 254 255 package ADJECTIVE_ENTRY_IO is 256 DEFAULT_WIDTH : NATURAL; 257 procedure GET(F : in FILE_TYPE; A : out ADJECTIVE_ENTRY); 258 procedure GET(A : out ADJECTIVE_ENTRY); 259 procedure PUT(F : in FILE_TYPE; A : in ADJECTIVE_ENTRY); 260 procedure PUT(A : in ADJECTIVE_ENTRY); 261 procedure GET(S : in STRING; A : out ADJECTIVE_ENTRY; LAST : out INTEGER); 262 procedure PUT(S : out STRING; A : in ADJECTIVE_ENTRY); 263 end ADJECTIVE_ENTRY_IO; 264 265 266 type NUMERAL_ENTRY is 267 record 268 DECL : DECN_RECORD := (0,0); 269 SORT : NUMERAL_SORT_TYPE := X; 270 VALUE : NUMERAL_VALUE_TYPE := 0; 271 end record; 272 273 package NUMERAL_ENTRY_IO is 274 DEFAULT_WIDTH : NATURAL; 275 procedure GET(F : in FILE_TYPE; NUM : out NUMERAL_ENTRY); 276 procedure GET(NUM : out NUMERAL_ENTRY); 277 procedure PUT(F : in FILE_TYPE; NUM : in NUMERAL_ENTRY); 278 procedure PUT(NUM : in NUMERAL_ENTRY); 279 procedure GET(S : in STRING; NUM : out NUMERAL_ENTRY; LAST : out INTEGER); 280 procedure PUT(S : out STRING; NUM : in NUMERAL_ENTRY); 281 end NUMERAL_ENTRY_IO; 282 283 284 285 type ADVERB_ENTRY is 286 record 287 CO : COMPARISON_TYPE := X; 288 end record; 289 290 291 292 package ADVERB_ENTRY_IO is 293 DEFAULT_WIDTH : NATURAL; 294 procedure GET(F : in FILE_TYPE; A : out ADVERB_ENTRY); 295 procedure GET(A : out ADVERB_ENTRY); 296 procedure PUT(F : in FILE_TYPE; A : in ADVERB_ENTRY); 297 procedure PUT(A : in ADVERB_ENTRY); 298 procedure GET(S : in STRING; A : out ADVERB_ENTRY; LAST : out INTEGER); 299 procedure PUT(S : out STRING; A : in ADVERB_ENTRY); 300 end ADVERB_ENTRY_IO; 301 302 303 type VERB_ENTRY is 304 record 305 CON : DECN_RECORD := (0,0); 306 KIND : VERB_KIND_TYPE := X; 307 end record; 308 309 package VERB_ENTRY_IO is 310 DEFAULT_WIDTH : NATURAL; 311 procedure GET(F : in FILE_TYPE; V : out VERB_ENTRY); 312 procedure GET(V : out VERB_ENTRY); 313 procedure PUT(F : in FILE_TYPE; V : in VERB_ENTRY); 314 procedure PUT(V : in VERB_ENTRY); 315 procedure GET(S : in STRING; V : out VERB_ENTRY; LAST : out INTEGER); 316 procedure PUT(S : out STRING; V : in VERB_ENTRY); 317 end VERB_ENTRY_IO; 318 319 320 type PREPOSITION_ENTRY is 321 record 322 OBJ : CASE_TYPE := X; 323 end record; 324 325 package PREPOSITION_ENTRY_IO is 326 DEFAULT_WIDTH : NATURAL; 327 procedure GET(F : in FILE_TYPE; P : out PREPOSITION_ENTRY); 328 procedure GET(P : out PREPOSITION_ENTRY); 329 procedure PUT(F : in FILE_TYPE; P : in PREPOSITION_ENTRY); 330 procedure PUT(P : in PREPOSITION_ENTRY); 331 procedure GET(S : in STRING; P : out PREPOSITION_ENTRY; LAST : out INTEGER); 332 procedure PUT(S : out STRING; P : in PREPOSITION_ENTRY); 333 end PREPOSITION_ENTRY_IO; 334 335 336 type CONJUNCTION_ENTRY is 337 record 338 null; 339 end record; 340 341 package CONJUNCTION_ENTRY_IO is 342 DEFAULT_WIDTH : NATURAL; 343 procedure GET(F : in FILE_TYPE; C : out CONJUNCTION_ENTRY); 344 procedure GET(C : out CONJUNCTION_ENTRY); 345 procedure PUT(F : in FILE_TYPE; C : in CONJUNCTION_ENTRY); 346 procedure PUT(C : in CONJUNCTION_ENTRY); 347 procedure GET(S : in STRING; C : out CONJUNCTION_ENTRY; LAST : out INTEGER); 348 procedure PUT(S : out STRING; C : in CONJUNCTION_ENTRY); 349 end CONJUNCTION_ENTRY_IO; 350 351 352 type INTERJECTION_ENTRY is 353 record 354 null; 355 end record; 356 357 package INTERJECTION_ENTRY_IO is 358 DEFAULT_WIDTH : NATURAL; 359 procedure GET(F : in FILE_TYPE; I : out INTERJECTION_ENTRY); 360 procedure GET(I : out INTERJECTION_ENTRY); 361 procedure PUT(F : in FILE_TYPE; I : in INTERJECTION_ENTRY); 362 procedure PUT(I : in INTERJECTION_ENTRY); 363 procedure GET(S : in STRING; I : out INTERJECTION_ENTRY; LAST : out INTEGER); 364 procedure PUT(S : out STRING; I : in INTERJECTION_ENTRY); 365 end INTERJECTION_ENTRY_IO; 366 367 368 type PART_ENTRY(POFS : PART_OF_SPEECH_TYPE := X) is 369 record 370 case POFS is 371 when N => 372 N : NOUN_ENTRY; 373 when PRON => 374 PRON : PRONOUN_ENTRY; 375 when PACK => 376 PACK : PROPACK_ENTRY; 377 when ADJ => 378 ADJ : ADJECTIVE_ENTRY; 379 when NUM => 380 NUM : NUMERAL_ENTRY; 381 when ADV => 382 ADV : ADVERB_ENTRY; 383 when V => 384 V : VERB_ENTRY; 385 when VPAR => 386 null; -- There will be no VPAR dictionary entries 387 when SUPINE => 388 null; -- There will be no SUPINE dictionary entries 389 when PREP => 390 PREP : PREPOSITION_ENTRY; 391 when CONJ => 392 CONJ : CONJUNCTION_ENTRY; 393 when INTERJ => 394 INTERJ : INTERJECTION_ENTRY; 395 when others => 396 null; 397 end case; 398 end record; 399 400 package PART_ENTRY_IO is 401 DEFAULT_WIDTH : NATURAL; 402 procedure GET(F : in FILE_TYPE; P : out PART_ENTRY); 403 procedure GET(P : out PART_ENTRY); 404 procedure PUT(F : in FILE_TYPE; P : in PART_ENTRY); 405 procedure PUT(P : in PART_ENTRY); 406 procedure GET(S : in STRING; P : out PART_ENTRY; LAST : out INTEGER); 407 procedure PUT(S : out STRING; P : in PART_ENTRY); 408 end PART_ENTRY_IO; 409 410 NULL_PART_ENTRY : PART_ENTRY; 411 412 413 function "<" (LEFT, RIGHT : PART_ENTRY) return BOOLEAN; 414 415 416 type DICTIONARY_ENTRY is 417 record 418 STEMS : STEMS_TYPE := NULL_STEMS_TYPE; 419 PART : PART_ENTRY := NULL_PART_ENTRY; 420-- KIND : KIND_ENTRY := NULL_KIND_ENTRY; 421 TRAN : TRANSLATION_RECORD := NULL_TRANSLATION_RECORD; 422 MEAN : MEANING_TYPE := NULL_MEANING_TYPE; 423 end record; 424 425 package DICTIONARY_ENTRY_IO is 426 DEFAULT_WIDTH : FIELD; 427 procedure GET(F : in FILE_TYPE; D : out DICTIONARY_ENTRY); 428 procedure GET(D : out DICTIONARY_ENTRY); 429 procedure PUT(F : in FILE_TYPE; D : in DICTIONARY_ENTRY); 430 procedure PUT(D : in DICTIONARY_ENTRY); 431 procedure GET(S : in STRING; D : out DICTIONARY_ENTRY; LAST : out INTEGER); 432 procedure PUT(S : out STRING; D : in DICTIONARY_ENTRY); 433 end DICTIONARY_ENTRY_IO; 434 435 NULL_DICTIONARY_ENTRY : DICTIONARY_ENTRY; 436 437 package DICT_IO is new DIRECT_IO(DICTIONARY_ENTRY); 438 DICT_FILE : array (DICTIONARY_KIND) of DICT_IO.FILE_TYPE; 439 440 441 package MNPC_IO is new TEXT_IO.INTEGER_IO(DICT_IO.COUNT); 442 subtype MNPC_TYPE is DICT_IO.COUNT; 443 NULL_MNPC : DICT_IO.COUNT := DICT_IO.COUNT'FIRST; 444 445 446 type PARSE_RECORD is 447 record 448 STEM : STEM_TYPE := NULL_STEM_TYPE; 449 IR : INFLECTION_RECORD := NULL_INFLECTION_RECORD; 450 D_K : DICTIONARY_KIND := DEFAULT_DICTIONARY_KIND; 451 MNPC : DICT_IO.COUNT := NULL_MNPC; 452 end record; 453 454 NULL_PARSE_RECORD : PARSE_RECORD; 455 456 package PARSE_RECORD_IO is 457 DEFAULT_WIDTH : TEXT_IO.FIELD; 458 procedure GET(F : in TEXT_IO.FILE_TYPE; PR : out PARSE_RECORD); 459 procedure GET(PR : out PARSE_RECORD); 460 procedure PUT(F : in TEXT_IO.FILE_TYPE; PR : in PARSE_RECORD); 461 procedure PUT(PR : in PARSE_RECORD); 462 procedure GET(S : in STRING; PR : out PARSE_RECORD; LAST : out INTEGER); 463 procedure PUT(S : out STRING; PR : in PARSE_RECORD); 464 end PARSE_RECORD_IO; 465 466 467 type PARSE_ARRAY is array (INTEGER range <>) of PARSE_RECORD; 468 469 470 function NUMBER_OF_STEMS(P : PART_OF_SPEECH_TYPE) return STEM_KEY_TYPE; 471 472 function "<=" (LEFT, RIGHT : AREA_TYPE) return BOOLEAN; 473 474 end DICTIONARY_PACKAGE; 475 476 477