(************************************************************************* Nous voici maintenant … la version d‚finitive de notre structure de donn‚es. ***************************************************************************) MODULE nanotex3; IMPORT IO,Str,Lib,liste3,FIO,Window; FROM Storage IMPORT ALLOCATE,DEALLOCATE; TYPE t_ptr_t_paragraphe = POINTER TO t_paragraphe; t_paragraphe = CLASS (liste3.t_element) longueur : CARDINAL; ptr_chaine : ADDRESS; PROCEDURE initialise_element ( VAR x : ARRAY OF CHAR);VIRTUAL; BEGIN longueur := Str.Length(x); ALLOCATE(ptr_chaine,longueur); Lib.Move(ADR(x),ptr_chaine,longueur); END initialise_element; PROCEDURE affiche_element (); VIRTUAL; VAR l_tampon : ARRAY[0..1023] OF CHAR; BEGIN Lib.Move(ptr_chaine,ADR(l_tampon),longueur); l_tampon[longueur] := CHR(0); IO.WrStr(l_tampon); IO.WrLn; END affiche_element; PROCEDURE detruit_element () ; VIRTUAL; BEGIN DEALLOCATE(ptr_chaine,SIZE(ptr_chaine^)); END detruit_element; END; (* CLASS t_paragraphe *) TYPE t_tampon = CLASS tampon : ARRAY[0..10*1024] OF CHAR; position : CARDINAL; fin : CARDINAL; PROCEDURE insere_car ( car : CHAR); BEGIN Str.Insert(tampon,car,position); END insere_car; PROCEDURE detruit_car; BEGIN Str.Delete(tampon,position,1); END detruit_car; PROCEDURE en_avant; BEGIN IF position < fin THEN INC(position) END; END en_avant; PROCEDURE en_arriere; BEGIN IF position > 0 THEN DEC(position) END; END en_arriere; END ; (* CLASS t_tampon *) VAR ma_liste : liste3.t_liste; el : t_paragraphe; VAR fichier : FIO.File; buffer : ARRAY[0..10000] OF CHAR; i : CARDINAL; car : CHAR; PROCEDURE affiche; VAR g : t_ptr_t_paragraphe; BEGIN i := 1; ma_liste.au_debut(); REPEAT IO.WrCard(i,5); IO.WrStr(" "); ma_liste.ptr_courant^.affiche_element(); INC(i); ma_liste.au_suivant(); UNTIL ma_liste.suivant() = NIL; IO.WrCard(i,5); IO.WrStr(" "); ma_liste.ptr_courant^.affiche_element(); END affiche; PROCEDURE message (x : ARRAY OF CHAR); BEGIN Lib.Delay(5000); Window.Clear; IO.WrStr(x); IO.WrLn; END message; BEGIN (* principal *) (************** CREATION DE LA LISTE ****************) ma_liste.creer(); (************** on remplit la liste *****************) message(" ON REMPLIT LA LISTE "); fichier := FIO.Open("c:\mii\mod.mod\texte.MOD"); FIO.EOF := FALSE; FIO.RdStr(fichier,buffer); WHILE NOT FIO.EOF DO el.initialise_element(buffer); ma_liste.ajouter(el); FIO.RdStr(fichier,buffer); END; (************ on parcoure la liste en avant **********) message(" ON parcoure LA LISTE en avant"); affiche; message(" Fin du programme"); FIO.Close(fichier); END nanotex3.