IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

La Commande Numérique sur la Production Bois

Date de publication : 06/03/2010. Date de mise à jour : 03/07/2011.


   

 


Editeur EDNUM.PAS


Editeur EDNUM.PAS


{==============  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**}

   

 

 

Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 A. Ara. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.