{==============  FICHIER DE EDNUM  ======================}
{ Programm pricipal EDnum.pas usinage sur machines c.n.  }
{ programmation Pascal                                   }
{ Copyright (S) 1997-2011                                }
{ programmeur du programme A.Ara                         }
{ 64150 Mourenx - France.                                }
{ Licence d'utilisation accord dans un but démonstratif  }
{ Programm EDnum.pas : graphiques c.n du bois num750     }
{ Numero de serie 00-331-7431-A1133071e                  } 
{========================================================}
{=================  FICHIER DE EDNUM  ===================}
{ Types publiques de fuffers destines a l'editeur        }
{ Max_Buffer=64512;      63 Ko.                          }
{ Max_Buffer_Copy=5120;  5  ko                           }
{========================================================}

 {$N+}
 {$M 16384,0,655360}

PROGRAM EDNUM;

{*****M 20480,0,655360***}
{*****H_help copile and 128 ****}

Uses Overlay,Init, {**unite INIT initialise les overlais**}
     Crt,
     Dos,
     Graph,
     Get_Key,    {ok}
     Buff_Tex,   {ok}
     Buffs,      {ok}
     Box13,      {ok}
     H_HElp,     {ok}
     Var_1,      {ok}
     Type_Buf,   {ok}
     C_Read,     {ok}
     H_Aide,     {ok}
     U_Pick,     {ok}
     H_Calcul,   {ok}
     Gaff2004,   {ok}

     CrtKey,     {ok}
     Types_11,   {ok}
     Help7F,     {ok}
     NN_Tinst,   {ok}
     Recher,     {ok}

     {**PrintPrn,   Anule sur le system windows**}

     F_Calcul,   {ok}
     NUMMOUSE,   {ok}
     H_Maths,    {ok}
     NUM_BUFF,   {ok}
     VAR_NUM,    {ok}
     NUM750,     {ok}
     Util7F,     {ok}
     Traduc,     {ok Traduction Francais Anglais}
     ED13FNUM,   {ok}
     Menu_2;     {ok utilitaire de fichier MenuEdi.pas}


{$O Get_Key}
{$O Buff_tex}
{$O Buffs}
{$O Box13}
{$O H_Help}
{$O Var_1}
{$O Type_Buf}
{$O C_Read}
{$O H_AIDE}
{$O U_Pick}
{$O H_Calcul}
{$O Gaff2004}
{$O CrtKey}
{$O Types_11}
{$O Help7F}
{$O NN_Tinst}
{$O Recher}

{***$$$ O PrintPrn Anule sur le system windows**}

{$O F_Calcul}
{$O NUMMOUSE}
{$O H_Maths}
{$O NUM_buff}
{$O VAR_NUM}
{$O NUM750}
{$O Util7F}
{$O Traduc}
{$O ED13FNUM}
{$O Menu_2}

Label ErreurFin,ErreurNomOriginal;

Const ExtraSize = 37888;
      Mouse1    = 256;   {255+1}
      Mouse2    = 257;   {2+255}
      Mouse3    = 258;   {3+255}
      
      DelayMouse :  integer=2000;
      Disk_Dur_C : string[70]=' ';

      {===============================================================}
      { Ordinateur486:boolean=False; se trouve sur ED13FNUM.DOC       }
      { largueur del editeur Maximun 154 colones  (Max_curseurX*2)-2  }
      {===============================================================}
Var
    f_f_f_f          : FILE;
    StrCalcul        : string;
    StrResult        : string;
    ix,iy            : Word;
    CurseurDebutX    : byte;
    Find_Valeur      : byte;
    Sxx1,Sxx2        : string;
    Erreur1          : integer;
    Entree1          : boolean;
    S_etat           : string[5];
    STR20            : string;
    Nxx1,Nbr2        : integer;
    PoseMot          : Word;
    X_Car            : Char;
    Rep_Fic          : string;
    ST2,Rep_Hlp      : string;
    STOP             : boolean;

    Options_Remplace : string;  {** U et N **}

    {========================================}
    {          sur Menu_2.doc               *}
    {* NbrLignes        : Word;             *}
    {* FondBox          : byte;             *}
    {* Lignes__N1       : integer;          *}
    {* Lignes__N0       : integer;          *}
    {*                                      *} 
    {* Function  P_New:byte;    Forward;    *}
    {* {sI P_Teste.blc                      *}
    {* Shif_Blo.Pas    ---- sur Type11.doc  *}
    {========================================}

    Procedure P_Save;        Forward;

{$I Finds2.Blc}   {* block de remplacement *}
{$I Finds1.Blc}   {* block de recherche    *}
{$i DX1.Blc}      {* Dictionaire traduction de un bloc *}


Procedure CtrL_Q;
var n,Key1:byte;

begin
   Putxy(2,3,'^Q');
   Posxy(4,3);
   Key1:=KeyBoard;
   Putxy(2,3,'  ');

   Case Key1 Of
     {F} 6,102,70: Cherche_Bas(63);
     {A}  1,97,65: Cherche_Bas(98);
     {C}     99,3: Fin_DU_Fichier;
     {R}   114,18: Debut_DU_Fichier;
      49,50,51,52: if Not Key_Code Then {*marqueur de 1..4*}
                    begin
                      Case Key1 Of
                        49: n:=1;
                        50: n:=2;
                        51: n:=3;
                        52: n:=4;
                      end;
                      
                      if (Pose_Marque[n]>0) And (Pose_Marque[n]<=Fin_Buffer) Then
                        Cherche_Marque(Pose_Marque[n])
                      else
                      if Pose_Marque[n]>Fin_Buffer Then Pose_Marque[n]:=0;
                    end;
   end;{* case *}
end;  {* fin CtrL-Q *}



{$i MenuEdi.pas}      {** gestions des menus de l'editeur**}


Procedure Change_Fichier_Avan;
var Fin:boolean;

begin
   Fin:=False;
   if _Save_Fichier Then
    begin
       textAttr:=Menu_Color;
       if P_New<>69 Then Fin:=True;
       textAttr:=Edit_Color;

       if (Not _Save_Fichier) and (NomFic<>'NONAME.???') Then
        begin
           Tab[1].Rtime:=FileDate(Tab[1].NomR+Tab[1].NomF);
 
           if X_Curseur<=Fin_ligne[Y_Curseur].ecran Then Tab[1].PosX:=X_Curseur
           else
           Tab[1].PosX:=Fin_ligne[Y_Curseur].ecran;
 
           Tab[1].PosY:=Y_Curseur;
           Tab[1].PageDebut:=Debut_Page;
           Tab[1].Ligne:=Line_Curseur;
           Tab[1].Marque:=Pose_Marque;
        end;
    end;

   if Not Fin Then
    begin
       textAttr:=Edit_Color;
       Initialiser;
       BoxFill(2,4,79,CrtGetMaxY-1,' ');
       NomFic:=Tab[2].NomF;
       Disque_Nom:=Tab[2].NomR;
       
       if NomFic<>'NONAME.???' Then Load_Fichier_Disque(Disque_Nom,NomFic);
       if NomFic<>'NONAME.???' Then
        begin
           Reinit_Pick(Disque_Nom,NomFic);
           if X_curseur<Max_curseurX Then E_curseurX:=X_curseur
           else E_curseurX:=Max_curseurX-1;
           if Debut_Page>=Fin_Buffer Then
            begin
               Debut_Page:=1;
               Y_curseur:=1;
               Line_Curseur:=1;
               X_curseur:=1;E_curseurX:=1;
            end;
           Premiere_Page_Debut(Debut_Page);

           if (Y_curseur>FinY) Then
            begin
               Dec(Line_Curseur,(Y_curseur-FinY));
               Y_curseur:=FinY;
            end;
        end;
    end;
end; {**ends Change_Fichier_Avan**}




Function LireMotXX:string;
Var S   : string;
    Pose: Word;

begin
   Pose:=0;
   ix:=0;
 
   if X_curseur<Fin_Ligne[Y_curseur].ecran Then
    begin
      S:='';
      pose:=(Fin_ligne[Y_curseur].buf-Fin_ligne[Y_curseur].ecran)+X_curseur;
      ix:=0;
      if Pose>Fin_Buffer Then Pose:=Fin_Buffer;
      if pose>1 Then
       begin
          While (POSE>1) And (Buffer^[pose-1] In Cherche_Letre_texte) DO
           begin
              Dec(Pose);
              inc(ix);
           end;
          PoseMOt:=Pose;
       end
      else
        Pose:=1;
      
      if Pose>Fin_Buffer Then Pose:=Fin_Buffer;
      
      While (Pose<Fin_Buffer) And (Buffer^[pose] In cherche_Letre_texte) DO
       begin
          if Buffer^[pose] In cherche_Letre_texte Then S:=S+Buffer^[pose];
          inc(pose);
       end;

      if s='' Then PoseMot:=0;
      LireMotXX:=S;
    end
   else
    begin
       LireMotxx:='';
       PoseMot:=0;
    end;
end;{**ends LireMotxx**}




Procedure P_Edit;
 Label Key_Fin;

 Var X1,Y1    : byte;
    KeyChoix  : Word;
    Info_Pick2: Reg_Pick;

begin

{R1} Repeat
        Window(1,1,80,CrtGetMaxY);
        Window(2,4,79,CrtGetMaxY-1);
        
        if SuppBlock Then
         begin
          textAttr:=Edit_Color;
          Coup_Block;  {* suprime le block dans l'editeur *}
         end
        else
        if CopierBlock Then
         begin
             textAttr:=Edit_Color;

             {**Copy le block dans l'editeur**}

             CopyBlock__B(DebutBlock,Max_Block);
             CopierBlock:=False;
         end;

     {**Mouse**}

     WindowMouse(1,1,CrtGetMaxX,CrtGetMaxY);

     Mousexy(3,3);

     if (((Find_Valeur in[63,98,62]) And (StrFind<>'')) OR (Find_Valeur=255)) Then
      begin
         Case Find_Valeur Of
          {*Cherche *} 63: Cherche_Bas(163);
          {*Remplace*} 98: Cherche_Bas(198);
          {*Ctrl-L  *} 62: begin
                              if StrFind<>'' Then
                               begin
                                 Beep;
                                 ConteLines:=0;
                                 Cherche_Bas(62);
                               end;
                           end;

        {*teste Num*} 255: begin
                              Mode_Teste_Mesaje:=False;
                              ReadBuf(2,3,78,3,LinePtr^);
                              textAttr:=Help_Color;
                              Putxy(2,3,'Teste programme...  ');
                              Texte_Programme_Buffer(1);
                              Mode_Teste_Mesaje:=True;
                              Str(NbrLignes,Sxx2);
                              Putxy(2,3,'Line:'+Sxx2+'  '+Error_teste_Str+'   press any key. ');
                              textAttr:=Edit_Color;
                              csoff;
                              Beep;
                              Ix:=Keyboard;
                              WriteBuf(2,3,78,3,LinePtr^);
                           end;

         end; {*  fin case *}

         Find_Valeur:=0;
      end
     else
     if Find_Valeur=84 Then
      begin
          Find_Valeur:=0;
          Tri_Block;
      end;

{R2} Repeat
       textAttr:=Etat_Color;
      
       if Line_Curseur=0 Then Line_Curseur:=1;
       Str(Line_Curseur:5,S_etat);
       Putxy(11,3,S_Etat);
       Str(X_Curseur:2,S_Etat);
       Putxy(23,3,S_etat+' ');

       if Inser_Mode Then Putxy(28,3,'Insert')
       else Putxy(28,3,'      ');

       PutXy(58,3,'              ');
       PutXy(58,3,Disque_2+NomFic);
       textAttr:=Edit_Color;
       Gotoxy(E_CurseurX,Y_curseur);

       {**fin etat**}


       if change_de_ligne Then Pos_ligne:=(Fin_Ligne[Y_Curseur].buf-Fin_ligne[Y_Curseur].ecran)+1;

       DisplayMouse;
       KeyChoix:=GetKeyMouseWord;
       MasKMouse;

       if (Shift_G OR Shift_D) And ((KeyChoix=RightKey) OR (KeyChoix=DownKey)) Then
        begin
           Shift_Bloc(KeyChoix);
           Goto Key_Fin;
        end
       else

{case1}
       Case KeyChoix OF

{Alt-F10}   AltF10: begin
                       textAttr:=Menu_Color;
                       ReadBuf(50,4,52+26,5+11,BuffDir^);
                       BoxColor(52,5,52+26,5+11,FondBox);
                       Calculatrice(50,4,Calculatrice_S2,Calculatrice_S3,Calculatrice_Total,Calculatrice_TotalM);
                       WriteBuf(50,4,52+26,5+11,BuffDir^);
                       textAttr:=Edit_Color;
                       Goto Key_Fin;
                     end;

           32..255: begin
                       Inser_Char(Chr(KeyChoix));

                       {**Si mouse se trouve sur position de inserer**}

                       if (MouseY-3=Y_curseur) and (MouseX=X_curseur) Then
                         Mousexy(MouseX-1,MouseY);
                       Goto Key_Fin;
                    end;

{del-G}         BS: begin
                       if (X_Curseur<=Fin_Ligne[Y_Curseur].ecran) Then
                         Del_Gauche
                       else  Curseur_Gauche;
                       Goto Key_Fin;
                    end;

{tab->}         HT: begin
                       Tab_Deplace;
                       Goto Key_Fin;
                    end;
{Suppr}    7,DelKey: begin
{Ctrl-G}                if (X_Curseur<Fin_Ligne[Y_Curseur].ecran) Then
                         Del_Droite
                        else
                        if (X_Curseur=Fin_Ligne[Y_Curseur].ecran) Then
                         begin
                            if ((Fin_Ligne[Y_Curseur].ecran + Fin_Ligne[Y_Curseur+1].ecran)<Max_Colones) And
                               (Y_curseur<FinY) Then
                             begin
                                if Modif_Ligne Then
                                 begin
                                    Save_ligne_Curseur(Pos_Ligne);
                                    Change_de_Ligne:=True;
                                 end;
                                Curseur___Bas;
                                Debut_Ligne_Gauche;
                                Gotoxy(E_CurseurX,Y_curseur);
                                Del_Gauche;
                             end;
                         end
                        else
                        if (Fin_Ligne[Y_curseur].Buf<Fin_Buffer) Then Del_FinLigne;

                        Goto Key_Fin;
                     end;

          CtrlAltF2: begin
                        if GetTexte=15 Then Edit_Color:=GetFond shl 4 + GetFond+1
                        else
                        Edit_Color:=GetFond shl 4 + GetTexte+1;

                        BoxColor(2,4,Max_curseurX+1,Max_curseurY+3,Edit_Color);
    
                        For y1:=1 To Max_curseurY+3 DO
                          For x1:=1 To Max_Colones DO
                            ScreenPage^[Y1,X1].Attrib:=Edit_Color;

                        FondBox:=Edit_Color-(((Edit_Color And $70) shr 4) * 16);
                        Fond__Box:=FondBox;
                        Goto Key_Fin;
                    end;

            CtrlF1: begin
                       if Erreur_Limite_Buf(' ') Then
                        begin
                        end;
                       Goto Key_Fin;
                    end;

{<-}       LeftKey: begin
                       Curseur_Gauche;
                       Goto Key_Fin;
                    end;

{->}      RightKey: begin
                       Curseur_Droite;
                       Goto Key_Fin;
                    end;

{debut}    HomeKey: begin
                       Debut_Ligne_Gauche;
                       Goto Key_Fin;
                    end;

{fin}       endKey: begin
                       Curseur__FinLigne;
                       Goto Key_Fin;
                    end;

{inser}     InsKey: begin
                       if Mem[0:$417] And 128 = 128 Then Inser_Mode:=True
                       else
                         Inser_mode:=False;
                       Goto Key_Fin;
                    end;

{Ctrl-S}       19 : begin
                       Curseur_Gauche;
                       Goto Key_Fin;
                    end;

{Ctrl-D}         4: begin
                       Curseur_Droite;
                       Goto Key_Fin;
                    end;

{Ctrl-V}        22: begin
                       Change_Inser_Mode;
                       Goto Key_Fin;
                    end;

       end; {* fin Case1 No Save ligne *}

       {**Save Ligne Actuel**}

       if Modif_Ligne Then
        begin
           Save_ligne_Curseur(Pos_Ligne);
           Change_de_Ligne:=True;
          end;

       if (KeyChoix=Mouse1) And (MouseY>=2)  Then
        begin
           if MouseY=2 Then
            begin
               Lecture_Une_Ligne_Haut(Debut_page);
            end
           else
           if MouseY>3 Then
            begin
               Y1:=MouseY-3;

               if (Y1>=1) And (Y1<Max_curseurY) Then
                begin
                   if Y1>FinY Then Y1:=FinY;
                   X1:=MouseX;
                   if Y1>Y_curseur Then inc(Line_Curseur,(Y1-Y_curseur))
                   else
                   if Y1< Y_curseur Then Dec(Line_Curseur,Y_curseur-Y1);

                   Y_curseur:=Y1;

                   if (X1>1) And (X1<Max_curseurX) Then
                    begin
                       X1:=X1+(X_curseur-E_curseurX)-1;
                       Positione_curseur(X1);
                    end
                   else
                   if X1>Max_CurseurX Then
                    begin
                       if X_Curseur<Max_curseurX Then Positione_curseur(Max_curseurX-1);
                       Curseur_Droite;
                    end
                   else
                   if X1<=1 Then
                    begin
                        if E_CurseurX>1 Then Positione_curseur((X_curseur-E_curseurX)+1);
                        Curseur_Gauche;
                    end;
                end
               else
               if (Y1=Max_curseurY+1) Then
                begin
                   Lecture_Une_Ligne_Bas(Fin_page,' ');
                end;
            end;
           Goto Key_Fin;
        end              {* fin mouse *}
       else
       
       {**Menus avec mouse**}

       if (KeyChoix=Mouse2) And (MouseY=1) And (Mbox(5,1,60,1)) Then
        begin
           Case MouseX Of
                  5..8: KeyChoix:=Alt_F; {File}
                13..16: KeyChoix:=Alt_E; {Edit}
                21..27: KeyChoix:=Alt_O; {Options}
                32..35: KeyChoix:=Alt_L; {Lang}
                40..51: KeyChoix:=Alt_G; {Graph}
                56..60: KeyChoix:=Alt_M; {Maths}
                else KeyChoix:=0;
           end;

           Delay(DelayMouse);
           Goto Key_Fin;
        end {**mouse menus**}

       else

{Case2}

      Case KeyChoix OF
             F1: Help_Keys;
{Entree}     CR: Inserer_Ligne;
{Ctrl-A}      1: mot_Avan((Fin_Ligne[Y_Curseur].buf-(Fin_Ligne[Y_curseur].Ecran-1))+X_curseur);

{Ctrl-F}      6:begin
                   if X_curseur=Fin_Ligne[Y_curseur].ecran-1 Then
                     Curseur__FinLigne
                   else
                    mot_suivan((Fin_Ligne[Y_Curseur].buf-
                                Fin_Ligne[Y_curseur].Ecran)+X_curseur+1);
                end; {* fin *}

{Ctrl-E}      5: Curseur_Haut;
{Ctrl-X}     24: Curseur___Bas;
{Ctrl-R}     18: Recule_Page;
{Ctrl-C}      3: Avance_Page;
{Ctrl-W}     23: Lecture_Une_Ligne_Haut(Debut_page);
{Ctrl-Z}     26: Lecture_Une_Ligne_Bas(Fin_page,' ');
{Ctrl-N}     14: Inserer_Ligne;
{Ctrl-K}     11: Ctrl_K;
{Ctrl-Q}     17: Ctrl_Q;
{Ctrl-Y}     25: if (Y_Curseur<FinY) OR ((FinY>1) And (Fin_Ligne[Y_Curseur].ecran>1)) Then
                  Del_Line;

{Ctrl-L}     12: if StrFind<>'' Then
                  begin
                     Beep;
                     ConteLines:=0;
                     Cherche_Bas(62);
                  end; {* fin Ctrl-L *}

{fleche-H}  UpKey: Curseur_haut;
{fleche-B}  DownKey: Curseur___Bas;

{ctrl ->}   CtrlRightKey: begin
                             if X_curseur=Fin_Ligne[Y_curseur].ecran-1 Then Curseur__FinLigne
                             else
                             mot_suivan((Fin_Ligne[Y_Curseur].buf-Fin_Ligne[Y_curseur].Ecran)+X_curseur+1);
                          end;

{ctrl <-}   CtrlLeftKey: Mot_Avan((Fin_Ligne[Y_Curseur].buf-(Fin_Ligne[Y_curseur].Ecran-1))+X_curseur);

{BB}         PgDnKey: Avance_Page;
{HH}         PgUpKey: Recule_Page;
{ctrl BB}   CtrlPgUP: Debut_DU_Fichier;
{ctrl HH}   CtrlPgDn: Fin_DU_Fichier;

{F2}              F2: begin
                         P_Save;
                         if (Not _Save_Fichier) and (NomFic<>'NONAME.???') Then
                          begin
                             Tab[1].Rtime:=FileDate(Tab[1].NomR+Tab[1].NomF);
                             Tab[1].PosX:=X_Curseur;
                             Tab[1].PosY:=Y_Curseur;
                             Tab[1].PageDebut:=Debut_Page;
                             Tab[1].Ligne:=Line_Curseur;
                             Tab[1].Marque:=Pose_Marque;
                          end;
                      end;

{alt-F6}       AltF6: begin

                         if (Not _Save_Fichier) and (NomFic<>'NONAME.???') Then
                          begin
                             Tab[1].Rtime:=FileDate(Tab[1].NomR+Tab[1].NomF);
                             Tab[1].PosX:=X_Curseur;
                             Tab[1].PosY:=Y_Curseur;
                             Tab[1].PageDebut:=Debut_Page;
                             Tab[1].Ligne:=Line_Curseur;
                             Tab[1].Marque:=Pose_Marque;
                          end;
                         Change_Fichier_Avan;
                     end;

               Alt_T: begin
                         Tri_Block;
                         Goto Key_Fin;
                      end;


               Alt_C: begin
                         if (BlockDAF>0) And (Copy_Exemples) Then
                          begin
                             Open_line;
                             PutXy(2,3,' Insert copy (Y/N) ');
                             Repeat
                                X_Car:=Readkey;
                             Until Upcase(X_Car) in['Y','N',#27];
                             Close_Line;

                             if Upcase(X_Car)='Y' Then
                              begin
                                 ix:=(Fin_Ligne[Y_Curseur].buf-Fin_ligne[Y_Curseur].ecran)+X_Curseur;
                
                                 if ix >= Fin_Buffer Then
                                  begin
                                     Positione_Curseur(Fin_Ligne[Y_Curseur].ecran);
                                 end;
                                 CopyCopyBlock(BlockDAF);
                              end;
                          end
                         else
                          begin
                             DebutDAF:=0;
                             FinDAF:=0;
                             BlockDAF:=0;
                             Copy_Exemples:=False;
                          end;
                         Goto Key_Fin;
                      end;

{Auto lignes}     F5: begin
                         Entree1:=False;
                         ix:=1;X_Car:=' ';
                         While (ix<50) And (Not Entree1) Do
                          begin
                              X_Car:=Buffer^[ix];
                              if X_Car>#32 Then Entree1:=True;
                              inc(ix);
                          end;
                        if X_Car = '%' Then
                         begin
                            if (Lignes__N1+Lignes__N0)<32700 Then
                             begin
                                Str(Lignes__N1+Lignes__N0,Sxx1);
                                Sxx1:='N'+Sxx1+' ';
                                Lignes__N1:=Lignes__N1+Lignes__N0;
                                if Sxx1<>'' Then
                                for ix:=1 To Length(Sxx1) Do Inser_Char(Sxx1[ix]);
                             end;
                         end;
                        Goto Key_Fin;
                      end; {**fin F5**}


{Traducteur}      F6: begin
{Block}                  if (Max_Block>0) And (FinBlock > DebutBlock) And
                            (FinBlock < Fin_Buffer) And (DebutBlock>=1) Then
                           begin
                              ReadBuf(20,CrtGetMaxY-12,56,CrtGetMaxY-9,BuffDir^);
                              textAttr:=Menu_Color;
                              BoxFill(20,CrtGetMaxY-12,56,CrtGetMaxY-9,' ');
                              Box13.Rectangle(20,CrtGetMaxY-12,56,CrtGetMaxY-9,Simple);
                              Putxy(23,CrtGetMaxY-11,'Traduction un bloc Anglais  [A]');
                              Putxy(23,CrtGetMaxY-10,'Traduction un bloc Fran‡ais [F]');
                              Repeat
                                 ix:=KeyBoard;
                              Until (ix in[65,97,70,102,27]); {**A,a,F,f,echap**}
                              textAttr:=Edit_Color;

                              WriteBuf(20,CrtGetMaxY-12,56,CrtGetMaxY-9,BuffDir^);
 
                              if ix = 27 Then Goto Key_Fin;

                              Sxx1:=StrFind;
                              Sxx2:=Remplace;

                              Cherche_position_de_XY(DebutBlock);

                              case ix of
                               65,97 : Traduire_Dictionnaire_Un_Bloc_('A');
                              70,102 : Traduire_Dictionnaire_Un_Bloc_('F');
                              end;

                              Cherche_position_de_XY(DebutBlock);
                              StrFind:=Sxx1;
                              Remplace:=Sxx2;
                           end;
                         Goto Key_Fin;
                      end; {* fin F6 *}

{Traducteur}   F7,F8: begin
{mot}                    Window(1,1,80,CrtGetMaxY);
                         Sxx1:=StrFind;
                         Sxx2:=Remplace;

                         StrFind:=LireMotxx;

                         Case KeyChoix of
                           F8: X_Car:='F';
                           F7: X_Car:='A';
                         end;

                        if StrFind<>'' Then
                         begin
                            ix:=E_CurseurX-ix;
                            Highbox(ix+1,Y_curseur+3,ix+Length(StrFind),Y_Curseur+3,1);
                         end;

                        if Y_Curseur>=(CrtGetMaxY-15) Then
                          Str20:=SuggestioneDictionaire(36,1,X_Car,StrFind)
                        else
                          Str20:=SuggestioneDictionaire(36,CrtGetMaxY-11,X_Car,StrFind);

                        if StrFind<>'' Then Highbox(ix+1,Y_curseur+3,ix+Length(StrFind),Y_Curseur+3,1);

                        Window(1,1,80,CrtGetMaxY);
                        Window(2,4,79,CrtGetmaxY-1);

                        if (Str20<>'') And (PoseMot>0) Then
                         begin
                            Remplace:=Str20;
                            Change_Find:=True;

                            Cherche_Position(PoseMot);
                            Change_Find:=False;
                         end
                        else
                        if Str20<>'' Then
                         begin
                            for ix:=1 TO Length(Str20) Do
                              Inser_Char(Str20[iX]);
                         end;

                        StrFind:=Sxx1;
                        Remplace:=Sxx2;
                        ix:=0;
                        Goto Key_Fin;
                      end;{**fin F7 et F8**}


                  F9: begin
                         Sxx1:=StrFind;
                         Sxx2:=Remplace;
                         StrFind:=LireMotxx;
                         if StrFind<>'' Then Str20:=StrFind
                         else Str20:='';

                         if (Str20<>'') Then
                          begin
                             Window(1,1,80,CrtGetMaxY);
                             Recherche_Fic(Repertoire+'EDNUM\NUMHELP.HLP',Str20);
                             Window(1,1,80,CrtGetMaxY);
                             Window(2,4,79,CrtGetmaxY-1);
                          end;

                         StrFind:=Sxx1;
                         Remplace:=Sxx2;
                         Goto Key_Fin;
                      end;     {* fin F9 *}
 
              CtrlF8: begin
                         X_Car:=' ';
                         if StrCalcul<>'' Then
                          begin
                             Open_Line;
                             PutXy(2,3,' Insert formule (Y/N) ');
                             Repeat
                                X_Car:=Readkey;
                             Until Upcase(X_Car) in['Y','N',#27];
                             Close_Line;
                          end;

                         if (Upcase(X_Car) ='Y') And (StrCalcul<>'')  Then
                          begin
                             Nxx1:=Length(StrCalcul);
                             for ix:=1 To Nxx1 Do
                             Inser_Char(StrCalcul[ix]);
                             if StrResult<>'' Then
                              begin
                                 Inser_Char(' ');
                                 Inser_Char('=');
                                 Inser_Char(' ');
                                 Nxx1:=Length(StrResult);
                                 for ix:=1 To Nxx1 Do
                                 Inser_Char(StrResult[ix]);
                              end;
                         end;
                        Goto Key_Fin;
                      end;  {** fin Ctrl-F8 **}


               AltF8: begin
                         if (_Save_Fichier) OR (NomFic='NONAME.???') Then
                          begin
                             textAttr:=Menu_Color;
                             if P_New<>69 Then
                              begin
                                 Entree1:=True;
                              end;

                             if (_Save_Fichier) And (NomFic<>'') And (NomFic<>'NONAME.???') Then
                              begin
                                 Save_Fichier_Disque(Disque_Nom,NomFic);
                              end;
                             textAttr:=Edit_Color;
                          end;
 
                        if (_Save_Fichier) And (NomFic<>'') And (NomFic<>'NONAME.???')  Then
                         begin
                            textAttr:=Menu_Color;
                            if P_New<>69 Then
                              begin
                                 X_Car:=' ';
                              end;
                            textAttr:=Edit_Color;
                         end;

                        Window(1,1,80,CrtGetMaxY);

                        SetGraphMode(GetGraphMode);

                        if (Not _Save_Fichier) Then
                         begin
                            ix:=1;X_Car:=' ';
                            Entree1:=False;
                            While ((ix < Fin_Buffer) And (ix<100) And (Not Entree1)) Do
                             begin
                                X_Car:=Buffer^[ix];
                                if X_Car>#32 Then Entree1:=True;
                                inc(ix);
                             end;

                           if X_Car = '%' Then
                            begin
                                GraPhique_Numeriqe(Disque_Nom,NomFic);
                            end
                           else
                                GraPhique_Numeriqe('','');
                         end
                        else GraPhique_Numeriqe('','');

                        RESTORECRTMODE;
                        EDIt_ECRAN;
  
                        textAttr:=Edit_Color;
                        if X_curseur<Max_curseurX Then E_curseurX:=X_curseur
                        else E_curseurX:=Max_curseurX-1;
                        Window(1,1,80,CrtGetMaxY);
                        Window(2,4,79,CrtGetMaxY-1);
                        Premiere_Page_Debut(Debut_Page);

                        if Y_curseur>=Max_curseurY Then
                         begin
                            Dec(Line_curseur,Y_curseur-(Max_curseurY-1));
                            Y_curseur:=Max_curseurY-1;
                         end;
                        Change_de_ligne:=True;
                        WindowMouse(1,1,CrtGetMaxX,CrtGetMaxY);
                        StyleMouse(2,14);

                        textAttr:=Edit_Color;

                        Goto Key_Fin;
                      end; {**fin Alt-F8**}

               AltF9: begin
                         if (_Save_Fichier) OR (NomFic='NONAME.???') Then
                          begin
                             textAttr:=Menu_Color;
                             if P_New<>69 Then
                              begin
                                 Entree1:=True;
                              end;
                             if (_Save_Fichier) And (NomFic<>'') And (NomFic<>'NONAME.???') Then
                              begin
                                 Save_Fichier_Disque(Disque_Nom,NomFic);
                              end;
                             textAttr:=Edit_Color;
                          end;

                         if CrtGetMaxY=50 Then ScreenLine25;

                         Window(1,1,80,CrtGetMaxY);
                         SetGraphMode(GetGraphMode);
                         Voir750;
                         RESTORECRTMODE;
                         EDIt_ECRAN;

                         textAttr:=Edit_Color;
                         if X_curseur<Max_curseurX Then E_curseurX:=X_curseur
                         else E_curseurX:=Max_curseurX-1;
                         Window(1,1,80,CrtGetMaxY);
                         Window(2,4,79,CrtGetMaxY-1);
                         Premiere_Page_Debut(Debut_Page);

                         if Y_curseur>=Max_curseurY Then
                          begin
                             Dec(Line_curseur,Y_curseur-(Max_curseurY-1));
                             Y_curseur:=Max_curseurY-1;
                          end;
                         Change_de_ligne:=True;
                         WindowMouse(1,1,CrtGetMaxX,CrtGetMaxY);
                         StyleMouse(2,14);

                         textAttr:=Edit_Color;

                         Window(1,1,80,CrtGetMaxY);
                         Window(2,4,79,CrtGetMaxY-1);

                         Goto Key_Fin;
                      end; {* fin Alt-F9 *}

               AltF4: begin
                         Entree1:=False;
                         ix:=1;X_Car:=' ';
                         While (ix<100) And (Not Entree1) Do
                          begin
                             X_Car:=Buffer^[ix];
                             if X_Car>#32 Then Entree1:=True;
                             inc(ix);
                          end;
                         if X_Car = '%' Then
                          begin
                             Mode_Teste_Mesaje:=False;
                             ReadBuf(2,3,78,3,LinePtr^);
                             textAttr:=Help_Color;
                             Putxy(2,3,'Teste programme...  ');
                             Texte_Programme_Buffer(1);
                             Mode_Teste_Mesaje:=True;
                             Str(NbrLignes,Sxx2);
                             Putxy(2,3,'Line:'+Sxx2+'  '+Error_teste_Str+'   press any key. ');
                             textAttr:=Edit_Color;
                             Beep;
                             Ix:=Keyboard;
                             WriteBuf(2,3,78,3,LinePtr^);
                          end;
                         Goto Key_Fin;
                      end;  {* fin Alt-F4 *}

              CtrlF9: begin
                         Window(1,1,80,CrtGetMaxY);
                         Correction_Outils(20,6);
                         Window(1,1,80,CrtGetMaxY);
                         Window(2,4,79,CrtGetMaxY-1);
                         Goto Key_Fin;
                      end; {**fin Ctrl-F9**}

            CtrlF10: begin
                        Readbuf(3,7,78,11,BuffDir^);
                        textAttr:=Menu_Color;
                        BoxColor(5,8,77,11,FondBox);
                        BoxFill(3,7,75,10,' ');
                        Box13.Rectangle(3,7,75,10,Simple);
                        Putxy(34,7,' Evaluate ');
                        Repeat
                            Entree1:=ReadBox(5,8,StrCalcul,68,140);
                            if (Entree1) and (StrCalcul<>'') Then
                             begin
                                StrResult:=Act(StrCalcul,9,4);
                                Putxy(5,9,'                                                                ');
                                textAttr:=113;
                                Putxy(5,9,'Result: ');
                                if (Result__Error = 1) Then
                                 begin
                                     textAttr:=116;
                                     Putxy(13,9,StrResult);
                                     StrResult:='';
                                 end
                                else Putxy(13,9,StrResult);
                                textAttr:=Menu_Color;
                             end;
                        Until (Not Entree1);

                        Writebuf(3,7,78,11,BuffDir^);
                        textAttr:=Edit_Color;
                        Goto Key_Fin;
                     end; {**fin Ctrl-F10**}

          CtrlAltF5: begin    {**Converti les tab par 8 espaces**}
                        textAttr:=Menu_Color;
                        ReadBuf(19,5,60,8,BuffDir^);
                        BoxColor(21,6,60,8,FondBox);
                        BoxFill(19,5,58,7,' ');
                        Box13.Rectangle(19,5,58,7,Simple);
                        Putxy(21,6,'Conversion des Tabulations [ Y / N ]');
                        csoff;
                        Repeat
                           ix:=KeyBoard;
                        Until (not key_code) And (ix in[89,121,78,110,27]);
                        if (not key_code) And (ix in[89,121]) Then
                         begin
                            if Suprime_les_Tab Then
                             begin
                                 X_curseur:=1;
                                 E_CurseurX:=1;
                                 Y_curseur:=1;
                                 finY:=1;
                                 Line_Curseur:=1;
                                 Debut_Page:=1;
                                 Fin_Page  :=1;
                                 DebutBlock :=0;
                                 FinBlock   :=0;
                                 Max_Block:=0;
                                 WriteBuf(19,5,60,8,BuffDir^);
                                 textAttr:=Edit_Color;
                                 if Buffer^[1]<>#26 Then
                                 Control_Longueur_DE_Lignes(1,Fin_Buffer);
                                 Premiere_Page_Debut(Debut_Page);
                                 _Save_Fichier:=True;
                                 Write(#7);

                                 textAttr:=Menu_Color;
                                 BoxFill(19,5,58,7,' ');
                                 Box13.Rectangle(19,5,58,7,Simple);
                                 Putxy(21,6,'WARNING:');
                                 Str(((Max_Buffer-512)-Fin_Buffer):5,Sxx1);
                                 Putxy(29,6,Sxx1+' byte(s) left');
                                 textAttr:=Edit_Color;
                                 csoff;
                                 ix:=keyboard;
                             end
                            else
                             begin
                                BoxFill(19,5,58,7,' ');
                                Box13.Rectangle(19,5,58,7,Simple);
                                Putxy(21,6,'Tabulations nulles.  press key [ESC]');
                                csoff;
                                ix:=keyboard;
                             end;
                         end;

                        WriteBuf(19,5,60,8,BuffDir^);
                        textAttr:=Edit_Color;
                        Goto Key_Fin;
                     end;  {* fin Ctrl-Alt-F5 *}

              AltF7: begin
                        if (_Save_Fichier) OR (NomFic='NONAME.???') Then
                         begin
                            textAttr:=Menu_Color;
                            if P_New<>69 Then
                             begin
                                Entree1:=True;
                            end;
       
                            if (_Save_Fichier) And (NomFic<>'') And (NomFic<>'NONAME.???') Then
                             begin  
                                Save_Fichier_Disque(Disque_Nom,NomFic);
                             end;
                            textAttr:=Edit_Color;
                         end;

                        Window(1,1,80,CrtGetMaxY);
                        if CrtGetMaxY=50 Then ScreenLine25;
   
                        Calculator;
                        EDIt_ECRAN;
 
                        textAttr:=Edit_Color;
                        if X_curseur<Max_curseurX Then E_curseurX:=X_curseur
                        else E_curseurX:=Max_curseurX-1;

                        Window(1,1,80,CrtGetMaxY);
                        Window(2,4,79,CrtGetMaxY-1);
                        Premiere_Page_Debut(Debut_Page);

                        if Y_curseur>=Max_curseurY Then
                         begin
                             Dec(Line_curseur,Y_curseur-(Max_curseurY-1));
                             Y_curseur:=Max_curseurY-1;
                         end;
                        Change_de_ligne:=True;
                        WindowMouse(1,1,CrtGetMaxX,CrtGetMaxY);
                        StyleMouse(2,14);

                        textAttr:=Edit_Color;
                        Window(1,1,80,CrtGetMaxY);
                        Window(2,4,79,CrtGetMaxY-1);

                        Goto Key_Fin;
                     end; {**fin Alt-F7**}

             CtrlF4: begin    {**activer la Veille**}

                        if (Sauvegarde='OUI') Then
                         begin
                            if (_Save_Fichier) And (NomFic<>'') And (NomFic<>'NONAME.???') Then
                             begin
                                 Save_Fichier_Disque(Disque_Nom,NomFic);
                             end;
                         end;

                        Window(1,1,80,CrtGetMaxY);
                        SetGraphMode(GetGraphMode);
                        Metre_un_Veille;
                        RESTORECRTMODE;
                        EDIt_ECRAN;

                        textAttr:=Edit_Color;
                        if X_curseur<Max_curseurX Then E_curseurX:=X_curseur
                        else E_curseurX:=Max_curseurX-1;
                        Window(1,1,80,CrtGetMaxY);
                        Window(2,4,79,CrtGetMaxY-1);
                        Premiere_Page_Debut(Debut_Page);

                        if Y_curseur>=Max_curseurY Then
                         begin
                            Dec(Line_curseur,Y_curseur-(Max_curseurY-1));
                            Y_curseur:=Max_curseurY-1;
                         end;
                        Change_de_ligne:=True;
                        WindowMouse(1,1,80,CrtGetMaxY);
                        StyleMouse(2,14);

                        textAttr:=Edit_Color;
                        Window(1,1,80,CrtGetMaxY);
                        Window(2,4,79,CrtGetMaxY-1);

                        Goto Key_Fin;
                     end;


           (***** debut : Anule en 2010 changer de Ecran 25/50 lignes
            **CtrlF5: begin
            **           if (CrtGetMaxY=50)  Then
            **            begin
            **               Mode_25_50_Lines(25);
            **            end
            **           else
            **          if (CrtGetMaxY=25) Then
            **           begin
            **              Mode_25_50_Lines(50);
            **           end
            **          else
            **           Goto Key_Fin;
            **          textAttr:=Edit_Color;
            **          Window(1,1,80,CrtGetMaxY);
            **          Window(2,4,79,CrtGetMaxY-1);
            **          StyleMouse(2,14);
            **          WindowMouse(1,1,CrtGetMaxX,CrtGetMaxY);
            **         Goto Key_Fin;
            **        end;
            ***** ends : Anule en 2010 changer de Ecran 25/50 lignes*****)
                   

{Alt-X }      AltX: begin
                       if _Save_Fichier Then
                        begin
                           textAttr:=Menu_Color;
                           if P_New = 69 Then Fin_programme:=True;
                           textAttr:=Edit_Color;
                        end
                       else Fin_Programme:=True;
                    end;  {**fin Alt-X**}

       end; {***fin de case2***}


       Key_Fin:


{R2} Until (KeyChoix = F10) OR (KeyChoix= F3) OR (Fin_programme) OR
           (KeyChoix=Alt_F) OR (KeyChoix=Alt_L) OR (KeyChoix=Alt_E) OR
           (KeyChoix=Alt_O) OR (KeyChoix=AltF3) OR (KeyChoix=Alt_G) OR
           (KeyChoix=Alt_M);


      textAttr:=Menu_Color;
      Window(1,1,80,CrtGetMaxY);

      if KeyChoix = F10 Then
       begin
          Appel_Menu(Retur0);  {Menu_General}
       end
      else
     if KeyChoix = F3 Then
      begin
         Retur1:=61;  {Menu_File(61);}
         Appel_Menu(1);
      end
     else
       begin
          Case KeyChoix Of
            Alt_F: Appel_Menu(1); {Menu_File(0)}
            Alt_L: Appel_Menu(4); {menu Langages}
            Alt_E: Appel_Menu(2);  {Menu Edit}
            Alt_O: Appel_Menu(3); {Menu_Options}
            Alt_G: Appel_Menu(5); {GRAPH}
            Alt_M: Appel_Menu(6); {Maths}
            AltF3: begin
                      Retur1:=106; {Menu_File(106);}
                      Appel_Menu(1);
                   end;
          end; {* fin case *}
       end;

{R1} Until Fin_Programme;

   textAttr:=7;
   ClearBufKey;
   Clrscr;

   if (Not _Save_Fichier) And (CrtGetMaxY=25) Then
    begin
       if (NomFic=Tab[1].NomF) And (Disque_Nom=Tab[1].NomR) And (NomFic<>'NONAME.???') Then
        begin
           Tab[1].Rtime:=FileDate(Tab[1].NomR+Tab[1].NomF);
           Tab[1].PosX:=X_Curseur;
           Tab[1].PosY:=Y_Curseur;
           Tab[1].PageDebut:=Debut_Page;
           Tab[1].Ligne:=Line_Curseur;
           Tab[1].Marque:=Pose_Marque;
        end;
    end;

end;  {**** fin P_Edit ****}






Procedure Init_Pick_Mode(mode:byte);
 Label ErrorFin;
                     (***Const disque_pck=Repertoire;***)
 Var RR  : Reg_Pick;
     i   : byte;
     Sn  : string[20];
     Attr: Word;
      Err: integer;
     f   : File;

begin
    Assign(f,Repertoire+'EDNUM\EDNUM.PCK');
    {$i-}
    GetFattr(f,Attr);
    {$I+}
    if (DosError=0) And (Attr And $01 = $01) Then
     begin
       {$I-}
       SetFattr(f,$20);
       {$I+}
       Erreur1:=DosError;
     end;

    Assign(f,Repertoire+'EDNUM\EDNUM.PCK');
    {$i-}
    GetFattr(f,Attr);
    {$I+}
    if (DosError=0) And (Attr And $01 = $01) Then
     begin
       {$I-}
       SetFattr(f,$20);
       {$I+}
     end;

   if Mode=1 Then
    begin
       Assign(Libre10,Repertoire+'EDNUM\EDNUM.PCK');
       {$I-}
       Reset(Libre10);
       {$I+}
       Erreur1:=IoResult;
      
       if Erreur1=0 Then
        begin
           Max_Pick:=0;
           i:=1;
           While Not Eof(Libre10) DO
            begin
               {$I-}
               Read(Libre10,RR);
               {$I+}
               Erreur1:=Ioresult;
               if Erreur1<>0 Then
                begin
                   Close(Libre10);
                   Init_Pick;
                   Goto ErrorFin;
                end;
               if i<=10 Then
                begin
                   if RR.NomF<>'' Then inc(Max_Pick);
                   Tab[i]:=RR;
                end
               else
              if i=11 Then
               begin
                  {** Nom7:=RR.NomF;Reper7:=RR.NomR;**}
               end
              else
              if i=12 Then
               begin
                  {*** RR.NomF; Libre... RR.NomR; Libre...***}
               end
              else
              if i=13 Then
               begin
                  Nom_Help:=RR.NomF;
                  Disque_help:=RR.NomR;
               end
              else
              if i=14 Then
               begin
                   Langage:=RR.NomF;
                   Extension:=RR.NomR;
               end;
              if i=15 Then
               begin
                  Dic_Nom8:=RR.NomF;
                  {* RR.NomR *}  {* Libre... Disponible *}
              end;
              if (i=16) And (Max_Block>0) Then
               begin
                  {* RR.NomF *} {* Disponible *}
                  {* RR.NomR *} {* Disponible *}
               end;
              if i=17 Then
               begin
                  if RR.NomF='486' Then Ordinateur486:=True {**Ordinateur 486**}
                  else Ordinateur486:=False;
                  Sauvegarde:=RR.NomR;
               end;
              if i=18 Then
               begin
                  StrCalcul:=RR.NomR;
                  {$R-}
                  Val(RR.NomF,Nxx1,Err);
                  {$R+}
                  if (Err=0) Then
                   begin
                      Veille:=Nxx1;
                   end
                  else
                    Veille:=10;
               end;
              if i=19 Then
               begin
                  Calculatrice_S2:=RR.nomF;
                  {$R-}
                  Val(RR.NomR,Calculatrice_Total,Err);
                  {$R+}
                  if (Err<>0) Then
                   begin
                      Calculatrice_Total:=0;
                   end;
               end;
              if i=20 Then
               begin
                  Calculatrice_S3:=RR.nomF;
                  {$R-}
                  Val(RR.NomR,Calculatrice_TotalM,Err);
                  {$R+}
                  if (Err<>0) Then
                   begin
                      Calculatrice_TotalM:=0;
                   end;
               end;
              if i=21 Then
               begin
                  Dic_Nom7:=RR.nomF;
                  Dic_Nom8:=RR.nomR;
               end;

              inc(i);
            end;{while*}
           Close(Libre10);
        end {**if**}
       else Goto ErrorFin;
    end {**ends mode =1***}

   else
    if Mode = 0 Then
     begin
        Assign(Libre10,Repertoire+'EDNUM\EDNUM.PCK');
        {$I-}
        ReWrite(Libre10);
        {$I+}
        Erreur1:=IoResult;
        if Erreur1 = 0 Then
         begin
          for i:=1 TO 10 DO
           begin
              RR:=Tab[i];
              {$I-}
              Write(Libre10,RR);
              {$I+}
              Erreur1:=IOresult;
              if Erreur1<>0 Then
               begin
                  Close(Libre10);
                  Goto ErrorFin;
               end;
           end;
         {$I-}
         RR.posX:=0;
         RR.posY:=0;
         RR.pageDebut:=0;
         RR.Ligne:=0;

         {**Zero_Marque(RR.Marque);**}

         RR.RTime:=0;
         RR.NomF:=''; {**Nom7**}
         RR.NomR:=''; {**Reper7**}
         Write(Libre10,RR);
         RR.NomF:=''; {Nom8;}
         RR.NomR:=''; {Reper8;}
         Write(Libre10,RR);
         RR.NomF:=Nom_help;
         RR.NomR:=Disque_Help;
         Write(Libre10,RR);
         RR.NomF:=Langage;
         RR.NomR:=Extension;
         Write(Libre10,RR);
         RR.NomF:=Dic_nom8;
         RR.NomR:='';       {*** Disponible ***}
         Write(Libre10,RR);
         RR.NomF:='';       {*** Disponible ***}
         RR.NomR:='';       {*** Disponible ***}
         Write(Libre10,RR);
  
         if Ordinateur486 Then RR.NomF:='486' {**Ordinateur 486**}
         else RR.NomF:='386';

         RR.NomR:=Sauvegarde;
         Write(Libre10,RR);

         Str(Veille,Sn);
         RR.nomF:=Sn;
         RR.NomR:=StrCalcul;
         Write(Libre10,RR);

         RR.nomF   := Calculatrice_S2;
         Str(Calculatrice_Total:9:3,Sn);
         RR.nomR    := Sn;
         Write(Libre10,RR);

         RR.nomF   := Calculatrice_S3;
         Str(Calculatrice_TotalM:10:3,Sn);
         RR.nomR   := Sn;
         Write(Libre10,RR);

         RR.nomF   :=Dic_Nom7;
         RR.nomR    :=Dic_Nom8;
         Write(Libre10,RR);

         {$I+}
         
         Erreur1:=Ioresult;
         if Erreur1<> 0 Then
          begin
             Close(Libre10);
             Goto ErrorFin;
          end;
         Close(Libre10);
      end;
     end; {* moode = 0 *}
    ErrorFin:
end;




Function Examine_DEcode(NomA,NomB:string):boolean;
Var Nom1 : string;
    i    : byte;
    car  : Char;

begin
   Nom1:='';
   for i:=1 To Length(NomA) DO
    begin
       Car:=NomA[i];
       if Car=chr(33) Then Nom1:=Nom1+' '
       else
       Nom1:=Nom1+Chr(Ord(Car)+10);
    end;
   if Nom1<>NomB Then Examine_DEcode:=False
   else Examine_DEcode:=True;
end;




Procedure Execute_File;
Var Entree     : boolean;
    Snom,Sreper: string;

begin
   SNom:='';Sreper:='';
   Entree:=False;

   if ParamStr(1)<>'' Then
    begin
       Snom:=ParamStr(1);
       Entree:=Verify_Rep_Fic(Sreper,Snom);
    end;

   if (Entree) And (FileExists(Sreper,Snom)) Then
    begin
       Disque_Nom:=Sreper;
       NomFic:=Snom;
       textAttr:=Edit_Color;
       Initialiser;
       BoxFill(2,4,79,CrtGetMaxY-1,' ');
       Window(1,1,80,CrtGetMaxY);
       Window(2,4,79,CrtGetMaxY-1);
       Load_Fichier_Disque(Disque_Nom,NomFic);

       if (NomFic<>'NONAME.???') And (NomFic<>'') Then
        begin
           Reinit_Pick(Disque_Nom,NomFic);
           if X_curseur<Max_curseurX Then E_curseurX:=X_curseur
           else E_curseurX:=Max_curseurX-1;
           Window(1,1,80,CrtGetMaxY);
           Window(2,4,79,CrtGetMaxY-1);
           Premiere_Page_Debut(Debut_Page);
        end;

       Window(1,1,80,CrtGetMaxY); {* -1); *}
    end
   else

   if (Tab[1].NomF<>'NONAME.???') And (Tab[1].NomF<>'') And
      (FileExists(Tab[1].NomR,Tab[1].NomF))  Then
    begin
        textAttr:=Edit_Color;
        Initialiser;
        BoxFill(2,4,79,CrtGetMaxY-1,' ');
        Window(1,1,80,CrtGetMaxY);
        Window(2,4,79,CrtGetMaxY-1);
        NomFic:=Tab[1].NomF;
        Disque_Nom:=Tab[1].NomR;
        Load_Fichier_Disque(Disque_Nom,NomFic);

        if (NomFic<>'NONAME.???')  And (NomFic<>'') Then
         begin
            if Tab[1].Rtime = FileDate(Tab[1].NomR+Tab[1].NomF) Then
             begin
                if (Tab[1].PageDebut < Fin_Buffer) And (Tab[1].PageDebut> 0) then
                 begin
                    Debut_Page:=Tab[1].PageDebut;
                    CurseurDebutX:=Tab[1].posX;
                    Y_Curseur:=Tab[1].posY;
                    X_curseur:=1;E_curseurX:=1;
                    Line_Curseur:=Tab[1].Ligne;
                    Pose_Marque:=Tab[1].marque;
                 end
                else
                 begin
                    Debut_Page:=1;
                    Tab[1].PageDebut:=1;
                    CurseurDebutX:=1;
                    Tab[1].posX:=1;
                    Y_Curseur:=1;
                    Tab[1].posY:=1;
                    X_curseur:=1;E_curseurX:=1;
                    Line_Curseur:=1;
                    Tab[1].Ligne:=1;
                    Pose_Marque[1]:=0;
                    Pose_Marque[2]:=0;
                    Pose_Marque[3]:=0;
                    Pose_Marque[4]:=0;
                 end;

                Window(1,1,80,CrtGetMaxY);
                Window(2,4,79,CrtGetMaxY-1);
                Premiere_Page_Debut(Debut_Page);
                Window(1,1,80,CrtGetMaxY);
             end
            else
             begin
                Debut_Page:=1;
                X_curseur:=1;
                E_curseurX:=1;
                CurseurDebutX:=1;
                Y_Curseur:=1;
                Line_Curseur:=1;
                Pose_Marque[1]:=0;
                Pose_Marque[2]:=0;
                Pose_Marque[3]:=0;
                Pose_Marque[4]:=0;
                Window(1,1,80,CrtGetMaxY);
             end;

         end; {*** NomFic <> NONAME.??? ***}
    end
   else
    begin
       Initialiser;
       NomFic:='NONAME.???';
       Window(1,1,80,CrtGetMaxY);
    end;
end; {**Execute_File;**}





Function Erreur_Tas(Size:Word): integer;
begin
   Erreur_Tas:=1;
   if Stop Then
    begin
       Window(1,1,80,CrtGetMaxY);
       Clrscr;
       Writeln('Error: Pas asez de Memoire vive.');
       Writeln('Liberer la memoire ou retirer les les programmes r‚sidents.');
       Writeln('press any key.');
       ix:=KeyBoard;
       Clrscr;
       Release(HeapOrg);
       Halt(1);
    end
   else
     begin
        if Erreur_Critique(300,'') Then
         begin
         end;
     end;
end;{**Erreur_Tas**}




begin  {***Debut Programme***}

    HeapError:=@Erreur_Tas;

     {============== initialise ED13fnum ==================
     *  Ouverture de graphiques et retour a CRTMODE texte *
     *  Creation des pointeur:                            *
     *  GetMem(BufTexte,SizeOf(Buf___Ptr));               *
     *  New(TabN);                                        *
     *  New(tabC);                                        *
     *  New(TabF);                                        *
     *  Size_Menu_Buf:=ImageSize(1,1,30,30);              *
     *  GetMeM(Menu_Buf,Size_Menu_Buf);                   *
     ======================================================}
     
     {=== controle ===}
     
     GetDir(0,Disq);

     if Disq[length(Disq)]<>'\' Then Repertoire:=Disq+'\'
     else 
       Repertoire:=Disq;

     Repertoire:='';

     Titres_Color := 120;
     Menu_Color   := 112;
     Dir_Color    := 112;
     Etat_Color   := 23;
     Edit_Color   := 30;
     Error_Color  := 52;
     Etat_Color   := 22;
     Help_Color   := 120;
     BX           := 3;
     Block_Color  := 120;
     Marque_Color := 56;
     Char_Color   := 4;
     Stop:=True;

     if InitMouse Then
      begin
         Writeln('Mouse active..');
      end
     else
      begin
         textAttr:=7;
         Clrscr;
         Gotoxy(1,2);
         Writeln('Not Mouse activate, Stop programme.');
         Writeln('Si votre fichier CONFIG.SYS ne comporte pas l''instruction suivante,');
         Writeln('DEVICE=C:\MOUSE\MOUSE.SYS  -  ajoutez-la.');
         Writeln('Ou alors sur: Autoexec.bat ->  C:\Mouse\mouse.exe  -  ajoutez-la.');
         Writeln('press any key.');
         ix:=KeyBoard;
         Goto ErreurFin;
      end;

     InitGraphique;

     {***Initialise EDnum***}

     Calculatrice_Total :=0;
     Calculatrice_TotalM:=0;
     Calculatrice_S2    :='';
     Calculatrice_S3    :='';
     ReturCNC:=7;
     StrFind:='';
     Remplace:='';
     Options_Remplace:='u';
     Extension:='.NUM';
     Lignes__N1:=10;
     Lignes__N0:=10;

     StrCalcul:='';
     StrResult:='';
     Find_Valeur:=0;
     Fin_Programme:=False;
     Copy__Buffer:=Nil;
     CurseurDebutX:=1;
     X_Curseur:=1;
     E_curseurX:=1;
     Y_curseur:=1;
     Debut_Page:=1;
     Line_Curseur:=1;
     Fin_Buffer:=0;
     GetDir(0,Disq);
     Disque_2:=Disq[1]+Disq[2];

     if Disq[length(Disq)]<>'\' Then Repertoire:=Disq+'\'
     else Repertoire:=Disq;

     Texte_Dire:='*.*';
     Disque_Dire:=Repertoire;
     Repertoire:=Repertoire;
     Disque_Nom:=Repertoire;
     BlockNeime:='';
     BlockRepe:=Repertoire;
     NeimeAttr:='*.*';       {* Nom fic et repertoire change Attribut *}
     ReperAttr:=Repertoire;
     Rep_Fic:=Repertoire;
     Rep_Hlp:=Repertoire;
     nom_ini:=Repertoire+'Maths.INI';
     AideClavierNum750:=Repertoire+'EDNUM\Keys750.HLP';

     Dic_nom2:=Repertoire+'EDNUM\1FraAng2.Idx';
     Dic_nom3:=Repertoire+'EDNUM\2AngFra1.idx';
     Dic_nom1:=Repertoire+'EDNUM\FranAngl.Dic';
     Dic_nom4:=Repertoire+'EDNUM\Inconu.Dic';
     Dic_nom8:=Repertoire+'EDNUM\ED_Notes.Fic';
     Dic_nom7:=Repertoire+'EDNUM\ED_Phras.fic';


     {***EDNUM.PCK***}

     if Repertoire[length(Repertoire)]<>'\' Then Disque_Help:=Repertoire+'\Help.Lag\'
     else
       Disque_Help:=Repertoire+'Help.Lag\';

     Init_PicK;

     SuppBlock:=False;   {**suprime le block dans l'editeur**}
     CopierBlock:=False; {* Copy le block dans l'editeur *}
     Marque_bloc:=False;

     if MaxAvail< SizeOF(ScreenPageXX) Then Goto ErreurFin;
       GetMem(ScreenPage,SizeOf(ScreenPageXX));

     GetMem(Buffer,Max_Buffer+512);
     FillChar(Buffer^,Max_Buffer+512,' ');
     Buffer^[1]:=^Z;

     GetMem(Copy__Buffer,Max_Buffer_Copy+512);
     FillChar(Copy__Buffer^,Max_Buffer_Copy+512,' ');
     Copy__Buffer^[1]:=^Z;   {* marque de fin de Bloc vide *}

     GetMem(CopyLigne,Max_curseurX+3);

     Size_Sub_buf:= CrtSize(1,1,80,4);
     GetMem(Sub_Buf,Size_Sub_Buf);

     SizeLinePtr:= CrtSize(1,1,Max_CurseurX+2,1);
     GetMem(LinePtr,SizelinePtr);

     SizeDir:= CrtSize(30,3,79,24);
     GetMem(BuffDir,SizeDir);

     {**HeapStatus**}

     Init_Color(Repertoire+'EDNUM\EDNUM.INI');
     Init_Pick_Mode(1);
     Init_Outils(1);

     {================ Infos ========================
      ** DelayPose:=50; se trouve sur type_11.doc
      ** Opertion_Tempo et Tempo se trouve Var_Num.doc
      ** pour execution du dessin ***
     ================================================}

     Ordinateur486:=True;

     if Ordinateur486 Then  {Ordinateur 486}
      begin
         DelayPose:=100;                 {* Editeur *}
         Opertion_Tempo:=30000;          {* 8000; Graphiques *}
         Messages_Tempo:=32000;          {* Messages sur graphiques *}
         TempoOk:=300;
         Tempo:=5000;{800};              {* Vitese de graphiques *}
         DelayPon:=31000;                {* execution des POM *}
         DelayMouse:=2000;               {* vitese de Mousse *}
         Tempo__Mouse:=Round(DelayMouse)+200;
      end
     else
      begin                     {*Ordinateur 386*}
         DelayPose:=100;
         Opertion_Tempo:=8000;
         Messages_Tempo:=32000;
         TempoOK:=100;
         Tempo:=80;
         DelayPon:=31000;
         DelayMouse:=1500;
         Tempo__Mouse:=Round(DelayMouse)+200;
      end;

     Nom_Help:='*.Hlp';
     TexteLoad:='*'+extension;

     NomFic:='NONAME.???';
     Clrscr;
     debut_program;

     Initialiser;
     FondBox:=Edit_Color-(((Edit_Color And $70) shr 4) * 16);
     Fond__Box:=FondBox;
     Affiche_Menu;
     Modif_Ligne:=False;
     change_de_ligne:=True;
     Execute_File;
     positione_Curseur(CurseurDebutX);
     Copy_Exemples:=False;
     Stop:=False;


     if (Sauvegarde<>'OUI') And (Sauvegarde<>'NON') Then Sauvegarde:='OUI';
     textAttr:=Edit_Color;
     StyleMouse(2,14);
     Help_Color:=Menu_Color;
     BX:=7;
     P_Edit;

     textAttr:=7;
     Clrscr;
     Init_Pick_Mode(0);
     Init_Outils(0);
     ErreurFin:
     Window(1,1,80,CrtGetMaxY);
     if CrtGetMaxY=50 Then ScreenLine25;
     CloseGraph;
     Window(1,1,80,CrtGetMaxY);
     Release(HeapOrg);
     textAttr:=7;
     Clrscr;
     Halt(1);
end.

{**end programm EDnum**}
©® document original sources pascal
  
Page Last Updated: Juin 27, 2011 | Page Editor: A. Ara | SiteMap Dans Une Autre Galaxie
Cet emplacement web non-commercial, et totalement libre & indépendant de tout les parti politique ou d'organisme officiel de toute nature. Nous réflexions sont exclusivement l'avis de personnes qui rejettent le massacre que la société fait aux animaux pour tout motif.