2634 lines
67 KiB
Ada
2634 lines
67 KiB
Ada
with LATIN_FILE_NAMES; use LATIN_FILE_NAMES;
|
|
with PREFACE;
|
|
package body INFLECTIONS_PACKAGE is
|
|
use TEXT_IO;
|
|
|
|
|
|
function "<" (LEFT, RIGHT : DECN_RECORD) return BOOLEAN is
|
|
begin
|
|
if LEFT.WHICH < RIGHT.WHICH or else
|
|
(LEFT.WHICH = RIGHT.WHICH and then
|
|
LEFT.VAR < RIGHT.VAR) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<";
|
|
|
|
|
|
|
|
function "<" (LEFT, RIGHT : QUALITY_RECORD) return BOOLEAN is
|
|
begin
|
|
if LEFT.POFS = RIGHT.POFS then
|
|
case LEFT.POFS is
|
|
when N =>
|
|
if LEFT.N.DECL.WHICH < RIGHT.N.DECL.WHICH or else
|
|
(LEFT.N.DECL.WHICH = RIGHT.N.DECL.WHICH and then
|
|
LEFT.N.DECL.VAR < RIGHT.N.DECL.VAR) or else
|
|
(LEFT.N.DECL.WHICH = RIGHT.N.DECL.WHICH and then
|
|
LEFT.N.DECL.VAR = RIGHT.N.DECL.VAR and then
|
|
LEFT.N.NUMBER < RIGHT.N.NUMBER) or else
|
|
(LEFT.N.DECL.WHICH = RIGHT.N.DECL.WHICH and then
|
|
LEFT.N.DECL.VAR = RIGHT.N.DECL.VAR and then
|
|
LEFT.N.NUMBER = RIGHT.N.NUMBER and then
|
|
LEFT.N.CS < RIGHT.N.CS) or else
|
|
(LEFT.N.DECL.WHICH = RIGHT.N.DECL.WHICH and then
|
|
LEFT.N.DECL.VAR = RIGHT.N.DECL.VAR and then
|
|
LEFT.N.NUMBER = RIGHT.N.NUMBER and then
|
|
LEFT.N.CS = RIGHT.N.CS and then
|
|
LEFT.N.GENDER < RIGHT.N.GENDER) then
|
|
return TRUE;
|
|
end if;
|
|
when PRON =>
|
|
if LEFT.PRON.DECL.WHICH < RIGHT.PRON.DECL.WHICH or else
|
|
(LEFT.PRON.DECL.WHICH = RIGHT.PRON.DECL.WHICH and then
|
|
LEFT.PRON.DECL.VAR < RIGHT.PRON.DECL.VAR) or else
|
|
(LEFT.PRON.DECL.WHICH = RIGHT.PRON.DECL.WHICH and then
|
|
LEFT.PRON.DECL.VAR = RIGHT.PRON.DECL.VAR and then
|
|
LEFT.PRON.NUMBER < RIGHT.PRON.NUMBER) or else
|
|
(LEFT.PRON.DECL.WHICH = RIGHT.PRON.DECL.WHICH and then
|
|
LEFT.PRON.DECL.VAR = RIGHT.PRON.DECL.VAR and then
|
|
LEFT.PRON.NUMBER = RIGHT.PRON.NUMBER and then
|
|
LEFT.PRON.CS < RIGHT.PRON.CS) or else
|
|
(LEFT.PRON.DECL.WHICH = RIGHT.PRON.DECL.WHICH and then
|
|
LEFT.PRON.DECL.VAR = RIGHT.PRON.DECL.VAR and then
|
|
LEFT.PRON.NUMBER = RIGHT.PRON.NUMBER and then
|
|
LEFT.PRON.CS = RIGHT.PRON.CS and then
|
|
LEFT.PRON.GENDER < RIGHT.PRON.GENDER) then
|
|
return TRUE;
|
|
end if;
|
|
when PACK =>
|
|
if LEFT.PACK.DECL.WHICH < RIGHT.PACK.DECL.WHICH or else
|
|
(LEFT.PACK.DECL.WHICH = RIGHT.PACK.DECL.WHICH and then
|
|
LEFT.PACK.DECL.VAR < RIGHT.PACK.DECL.VAR) or else
|
|
(LEFT.PACK.DECL.WHICH = RIGHT.PACK.DECL.WHICH and then
|
|
LEFT.PACK.DECL.VAR = RIGHT.PACK.DECL.VAR and then
|
|
LEFT.PACK.NUMBER < RIGHT.PACK.NUMBER) or else
|
|
(LEFT.PACK.DECL.WHICH = RIGHT.PACK.DECL.WHICH and then
|
|
LEFT.PACK.DECL.VAR = RIGHT.PACK.DECL.VAR and then
|
|
LEFT.PACK.NUMBER = RIGHT.PACK.NUMBER and then
|
|
LEFT.PACK.CS < RIGHT.PACK.CS) or else
|
|
(LEFT.PACK.DECL.WHICH = RIGHT.PACK.DECL.WHICH and then
|
|
LEFT.PACK.DECL.VAR = RIGHT.PACK.DECL.VAR and then
|
|
LEFT.PACK.NUMBER = RIGHT.PACK.NUMBER and then
|
|
LEFT.PACK.CS = RIGHT.PACK.CS and then
|
|
LEFT.PACK.GENDER < RIGHT.PACK.GENDER) then
|
|
return TRUE;
|
|
end if;
|
|
when ADJ =>
|
|
if LEFT.ADJ.DECL.WHICH < RIGHT.ADJ.DECL.WHICH or else
|
|
(LEFT.ADJ.DECL.WHICH = RIGHT.ADJ.DECL.WHICH and then
|
|
LEFT.ADJ.DECL.VAR < RIGHT.ADJ.DECL.VAR) or else
|
|
(LEFT.ADJ.DECL.WHICH = RIGHT.ADJ.DECL.WHICH and then
|
|
LEFT.ADJ.DECL.VAR = RIGHT.ADJ.DECL.VAR and then
|
|
LEFT.ADJ.NUMBER < RIGHT.ADJ.NUMBER) or else
|
|
(LEFT.ADJ.DECL.WHICH = RIGHT.ADJ.DECL.WHICH and then
|
|
LEFT.ADJ.DECL.VAR = RIGHT.ADJ.DECL.VAR and then
|
|
LEFT.ADJ.NUMBER = RIGHT.ADJ.NUMBER and then
|
|
LEFT.ADJ.CS < RIGHT.ADJ.CS) or else
|
|
(LEFT.ADJ.DECL.WHICH = RIGHT.ADJ.DECL.WHICH and then
|
|
LEFT.ADJ.DECL.VAR = RIGHT.ADJ.DECL.VAR and then
|
|
LEFT.ADJ.NUMBER = RIGHT.ADJ.NUMBER and then
|
|
LEFT.ADJ.CS = RIGHT.ADJ.CS and then
|
|
LEFT.ADJ.GENDER < RIGHT.ADJ.GENDER) or else
|
|
(LEFT.ADJ.DECL.WHICH = RIGHT.ADJ.DECL.WHICH and then
|
|
LEFT.ADJ.DECL.VAR = RIGHT.ADJ.DECL.VAR and then
|
|
LEFT.ADJ.NUMBER = RIGHT.ADJ.NUMBER and then
|
|
LEFT.ADJ.CS = RIGHT.ADJ.CS and then
|
|
LEFT.ADJ.GENDER = RIGHT.ADJ.GENDER and then
|
|
LEFT.ADJ.CO < RIGHT.ADJ.CO) then
|
|
return TRUE;
|
|
end if;
|
|
when ADV =>
|
|
return LEFT.ADV.CO < RIGHT.ADV.CO;
|
|
when V =>
|
|
if (LEFT.V.CON.WHICH < RIGHT.V.CON.WHICH) or else
|
|
(LEFT.V.CON.WHICH = RIGHT.V.CON.WHICH and then
|
|
LEFT.V.CON.VAR < RIGHT.V.CON.VAR) or else
|
|
(LEFT.V.CON.WHICH = RIGHT.V.CON.WHICH and then
|
|
LEFT.V.CON.VAR = RIGHT.V.CON.VAR and then
|
|
LEFT.V.NUMBER < RIGHT.V.NUMBER) or else
|
|
(LEFT.V.CON.WHICH = RIGHT.V.CON.WHICH and then
|
|
LEFT.V.CON.VAR = RIGHT.V.CON.VAR and then
|
|
LEFT.V.NUMBER = RIGHT.V.NUMBER and then
|
|
LEFT.V.TENSE_VOICE_MOOD.TENSE < RIGHT.V.TENSE_VOICE_MOOD.TENSE) or else
|
|
(LEFT.V.CON.WHICH = RIGHT.V.CON.WHICH and then
|
|
LEFT.V.CON.VAR = RIGHT.V.CON.VAR and then
|
|
LEFT.V.NUMBER = RIGHT.V.NUMBER and then
|
|
LEFT.V.TENSE_VOICE_MOOD.TENSE = RIGHT.V.TENSE_VOICE_MOOD.TENSE and then
|
|
LEFT.V.TENSE_VOICE_MOOD.VOICE < RIGHT.V.TENSE_VOICE_MOOD.VOICE) or else
|
|
(LEFT.V.CON.WHICH = RIGHT.V.CON.WHICH and then
|
|
LEFT.V.CON.VAR = RIGHT.V.CON.VAR and then
|
|
LEFT.V.NUMBER = RIGHT.V.NUMBER and then
|
|
LEFT.V.TENSE_VOICE_MOOD.TENSE = RIGHT.V.TENSE_VOICE_MOOD.TENSE and then
|
|
LEFT.V.TENSE_VOICE_MOOD.VOICE = RIGHT.V.TENSE_VOICE_MOOD.VOICE and then
|
|
LEFT.V.TENSE_VOICE_MOOD.MOOD < RIGHT.V.TENSE_VOICE_MOOD.MOOD ) or else
|
|
(LEFT.V.CON.WHICH = RIGHT.V.CON.WHICH and then
|
|
LEFT.V.CON.VAR = RIGHT.V.CON.VAR and then
|
|
LEFT.V.NUMBER = RIGHT.V.NUMBER and then
|
|
LEFT.V.TENSE_VOICE_MOOD.TENSE = RIGHT.V.TENSE_VOICE_MOOD.TENSE and then
|
|
LEFT.V.TENSE_VOICE_MOOD.VOICE = RIGHT.V.TENSE_VOICE_MOOD.VOICE and then
|
|
LEFT.V.TENSE_VOICE_MOOD.MOOD = RIGHT.V.TENSE_VOICE_MOOD.MOOD and then
|
|
LEFT.V.PERSON < RIGHT.V.PERSON) then
|
|
return TRUE;
|
|
end if;
|
|
when VPAR =>
|
|
if LEFT.VPAR.CON.WHICH < RIGHT.VPAR.CON.WHICH or else
|
|
(LEFT.VPAR.CON.WHICH = RIGHT.VPAR.CON.WHICH and then
|
|
LEFT.VPAR.CON.VAR < RIGHT.VPAR.CON.VAR) or else
|
|
(LEFT.VPAR.CON.WHICH = RIGHT.VPAR.CON.WHICH and then
|
|
LEFT.VPAR.CON.VAR = RIGHT.VPAR.CON.VAR and then
|
|
LEFT.VPAR.NUMBER < RIGHT.VPAR.NUMBER) or else
|
|
(LEFT.VPAR.CON.WHICH = RIGHT.VPAR.CON.WHICH and then
|
|
LEFT.VPAR.CON.VAR = RIGHT.VPAR.CON.VAR and then
|
|
LEFT.VPAR.NUMBER = RIGHT.VPAR.NUMBER and then
|
|
LEFT.VPAR.CS < RIGHT.VPAR.CS) or else
|
|
(LEFT.VPAR.CON.WHICH = RIGHT.VPAR.CON.WHICH and then
|
|
LEFT.VPAR.CON.VAR = RIGHT.VPAR.CON.VAR and then
|
|
LEFT.VPAR.NUMBER = RIGHT.VPAR.NUMBER and then
|
|
LEFT.VPAR.CS = RIGHT.VPAR.CS and then
|
|
LEFT.VPAR.GENDER < RIGHT.VPAR.GENDER) then
|
|
return TRUE;
|
|
end if;
|
|
when SUPINE =>
|
|
if LEFT.SUPINE.CON.WHICH < RIGHT.SUPINE.CON.WHICH or else
|
|
(LEFT.SUPINE.CON.WHICH = RIGHT.SUPINE.CON.WHICH and then
|
|
LEFT.SUPINE.CON.VAR < RIGHT.SUPINE.CON.VAR) or else
|
|
(LEFT.SUPINE.CON.WHICH = RIGHT.SUPINE.CON.WHICH and then
|
|
LEFT.SUPINE.CON.VAR = RIGHT.SUPINE.CON.VAR and then
|
|
LEFT.SUPINE.NUMBER < RIGHT.SUPINE.NUMBER) or else
|
|
(LEFT.SUPINE.CON.WHICH = RIGHT.SUPINE.CON.WHICH and then
|
|
LEFT.SUPINE.CON.VAR = RIGHT.SUPINE.CON.VAR and then
|
|
LEFT.SUPINE.NUMBER = RIGHT.SUPINE.NUMBER and then
|
|
LEFT.SUPINE.CS < RIGHT.SUPINE.CS) or else
|
|
(LEFT.SUPINE.CON.WHICH = RIGHT.SUPINE.CON.WHICH and then
|
|
LEFT.SUPINE.CON.VAR = RIGHT.SUPINE.CON.VAR and then
|
|
LEFT.SUPINE.NUMBER = RIGHT.SUPINE.NUMBER and then
|
|
LEFT.SUPINE.CS = RIGHT.SUPINE.CS and then
|
|
LEFT.SUPINE.GENDER < RIGHT.SUPINE.GENDER) then
|
|
return TRUE;
|
|
end if;
|
|
when PREP =>
|
|
return LEFT.PREP.OBJ < RIGHT.PREP.OBJ;
|
|
when CONJ =>
|
|
null;
|
|
when INTERJ =>
|
|
null;
|
|
when NUM =>
|
|
if LEFT.NUM.DECL.WHICH < RIGHT.NUM.DECL.WHICH or else
|
|
(LEFT.NUM.DECL.WHICH = RIGHT.NUM.DECL.WHICH and then
|
|
LEFT.NUM.DECL.VAR < RIGHT.NUM.DECL.VAR) or else
|
|
(LEFT.NUM.DECL.WHICH = RIGHT.NUM.DECL.WHICH and then
|
|
LEFT.NUM.DECL.VAR = RIGHT.NUM.DECL.VAR and then
|
|
LEFT.NUM.NUMBER < RIGHT.NUM.NUMBER) or else
|
|
(LEFT.NUM.DECL.WHICH = RIGHT.NUM.DECL.WHICH and then
|
|
LEFT.NUM.DECL.VAR = RIGHT.NUM.DECL.VAR and then
|
|
LEFT.NUM.NUMBER = RIGHT.NUM.NUMBER and then
|
|
LEFT.NUM.CS < RIGHT.NUM.CS) or else
|
|
(LEFT.NUM.DECL.WHICH = RIGHT.NUM.DECL.WHICH and then
|
|
LEFT.NUM.DECL.VAR = RIGHT.NUM.DECL.VAR and then
|
|
LEFT.NUM.NUMBER = RIGHT.NUM.NUMBER and then
|
|
LEFT.NUM.CS = RIGHT.NUM.CS and then
|
|
LEFT.NUM.GENDER < RIGHT.NUM.GENDER) or else
|
|
(LEFT.NUM.DECL.WHICH = RIGHT.NUM.DECL.WHICH and then
|
|
LEFT.NUM.DECL.VAR = RIGHT.NUM.DECL.VAR and then
|
|
LEFT.NUM.NUMBER = RIGHT.NUM.NUMBER and then
|
|
LEFT.NUM.CS = RIGHT.NUM.CS and then
|
|
LEFT.NUM.GENDER = RIGHT.NUM.GENDER and then
|
|
LEFT.NUM.SORT < RIGHT.NUM.SORT) then
|
|
return TRUE;
|
|
end if;
|
|
when TACKON =>
|
|
null;
|
|
when PREFIX =>
|
|
null;
|
|
when SUFFIX =>
|
|
null;
|
|
when others =>
|
|
null;
|
|
end case;
|
|
else
|
|
return LEFT.POFS < RIGHT.POFS;
|
|
end if;
|
|
return FALSE;
|
|
exception
|
|
when CONSTRAINT_ERROR =>
|
|
return LEFT.POFS < RIGHT.POFS;
|
|
end "<";
|
|
|
|
|
|
function "<=" (LEFT, RIGHT : PART_OF_SPEECH_TYPE) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
(LEFT = PACK and RIGHT = PRON) or else
|
|
RIGHT = X then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : DECN_RECORD) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
(RIGHT = DECN_RECORD'(0, 0) and LEFT.WHICH /= 9) or else
|
|
RIGHT = DECN_RECORD'(LEFT.WHICH, 0) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : GENDER_TYPE) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
RIGHT = X or else
|
|
(RIGHT = C and then (LEFT = M or LEFT = F)) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : CASE_TYPE) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
RIGHT = X then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : NUMBER_TYPE) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
RIGHT = X then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : PERSON_TYPE) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
RIGHT = 0 then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : COMPARISON_TYPE) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
RIGHT = X then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : TENSE_VOICE_MOOD_RECORD) return BOOLEAN is
|
|
begin
|
|
if (RIGHT.TENSE = LEFT.TENSE or else
|
|
RIGHT.TENSE = X) and then
|
|
(RIGHT.VOICE = LEFT.VOICE or else
|
|
RIGHT.VOICE = X) and then
|
|
(RIGHT.MOOD = LEFT.MOOD or else
|
|
RIGHT.MOOD = X) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : NOUN_KIND_TYPE) return BOOLEAN is
|
|
begin
|
|
if (RIGHT = LEFT or else
|
|
RIGHT = X) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
|
|
function "<=" (LEFT, RIGHT : PRONOUN_KIND_TYPE) return BOOLEAN is
|
|
begin
|
|
if (RIGHT = LEFT or else
|
|
RIGHT = X) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
|
|
function "<=" (LEFT, RIGHT : VERB_KIND_TYPE) return BOOLEAN is
|
|
begin
|
|
if (RIGHT = LEFT or else
|
|
RIGHT = X) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
|
|
function "<=" (LEFT, RIGHT : NUMERAL_SORT_TYPE) return BOOLEAN is
|
|
begin
|
|
if (RIGHT = LEFT or else
|
|
RIGHT = X) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
|
|
function "<=" (LEFT, RIGHT : STEM_KEY_TYPE) return BOOLEAN is
|
|
begin -- Only works for 2 stem parts, not verbs
|
|
if (RIGHT = LEFT or else
|
|
RIGHT = 0) then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
function "<=" (LEFT, RIGHT : AGE_TYPE) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
RIGHT = X then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
|
|
function "<=" (LEFT, RIGHT : FREQUENCY_TYPE) return BOOLEAN is
|
|
begin
|
|
if RIGHT = LEFT or else
|
|
RIGHT = X then
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
end if;
|
|
end "<=";
|
|
|
|
|
|
|
|
|
|
package body STEM_TYPE_IO is
|
|
procedure GET(F : in FILE_TYPE; D : out STEM_TYPE) is
|
|
C : CHARACTER := ' ';
|
|
begin
|
|
D := NULL_STEM_TYPE;
|
|
for I in 1..STEM_TYPE_IO.DEFAULT_WIDTH loop
|
|
GET(F, C);
|
|
if (C not in 'A'..'Z') and (C not in 'a'..'z') then
|
|
exit;
|
|
else
|
|
D(I) := C;
|
|
end if;
|
|
end loop;
|
|
end GET;
|
|
|
|
|
|
procedure GET(D : out STEM_TYPE) is
|
|
C : CHARACTER := ' ';
|
|
begin
|
|
D := NULL_STEM_TYPE;
|
|
for I in 1..STEM_TYPE_IO.DEFAULT_WIDTH loop
|
|
TEXT_IO.GET(C);
|
|
if (C not in 'A'..'Z') and (C not in 'a'..'z') then
|
|
exit;
|
|
else
|
|
D(I) := C;
|
|
end if;
|
|
end loop;
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; D : in STEM_TYPE) is
|
|
begin
|
|
TEXT_IO.PUT(F, D);
|
|
end PUT;
|
|
|
|
procedure PUT(D : in STEM_TYPE) is
|
|
begin
|
|
TEXT_IO.PUT(D);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; D : out STEM_TYPE;
|
|
LAST : out INTEGER) is
|
|
C : CHARACTER;
|
|
begin
|
|
D := NULL_STEM_TYPE;
|
|
LAST := 0;
|
|
for I in 1..STEM_TYPE_IO.DEFAULT_WIDTH loop
|
|
C := S(I);
|
|
if (C not in 'A'..'Z') and (C not in 'a'..'z') then
|
|
exit;
|
|
else
|
|
D(I) := C;
|
|
LAST := I;
|
|
end if;
|
|
end loop;
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; D : in STEM_TYPE) is
|
|
begin
|
|
S(S'FIRST..S'FIRST+STEM_TYPE_IO.DEFAULT_WIDTH-1) := D;
|
|
end PUT;
|
|
|
|
end STEM_TYPE_IO;
|
|
|
|
|
|
package body DECN_RECORD_IO is
|
|
-- This package will carry the documentation for all the following packages
|
|
-- Must have "use" for _IO for each of the components of the record
|
|
use INTEGER_IO;
|
|
-- This is a dummy used to GET the space character PUT between components
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
-- The standard 6 procedures are defined as in TEXT_IO
|
|
|
|
procedure GET(F : in FILE_TYPE; D : out DECN_RECORD) is
|
|
-- Get from a file
|
|
begin
|
|
-- Get the first component
|
|
GET(F, D.WHICH);
|
|
-- Then Get (and ignore) space character which is Put between components
|
|
GET(F, SPACER);
|
|
-- Get the next component
|
|
GET(F, D.VAR);
|
|
end GET;
|
|
|
|
procedure GET(D : out DECN_RECORD) is
|
|
-- Get from the current input, in the same manner
|
|
begin
|
|
GET(D.WHICH);
|
|
GET(SPACER);
|
|
GET(D.VAR);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; D : in DECN_RECORD) is
|
|
-- Put to a file
|
|
begin
|
|
-- Put the first component, with whatever Put is applicable (and use'd)
|
|
PUT(F, D.WHICH, 1);
|
|
-- Put the blank character between components
|
|
PUT(F, ' ');
|
|
-- Put the next component
|
|
PUT(F, D.VAR, 1);
|
|
end PUT;
|
|
|
|
procedure PUT(D : in DECN_RECORD) is
|
|
-- Likewise for Put to current output
|
|
begin
|
|
PUT(D.WHICH, 1);
|
|
PUT(' ');
|
|
PUT(D.VAR, 1);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING;
|
|
D : out DECN_RECORD; LAST : out INTEGER) is
|
|
-- Get from a string
|
|
-- Initialize the string position parameter
|
|
-- Make it first-1 so the first string specification looks like later ones
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
-- Get with the use'd _IO package the first component
|
|
GET(S(L+1..S'LAST), D.WHICH, L);
|
|
-- The L is the last position read, so add one to skip the spacer
|
|
L := L + 1;
|
|
-- Get the next component
|
|
GET(S(L+1..S'LAST), D.VAR, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; D : in DECN_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
-- Make a place the DEFAULT_WIDTH of the component to be Put
|
|
-- The DEFAULT_WIDTH has been set for these _IO packages to be
|
|
-- the LONGEST component width, not the normal Ada default
|
|
M := L + 1; -- But WHICH is to be PUT WIDTH 1
|
|
-- Put onto the substring that is exactly the DEFAULT (LONGEST) size
|
|
PUT(S(L+1..M), D.WHICH);
|
|
-- Advance the position by 1 to the position to make the blank
|
|
L := M + 1;
|
|
-- Write the blank
|
|
S(L) := ' ';
|
|
-- Calculate the next substring, of DEFAULT_WIDTH for next component
|
|
M := L + 1;
|
|
-- Put the next component
|
|
PUT(S(L+1..M), D.VAR);
|
|
-- The following may be necessary to fill the out string
|
|
-- but usually the out string has been specified exactly
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
end DECN_RECORD_IO;
|
|
|
|
package body TENSE_VOICE_MOOD_RECORD_IO is
|
|
use TENSE_TYPE_IO;
|
|
use VOICE_TYPE_IO;
|
|
use MOOD_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
procedure GET(F : in FILE_TYPE; T : out TENSE_VOICE_MOOD_RECORD) is
|
|
begin
|
|
GET(F, T.TENSE);
|
|
GET(F, SPACER);
|
|
GET(F, T.VOICE);
|
|
GET(F, SPACER);
|
|
GET(F, T.MOOD);
|
|
end GET;
|
|
|
|
procedure GET(T : out TENSE_VOICE_MOOD_RECORD) is
|
|
begin
|
|
GET(T.TENSE);
|
|
GET(SPACER);
|
|
GET(T.VOICE);
|
|
GET(SPACER);
|
|
GET(T.MOOD);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; T : in TENSE_VOICE_MOOD_RECORD) is
|
|
begin
|
|
PUT(F, T.TENSE);
|
|
PUT(F, ' ');
|
|
PUT(F, T.VOICE);
|
|
PUT(F, ' ');
|
|
PUT(F, T.MOOD);
|
|
end PUT;
|
|
|
|
procedure PUT(T : in TENSE_VOICE_MOOD_RECORD) is
|
|
begin
|
|
PUT(T.TENSE);
|
|
PUT(' ');
|
|
PUT(T.VOICE);
|
|
PUT(' ');
|
|
PUT(T.MOOD);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING;
|
|
T : out TENSE_VOICE_MOOD_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), T.TENSE, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), T.VOICE, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), T.MOOD, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; T : in TENSE_VOICE_MOOD_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + TENSE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), T.TENSE);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + VOICE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), T.VOICE);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + MOOD_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), T.MOOD);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
end TENSE_VOICE_MOOD_RECORD_IO;
|
|
|
|
|
|
package body NOUN_RECORD_IO is
|
|
use DECN_RECORD_IO;
|
|
use CASE_TYPE_IO;
|
|
use GENDER_TYPE_IO;
|
|
use NUMBER_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; N : out NOUN_RECORD) is
|
|
begin
|
|
GET(F, N.DECL);
|
|
GET(F, SPACER);
|
|
GET(F, N.CS);
|
|
GET(F, SPACER);
|
|
GET(F, N.NUMBER);
|
|
GET(F, SPACER);
|
|
GET(F, N.GENDER);
|
|
end GET;
|
|
|
|
procedure GET(N : out NOUN_RECORD) is
|
|
begin
|
|
GET(N.DECL);
|
|
GET(SPACER);
|
|
GET(N.CS);
|
|
GET(SPACER);
|
|
GET(N.NUMBER);
|
|
GET(SPACER);
|
|
GET(N.GENDER);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; N : in NOUN_RECORD) is
|
|
begin
|
|
PUT(F, N.DECL);
|
|
PUT(F, ' ');
|
|
PUT(F, N.CS);
|
|
PUT(F, ' ');
|
|
PUT(F, N.NUMBER);
|
|
PUT(F, ' ');
|
|
PUT(F, N.GENDER);
|
|
end PUT;
|
|
|
|
procedure PUT(N : in NOUN_RECORD) is
|
|
begin
|
|
PUT(N.DECL);
|
|
PUT(' ');
|
|
PUT(N.CS);
|
|
PUT(' ');
|
|
PUT(N.NUMBER);
|
|
PUT(' ');
|
|
PUT(N.GENDER);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; N : out NOUN_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), N.DECL, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), N.CS, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), N.NUMBER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), N.GENDER, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; N : in NOUN_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + DECN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), N.DECL);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), N.CS);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), N.NUMBER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), N.GENDER);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end NOUN_RECORD_IO;
|
|
|
|
|
|
package body PRONOUN_RECORD_IO is
|
|
use DECN_RECORD_IO;
|
|
use CASE_TYPE_IO;
|
|
use GENDER_TYPE_IO;
|
|
use NUMBER_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
procedure GET(F : in FILE_TYPE; P : out PRONOUN_RECORD) is
|
|
begin
|
|
GET(F, P.DECL);
|
|
GET(F, SPACER);
|
|
GET(F, P.CS);
|
|
GET(F, SPACER);
|
|
GET(F, P.NUMBER);
|
|
GET(F, SPACER);
|
|
GET(F, P.GENDER);
|
|
end GET;
|
|
|
|
procedure GET(P : out PRONOUN_RECORD) is
|
|
begin
|
|
GET(P.DECL);
|
|
GET(SPACER);
|
|
GET(P.CS);
|
|
GET(SPACER);
|
|
GET(P.NUMBER);
|
|
GET(SPACER);
|
|
GET(P.GENDER);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; P : in PRONOUN_RECORD) is
|
|
begin
|
|
PUT(F, P.DECL);
|
|
PUT(F, ' ');
|
|
PUT(F, P.CS);
|
|
PUT(F, ' ');
|
|
PUT(F, P.NUMBER);
|
|
PUT(F, ' ');
|
|
PUT(F, P.GENDER);
|
|
end PUT;
|
|
|
|
procedure PUT(P : in PRONOUN_RECORD) is
|
|
begin
|
|
PUT(P.DECL);
|
|
PUT(' ');
|
|
PUT(P.CS);
|
|
PUT(' ');
|
|
PUT(P.NUMBER);
|
|
PUT(' ');
|
|
PUT(P.GENDER);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; P : out PRONOUN_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), P.DECL, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.CS, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.NUMBER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.GENDER, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; P : in PRONOUN_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + DECN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.DECL);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.CS);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.NUMBER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.GENDER);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end PRONOUN_RECORD_IO;
|
|
|
|
|
|
package body PROPACK_RECORD_IO is
|
|
use DECN_RECORD_IO;
|
|
use CASE_TYPE_IO;
|
|
use NUMBER_TYPE_IO;
|
|
use GENDER_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
procedure GET(F : in FILE_TYPE; P : out PROPACK_RECORD) is
|
|
begin
|
|
GET(F, P.DECL);
|
|
GET(F, SPACER);
|
|
GET(F, P.CS);
|
|
GET(F, SPACER);
|
|
GET(F, P.NUMBER);
|
|
GET(F, SPACER);
|
|
GET(F, P.GENDER);
|
|
end GET;
|
|
|
|
procedure GET(P : out PROPACK_RECORD) is
|
|
begin
|
|
GET(P.DECL);
|
|
GET(SPACER);
|
|
GET(P.CS);
|
|
GET(SPACER);
|
|
GET(P.NUMBER);
|
|
GET(SPACER);
|
|
GET(P.GENDER);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; P : in PROPACK_RECORD) is
|
|
begin
|
|
PUT(F, P.DECL);
|
|
PUT(F, ' ');
|
|
PUT(F, P.CS);
|
|
PUT(F, ' ');
|
|
PUT(F, P.NUMBER);
|
|
PUT(F, ' ');
|
|
PUT(F, P.GENDER);
|
|
end PUT;
|
|
|
|
procedure PUT(P : in PROPACK_RECORD) is
|
|
begin
|
|
PUT(P.DECL);
|
|
PUT(' ');
|
|
PUT(P.CS);
|
|
PUT(' ');
|
|
PUT(P.NUMBER);
|
|
PUT(' ');
|
|
PUT(P.GENDER);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; P : out PROPACK_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), P.DECL, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.CS, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.NUMBER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.GENDER, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; P : in PROPACK_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + DECN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.DECL);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.CS);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.NUMBER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.GENDER);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end PROPACK_RECORD_IO;
|
|
|
|
|
|
package body ADJECTIVE_RECORD_IO is
|
|
use DECN_RECORD_IO;
|
|
use GENDER_TYPE_IO;
|
|
use CASE_TYPE_IO;
|
|
use NUMBER_TYPE_IO;
|
|
use COMPARISON_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; A : out ADJECTIVE_RECORD) is
|
|
begin
|
|
GET(F, A.DECL);
|
|
GET(F, SPACER);
|
|
GET(F, A.CS);
|
|
GET(F, SPACER);
|
|
GET(F, A.NUMBER);
|
|
GET(F, SPACER);
|
|
GET(F, A.GENDER);
|
|
GET(F, SPACER);
|
|
GET(F, A.CO);
|
|
end GET;
|
|
|
|
procedure GET(A : out ADJECTIVE_RECORD) is
|
|
begin
|
|
GET(A.DECL);
|
|
GET(SPACER);
|
|
GET(A.CS);
|
|
GET(SPACER);
|
|
GET(A.NUMBER);
|
|
GET(SPACER);
|
|
GET(A.GENDER);
|
|
GET(SPACER);
|
|
GET(A.CO);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; A : in ADJECTIVE_RECORD) is
|
|
begin
|
|
PUT(F, A.DECL);
|
|
PUT(F, ' ');
|
|
PUT(F, A.CS);
|
|
PUT(F, ' ');
|
|
PUT(F, A.NUMBER);
|
|
PUT(F, ' ');
|
|
PUT(F, A.GENDER);
|
|
PUT(F, ' ');
|
|
PUT(F, A.CO);
|
|
end PUT;
|
|
|
|
procedure PUT(A : in ADJECTIVE_RECORD) is
|
|
begin
|
|
PUT(A.DECL);
|
|
PUT(' ');
|
|
PUT(A.CS);
|
|
PUT(' ');
|
|
PUT(A.NUMBER);
|
|
PUT(' ');
|
|
PUT(A.GENDER);
|
|
PUT(' ');
|
|
PUT(A.CO);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; A : out ADJECTIVE_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), A.DECL, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), A.CS, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), A.NUMBER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), A.GENDER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), A.CO, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; A : in ADJECTIVE_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + DECN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), A.DECL);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), A.CS);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), A.NUMBER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), A.GENDER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + COMPARISON_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), A.CO);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end ADJECTIVE_RECORD_IO;
|
|
|
|
|
|
|
|
package body NUMERAL_RECORD_IO is
|
|
use DECN_RECORD_IO;
|
|
use CASE_TYPE_IO;
|
|
use NUMBER_TYPE_IO;
|
|
use GENDER_TYPE_IO;
|
|
use NUMERAL_SORT_TYPE_IO;
|
|
use GENDER_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; NUM : out NUMERAL_RECORD) is
|
|
begin
|
|
GET(F, NUM.DECL);
|
|
GET(F, SPACER);
|
|
GET(F, NUM.CS);
|
|
GET(F, SPACER);
|
|
GET(F, NUM.NUMBER);
|
|
GET(F, SPACER);
|
|
GET(F, NUM.GENDER);
|
|
GET(F, SPACER);
|
|
GET(F, NUM.SORT);
|
|
end GET;
|
|
|
|
procedure GET(NUM : out NUMERAL_RECORD) is
|
|
begin
|
|
GET(NUM.DECL);
|
|
GET(SPACER);
|
|
GET(SPACER);
|
|
GET(NUM.NUMBER);
|
|
GET(SPACER);
|
|
GET(NUM.GENDER);
|
|
GET(SPACER);
|
|
GET(NUM.SORT);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; NUM : in NUMERAL_RECORD) is
|
|
begin
|
|
PUT(F, NUM.DECL);
|
|
PUT(F, ' ');
|
|
PUT(F, NUM.CS);
|
|
PUT(F, ' ');
|
|
PUT(F, NUM.NUMBER);
|
|
PUT(F, ' ');
|
|
PUT(F, NUM.GENDER);
|
|
PUT(F, ' ');
|
|
PUT(F, NUM.SORT);
|
|
end PUT;
|
|
|
|
procedure PUT(NUM : in NUMERAL_RECORD) is
|
|
begin
|
|
PUT(NUM.DECL);
|
|
PUT(' ');
|
|
PUT(NUM.CS);
|
|
PUT(' ');
|
|
PUT(NUM.NUMBER);
|
|
PUT(' ');
|
|
PUT(NUM.GENDER);
|
|
PUT(' ');
|
|
PUT(NUM.SORT);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; NUM : out NUMERAL_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), NUM.DECL, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), NUM.CS, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), NUM.NUMBER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), NUM.GENDER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), NUM.SORT, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; NUM : in NUMERAL_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + DECN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), NUM.DECL);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), NUM.CS);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), NUM.NUMBER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), NUM.GENDER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMERAL_SORT_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), NUM.SORT);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end NUMERAL_RECORD_IO;
|
|
|
|
|
|
|
|
package body ADVERB_RECORD_IO is
|
|
use COMPARISON_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; A : out ADVERB_RECORD) is
|
|
begin
|
|
GET(F, A.CO);
|
|
end GET;
|
|
|
|
procedure GET(A : out ADVERB_RECORD) is
|
|
begin
|
|
GET(A.CO);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; A : in ADVERB_RECORD) is
|
|
begin
|
|
PUT(F, A.CO);
|
|
end PUT;
|
|
|
|
procedure PUT(A : in ADVERB_RECORD) is
|
|
begin
|
|
PUT(A.CO);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; A : out ADVERB_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), A.CO, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; A : in ADVERB_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + COMPARISON_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), A.CO);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end ADVERB_RECORD_IO;
|
|
|
|
|
|
package body VERB_RECORD_IO is
|
|
use DECN_RECORD_IO;
|
|
use TENSE_VOICE_MOOD_RECORD_IO;
|
|
use PERSON_TYPE_IO;
|
|
use NUMBER_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; V : out VERB_RECORD) is
|
|
begin
|
|
GET(F, V.CON);
|
|
GET(F, SPACER);
|
|
GET(F, V.TENSE_VOICE_MOOD);
|
|
GET(F, SPACER);
|
|
GET(F, V.PERSON);
|
|
GET(F, SPACER);
|
|
GET(F, V.NUMBER);
|
|
end GET;
|
|
|
|
procedure GET(V : out VERB_RECORD) is
|
|
begin
|
|
GET(V.CON);
|
|
GET(SPACER);
|
|
GET(V.TENSE_VOICE_MOOD);
|
|
GET(SPACER);
|
|
GET(V.PERSON);
|
|
GET(SPACER);
|
|
GET(V.NUMBER);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; V : in VERB_RECORD) is
|
|
begin
|
|
PUT(F, V.CON);
|
|
PUT(F, ' ');
|
|
PUT(F, V.TENSE_VOICE_MOOD);
|
|
PUT(F, ' ');
|
|
PUT(F, V.PERSON);
|
|
PUT(F, ' ');
|
|
PUT(F, V.NUMBER);
|
|
end PUT;
|
|
|
|
procedure PUT(V : in VERB_RECORD) is
|
|
begin
|
|
PUT(V.CON);
|
|
PUT(' ');
|
|
PUT(V.TENSE_VOICE_MOOD);
|
|
PUT(' ');
|
|
PUT(V.PERSON);
|
|
PUT(' ');
|
|
PUT(V.NUMBER);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; V : out VERB_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), V.CON, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), V.TENSE_VOICE_MOOD, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), V.PERSON, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), V.NUMBER, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; V : in VERB_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + DECN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), V.CON);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + TENSE_VOICE_MOOD_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), V.TENSE_VOICE_MOOD);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + PERSON_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), V.PERSON);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), V.NUMBER);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end VERB_RECORD_IO;
|
|
|
|
|
|
package body VPAR_RECORD_IO is
|
|
use DECN_RECORD_IO;
|
|
use CASE_TYPE_IO;
|
|
use NUMBER_TYPE_IO;
|
|
use GENDER_TYPE_IO;
|
|
use TENSE_VOICE_MOOD_RECORD_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; VP : out VPAR_RECORD) is
|
|
begin
|
|
GET(F, VP.CON);
|
|
GET(F, SPACER);
|
|
GET(F, VP.CS);
|
|
GET(F, SPACER);
|
|
GET(F, VP.NUMBER);
|
|
GET(F, SPACER);
|
|
GET(F, VP.GENDER);
|
|
GET(F, SPACER);
|
|
GET(F, VP.TENSE_VOICE_MOOD);
|
|
end GET;
|
|
|
|
procedure GET(VP : out VPAR_RECORD) is
|
|
begin
|
|
GET(VP.CON);
|
|
GET(SPACER);
|
|
GET(VP.CS);
|
|
GET(SPACER);
|
|
GET(VP.NUMBER);
|
|
GET(SPACER);
|
|
GET(VP.GENDER);
|
|
GET(SPACER);
|
|
GET(VP.TENSE_VOICE_MOOD);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; VP : in VPAR_RECORD) is
|
|
begin
|
|
PUT(F, VP.CON);
|
|
PUT(F, ' ');
|
|
PUT(F, VP.CS);
|
|
PUT(F, ' ');
|
|
PUT(F, VP.NUMBER);
|
|
PUT(F, ' ');
|
|
PUT(F, VP.GENDER);
|
|
PUT(F, ' ');
|
|
PUT(F, VP.TENSE_VOICE_MOOD);
|
|
end PUT;
|
|
|
|
procedure PUT(VP : in VPAR_RECORD) is
|
|
begin
|
|
PUT(VP.CON);
|
|
PUT(' ');
|
|
PUT(VP.CS);
|
|
PUT(' ');
|
|
PUT(VP.NUMBER);
|
|
PUT(' ');
|
|
PUT(VP.GENDER);
|
|
PUT(' ');
|
|
PUT(VP.TENSE_VOICE_MOOD);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; VP : out VPAR_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), VP.CON, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), VP.CS, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), VP.NUMBER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), VP.GENDER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), VP.TENSE_VOICE_MOOD, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; VP : in VPAR_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + DECN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.CON);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.CS);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.NUMBER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.GENDER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + TENSE_VOICE_MOOD_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.TENSE_VOICE_MOOD);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end VPAR_RECORD_IO;
|
|
|
|
|
|
package body SUPINE_RECORD_IO is
|
|
use DECN_RECORD_IO;
|
|
use CASE_TYPE_IO;
|
|
use NUMBER_TYPE_IO;
|
|
use GENDER_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; VP : out SUPINE_RECORD) is
|
|
begin
|
|
GET(F, VP.CON);
|
|
GET(F, SPACER);
|
|
GET(F, VP.CS);
|
|
GET(F, SPACER);
|
|
GET(F, VP.NUMBER);
|
|
GET(F, SPACER);
|
|
GET(F, VP.GENDER);
|
|
end GET;
|
|
|
|
procedure GET(VP : out SUPINE_RECORD) is
|
|
begin
|
|
GET(VP.CON);
|
|
GET(SPACER);
|
|
GET(VP.CS);
|
|
GET(SPACER);
|
|
GET(VP.NUMBER);
|
|
GET(SPACER);
|
|
GET(VP.GENDER);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; VP : in SUPINE_RECORD) is
|
|
begin
|
|
PUT(F, VP.CON);
|
|
PUT(F, ' ');
|
|
PUT(F, VP.CS);
|
|
PUT(F, ' ');
|
|
PUT(F, VP.NUMBER);
|
|
PUT(F, ' ');
|
|
PUT(F, VP.GENDER);
|
|
end PUT;
|
|
|
|
procedure PUT(VP : in SUPINE_RECORD) is
|
|
begin
|
|
PUT(VP.CON);
|
|
PUT(' ');
|
|
PUT(VP.CS);
|
|
PUT(' ');
|
|
PUT(VP.NUMBER);
|
|
PUT(' ');
|
|
PUT(VP.GENDER);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; VP : out SUPINE_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), VP.CON, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), VP.CS, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), VP.NUMBER, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), VP.GENDER, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; VP : in SUPINE_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + DECN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.CON);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.CS);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.NUMBER);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), VP.GENDER);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end SUPINE_RECORD_IO;
|
|
|
|
|
|
package body PREPOSITION_RECORD_IO is
|
|
use CASE_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
procedure GET(F : in FILE_TYPE; P : out PREPOSITION_RECORD) is
|
|
begin
|
|
GET(F, P.OBJ);
|
|
end GET;
|
|
|
|
procedure GET(P : out PREPOSITION_RECORD) is
|
|
begin
|
|
GET(P.OBJ);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; P : in PREPOSITION_RECORD) is
|
|
begin
|
|
PUT(F, P.OBJ);
|
|
end PUT;
|
|
|
|
procedure PUT(P : in PREPOSITION_RECORD) is
|
|
begin
|
|
PUT(P.OBJ);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; P : out PREPOSITION_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
GET(S(L+1..S'LAST), P.OBJ, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; P : in PREPOSITION_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.OBJ);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end PREPOSITION_RECORD_IO;
|
|
|
|
|
|
package body CONJUNCTION_RECORD_IO is
|
|
NULL_CONJUNCTION_RECORD : CONJUNCTION_RECORD;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; C : out CONJUNCTION_RECORD) is
|
|
-- There is actually nothing to a CONJUNCTION_RECORD, no compoonents
|
|
begin
|
|
C := NULL_CONJUNCTION_RECORD;
|
|
end GET;
|
|
|
|
procedure GET(C : out CONJUNCTION_RECORD) is
|
|
begin
|
|
C := NULL_CONJUNCTION_RECORD;
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; C : in CONJUNCTION_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure PUT(C : in CONJUNCTION_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; C : out CONJUNCTION_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
C := NULL_CONJUNCTION_RECORD;
|
|
LAST := L - 1; -- LAST did not even get to S'FIRST, since nothing to read
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; C : in CONJUNCTION_RECORD) is
|
|
-- Since there is no component, just make the out string blank
|
|
begin
|
|
S(S'FIRST..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end CONJUNCTION_RECORD_IO;
|
|
|
|
|
|
package body INTERJECTION_RECORD_IO is
|
|
NULL_INTERJECTION_RECORD : INTERJECTION_RECORD;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
procedure GET(F : in FILE_TYPE; I : out INTERJECTION_RECORD) is
|
|
begin
|
|
I := NULL_INTERJECTION_RECORD;
|
|
end GET;
|
|
|
|
procedure GET(I : out INTERJECTION_RECORD) is
|
|
begin
|
|
I := NULL_INTERJECTION_RECORD;
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; I : in INTERJECTION_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure PUT(I : in INTERJECTION_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; I : out INTERJECTION_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
I := NULL_INTERJECTION_RECORD;
|
|
LAST := L - 1;
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; I : in INTERJECTION_RECORD) is
|
|
begin
|
|
S(S'FIRST..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end INTERJECTION_RECORD_IO;
|
|
|
|
|
|
|
|
package body TACKON_RECORD_IO is
|
|
NULL_TACKON_RECORD : TACKON_RECORD;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
procedure GET(F : in FILE_TYPE; I : out TACKON_RECORD) is
|
|
begin
|
|
I := NULL_TACKON_RECORD;
|
|
end GET;
|
|
|
|
procedure GET(I : out TACKON_RECORD) is
|
|
begin
|
|
I := NULL_TACKON_RECORD;
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; I : in TACKON_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure PUT(I : in TACKON_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; I : out TACKON_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
I := NULL_TACKON_RECORD;
|
|
LAST := L - 1;
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; I : in TACKON_RECORD) is
|
|
begin
|
|
S(S'FIRST..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end TACKON_RECORD_IO;
|
|
|
|
|
|
package body PREFIX_RECORD_IO is
|
|
|
|
procedure GET(F : in FILE_TYPE; P : out PREFIX_RECORD) is
|
|
begin
|
|
P := NULL_PREFIX_RECORD;
|
|
end GET;
|
|
|
|
procedure GET(P : out PREFIX_RECORD) is
|
|
begin
|
|
P := NULL_PREFIX_RECORD;
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; P : in PREFIX_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure PUT(P : in PREFIX_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; P : out PREFIX_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
P := NULL_PREFIX_RECORD;
|
|
LAST := L - 1;
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; P : in PREFIX_RECORD) is
|
|
begin
|
|
S(S'FIRST..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
end PREFIX_RECORD_IO;
|
|
|
|
|
|
package body SUFFIX_RECORD_IO is
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; P : out SUFFIX_RECORD) is
|
|
begin
|
|
P := NULL_SUFFIX_RECORD;
|
|
end GET;
|
|
|
|
procedure GET(P : out SUFFIX_RECORD) is
|
|
begin
|
|
P := NULL_SUFFIX_RECORD;
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; P : in SUFFIX_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure PUT(P : in SUFFIX_RECORD) is
|
|
begin
|
|
null;
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; P : out SUFFIX_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
P := NULL_SUFFIX_RECORD;
|
|
LAST := L - 1;
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; P : in SUFFIX_RECORD) is
|
|
begin
|
|
S(S'FIRST..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
end SUFFIX_RECORD_IO;
|
|
|
|
|
|
package body QUALITY_RECORD_IO is
|
|
use PART_OF_SPEECH_TYPE_IO;
|
|
use NOUN_RECORD_IO;
|
|
use PRONOUN_RECORD_IO;
|
|
use PROPACK_RECORD_IO;
|
|
use ADJECTIVE_RECORD_IO;
|
|
use NUMERAL_RECORD_IO;
|
|
use ADVERB_RECORD_IO;
|
|
use VERB_RECORD_IO;
|
|
use VPAR_RECORD_IO;
|
|
use SUPINE_RECORD_IO;
|
|
use PREPOSITION_RECORD_IO;
|
|
use CONJUNCTION_RECORD_IO;
|
|
use INTERJECTION_RECORD_IO;
|
|
use TACKON_RECORD_IO;
|
|
use PREFIX_RECORD_IO;
|
|
use SUFFIX_RECORD_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
|
|
NOUN : NOUN_RECORD;
|
|
PRONOUN : PRONOUN_RECORD;
|
|
PROPACK : PROPACK_RECORD;
|
|
ADJECTIVE : ADJECTIVE_RECORD;
|
|
ADVERB : ADVERB_RECORD;
|
|
VERB : VERB_RECORD;
|
|
VPARTICIPLE : VPAR_RECORD;
|
|
SUPIN : SUPINE_RECORD;
|
|
PREPOSITION : PREPOSITION_RECORD;
|
|
CONJUNCTION : CONJUNCTION_RECORD;
|
|
INTERJECTION : INTERJECTION_RECORD;
|
|
NUMERAL : NUMERAL_RECORD;
|
|
TACKN : TACKON_RECORD;
|
|
PREFX : PREFIX_RECORD;
|
|
SUFFX : SUFFIX_RECORD;
|
|
|
|
PR : QUALITY_RECORD;
|
|
|
|
|
|
procedure GET(F : in FILE_TYPE; P : out QUALITY_RECORD) is
|
|
PS : PART_OF_SPEECH_TYPE := X;
|
|
begin
|
|
GET(F, PS);
|
|
GET(F, SPACER);
|
|
case PS is
|
|
when N =>
|
|
GET(F, NOUN);
|
|
P := (N, NOUN);
|
|
when PRON =>
|
|
GET(F, PRONOUN);
|
|
P := (PRON, PRONOUN);
|
|
when PACK =>
|
|
GET(F, PROPACK);
|
|
P := (PACK, PROPACK);
|
|
when ADJ =>
|
|
GET(F, ADJECTIVE);
|
|
P := (ADJ, ADJECTIVE);
|
|
when NUM =>
|
|
GET(F, NUMERAL);
|
|
P := (NUM, NUMERAL);
|
|
when ADV =>
|
|
GET(F, ADVERB);
|
|
P := (ADV, ADVERB);
|
|
when V =>
|
|
GET(F, VERB);
|
|
P := (V, VERB);
|
|
when VPAR =>
|
|
GET(F, VPARTICIPLE);
|
|
P := (VPAR, VPARTICIPLE);
|
|
when SUPINE =>
|
|
GET(F, SUPIN);
|
|
P := (SUPINE, SUPIN);
|
|
when PREP =>
|
|
GET(F, PREPOSITION);
|
|
P := (PREP, PREPOSITION);
|
|
when CONJ =>
|
|
GET(F, CONJUNCTION);
|
|
P := (CONJ, CONJUNCTION);
|
|
when INTERJ =>
|
|
GET(F, INTERJECTION);
|
|
P := (INTERJ, INTERJECTION);
|
|
when TACKON =>
|
|
GET(F, TACKN);
|
|
P := (TACKON, TACKN);
|
|
when PREFIX =>
|
|
GET(F, PREFX);
|
|
P := (PREFIX, PREFX);
|
|
when SUFFIX =>
|
|
GET(F, SUFFX);
|
|
P := (SUFFIX, SUFFX);
|
|
when X =>
|
|
P := (POFS => X);
|
|
end case;
|
|
return;
|
|
end GET;
|
|
|
|
procedure GET(P : out QUALITY_RECORD) is
|
|
PS : PART_OF_SPEECH_TYPE := X;
|
|
begin
|
|
GET(PS);
|
|
GET(SPACER);
|
|
case PS is
|
|
when N =>
|
|
GET(NOUN);
|
|
P := (N, NOUN);
|
|
when PRON =>
|
|
GET(PRONOUN);
|
|
P := (PRON, PRONOUN);
|
|
when PACK =>
|
|
GET(PROPACK);
|
|
P := (PACK, PROPACK);
|
|
when ADJ =>
|
|
GET(ADJECTIVE);
|
|
P := (ADJ, ADJECTIVE);
|
|
when NUM =>
|
|
GET(NUMERAL);
|
|
P := (NUM, NUMERAL);
|
|
when ADV =>
|
|
GET(ADVERB);
|
|
P := (ADV, ADVERB);
|
|
when V =>
|
|
GET(VERB);
|
|
P := (V, VERB);
|
|
when VPAR =>
|
|
GET(VPARTICIPLE);
|
|
P := (VPAR, VPARTICIPLE);
|
|
when SUPINE =>
|
|
GET(SUPIN);
|
|
P := (SUPINE, SUPIN);
|
|
when PREP =>
|
|
GET(PREPOSITION);
|
|
P := (PREP, PREPOSITION);
|
|
when CONJ =>
|
|
GET(CONJUNCTION);
|
|
P := (CONJ, CONJUNCTION);
|
|
when INTERJ =>
|
|
GET(INTERJECTION);
|
|
P := (INTERJ, INTERJECTION);
|
|
when TACKON =>
|
|
GET(TACKN);
|
|
P := (TACKON, TACKN);
|
|
when PREFIX =>
|
|
GET(PREFX);
|
|
P := (PREFIX, PREFX);
|
|
when SUFFIX =>
|
|
GET(SUFFX);
|
|
P := (SUFFIX, SUFFX);
|
|
when X =>
|
|
P := (POFS => X);
|
|
end case;
|
|
return;
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; P : in QUALITY_RECORD) is
|
|
C : POSITIVE := POSITIVE(COL(F));
|
|
begin
|
|
PUT(F, P.POFS);
|
|
PUT(F, ' ');
|
|
case P.POFS is
|
|
when N =>
|
|
PUT(F, P.N);
|
|
when PRON =>
|
|
PUT(F, P.PRON);
|
|
when PACK =>
|
|
PUT(F, P.PACK);
|
|
when ADJ =>
|
|
PUT(F, P.ADJ);
|
|
when NUM =>
|
|
PUT(F, P.NUM);
|
|
when ADV =>
|
|
PUT(F, P.ADV);
|
|
when V =>
|
|
PUT(F, P.V);
|
|
when VPAR =>
|
|
PUT(F, P.VPAR);
|
|
when SUPINE =>
|
|
PUT(F, P.SUPINE);
|
|
when PREP =>
|
|
PUT(F, P.PREP);
|
|
when CONJ =>
|
|
PUT(F, P.CONJ);
|
|
when INTERJ =>
|
|
PUT(F, P.INTERJ);
|
|
when TACKON =>
|
|
PUT(F, P.TACKON);
|
|
when PREFIX =>
|
|
PUT(F, P.PREFIX);
|
|
when SUFFIX =>
|
|
PUT(F, P.SUFFIX);
|
|
when others =>
|
|
null;
|
|
end case;
|
|
PUT(F, STRING'((INTEGER(COL(F))..QUALITY_RECORD_IO.DEFAULT_WIDTH+C-1 => ' ')));
|
|
return;
|
|
end PUT;
|
|
|
|
|
|
procedure PUT(P : in QUALITY_RECORD) is
|
|
C : POSITIVE := POSITIVE(COL);
|
|
begin
|
|
PUT(P.POFS);
|
|
PUT(' ');
|
|
case P.POFS is
|
|
when N =>
|
|
PUT(P.N);
|
|
when PRON =>
|
|
PUT(P.PRON);
|
|
when PACK =>
|
|
PUT(P.PACK);
|
|
when ADJ =>
|
|
PUT(P.ADJ);
|
|
when NUM =>
|
|
PUT(P.NUM);
|
|
when ADV =>
|
|
PUT(P.ADV);
|
|
when V =>
|
|
PUT(P.V);
|
|
when VPAR =>
|
|
PUT(P.VPAR);
|
|
when SUPINE =>
|
|
PUT(P.SUPINE);
|
|
when PREP =>
|
|
PUT(P.PREP);
|
|
when CONJ =>
|
|
PUT(P.CONJ);
|
|
when INTERJ =>
|
|
PUT(P.INTERJ);
|
|
when TACKON =>
|
|
PUT(P.TACKON);
|
|
when PREFIX =>
|
|
PUT(P.PREFIX);
|
|
when SUFFIX =>
|
|
PUT(P.SUFFIX);
|
|
when others =>
|
|
null;
|
|
end case;
|
|
PUT(STRING'((INTEGER(COL)..QUALITY_RECORD_IO.DEFAULT_WIDTH+C-1 => ' ')));
|
|
return;
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; P : out QUALITY_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
PS : PART_OF_SPEECH_TYPE := X;
|
|
begin
|
|
GET(S, PS, L);
|
|
LAST := L; -- In case it is not set later
|
|
L := L + 1;
|
|
case PS is
|
|
when N =>
|
|
GET(S(L+1..S'LAST), NOUN, LAST);
|
|
P := (N, NOUN);
|
|
when PRON =>
|
|
GET(S(L+1..S'LAST), PRONOUN, LAST);
|
|
P := (PRON, PRONOUN);
|
|
when PACK =>
|
|
GET(S(L+1..S'LAST), PROPACK, LAST);
|
|
P := (PACK, PROPACK);
|
|
when ADJ =>
|
|
GET(S(L+1..S'LAST), ADJECTIVE, LAST);
|
|
P := (ADJ, ADJECTIVE);
|
|
when NUM =>
|
|
GET(S(L+1..S'LAST), NUMERAL, LAST);
|
|
P := (NUM, NUMERAL);
|
|
when ADV =>
|
|
GET(S(L+1..S'LAST), ADVERB, LAST);
|
|
P := (ADV, ADVERB);
|
|
when V =>
|
|
GET(S(L+1..S'LAST), VERB, LAST);
|
|
P := (V, VERB);
|
|
when VPAR =>
|
|
GET(S(L+1..S'LAST), VPARTICIPLE, LAST);
|
|
P := (VPAR, VPARTICIPLE);
|
|
when SUPINE =>
|
|
GET(S(L+1..S'LAST), SUPIN, LAST);
|
|
P := (SUPINE, SUPIN);
|
|
when PREP =>
|
|
GET(S(L+1..S'LAST), PREPOSITION, LAST);
|
|
P := (PREP, PREPOSITION);
|
|
when CONJ =>
|
|
GET(S(L+1..S'LAST), CONJUNCTION, LAST);
|
|
P := (CONJ, CONJUNCTION);
|
|
when INTERJ =>
|
|
GET(S(L+1..S'LAST), INTERJECTION, LAST);
|
|
P := (INTERJ, INTERJECTION);
|
|
when TACKON =>
|
|
GET(S(L+1..S'LAST), TACKN, LAST);
|
|
P := (TACKON, TACKN);
|
|
when PREFIX =>
|
|
GET(S(L+1..S'LAST), PREFX, LAST);
|
|
P := (PREFIX, PREFX);
|
|
when SUFFIX =>
|
|
GET(S(L+1..S'LAST), SUFFX, LAST);
|
|
P := (SUFFIX, SUFFX);
|
|
when X =>
|
|
P := (POFS => X);
|
|
end case;
|
|
return;
|
|
end GET;
|
|
|
|
|
|
procedure PUT(S : out STRING; P : in QUALITY_RECORD) is
|
|
-- Note that this does not Put with a uniform width
|
|
-- which would require a constant QUALITY_RECORD_IO.DEFAULT_WIDTH
|
|
-- Rather we Put to minimal size with NOUN_RECORD_IO.DEFAULT_WIDTH,
|
|
-- PRONOUN_RECORD_IO,DEFAULT_WIDTH, ...
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + PART_OF_SPEECH_TYPE_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.POFS);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
case P.POFS is
|
|
when N =>
|
|
M := L + NOUN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.N);
|
|
when PRON =>
|
|
M := L + PRONOUN_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.PRON);
|
|
when PACK =>
|
|
M := L + PROPACK_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.PACK);
|
|
when ADJ =>
|
|
M := L + ADJECTIVE_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.ADJ);
|
|
when NUM =>
|
|
M := L + NUMERAL_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.NUM);
|
|
when ADV =>
|
|
M := L + ADVERB_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.ADV);
|
|
when V =>
|
|
M := L + VERB_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.V);
|
|
when VPAR =>
|
|
M := L + VPAR_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.VPAR);
|
|
when SUPINE =>
|
|
M := L + SUPINE_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.SUPINE);
|
|
when PREP =>
|
|
M := L + PREPOSITION_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.PREP);
|
|
when CONJ =>
|
|
M := L + CONJUNCTION_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.CONJ);
|
|
when INTERJ =>
|
|
M := L + INTERJECTION_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.INTERJ);
|
|
when TACKON =>
|
|
M := L + TACKON_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.TACKON);
|
|
when PREFIX =>
|
|
M := L + PREFIX_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.PREFIX);
|
|
when SUFFIX =>
|
|
M := L + SUFFIX_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.SUFFIX);
|
|
when others =>
|
|
null;
|
|
end case;
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end QUALITY_RECORD_IO;
|
|
|
|
|
|
package body ENDING_RECORD_IO is
|
|
use INTEGER_IO;
|
|
use TEXT_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
SF, BLANKS : ENDING := (others => ' ');
|
|
N : ENDING_SIZE_TYPE := 0;
|
|
|
|
procedure GET(F : in FILE_TYPE; X : out ENDING_RECORD) is
|
|
begin
|
|
SF := BLANKS;
|
|
GET(F, N);
|
|
if N = 0 then
|
|
X := NULL_ENDING_RECORD;
|
|
else
|
|
GET(F, SPACER); -- Note this means exactly one blank
|
|
GET(F, SF(1..N));
|
|
X := (N, SF);
|
|
end if;
|
|
end GET;
|
|
|
|
procedure GET(X : out ENDING_RECORD) is
|
|
begin
|
|
SF := BLANKS;
|
|
GET(N);
|
|
if N = 0 then
|
|
X := NULL_ENDING_RECORD;
|
|
else
|
|
GET(SPACER);
|
|
GET(SF(1..N));
|
|
X := (N, SF);
|
|
end if;
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; X : in ENDING_RECORD) is
|
|
begin
|
|
PUT(F, X.SIZE, 1);
|
|
PUT(F, ' ');
|
|
PUT(F, X.SUF(1..X.SIZE) & BLANKS(X.SIZE+1..MAX_ENDING_SIZE));
|
|
end PUT;
|
|
|
|
procedure PUT(X : in ENDING_RECORD) is
|
|
begin
|
|
PUT(X.SIZE, 1);
|
|
PUT(' ');
|
|
PUT(X.SUF(1..X.SIZE) & BLANKS(X.SIZE+1..MAX_ENDING_SIZE));
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; X : out ENDING_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
SF := BLANKS;
|
|
GET(S(L+1..S'LAST), N, L);
|
|
if N = 0 then
|
|
X := NULL_ENDING_RECORD;
|
|
LAST := L;
|
|
else
|
|
L := L + 1;
|
|
--if S(L+N-1) = ' ' or else
|
|
-- S(L+N+1) /= ' ' then
|
|
--if
|
|
-- S(L+N+1) /= ' ' then
|
|
-- TEXT_IO.PUT_LINE("ERROR in INFLECTION =>" & S);
|
|
--else
|
|
SF := S(L+1..L+N) & BLANKS(N+1..MAX_ENDING_SIZE);
|
|
LAST := L + N;
|
|
X := (N, SF(1..N) & BLANKS(N+1..MAX_ENDING_SIZE));
|
|
--end if;
|
|
end if;
|
|
exception
|
|
when others =>
|
|
TEXT_IO.PUT_LINE("ENDING ERRROR " & S);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; X : in ENDING_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + 2;
|
|
PUT(S(L+1..M), X.SIZE);
|
|
M := M + 1;
|
|
S(M) := ' ';
|
|
if X.SIZE > 0 then
|
|
L := M;
|
|
M := L + X.SIZE;
|
|
S(L+1..M) := X.SUF(1..X.SIZE);
|
|
end if;
|
|
-- Being very careful here, first to fill out to the MAX_ENDING_SIZE
|
|
L := M;
|
|
M := L + MAX_ENDING_SIZE - X.SIZE;
|
|
S(L+1..M) := (others => ' ');
|
|
-- Then to fill out the rest of the out string, if any
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
|
|
end ENDING_RECORD_IO;
|
|
|
|
|
|
package body INFLECTION_RECORD_IO is
|
|
use QUALITY_RECORD_IO;
|
|
use STEM_KEY_TYPE_IO;
|
|
use ENDING_RECORD_IO;
|
|
use AGE_TYPE_IO;
|
|
use FREQUENCY_TYPE_IO;
|
|
SPACER : CHARACTER := ' ';
|
|
|
|
PE : INFLECTION_RECORD;
|
|
|
|
procedure GET(F : in FILE_TYPE; P : out INFLECTION_RECORD) is
|
|
begin
|
|
GET(F, P.QUAL);
|
|
GET(F, SPACER);
|
|
GET(F, P.KEY);
|
|
GET(F, SPACER);
|
|
GET(F, P.ENDING);
|
|
GET(F, SPACER);
|
|
GET(F, P.AGE);
|
|
GET(F, SPACER);
|
|
GET(F, P.FREQ);
|
|
end GET;
|
|
|
|
procedure GET(P : out INFLECTION_RECORD) is
|
|
begin
|
|
GET(P.QUAL);
|
|
GET(SPACER);
|
|
GET(P.KEY);
|
|
GET(SPACER);
|
|
GET(P.ENDING);
|
|
GET(SPACER);
|
|
GET(P.AGE);
|
|
GET(SPACER);
|
|
GET(P.FREQ);
|
|
end GET;
|
|
|
|
procedure PUT(F : in FILE_TYPE; P : in INFLECTION_RECORD) is
|
|
begin
|
|
PUT(F, P.QUAL);
|
|
PUT(F, ' ');
|
|
PUT(F, P.KEY, 1);
|
|
PUT(F, ' ');
|
|
PUT(F, P.ENDING);
|
|
PUT(F, ' ');
|
|
PUT(F, P.AGE);
|
|
PUT(F, ' ');
|
|
PUT(F, P.FREQ);
|
|
end PUT;
|
|
|
|
procedure PUT(P : in INFLECTION_RECORD) is
|
|
begin
|
|
PUT(P.QUAL);
|
|
PUT(' ');
|
|
PUT(P.KEY, 1);
|
|
PUT(' ');
|
|
PUT(P.ENDING);
|
|
PUT(' ');
|
|
PUT(P.AGE);
|
|
PUT(' ');
|
|
PUT(P.FREQ);
|
|
end PUT;
|
|
|
|
procedure GET(S : in STRING; P : out INFLECTION_RECORD; LAST : out INTEGER) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
begin
|
|
LAST := 0;
|
|
P := PE;
|
|
GET(S(L+1..S'LAST), P.QUAL, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.KEY, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.ENDING, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.AGE, L);
|
|
L := L + 1;
|
|
GET(S(L+1..S'LAST), P.FREQ, LAST);
|
|
end GET;
|
|
|
|
procedure PUT(S : out STRING; P : in INFLECTION_RECORD) is
|
|
L : INTEGER := S'FIRST - 1;
|
|
M : INTEGER := 0;
|
|
begin
|
|
M := L + QUALITY_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.QUAL);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + 1;
|
|
PUT(S(L+1..M), P.KEY);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + ENDING_RECORD_IO.DEFAULT_WIDTH;
|
|
PUT(S(L+1..M), P.ENDING);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + 1;
|
|
PUT(S(L+1..M), P.AGE);
|
|
L := M + 1;
|
|
S(L) := ' ';
|
|
M := L + 1;
|
|
PUT(S(L+1..M), P.FREQ);
|
|
S(M+1..S'LAST) := (others => ' ');
|
|
end PUT;
|
|
|
|
end INFLECTION_RECORD_IO;
|
|
|
|
|
|
procedure ESTABLISH_INFLECTIONS_SECTION is
|
|
-- Loads the inflection array from the file prepared in FILE_INFLECTIONS_SECTION
|
|
-- If N = 0 (an artifical flag for the section for blank inflections = 5)
|
|
-- computes the LELL..LELF indices for use in WORD
|
|
use TEXT_IO;
|
|
use INFLECTION_RECORD_IO;
|
|
use LEL_SECTION_IO;
|
|
|
|
procedure LOAD_LEL_INDEXES is
|
|
-- Load arrays from file
|
|
I : INTEGER := 0;
|
|
--IR : INFLECTION_RECORD;
|
|
N, XN : INTEGER := 0;
|
|
CH, XCH : CHARACTER := ' ';
|
|
INFLECTIONS_SECTIONS_FILE : LEL_SECTION_IO.FILE_TYPE;
|
|
begin
|
|
OPEN(INFLECTIONS_SECTIONS_FILE, IN_FILE, INFLECTIONS_SECTIONS_NAME);
|
|
NUMBER_OF_INFLECTIONS := 0;
|
|
|
|
LEL_SECTION_IO.READ(INFLECTIONS_SECTIONS_FILE,
|
|
LEL,
|
|
LEL_SECTION_IO.POSITIVE_COUNT(5));
|
|
|
|
|
|
I := 1;
|
|
BELF(0, ' ') := I;
|
|
BELL(0, ' ') := 0;
|
|
loop
|
|
exit when LEL(I) = NULL_INFLECTION_RECORD;
|
|
BEL(I) := LEL(I);
|
|
|
|
BELL(0, ' ') := I;
|
|
I := I + 1;
|
|
end loop;
|
|
|
|
NUMBER_OF_INFLECTIONS := NUMBER_OF_INFLECTIONS + I - 1;
|
|
|
|
LEL_SECTION_IO.READ(INFLECTIONS_SECTIONS_FILE,
|
|
LEL,
|
|
LEL_SECTION_IO.POSITIVE_COUNT(1));
|
|
|
|
I := 1;
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
|
|
XN := N;
|
|
XCH := CH;
|
|
LELF(N, CH) := I;
|
|
|
|
C1_LOOP:
|
|
loop
|
|
N1_LOOP:
|
|
loop
|
|
exit C1_LOOP when LEL(I) = NULL_INFLECTION_RECORD;
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
|
|
if CH /= XCH then
|
|
LELL(XN, XCH) := I - 1;
|
|
LELF(N, CH) := I;
|
|
LELL(N, CH) := 0;
|
|
XCH := CH;
|
|
XN := N;
|
|
elsif N /= XN then
|
|
LELL(XN, CH) := I - 1;
|
|
LELF(N, CH) := I;
|
|
LELL(N, CH) := 0;
|
|
XN := N;
|
|
exit N1_LOOP;
|
|
end if;
|
|
|
|
|
|
I := I + 1;
|
|
|
|
|
|
end loop N1_LOOP;
|
|
|
|
end loop C1_LOOP;
|
|
|
|
LELL(XN, XCH) := I - 1;
|
|
|
|
NUMBER_OF_INFLECTIONS := NUMBER_OF_INFLECTIONS + I - 1;
|
|
|
|
LEL_SECTION_IO.READ(INFLECTIONS_SECTIONS_FILE,
|
|
LEL,
|
|
LEL_SECTION_IO.POSITIVE_COUNT(2));
|
|
|
|
|
|
I := 1;
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
|
|
XN := N;
|
|
XCH := CH;
|
|
LELF(N, CH) := I;
|
|
|
|
C2_LOOP:
|
|
loop
|
|
N2_LOOP:
|
|
loop
|
|
exit C2_LOOP when LEL(I) = NULL_INFLECTION_RECORD;
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
exit when CH > 'r';
|
|
|
|
|
|
|
|
if CH /= XCH then
|
|
LELL(XN, XCH) := I - 1;
|
|
LELF(N, CH) := I;
|
|
LELL(N, CH) := 0;
|
|
XCH := CH;
|
|
XN := N;
|
|
elsif N /= XN then
|
|
LELL(XN, CH) := I - 1;
|
|
LELF(N, CH) := I;
|
|
LELL(N, CH) := 0;
|
|
XN := N;
|
|
exit N2_LOOP;
|
|
end if;
|
|
|
|
I := I + 1;
|
|
|
|
end loop N2_LOOP;
|
|
|
|
end loop C2_LOOP;
|
|
|
|
LELL(XN, XCH) := I - 1;
|
|
|
|
NUMBER_OF_INFLECTIONS := NUMBER_OF_INFLECTIONS + I - 1;
|
|
|
|
LEL_SECTION_IO.READ(INFLECTIONS_SECTIONS_FILE,
|
|
LEL,
|
|
LEL_SECTION_IO.POSITIVE_COUNT(3));
|
|
|
|
I := 1;
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
|
|
XN := N;
|
|
XCH := CH;
|
|
LELF(N, CH) := I;
|
|
|
|
C3_LOOP:
|
|
loop
|
|
N3_LOOP:
|
|
loop
|
|
exit C3_LOOP when LEL(I) = NULL_INFLECTION_RECORD;
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
exit when CH > 's';
|
|
|
|
|
|
if CH /= XCH then
|
|
LELL(XN, XCH) := I - 1;
|
|
LELF(N, CH) := I;
|
|
LELL(N, CH) := 0;
|
|
XCH := CH;
|
|
XN := N;
|
|
elsif N /= XN then
|
|
LELL(XN, CH) := I - 1;
|
|
LELF(N, CH) := I;
|
|
LELL(N, CH) := 0;
|
|
XN := N;
|
|
exit N3_LOOP;
|
|
end if;
|
|
|
|
I := I + 1;
|
|
|
|
|
|
end loop N3_LOOP;
|
|
|
|
end loop C3_LOOP;
|
|
|
|
LELL(XN, XCH) := I - 1;
|
|
|
|
NUMBER_OF_INFLECTIONS := NUMBER_OF_INFLECTIONS + I - 1;
|
|
|
|
LEL_SECTION_IO.READ(INFLECTIONS_SECTIONS_FILE,
|
|
LEL,
|
|
LEL_SECTION_IO.POSITIVE_COUNT(4));
|
|
|
|
|
|
I := 1;
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
|
|
|
|
XN := N;
|
|
XCH := CH;
|
|
LELF(N, CH) := I;
|
|
|
|
C4_LOOP:
|
|
loop
|
|
N4_LOOP:
|
|
loop
|
|
|
|
exit C4_LOOP when LEL(I).QUAL.POFS = PRON and then
|
|
(LEL(I).QUAL.PRON.DECL.WHICH = 1 or
|
|
LEL(I).QUAL.PRON.DECL.WHICH = 2);
|
|
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
|
|
if CH /= XCH then
|
|
LELL(XN, XCH) := I - 1;
|
|
LELF(N, CH) := I;
|
|
LELL(N, CH) := 0;
|
|
XCH := CH;
|
|
XN := N;
|
|
elsif N /= XN then
|
|
LELL(XN, CH) := I - 1;
|
|
LELF(N, CH) := I;
|
|
LELL(N, CH) := 0;
|
|
XN := N;
|
|
exit N4_LOOP;
|
|
end if;
|
|
|
|
I := I + 1;
|
|
|
|
end loop N4_LOOP;
|
|
|
|
end loop C4_LOOP;
|
|
|
|
LELL(XN, XCH) := I - 1;
|
|
|
|
begin
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
|
|
|
|
XN := N;
|
|
XCH := CH;
|
|
PELF(N, CH) := I;
|
|
PELL(N, CH) := 0;
|
|
|
|
|
|
C_P_LOOP:
|
|
loop
|
|
N_P_LOOP:
|
|
loop
|
|
exit C_P_LOOP when LEL(I) = NULL_INFLECTION_RECORD;
|
|
|
|
N := LEL(I).ENDING.SIZE;
|
|
|
|
CH := LEL(I).ENDING.SUF(N);
|
|
|
|
|
|
if CH /= XCH then
|
|
PELL(XN, XCH) := I - 1;
|
|
PELF(N, CH) := I;
|
|
PELL(N, CH) := 0;
|
|
XCH := CH;
|
|
XN := N;
|
|
elsif N /= XN then
|
|
PELL(XN, CH) := I - 1;
|
|
PELF(N, CH) := I;
|
|
PELL(N, CH) := 0;
|
|
XN := N;
|
|
exit N_P_LOOP;
|
|
end if;
|
|
|
|
I := I + 1;
|
|
|
|
end loop N_P_LOOP;
|
|
|
|
end loop C_P_LOOP;
|
|
|
|
|
|
exception
|
|
when CONSTRAINT_ERROR => null;
|
|
end;
|
|
|
|
PELL(XN, XCH) := I - 1;
|
|
NUMBER_OF_INFLECTIONS := NUMBER_OF_INFLECTIONS + I - 1;
|
|
CLOSE(INFLECTIONS_SECTIONS_FILE);
|
|
|
|
end LOAD_LEL_INDEXES;
|
|
|
|
begin
|
|
|
|
PREFACE.PUT("INFLECTION_ARRAY being loaded");
|
|
PREFACE.SET_COL(33);
|
|
PREFACE.PUT("-- ");
|
|
LOAD_LEL_INDEXES; -- Makes indexes from array
|
|
PREFACE.PUT(NUMBER_OF_INFLECTIONS, 6);
|
|
PREFACE.PUT(" entries");
|
|
PREFACE.SET_COL(55); PREFACE.PUT_LINE("-- Loaded correctly");
|
|
|
|
exception
|
|
when Text_IO.Name_Error =>
|
|
NEW_LINE;
|
|
PUT_LINE("There is no " & INFLECTIONS_SECTIONS_NAME & " file.");
|
|
PUT_LINE("The program cannot work without one.");
|
|
PUT_LINE("Make sure you are in the subdirectory containing the files");
|
|
PUT_LINE("for inflections, dictionary, addons and uniques.");
|
|
raise GIVE_UP;
|
|
|
|
end ESTABLISH_INFLECTIONS_SECTION;
|
|
|
|
|
|
|
|
begin -- initialization of body of INFLECTIONS_PACKAGE
|
|
--TEXT_IO.PUT_LINE("Initializing INFLECTIONS_PACKAGE");
|
|
|
|
PART_OF_SPEECH_TYPE_IO.DEFAULT_WIDTH := PART_OF_SPEECH_TYPE'WIDTH;
|
|
GENDER_TYPE_IO.DEFAULT_WIDTH := GENDER_TYPE'WIDTH;
|
|
CASE_TYPE_IO.DEFAULT_WIDTH := CASE_TYPE'WIDTH;
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH := NUMBER_TYPE'WIDTH;
|
|
PERSON_TYPE_IO.DEFAULT_WIDTH := 1;
|
|
COMPARISON_TYPE_IO.DEFAULT_WIDTH := COMPARISON_TYPE'WIDTH;
|
|
TENSE_TYPE_IO.DEFAULT_WIDTH := TENSE_TYPE'WIDTH;
|
|
VOICE_TYPE_IO.DEFAULT_WIDTH := VOICE_TYPE'WIDTH;
|
|
MOOD_TYPE_IO.DEFAULT_WIDTH := MOOD_TYPE'WIDTH;
|
|
NOUN_KIND_TYPE_IO.DEFAULT_WIDTH := NOUN_KIND_TYPE'WIDTH;
|
|
PRONOUN_KIND_TYPE_IO.DEFAULT_WIDTH := PRONOUN_KIND_TYPE'WIDTH;
|
|
VERB_KIND_TYPE_IO.DEFAULT_WIDTH := VERB_KIND_TYPE'WIDTH;
|
|
NUMERAL_SORT_TYPE_IO.DEFAULT_WIDTH := NUMERAL_SORT_TYPE'WIDTH;
|
|
AGE_TYPE_IO.DEFAULT_WIDTH := AGE_TYPE'WIDTH;
|
|
FREQUENCY_TYPE_IO.DEFAULT_WIDTH := FREQUENCY_TYPE'WIDTH;
|
|
|
|
DECN_RECORD_IO.DEFAULT_WIDTH :=
|
|
1 + 1 + --WHICH_TYPE_IO_DEFAULT_WIDTH + 1 +
|
|
1; --VARIANT_TYPE_IO_DEFAULT_WIDTH;
|
|
TENSE_VOICE_MOOD_RECORD_IO.DEFAULT_WIDTH :=
|
|
TENSE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
VOICE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
MOOD_TYPE_IO.DEFAULT_WIDTH;
|
|
NOUN_RECORD_IO.DEFAULT_WIDTH :=
|
|
DECN_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
CASE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PRONOUN_RECORD_IO.DEFAULT_WIDTH :=
|
|
DECN_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
CASE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PROPACK_RECORD_IO.DEFAULT_WIDTH :=
|
|
DECN_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
CASE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
ADJECTIVE_RECORD_IO.DEFAULT_WIDTH :=
|
|
DECN_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
CASE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
GENDER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
COMPARISON_TYPE_IO.DEFAULT_WIDTH;
|
|
ADVERB_RECORD_IO.DEFAULT_WIDTH :=
|
|
COMPARISON_TYPE_IO.DEFAULT_WIDTH;
|
|
VERB_RECORD_IO.DEFAULT_WIDTH :=
|
|
DECN_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
TENSE_VOICE_MOOD_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
PERSON_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH;
|
|
VPAR_RECORD_IO.DEFAULT_WIDTH :=
|
|
DECN_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
CASE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
GENDER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
TENSE_VOICE_MOOD_RECORD_IO.DEFAULT_WIDTH;
|
|
SUPINE_RECORD_IO.DEFAULT_WIDTH :=
|
|
DECN_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
CASE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
GENDER_TYPE_IO.DEFAULT_WIDTH;
|
|
PREPOSITION_RECORD_IO.DEFAULT_WIDTH := CASE_TYPE_IO.DEFAULT_WIDTH;
|
|
CONJUNCTION_RECORD_IO.DEFAULT_WIDTH := 0;
|
|
INTERJECTION_RECORD_IO.DEFAULT_WIDTH := 0;
|
|
NUMERAL_RECORD_IO.DEFAULT_WIDTH :=
|
|
DECN_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
CASE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMBER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
GENDER_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
NUMERAL_SORT_TYPE_IO.DEFAULT_WIDTH;
|
|
TACKON_RECORD_IO.DEFAULT_WIDTH := 0;
|
|
PREFIX_RECORD_IO.DEFAULT_WIDTH := 0;
|
|
SUFFIX_RECORD_IO.DEFAULT_WIDTH := 0;
|
|
QUALITY_RECORD_IO.DEFAULT_WIDTH := PART_OF_SPEECH_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
VPAR_RECORD_IO.DEFAULT_WIDTH; -- Largest
|
|
ENDING_RECORD_IO.DEFAULT_WIDTH := 3 + 1 +
|
|
MAX_ENDING_SIZE;
|
|
INFLECTION_RECORD_IO.DEFAULT_WIDTH := QUALITY_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
1 + 1 +
|
|
ENDING_RECORD_IO.DEFAULT_WIDTH + 1 +
|
|
AGE_TYPE_IO.DEFAULT_WIDTH + 1 +
|
|
FREQUENCY_TYPE_IO.DEFAULT_WIDTH;
|
|
|
|
|
|
end INFLECTIONS_PACKAGE;
|