1with TEXT_IO; 2with DIRECT_IO; 3package INFLECTIONS_PACKAGE is 4 package INTEGER_IO is new TEXT_IO.INTEGER_IO(INTEGER); 5 use TEXT_IO; 6 7 -- Generally simple/enumeration types have names ending in _TYPE 8 -- complex/record types have names ending in _RECORD 9 -- array types have names ending in _ARRAY 10 11 MAX_STEM_SIZE : constant := 18; 12 MAX_MEANING_SIZE : constant := 80; 13 14 subtype STEM_TYPE is STRING(1..MAX_STEM_SIZE); 15 NULL_STEM_TYPE : constant STEM_TYPE := (others => ' '); 16 17 package STEM_TYPE_IO is 18 DEFAULT_WIDTH : NATURAL := MAX_STEM_SIZE; 19 procedure GET(F : in FILE_TYPE; D : out STEM_TYPE); 20 procedure GET(D : out STEM_TYPE); 21 procedure PUT(F : in FILE_TYPE; D : in STEM_TYPE); 22 procedure PUT(D : in STEM_TYPE); 23 procedure GET(S : in STRING; D : out STEM_TYPE; 24 LAST : out INTEGER); 25 procedure PUT(S : out STRING; D : in STEM_TYPE); 26 end STEM_TYPE_IO; 27 28 29 subtype MEANING_TYPE is STRING(1..MAX_MEANING_SIZE); 30 NULL_MEANING_TYPE : constant MEANING_TYPE := (others => ' '); 31 32 type PART_OF_SPEECH_TYPE is ( 33 X, -- all, none, or unknown 34 N, -- Noun 35 PRON, -- PRONoun 36 PACK, -- PACKON -- artificial for code 37 ADJ, -- ADJective 38 NUM, -- NUMeral 39 ADV, -- ADVerb 40 V, -- Verb 41 VPAR, -- Verb PARticiple 42 SUPINE, -- SUPINE 43 PREP, -- PREPosition 44 CONJ, -- CONJunction 45 INTERJ, -- INTERJection 46 TACKON, -- TACKON -- artificial for code 47 PREFIX, -- PREFIX -- here artificial for code 48 SUFFIX -- SUFFIX -- here artificial for code 49 ); 50 51 package PART_OF_SPEECH_TYPE_IO is 52 new TEXT_IO.ENUMERATION_IO(PART_OF_SPEECH_TYPE); 53 54 55 subtype WHICH_TYPE is NATURAL range 0..9; 56 57 subtype VARIANT_TYPE is NATURAL range 0..9; 58 59 WHICH_TYPE_IO_DEFAULT_WIDTH : INTEGER := 1; 60 VARIANT_TYPE_IO_DEFAULT_WIDTH : INTEGER := 1; 61 62 type DECN_RECORD is 63 record 64 WHICH : WHICH_TYPE := 0; 65 VAR : VARIANT_TYPE := 0; 66 end record; 67 68 function "<" (LEFT, RIGHT : DECN_RECORD) return BOOLEAN; 69 70 package DECN_RECORD_IO is 71 DEFAULT_WIDTH : NATURAL; 72 procedure GET(F : in FILE_TYPE; D : out DECN_RECORD); 73 procedure GET(D : out DECN_RECORD); 74 procedure PUT(F : in FILE_TYPE; D : in DECN_RECORD); 75 procedure PUT(D : in DECN_RECORD); 76 procedure GET(S : in STRING; D : out DECN_RECORD; 77 LAST : out INTEGER); 78 procedure PUT(S : out STRING; D : in DECN_RECORD); 79 end DECN_RECORD_IO; 80 81 82 type GENDER_TYPE is ( 83 X, -- all, none, or unknown 84 M, -- Masculine 85 F, -- Feminine 86 N, -- Neuter 87 C -- Common (masculine and/or feminine) 88 ); 89 90 package GENDER_TYPE_IO is new TEXT_IO.ENUMERATION_IO(GENDER_TYPE); 91 92 type CASE_TYPE is ( 93 X, -- all, none, or unknown 94 NOM, -- NOMinative 95 VOC, -- VOCative 96 GEN, -- GENitive 97 LOC, -- LOCative 98 DAT, -- DATive 99 ABL, -- ABLative 100 ACC -- ACCusitive 101 ); 102 103 package CASE_TYPE_IO is new TEXT_IO.ENUMERATION_IO(CASE_TYPE); 104 105 type NUMBER_TYPE is ( 106 X, -- all, none, or unknown 107 S, -- Singular 108 P -- Plural 109 ); 110 111 package NUMBER_TYPE_IO is new TEXT_IO.ENUMERATION_IO(NUMBER_TYPE); 112 113 type PERSON_TYPE is range 0..3; 114 package PERSON_TYPE_IO is new TEXT_IO.INTEGER_IO(PERSON_TYPE); 115 116 type COMPARISON_TYPE is ( 117 X, -- all, none, or unknown 118 POS, -- POSitive 119 COMP, -- COMParative 120 SUPER -- SUPERlative 121 ); 122 123 package COMPARISON_TYPE_IO is new TEXT_IO.ENUMERATION_IO(COMPARISON_TYPE); 124 125 type STEM_KEY_TYPE is new NATURAL range 0..9; 126 127 package STEM_KEY_TYPE_IO is new TEXT_IO.INTEGER_IO(STEM_KEY_TYPE); 128 STEM_KEY_TYPE_IO_DEFAULT_WIDTH : INTEGER := 1; 129 130 131 132 type NUMERAL_SORT_TYPE is ( 133 X, -- all, none, or unknown 134 CARD, -- CARDinal 135 ORD, -- ORDinal 136 DIST, -- DISTributive 137 ADVERB -- numeral ADVERB 138 ); 139 140 141 package NUMERAL_SORT_TYPE_IO is 142 new TEXT_IO.ENUMERATION_IO(NUMERAL_SORT_TYPE); 143 144 145 146 type TENSE_TYPE is ( 147 X, -- all, none, or unknown 148 PRES, -- PRESent 149 IMPF, -- IMPerFect 150 FUT, -- FUTure 151 PERF, -- PERFect 152 PLUP, -- PLUPerfect 153 FUTP -- FUTure Perfect 154 ); 155 156 package TENSE_TYPE_IO is new TEXT_IO.ENUMERATION_IO(TENSE_TYPE); 157 158 type VOICE_TYPE is ( 159 X, -- all, none, or unknown 160 ACTIVE, -- ACTIVE 161 PASSIVE -- PASSIVE 162 ); 163 164 package VOICE_TYPE_IO is new TEXT_IO.ENUMERATION_IO(VOICE_TYPE); 165 166 type MOOD_TYPE is ( 167 X, -- all, none, or unknown 168 IND, -- INDicative 169 SUB, -- SUBjunctive 170 IMP, -- IMPerative 171 INF, -- INFinative 172 PPL -- ParticiPLe 173 ); 174 175 package MOOD_TYPE_IO is new TEXT_IO.ENUMERATION_IO(MOOD_TYPE); 176 177 type TENSE_VOICE_MOOD_RECORD is 178 record 179 TENSE : TENSE_TYPE := X; 180 VOICE : VOICE_TYPE := X; 181 MOOD : MOOD_TYPE := X; 182 end record; 183 184 package TENSE_VOICE_MOOD_RECORD_IO is 185 DEFAULT_WIDTH : NATURAL; 186 procedure GET(F : in FILE_TYPE; T : out TENSE_VOICE_MOOD_RECORD); 187 procedure GET(T : out TENSE_VOICE_MOOD_RECORD); 188 procedure PUT(F : in FILE_TYPE; T : in TENSE_VOICE_MOOD_RECORD); 189 procedure PUT(T : in TENSE_VOICE_MOOD_RECORD); 190 procedure GET(S : in STRING; T : out TENSE_VOICE_MOOD_RECORD; 191 LAST : out INTEGER); 192 procedure PUT(S : out STRING; T : in TENSE_VOICE_MOOD_RECORD); 193 end TENSE_VOICE_MOOD_RECORD_IO; 194 195 196 type NOUN_KIND_TYPE is ( 197 X, -- unknown, nondescript 198 S, -- Singular "only" -- not really used 199 M, -- plural or Multiple "only" -- not really used 200 A, -- Abstract idea 201 G, -- Group/collective Name -- Roman(s) 202 N, -- proper Name 203 P, -- a Person 204 T, -- a Thing 205 L, -- Locale, name of country/city 206 W -- a place Where 207 ); 208 209 package NOUN_KIND_TYPE_IO is new TEXT_IO.ENUMERATION_IO(NOUN_KIND_TYPE); 210 211 type PRONOUN_KIND_TYPE is ( 212 X, -- unknown, nondescript 213 PERS, -- PERSonal 214 REL, -- RELative 215 REFLEX, -- REFLEXive 216 DEMONS, -- DEMONStrative 217 INTERR, -- INTERRogative 218 INDEF, -- INDEFinite 219 ADJECT -- ADJECTival 220 ); 221 222 package PRONOUN_KIND_TYPE_IO is 223 new TEXT_IO.ENUMERATION_IO(PRONOUN_KIND_TYPE); 224 225 subtype NUMERAL_VALUE_TYPE is NATURAL range 0..1000; 226 227 NUMERAL_VALUE_TYPE_IO_DEFAULT_WIDTH : INTEGER := 5; 228 229 230 type VERB_KIND_TYPE is ( 231 X, -- all, none, or unknown 232 TO_BE, -- only the verb TO BE (esse) 233 TO_BEING, -- compounds of the verb to be (esse) 234 GEN, -- verb taking the GENitive 235 DAT, -- verb taking the DATive 236 ABL, -- verb taking the ABLative 237 TRANS, -- TRANSitive verb 238 INTRANS, -- INTRANSitive verb 239 IMPERS, -- IMPERSonal verb (implied subject 'it', 'they', 'God') 240 -- agent implied in action, subject in predicate 241 DEP, -- DEPonent verb 242 -- only passive form but with active meaning 243 SEMIDEP, -- SEMIDEPonent verb (forms perfect as deponent) 244 -- (perfect passive has active force) 245 PERFDEF -- PERFect DEFinite verb 246 -- having only perfect stem, but with present force 247 ); 248 249 package VERB_KIND_TYPE_IO is 250 new TEXT_IO.ENUMERATION_IO(VERB_KIND_TYPE); 251 252 253type NOUN_RECORD is 254 record 255 DECL : DECN_RECORD; 256 CS : CASE_TYPE := X; 257 NUMBER : NUMBER_TYPE := X; 258 GENDER : GENDER_TYPE := X; 259 end record; 260 261 package NOUN_RECORD_IO is 262 DEFAULT_WIDTH : NATURAL; 263 procedure GET(F : in FILE_TYPE; N : out NOUN_RECORD); 264 procedure GET(N : out NOUN_RECORD); 265 procedure PUT(F : in FILE_TYPE; N : in NOUN_RECORD); 266 procedure PUT(N : in NOUN_RECORD); 267 procedure GET(S : in STRING; N : out NOUN_RECORD; LAST : out INTEGER); 268 procedure PUT(S : out STRING; N : in NOUN_RECORD); 269 end NOUN_RECORD_IO; 270 271 272type PRONOUN_RECORD is 273 record 274 DECL : DECN_RECORD; 275 CS : CASE_TYPE := X; 276 NUMBER : NUMBER_TYPE := X; 277 GENDER : GENDER_TYPE := X; 278 end record; 279 280 package PRONOUN_RECORD_IO is 281 DEFAULT_WIDTH : NATURAL; 282 procedure GET(F : in FILE_TYPE; P : out PRONOUN_RECORD); 283 procedure GET(P : out PRONOUN_RECORD); 284 procedure PUT(F : in FILE_TYPE; P : in PRONOUN_RECORD); 285 procedure PUT(P : in PRONOUN_RECORD); 286 procedure GET(S : in STRING; P : out PRONOUN_RECORD; LAST : out INTEGER); 287 procedure PUT(S : out STRING; P : in PRONOUN_RECORD); 288 end PRONOUN_RECORD_IO; 289 290 291type PROPACK_RECORD is 292 record 293 DECL : DECN_RECORD; 294 CS : CASE_TYPE := X; 295 NUMBER : NUMBER_TYPE := X; 296 GENDER : GENDER_TYPE := X; 297 end record; 298 299 package PROPACK_RECORD_IO is 300 DEFAULT_WIDTH : NATURAL; 301 procedure GET(F : in FILE_TYPE; P : out PROPACK_RECORD); 302 procedure GET(P : out PROPACK_RECORD); 303 procedure PUT(F : in FILE_TYPE; P : in PROPACK_RECORD); 304 procedure PUT(P : in PROPACK_RECORD); 305 procedure GET(S : in STRING; P : out PROPACK_RECORD; LAST : out INTEGER); 306 procedure PUT(S : out STRING; P : in PROPACK_RECORD); 307 end PROPACK_RECORD_IO; 308 309 310type ADJECTIVE_RECORD is 311 record 312 DECL : DECN_RECORD; 313 CS : CASE_TYPE := X; 314 NUMBER : NUMBER_TYPE := X; 315 GENDER : GENDER_TYPE := X; 316 CO : COMPARISON_TYPE := X; 317 end record; 318 319 package ADJECTIVE_RECORD_IO is 320 DEFAULT_WIDTH : NATURAL; 321 procedure GET(F : in FILE_TYPE; A : out ADJECTIVE_RECORD); 322 procedure GET(A : out ADJECTIVE_RECORD); 323 procedure PUT(F : in FILE_TYPE; A : in ADJECTIVE_RECORD); 324 procedure PUT(A : in ADJECTIVE_RECORD); 325 procedure GET(S : in STRING; A : out ADJECTIVE_RECORD; LAST : out INTEGER); 326 procedure PUT(S : out STRING; A : in ADJECTIVE_RECORD); 327 end ADJECTIVE_RECORD_IO; 328 329 330 type NUMERAL_RECORD is 331 record 332 DECL : DECN_RECORD; 333 CS : CASE_TYPE := X; 334 NUMBER : NUMBER_TYPE := X; 335 GENDER : GENDER_TYPE := X; 336 SORT : NUMERAL_SORT_TYPE := X; 337 end record; 338 339 340 package NUMERAL_RECORD_IO is 341 DEFAULT_WIDTH : NATURAL; 342 procedure GET(F : in FILE_TYPE; NUM : out NUMERAL_RECORD); 343 procedure GET(NUM : out NUMERAL_RECORD); 344 procedure PUT(F : in FILE_TYPE; NUM : in NUMERAL_RECORD); 345 procedure PUT(NUM : in NUMERAL_RECORD); 346 procedure GET(S : in STRING; NUM : out NUMERAL_RECORD; LAST : out INTEGER); 347 procedure PUT(S : out STRING; NUM : in NUMERAL_RECORD); 348 end NUMERAL_RECORD_IO; 349 350type ADVERB_RECORD is 351 record 352 CO : COMPARISON_TYPE := X; 353 end record; 354 355 package ADVERB_RECORD_IO is 356 DEFAULT_WIDTH : NATURAL; 357 procedure GET(F : in FILE_TYPE; A : out ADVERB_RECORD); 358 procedure GET(A : out ADVERB_RECORD); 359 procedure PUT(F : in FILE_TYPE; A : in ADVERB_RECORD); 360 procedure PUT(A : in ADVERB_RECORD); 361 procedure GET(S : in STRING; A : out ADVERB_RECORD; LAST : out INTEGER); 362 procedure PUT(S : out STRING; A : in ADVERB_RECORD); 363 end ADVERB_RECORD_IO; 364 365 366type VERB_RECORD is 367 record 368 CON : DECN_RECORD; 369 TENSE_VOICE_MOOD : TENSE_VOICE_MOOD_RECORD; 370 PERSON : PERSON_TYPE := 0; 371 NUMBER : NUMBER_TYPE := X; 372 end record; 373 374 package VERB_RECORD_IO is 375 DEFAULT_WIDTH : NATURAL; 376 procedure GET(F : in FILE_TYPE; V : out VERB_RECORD); 377 procedure GET(V : out VERB_RECORD); 378 procedure PUT(F : in FILE_TYPE; V : in VERB_RECORD); 379 procedure PUT(V : in VERB_RECORD); 380 procedure GET(S : in STRING; V : out VERB_RECORD; LAST : out INTEGER); 381 procedure PUT(S : out STRING; V : in VERB_RECORD); 382 end VERB_RECORD_IO; 383 384 385type VPAR_RECORD is 386 record 387 CON : DECN_RECORD; 388 CS : CASE_TYPE := X; 389 NUMBER : NUMBER_TYPE := X; 390 GENDER : GENDER_TYPE := X; 391 TENSE_VOICE_MOOD : TENSE_VOICE_MOOD_RECORD; 392 end record; 393 394 package VPAR_RECORD_IO is 395 DEFAULT_WIDTH : NATURAL; 396 procedure GET(F : in FILE_TYPE; VP : out VPAR_RECORD); 397 procedure GET(VP : out VPAR_RECORD); 398 procedure PUT(F : in FILE_TYPE; VP : in VPAR_RECORD); 399 procedure PUT(VP : in VPAR_RECORD); 400 procedure GET(S : in STRING; VP : out VPAR_RECORD; LAST : out INTEGER); 401 procedure PUT(S : out STRING; VP : in VPAR_RECORD); 402 end VPAR_RECORD_IO; 403 404 405type SUPINE_RECORD is 406 record 407 CON : DECN_RECORD; 408 CS : CASE_TYPE := X; 409 NUMBER : NUMBER_TYPE := X; 410 GENDER : GENDER_TYPE := X; 411 end record; 412 413 package SUPINE_RECORD_IO is 414 DEFAULT_WIDTH : NATURAL; 415 procedure GET(F : in FILE_TYPE; VP : out SUPINE_RECORD); 416 procedure GET(VP : out SUPINE_RECORD); 417 procedure PUT(F : in FILE_TYPE; VP : in SUPINE_RECORD); 418 procedure PUT(VP : in SUPINE_RECORD); 419 procedure GET(S : in STRING; VP : out SUPINE_RECORD; LAST : out INTEGER); 420 procedure PUT(S : out STRING; VP : in SUPINE_RECORD); 421 end SUPINE_RECORD_IO; 422 423 424type PREPOSITION_RECORD is 425 record 426 OBJ : CASE_TYPE := X; 427 end record; 428 429 package PREPOSITION_RECORD_IO is 430 DEFAULT_WIDTH : NATURAL; 431 procedure GET(F : in FILE_TYPE; P : out PREPOSITION_RECORD); 432 procedure GET(P : out PREPOSITION_RECORD); 433 procedure PUT(F : in FILE_TYPE; P : in PREPOSITION_RECORD); 434 procedure PUT(P : in PREPOSITION_RECORD); 435 procedure GET(S : in STRING; P : out PREPOSITION_RECORD; LAST : out INTEGER); 436 procedure PUT(S : out STRING; P : in PREPOSITION_RECORD); 437 end PREPOSITION_RECORD_IO; 438 439 440type CONJUNCTION_RECORD is 441 record 442 null; 443 end record; 444 445 package CONJUNCTION_RECORD_IO is 446 DEFAULT_WIDTH : NATURAL; 447 procedure GET(F : in FILE_TYPE; C : out CONJUNCTION_RECORD); 448 procedure GET(C : out CONJUNCTION_RECORD); 449 procedure PUT(F : in FILE_TYPE; C : in CONJUNCTION_RECORD); 450 procedure PUT(C : in CONJUNCTION_RECORD); 451 procedure GET(S : in STRING; C : out CONJUNCTION_RECORD; LAST : out INTEGER); 452 procedure PUT(S : out STRING; C : in CONJUNCTION_RECORD); 453 end CONJUNCTION_RECORD_IO; 454 455 456type INTERJECTION_RECORD is 457 record 458 null; 459 end record; 460 461 package INTERJECTION_RECORD_IO is 462 DEFAULT_WIDTH : NATURAL; 463 procedure GET(F : in FILE_TYPE; I : out INTERJECTION_RECORD); 464 procedure GET(I : out INTERJECTION_RECORD); 465 procedure PUT(F : in FILE_TYPE; I : in INTERJECTION_RECORD); 466 procedure PUT(I : in INTERJECTION_RECORD); 467 procedure GET(S : in STRING; I : out INTERJECTION_RECORD; LAST : out INTEGER); 468 procedure PUT(S : out STRING; I : in INTERJECTION_RECORD); 469 end INTERJECTION_RECORD_IO; 470 471 472 -- TACKON, PREFIX, SUFFIX are nulls put in to allow easy printing later 473 474 type TACKON_RECORD is 475 record 476 null; 477 end record; 478 479 NULL_TACKON_RECORD : TACKON_RECORD; 480 481 package TACKON_RECORD_IO is 482 DEFAULT_WIDTH : NATURAL; 483 procedure GET(F : in FILE_TYPE; I : out TACKON_RECORD); 484 procedure GET(I : out TACKON_RECORD); 485 procedure PUT(F : in FILE_TYPE; I : in TACKON_RECORD); 486 procedure PUT(I : in TACKON_RECORD); 487 procedure GET(S : in STRING; I : out TACKON_RECORD; LAST : out INTEGER); 488 procedure PUT(S : out STRING; I : in TACKON_RECORD); 489 end TACKON_RECORD_IO; 490 491 492 type PREFIX_RECORD is 493 record 494 null; 495 end record; 496 497 NULL_PREFIX_RECORD : PREFIX_RECORD; 498 499 package PREFIX_RECORD_IO is 500 DEFAULT_WIDTH : NATURAL; 501 procedure GET(F : in FILE_TYPE; P : out PREFIX_RECORD); 502 procedure GET(P : out PREFIX_RECORD); 503 procedure PUT(F : in FILE_TYPE; P : in PREFIX_RECORD); 504 procedure PUT(P : in PREFIX_RECORD); 505 procedure GET(S : in STRING; P : out PREFIX_RECORD; LAST : out INTEGER); 506 procedure PUT(S : out STRING; P : in PREFIX_RECORD); 507 end PREFIX_RECORD_IO; 508 509 type SUFFIX_RECORD is 510 record 511 null; 512 end record; 513 514 NULL_SUFFIX_RECORD : SUFFIX_RECORD; 515 516 package SUFFIX_RECORD_IO is 517 DEFAULT_WIDTH : NATURAL; 518 procedure GET(F : in FILE_TYPE; P : out SUFFIX_RECORD); 519 procedure GET(P : out SUFFIX_RECORD); 520 procedure PUT(F : in FILE_TYPE; P : in SUFFIX_RECORD); 521 procedure PUT(P : in SUFFIX_RECORD); 522 procedure GET(S : in STRING; P : out SUFFIX_RECORD; LAST : out INTEGER); 523 procedure PUT(S : out STRING; P : in SUFFIX_RECORD); 524 end SUFFIX_RECORD_IO; 525 526 527 type QUALITY_RECORD(POFS : PART_OF_SPEECH_TYPE := X) is 528 record 529 case POFS is 530 when N => 531 N : NOUN_RECORD; 532 when PRON => 533 PRON : PRONOUN_RECORD; 534 when PACK => 535 PACK : PROPACK_RECORD; 536 when ADJ => 537 ADJ : ADJECTIVE_RECORD; 538 when NUM => 539 NUM : NUMERAL_RECORD; 540 when ADV => 541 ADV : ADVERB_RECORD; 542 when V => 543 V : VERB_RECORD; 544 when VPAR => 545 VPAR : VPAR_RECORD; 546 when SUPINE => 547 SUPINE : SUPINE_RECORD; 548 when PREP => 549 PREP : PREPOSITION_RECORD; 550 when CONJ => 551 CONJ : CONJUNCTION_RECORD; 552 when INTERJ => 553 INTERJ : INTERJECTION_RECORD; 554 when TACKON => 555 TACKON : TACKON_RECORD; 556 when PREFIX => 557 PREFIX : PREFIX_RECORD; 558 when SUFFIX => 559 SUFFIX : SUFFIX_RECORD; 560 when others => 561 null; 562 end case; 563 end record; 564 565 NULL_QUALITY_RECORD : QUALITY_RECORD; 566 567 function "<" (LEFT, RIGHT : QUALITY_RECORD) return BOOLEAN; 568 569 package QUALITY_RECORD_IO is 570 DEFAULT_WIDTH : NATURAL; 571 procedure GET(F : in FILE_TYPE; P : out QUALITY_RECORD); 572 procedure GET(P : out QUALITY_RECORD); 573 procedure PUT(F : in FILE_TYPE; P : in QUALITY_RECORD); 574 procedure PUT(P : in QUALITY_RECORD); 575 procedure GET(S : in STRING; P : out QUALITY_RECORD; LAST : out INTEGER); 576 procedure PUT(S : out STRING; P : in QUALITY_RECORD); 577 end QUALITY_RECORD_IO; 578 579 type QUALITY_ARRAY is array (INTEGER range <>) of QUALITY_RECORD; 580 581 MAX_ENDING_SIZE : constant := 7; 582 subtype ENDING_SIZE_TYPE is INTEGER range 0..MAX_ENDING_SIZE; 583 584 ENDING_SIZE_TYPE_IO_DEFAULT_WIDTH : INTEGER := 3; 585 586 subtype ENDING is STRING(1..MAX_ENDING_SIZE); 587 588 type ENDING_RECORD is 589 record 590 SIZE : ENDING_SIZE_TYPE := 0; 591 SUF : ENDING := (others => ' '); 592 end record; 593 594 package ENDING_RECORD_IO is 595 DEFAULT_WIDTH : NATURAL; 596 procedure GET(F : in FILE_TYPE; X : out ENDING_RECORD); 597 procedure GET(X : out ENDING_RECORD); 598 procedure PUT(F : in FILE_TYPE; X : in ENDING_RECORD); 599 procedure PUT(X : in ENDING_RECORD); 600 procedure GET(S : in STRING; X : out ENDING_RECORD; LAST : out INTEGER); 601 procedure PUT(S : out STRING; X : in ENDING_RECORD); 602 end ENDING_RECORD_IO; 603 604 NULL_ENDING_RECORD : ENDING_RECORD; 605 606 607 type AGE_TYPE is ( 608 X, -- -- In use throughout the ages/unknown -- the default 609 A, -- archaic -- Very early forms, obsolete by classical times 610 B, -- early -- Early Latin, pre-classical, used for effect/poetry 611 C, -- classical -- Limited to classical (~150 BC - 200 AD) 612 D, -- late -- Late, post-classical (3rd-5th centuries) 613 E, -- later -- Latin not in use in Classical times (6-10), Christian 614 F, -- medieval -- Medieval (11th-15th centuries) 615 G, -- scholar -- Latin post 15th - Scholarly/Scientific (16-18) 616 H -- modern -- Coined recently, words for new things (19-20) 617 ); 618 package AGE_TYPE_IO is new TEXT_IO.ENUMERATION_IO(AGE_TYPE); 619 620 621 type FREQUENCY_TYPE is ( -- For dictionary entries 622 X, -- -- Unknown or unspecified 623 A, -- very freq -- Very frequent, in all Elementry Latin books 624 B, -- frequent -- Frequent, in top 10 percent 625 C, -- common -- For Dictionary, in top 10,000 words 626 D, -- lesser -- For Dictionary, in top 20,000 words 627 E, -- uncommon -- 2 or 3 citations 628 F, -- very rare -- Having only single citation in OLD or L+S 629 I, -- inscription -- Only citation is inscription 630 M, -- graffiti -- Presently not much used 631 N -- Pliny -- Things that appear (almost) only in Pliny Natural History 632 ); 633 634 -- For inflections, the same type is used with different weights 635-- X, -- -- Unknown or unspecified 636-- A, -- most freq -- Very frequent, the most common 637-- B, -- sometimes -- sometimes, a not unusual VARIANT 638-- C, -- uncommon -- occasionally seen 639-- D, -- infrequent -- recognizable variant, but unlikely 640-- E, -- rare -- for a few cases, very unlikely 641-- F, -- very rare -- singular examples, 642-- I, -- inscription -- Only citation is inscription 643-- M, -- -- Presently not used 644-- N -- -- Presently not used 645 646 647 package FREQUENCY_TYPE_IO is new TEXT_IO.ENUMERATION_IO(FREQUENCY_TYPE); 648 649 650 651 type INFLECTION_RECORD is 652 record 653 QUAL : QUALITY_RECORD := NULL_QUALITY_RECORD; 654 KEY : STEM_KEY_TYPE := 0; 655 ENDING : ENDING_RECORD := NULL_ENDING_RECORD; 656 AGE : AGE_TYPE := X; 657 FREQ : FREQUENCY_TYPE := X; 658 end record; 659 660 NULL_INFLECTION_RECORD : INFLECTION_RECORD; 661 662 package INFLECTION_RECORD_IO is 663 DEFAULT_WIDTH : NATURAL; 664 procedure GET(F : in FILE_TYPE; P : out INFLECTION_RECORD); 665 procedure GET(P : out INFLECTION_RECORD); 666 procedure PUT(F : in FILE_TYPE; P : in INFLECTION_RECORD); 667 procedure PUT(P : in INFLECTION_RECORD); 668 procedure GET(S : in STRING; P : out INFLECTION_RECORD; LAST : out INTEGER); 669 procedure PUT(S : out STRING; P : in INFLECTION_RECORD); 670 end INFLECTION_RECORD_IO; 671 672 -- This implies a knowledge of the inflections last character 673 subtype INFLECTIONS_SECTION_1 is CHARACTER range 'a'..'i'; 674 subtype INFLECTIONS_SECTION_2 is CHARACTER range 'm'..'r'; 675 subtype INFLECTIONS_SECTION_3 is CHARACTER range 's'..'s'; 676 subtype INFLECTIONS_SECTION_4 is CHARACTER range 't'..'u'; 677 678 SIZE_OF_BLANK_INFLECTIONS : constant INTEGER := 80; -- ############ 679 SIZE_OF_INFLECTIONS_SECTION : constant INTEGER := 570; -- ############ 680 681 type INFLECTION_ARRAY is array (POSITIVE range <>) of INFLECTION_RECORD; 682 subtype LEL_SECTION is INFLECTION_ARRAY(1..SIZE_OF_INFLECTIONS_SECTION); 683 package LEL_SECTION_IO is new DIRECT_IO(LEL_SECTION); 684 685 BEL : INFLECTION_ARRAY(1..SIZE_OF_BLANK_INFLECTIONS); 686 687 LEL : LEL_SECTION; 688 689 type INFLECTION_ARRAY_INDEX is array (INTEGER range <>, 690 CHARACTER range <>) of INTEGER; 691 692 BELF, BELL : INFLECTION_ARRAY_INDEX(0..0, ' '..' ') := (0 => (others => 0)); 693 LELF, LELL : INFLECTION_ARRAY_INDEX(1..MAX_ENDING_SIZE, 694 'a'..'z') := (others => (others => 0)); 695 PELF, PELL : INFLECTION_ARRAY_INDEX(1..MAX_ENDING_SIZE, 696 'a'..'z') := (others => (others => 0)); 697 698 NUMBER_OF_INFLECTIONS : INTEGER := 0; 699 700 701 procedure ESTABLISH_INFLECTIONS_SECTION; 702 703 704 705 706 -- <= means for this purpose "contained in" 707 708 function "<=" (LEFT, RIGHT : PART_OF_SPEECH_TYPE) return BOOLEAN; 709 function "<=" (LEFT, RIGHT : DECN_RECORD) return BOOLEAN; 710 function "<=" (LEFT, RIGHT : GENDER_TYPE) return BOOLEAN; 711 function "<=" (LEFT, RIGHT : CASE_TYPE) return BOOLEAN; 712 function "<=" (LEFT, RIGHT : NUMBER_TYPE) return BOOLEAN; 713 function "<=" (LEFT, RIGHT : PERSON_TYPE) return BOOLEAN; 714 function "<=" (LEFT, RIGHT : COMPARISON_TYPE) return BOOLEAN; 715 function "<=" (LEFT, RIGHT : TENSE_VOICE_MOOD_RECORD) return BOOLEAN; 716 function "<=" (LEFT, RIGHT : NOUN_KIND_TYPE) return BOOLEAN; 717 function "<=" (LEFT, RIGHT : PRONOUN_KIND_TYPE) return BOOLEAN; 718 function "<=" (LEFT, RIGHT : STEM_KEY_TYPE) return BOOLEAN; -- not verbs 719 function "<=" (LEFT, RIGHT : AGE_TYPE) return BOOLEAN; 720 function "<=" (LEFT, RIGHT : FREQUENCY_TYPE) return BOOLEAN; 721 722 723 GIVE_UP : exception; 724 725 726end INFLECTIONS_PACKAGE; 727 728 729 730