PROGRAM EDNUM;
Uses Overlay,Init,
Crt,
Dos,
Graph,
Get_Key,
Buff_Tex,
Buffs,
Box13,
H_HElp,
Var_1,
Type_Buf,
C_Read,
H_Aide,
U_Pick,
H_Calcul,
Gaff2004,
CrtKey,
Types_11,
Help7F,
NN_Tinst,
Recher,
F_Calcul,
NUMMOUSE,
H_Maths,
NUM_BUFF,
VAR_NUM,
NUM750,
Util7F,
Traduc,
ED13FNUM,
Menu_2;
Label ErreurFin,ErreurNomOriginal;
Const ExtraSize = 37888;
Mouse1 = 256;
Mouse2 = 257;
Mouse3 = 258;
DelayMouse : integer=2000;
Disk_Dur_C : string[70]=' ';
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;
Procedure P_Save; Forward;
Procedure CtrL_Q;
var n,Key1:byte;
begin
Putxy(2,3,'^Q');
Posxy(4,3);
Key1:=KeyBoard;
Putxy(2,3,' ');
Case Key1 Of
6,102,70: Cherche_Bas(63);
1,97,65: Cherche_Bas(98);
99,3: Fin_DU_Fichier;
114,18: Debut_DU_Fichier;
49,50,51,52: if Not Key_Code Then
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;
end;
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;
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;
Procedure P_Edit;
Label Key_Fin;
Var X1,Y1 : byte;
KeyChoix : Word;
Info_Pick2: Reg_Pick;
begin
Repeat
Window(1,1,80,CrtGetMaxY);
Window(2,4,79,CrtGetMaxY-1);
if SuppBlock Then
begin
textAttr:=Edit_Color;
Coup_Block;
end
else
if CopierBlock Then
begin
textAttr:=Edit_Color;
CopyBlock__B(DebutBlock,Max_Block);
CopierBlock:=False;
end;
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
63: Cherche_Bas(163);
98: Cherche_Bas(198);
62: begin
if StrFind<>'' Then
begin
Beep;
ConteLines:=0;
Cherche_Bas(62);
end;
end;
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;
Find_Valeur:=0;
end
else
if Find_Valeur=84 Then
begin
Find_Valeur:=0;
Tri_Block;
end;
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);
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
Case KeyChoix OF
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));
if (MouseY-3=Y_curseur) and (MouseX=X_curseur) Then
Mousexy(MouseX-1,MouseY);
Goto Key_Fin;
end;
BS: begin
if (X_Curseur<=Fin_Ligne[Y_Curseur].ecran) Then
Del_Gauche
else Curseur_Gauche;
Goto Key_Fin;
end;
HT: begin
Tab_Deplace;
Goto Key_Fin;
end;
7,DelKey: begin
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;
HomeKey: begin
Debut_Ligne_Gauche;
Goto Key_Fin;
end;
endKey: begin
Curseur__FinLigne;
Goto Key_Fin;
end;
InsKey: begin
if Mem[0:$417] And 128 = 128 Then Inser_Mode:=True
else
Inser_mode:=False;
Goto Key_Fin;
end;
19 : begin
Curseur_Gauche;
Goto Key_Fin;
end;
4: begin
Curseur_Droite;
Goto Key_Fin;
end;
22: begin
Change_Inser_Mode;
Goto Key_Fin;
end;
end;
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
else
if (KeyChoix=Mouse2) And (MouseY=1) And (Mbox(5,1,60,1)) Then
begin
Case MouseX Of
5..8: KeyChoix:=Alt_F;
13..16: KeyChoix:=Alt_E;
21..27: KeyChoix:=Alt_O;
32..35: KeyChoix:=Alt_L;
40..51: KeyChoix:=Alt_G;
56..60: KeyChoix:=Alt_M;
else KeyChoix:=0;
end;
Delay(DelayMouse);
Goto Key_Fin;
end
else
Case KeyChoix OF
F1: Help_Keys;
CR: Inserer_Ligne;
1: mot_Avan((Fin_Ligne[Y_Curseur].buf-(Fin_Ligne[Y_curseur].Ecran-1))+X_curseur);
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;
5: Curseur_Haut;
24: Curseur___Bas;
18: Recule_Page;
3: Avance_Page;
23: Lecture_Une_Ligne_Haut(Debut_page);
26: Lecture_Une_Ligne_Bas(Fin_page,' ');
14: Inserer_Ligne;
11: Ctrl_K;
17: Ctrl_Q;
25: if (Y_Curseur<FinY) OR ((FinY>1) And (Fin_Ligne[Y_Curseur].ecran>1)) Then
Del_Line;
12: if StrFind<>'' Then
begin
Beep;
ConteLines:=0;
Cherche_Bas(62);
end;
UpKey: Curseur_haut;
DownKey: Curseur___Bas;
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;
CtrlLeftKey: Mot_Avan((Fin_Ligne[Y_Curseur].buf-(Fin_Ligne[Y_curseur].Ecran-1))+X_curseur);
PgDnKey: Avance_Page;
PgUpKey: Recule_Page;
CtrlPgUP: Debut_DU_Fichier;
CtrlPgDn: Fin_DU_Fichier;
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;
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;
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;
F6: begin
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]);
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;
F7,F8: begin
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;
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;
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;
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;
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;
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;
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;
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;
CtrlAltF5: begin
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;
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;
CtrlF4: begin
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;
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;
end;
Key_Fin:
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);
end
else
if KeyChoix = F3 Then
begin
Retur1:=61;
Appel_Menu(1);
end
else
begin
Case KeyChoix Of
Alt_F: Appel_Menu(1);
Alt_L: Appel_Menu(4);
Alt_E: Appel_Menu(2);
Alt_O: Appel_Menu(3);
Alt_G: Appel_Menu(5);
Alt_M: Appel_Menu(6);
AltF3: begin
Retur1:=106;
Appel_Menu(1);
end;
end;
end;
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;
Procedure Init_Pick_Mode(mode:byte);
Label ErrorFin;
Var RR : Reg_Pick;
i : byte;
Sn : string[20];
Attr: Word;
Err: integer;
f : File;
begin
Assign(f,Repertoire+'EDNUM\EDNUM.PCK');
GetFattr(f,Attr);
if (DosError=0) And (Attr And $01 = $01) Then
begin
SetFattr(f,$20);
Erreur1:=DosError;
end;
Assign(f,Repertoire+'EDNUM\EDNUM.PCK');
GetFattr(f,Attr);
if (DosError=0) And (Attr And $01 = $01) Then
begin
SetFattr(f,$20);
end;
if Mode=1 Then
begin
Assign(Libre10,Repertoire+'EDNUM\EDNUM.PCK');
Reset(Libre10);
Erreur1:=IoResult;
if Erreur1=0 Then
begin
Max_Pick:=0;
i:=1;
While Not Eof(Libre10) DO
begin
Read(Libre10,RR);
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
end
else
if i=12 Then
begin
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;
end;
if (i=16) And (Max_Block>0) Then
begin
end;
if i=17 Then
begin
if RR.NomF='486' Then Ordinateur486:=True
else Ordinateur486:=False;
Sauvegarde:=RR.NomR;
end;
if i=18 Then
begin
StrCalcul:=RR.NomR;
Val(RR.NomF,Nxx1,Err);
if (Err=0) Then
begin
Veille:=Nxx1;
end
else
Veille:=10;
end;
if i=19 Then
begin
Calculatrice_S2:=RR.nomF;
Val(RR.NomR,Calculatrice_Total,Err);
if (Err<>0) Then
begin
Calculatrice_Total:=0;
end;
end;
if i=20 Then
begin
Calculatrice_S3:=RR.nomF;
Val(RR.NomR,Calculatrice_TotalM,Err);
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;
Close(Libre10);
end
else Goto ErrorFin;
end
else
if Mode = 0 Then
begin
Assign(Libre10,Repertoire+'EDNUM\EDNUM.PCK');
ReWrite(Libre10);
Erreur1:=IoResult;
if Erreur1 = 0 Then
begin
for i:=1 TO 10 DO
begin
RR:=Tab[i];
Write(Libre10,RR);
Erreur1:=IOresult;
if Erreur1<>0 Then
begin
Close(Libre10);
Goto ErrorFin;
end;
end;
RR.posX:=0;
RR.posY:=0;
RR.pageDebut:=0;
RR.Ligne:=0;
RR.RTime:=0;
RR.NomF:='';
RR.NomR:='';
Write(Libre10,RR);
RR.NomF:='';
RR.NomR:='';
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:='';
Write(Libre10,RR);
RR.NomF:='';
RR.NomR:='';
Write(Libre10,RR);
if Ordinateur486 Then RR.NomF:='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);
Erreur1:=Ioresult;
if Erreur1<> 0 Then
begin
Close(Libre10);
Goto ErrorFin;
end;
Close(Libre10);
end;
end;
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);
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;
end
else
begin
Initialiser;
NomFic:='NONAME.???';
Window(1,1,80,CrtGetMaxY);
end;
end;
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;
begin
HeapError:=@Erreur_Tas;
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;
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:='*.*';
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';
if Repertoire[length(Repertoire)]<>'\' Then Disque_Help:=Repertoire+'\Help.Lag\'
else
Disque_Help:=Repertoire+'Help.Lag\';
Init_PicK;
SuppBlock:=False;
CopierBlock:=False;
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;
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);
Init_Color(Repertoire+'EDNUM\EDNUM.INI');
Init_Pick_Mode(1);
Init_Outils(1);
Ordinateur486:=True;
if Ordinateur486 Then
begin
DelayPose:=100;
Opertion_Tempo:=30000;
Messages_Tempo:=32000;
TempoOk:=300;
Tempo:=5000;;
DelayPon:=31000;
DelayMouse:=2000;
Tempo__Mouse:=Round(DelayMouse)+200;
end
else
begin
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.