nanotex3.mod 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. (*************************************************************************
  2. Nous voici maintenant … la version d‚finitive de notre structure de
  3. donn‚es.
  4. ***************************************************************************)
  5. MODULE nanotex3;
  6. IMPORT IO,Str,Lib,liste3,FIO,Window;
  7. FROM Storage IMPORT ALLOCATE,DEALLOCATE;
  8. TYPE t_ptr_t_paragraphe = POINTER TO t_paragraphe;
  9. t_paragraphe = CLASS (liste3.t_element)
  10. longueur : CARDINAL;
  11. ptr_chaine : ADDRESS;
  12. PROCEDURE initialise_element ( VAR x : ARRAY OF CHAR);VIRTUAL;
  13. BEGIN
  14. longueur := Str.Length(x);
  15. ALLOCATE(ptr_chaine,longueur);
  16. Lib.Move(ADR(x),ptr_chaine,longueur);
  17. END initialise_element;
  18. PROCEDURE affiche_element (); VIRTUAL;
  19. VAR l_tampon : ARRAY[0..1023] OF CHAR;
  20. BEGIN
  21. Lib.Move(ptr_chaine,ADR(l_tampon),longueur);
  22. l_tampon[longueur] := CHR(0);
  23. IO.WrStr(l_tampon);
  24. IO.WrLn;
  25. END affiche_element;
  26. PROCEDURE detruit_element () ; VIRTUAL;
  27. BEGIN
  28. DEALLOCATE(ptr_chaine,SIZE(ptr_chaine^));
  29. END detruit_element;
  30. END; (* CLASS t_paragraphe *)
  31. TYPE t_tampon = CLASS
  32. tampon : ARRAY[0..10*1024] OF CHAR;
  33. position : CARDINAL;
  34. fin : CARDINAL;
  35. PROCEDURE insere_car ( car : CHAR);
  36. BEGIN
  37. Str.Insert(tampon,car,position);
  38. END insere_car;
  39. PROCEDURE detruit_car;
  40. BEGIN
  41. Str.Delete(tampon,position,1);
  42. END detruit_car;
  43. PROCEDURE en_avant;
  44. BEGIN
  45. IF position < fin THEN INC(position)
  46. END;
  47. END en_avant;
  48. PROCEDURE en_arriere;
  49. BEGIN
  50. IF position > 0 THEN DEC(position)
  51. END;
  52. END en_arriere;
  53. END ; (* CLASS t_tampon *)
  54. VAR
  55. ma_liste : liste3.t_liste;
  56. el : t_paragraphe;
  57. VAR fichier : FIO.File;
  58. buffer : ARRAY[0..10000] OF CHAR;
  59. i : CARDINAL;
  60. car : CHAR;
  61. PROCEDURE affiche;
  62. VAR g : t_ptr_t_paragraphe;
  63. BEGIN
  64. i := 1;
  65. ma_liste.au_debut();
  66. REPEAT
  67. IO.WrCard(i,5);
  68. IO.WrStr(" ");
  69. ma_liste.ptr_courant^.affiche_element();
  70. INC(i);
  71. ma_liste.au_suivant();
  72. UNTIL ma_liste.suivant() = NIL;
  73. IO.WrCard(i,5);
  74. IO.WrStr(" ");
  75. ma_liste.ptr_courant^.affiche_element();
  76. END affiche;
  77. PROCEDURE message (x : ARRAY OF CHAR);
  78. BEGIN
  79. Lib.Delay(5000);
  80. Window.Clear;
  81. IO.WrStr(x);
  82. IO.WrLn;
  83. END message;
  84. BEGIN (* principal *)
  85. (************** CREATION DE LA LISTE ****************)
  86. ma_liste.creer();
  87. (************** on remplit la liste *****************)
  88. message(" ON REMPLIT LA LISTE ");
  89. fichier := FIO.Open("c:\mii\mod.mod\texte.MOD");
  90. FIO.EOF := FALSE;
  91. FIO.RdStr(fichier,buffer);
  92. WHILE NOT FIO.EOF DO
  93. el.initialise_element(buffer);
  94. ma_liste.ajouter(el);
  95. FIO.RdStr(fichier,buffer);
  96. END;
  97. (************ on parcoure la liste en avant **********)
  98. message(" ON parcoure LA LISTE en avant");
  99. affiche;
  100. message(" Fin du programme");
  101. FIO.Close(fichier);
  102. END nanotex3.