next up previous
Next: About this document Up: Code Previous: Hello World

Edition de texte

 

Ce code-ci est un éditeur de texte. Le programme demande un nom de fichier à l'usager et l'éditera si le fichier existe.

begin
   external class windowtools;

   simplewindow class MyWindow;
   begin
      ref(button) quit,save;   !boutons de sortie et de sauvegarde du fichier;
      ref(scrollwindow) edit;  !fenetre d'edition;
      text filename;           !nom du fichier d'entree et/ou sortie;

      boolean procedure readfile(fname);TEXT fname;  
      !Procedure qui  lit un fichier et le met dans edit et qui
       indique a la fin si le fichier demande existe;
      begin
         ref(InFile) f;
         boolean opened;
         f:-NEW InFile(filename);
         opened := f.Open(Blanks(500)); 
         IF opened then
            begin 
            
               f.InImage;
               while not f.Endfile DO  !On met le fichier ligne par
                                        ligne dans edit;
                  begin 
                     edit.initputline(f.Image.strip);             
                     f.InImage;
                  end;
               edit.refreshlines;    !On rafra\^{\i}chit la fen\^etre;
               f.Close;
            end;

         readfile:=opened;
      end;

      procedure savefile(fname); text fname;
      !Sauve le contenu de edit dans le fichier;
      begin 
         integer i,nlines=20;
         text t;
         ref(OutFile) output;
         output:-new OutFile(fname);
         output.Open(Blanks(500));
         for i:=1 step 1 until edit.GetNumberOfLines do
            begin 
               t:-edit.getline(i);
               output.OutText(t);
               output.OutImage;       
            end;
         output.Close;
         MakeMessageWindow.TimedMessage(``File Saved'',3);
      end;


      procedure createnewfile;
      begin
         filename :- ask_for_text(``Filename'');  !Nouveau fichier;
         if filename=/=notext then  !ouverture du fichier;
         begin 
            if ReadFile(filename) then 
               MakeMessageWindow.TimedMessage(``File Exists'',3);

            edit.allowinput;
            save.allow;
         end;
      end;

      PROCEDURE opennewfile;
      begin
         ref (DirectoryMenu) menu;
         menu :- new directorymenu(this XWindow,notext); 
         menu.setsize(400,300);
         menu.placecentered;
         menu.show;
         filename :- menu.Waitmenu;
         if filename =\= notext and then  ReadFile(filename) then
            begin               !ouverture du fichier;
               edit.allowinput;
               save.allow;   
            end;
         menu.destroy;          !destruction du menu inutile;
      end;

      procedure ClickInButton(b);ref(button) b;   
      !Recupere l'enfoncement du bouton enfonce et agit en consequence;   
      if b==save then savefile(filename)
      else
      if b==newfile then createnewfile
      else 
      if b==openfile then opennewfile; 
      
      quit :- makebutton(``Quit'');             !creation des sous-fenetres;
      save :- makebutton(``Save'').Disallow;    !interdiction de sauver
                                               avant d'avoir un nom de fichier; 

      newfile:-makebutton(``New File'');        !boutons d'ouverture de fichier;
      openfile:-makebutton(``OpenFile'');
      edit :- makescrollwindow;
      filename :- ask_for_text(``Filename'');   !demande du nom de fichier;
      
      if not ReadFile(filename) then          !ouverture du fichier;
         MakeMessageWindow.TimedMessage(``Nouveau Fichier'',3);

      edit.allowinput;        !permission pour editer le contenu de edit;
      save.allow;             !permission de sauver;
      quit.Wait;              !boucle d'attende d'evenement;
   end;

   new Mywindow(``Edit File''); !creation de la fenetre principale;
end.



CARRIER Benoit
Sun Feb 18 21:57:20 EST 1996