unit ulecrais;

interface
procedure lecrais;

implementation
uses umoslog,uinirais,SysUtils;

	(*****************)
		(**  moslog	**)
		(**  lecrais	**)
		(*****************)

procedure cherchmot(var i:integer);
var	j:integer;
	(* recherche du mot mot dans le dictionnaire
	*******************************************
si il n'y est pas, on demande sa catégorie et on le rajoute dans le dico *)
begin		(* on rend son rang, i *)
calhsh(mot,i);
i := hsh[i];
j := i;
commande := 'g';
while i <> 0 do
	begin	(* recherche selon son hshcod *)
	if mot <> mot_[j]
	then	begin
		j := chai[j];
		i := j;
		end
	else	i := 0;	(* trouv‚ *)
	end;
i := j;
if j=0
then	begin	(* mot inconnu *)
	i := 1;
	if code[prec]=tyarticle
	then	commande := 'n' (* mot précédent de la phrase est un article *)
	else	begin
		commande := 'g';
		while commande='g' do
			begin	(* demander la catégorie *)
			writeln(output,mot,' est inconnu');
			write(output,'c''est quoi (Nom,Adj,Verbe,aDverbe ou Quit) ');
			read(input,commande); readln(input);
			commande:=LowerCase(commande);
			if (commande='') or (commande='quit') or (commande='q')
			then	i := 0	(* on poubellifie *)
			else	begin
				if commande='adverbe' then commande:='d';
        commande:=commande[1];
				if (commande='a') or (commande='d')
				then	commande := 'j';
				if (commande <> 'n') and (commande <> 'j')
				and (commande <> 'v') and (commande <> 'd')
				then	commande := 'g';
				end
			end;
		end;
	if i <> 0
	then	begin
		c := ord(commande[1]);
		nc := c;
		vax := nb_mot;
		nouveau;
		i := nb_mot;
		end;
	end;
end;

procedure lecrais;	  (* lecture d'une phrase *)
var	i,x:integer;	  (***********************)
begin			  (* le rang de chacun des mots est rangé dans *)
ques := 0; phrase := '';  (* le tableau m ,le nombre de mots est nbr_mot *)
while phrase='' do
	begin
	if fich
	then	begin		(* lecture dans un fichier *)
		readln(f9);	read(f9,phrase);	writeln(output,phrase);
		end
	else	begin		(* lecture sur le terminal *)
		write(output,' ? '); read(input,phrase);   readln(input);
		end;
	end;
if (phrase[1]='*') or (phrase='?') or (phrase='help')
or (phrase='fin')
then	ok := 1
else	begin
	if right_(phrase,1)='?'
	then	begin
		x := length(phrase);	(* suppression du ? final *)
		phrase := left_(phrase,x-1);
		ques := 2;
		end;
	p := 1;	nbr_mot := 0;	prec := 0;
	for i := 1 to 30 do	m[i] := 0;
	for i := 1 to length(phrase) do
		begin		(* suppression des accents sauf à *)
		case phrase[i] of
			''''		:phrase[i] := ' ';
			'è','é','ê'	:phrase[i] := 'e';
			'ç'		:phrase[i] := 'c';
			'ù'		:phrase[i] := 'u';
			else
			end;
		end;
	while p<length(phrase) do
		begin		(* extraction de tous les mots *)
		commande := ' ';
		q := instr(p,phrase,commande);
		if q=0	then	q := length(phrase)+1;
		mot := mid_(phrase,p,q-p);
		p := q+1;
		commande := '-';
		q := instr(1,mot,commande);
		if q <> 0
		then	begin
			mot := left_(mot,q-1);
			ques := 2;
			end;
		cherchmot(i);
		if i <> 0
		then	begin		(* on range le code du mot *)
			nbr_mot := nbr_mot+1;
			m[nbr_mot] := i;
			prec := i;
			end
		else	begin
			p := length(phrase);	ok := 2;
			end;
		end;
	end;
end;

end.
