| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- (*************************************************************************
- 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.
|