home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 17
/
CD_ASCQ_17_101194.iso
/
dos
/
prg
/
mos
/
exemples
/
soft
/
ds.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-08-31
|
37KB
|
812 lines
{╔═══════════════════════════════════════════════════════════════════════════╗
║ - DISK SPEED VERSION 1.0 - ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ Coded by Zuul alias Cheveau Frédéric. ║
║ Programmé à HTS sur Turbo Pascal v7.00. ║
║ Contact me on 36.14 RTEL1 - Bal "BouFFtou". ║
╚═══════════════════════════════════════════════════════════════════════════╝}
{$M 64000,0,365520} {*Stack And Heap*}
Program DSPEED_v10; {*Nom du Programme*}
Uses Crt,
Dos, {*Pour GetTime*}
Graph, {*Toujours en 1er*}
ZUUL_BAS, {*Gestion des Variables*}
ZUUL_ASM, {*Gestion de l'ASM*}
ZUUL_MSE, {*Gestion de la Souris*}
ZUUL_TXT, {*Gestion du Texte*}
ZUUL_COL, {*Gestion des Couleurs*}
ZUUL_TOO, {*Gestion des Tools et Box*}
ZUUL_GAD, {*Gestion des Gadgets*}
ZUUL_WIN, {*Gestion des Fenêtres*}
ZUUL_REQ, {*Gestion des Requesters*}
ZUUL_DIR, {*Gestion des Fichiers*}
DS_LIB; {*Unité Pour DS*}
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE ABOUT ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ IN.....: / ║
║ OUT....: / ║
║ EXPLAIN: Affiche le About de D-SPEED v1.0. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure ABOUT;
Var St:String[255];
NUM:Integer;
Begin
AFF(17); {*Display Help on Gadgets*}
St:='D-SPEED v1.0 USE THE M.O.S INTERFACE|INTERFACE CODE ..... F.CHEVEAU|';
St:=St+' MAIN CODE ............ F.CHEVEAU||';
St:=St+'D-SPEED v1.0 IS SHAREWARE (5$ US)|SO, PLEASE SEND DONATIONS TO:||';
St:=St+'FREDERIC CHEVEAU,|8 PASSAGE DES GRILLONS,|66000 PERPIGNAN, FRANCE.|';
EZ_REQUESTG('ABOUT D-SPEED v1.0 (BY F.CHEVEAU)',St,
'_I KNOW !|',NUM);
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE INFO ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ IN.....: / ║
║ OUT....: / ║
║ EXPLAIN: Affiche les Infos sur D-SPEED v1.0. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure INFO;
Var St:String[255];
NUM:Integer;
Begin
AFF(18); {*Display Help on Gadgets*}
St:='D-SPEED v1.0 AND THE M.O.S INTERFACE WAS CODED WITH THE|TURBO PASCAL v7.0||';
St:=St+'D-SPEED IS A PROGRAM THAT BE ABLE TO TEST THE SPEED|';
St:=St+'OF THE <WRITE> INSTRUCTIONS SPECIFIC TO A LANGUAGE,|';
St:=St+'AND GIVE SOME STATISTICS ABOUT THE RESULTS.|';
EZ_REQUESTG('D-SPEED INFO - BY F.CHEVEAU',St,' _MORE |_CANCEL|',NUM);
If NUM<>1 Then Exit;
St:='D-SPEED USE SOME MODULES PROGRAMS WRITED IN DIFFERENTS LANGUAGES|';
St:=St+'TO TEST THE SPEED OF INSTRUCTIONS.||';
St:=St+'SO, YOU CAN ADD YOUR OWN MODULES WITH THE <CONFIGURE MODULES> OPTION.|';
EZ_REQUESTG('D-SPEED INFO - BY F.CHEVEAU',St,'_OK IT''S ALL RIGHT !|',NUM);
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE EXEC_MODULES ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ EXPLAIN: Execute les Modules D'écriture sur Disque, et Affiche le ║
║ Requester "PROGRESS BAR" qui Indique l'Etat de l'écriture. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure EXEC_MODULES(Pos:Byte);
Var TMoy,TBes,TWor,Temp:Longint;
Len :Word;
A,Nb :Word;
Qtt :Longint; {*Total Nombre D'Octets Ecrits*}
NUM :Integer;
W :Win; {*Structure Fenêtre*}
IDRES:Word; {*For Window Only*}
Begin
If Macro=False Then IDRES:=$0005 Else IDRES:=$0004; {*Chose if Macro*}
INIT_WINDOW(320-75,100,320+75,120+HaF*2,$9101,'',W);
SUP_WINDOW(0,0,0,0,0,0,0,0,0,Col5,IDRES,W);
If NError<>0 Then Exit; {*Erreurs Initialisations*}
DRAW_WINDOW(W); {*Affiche la Fenêtre*}
SetColor(Col0);
DispG(W.X1+18,W.Y1+7,5,'WRITING TEST FILE....');
DispG(W.X1+40,W.Y1+12+HaF,5,'PLEASE WAIT');
Set_Pointer(P_Busy); {*Souris Pointeur Busy*}
{============== PASS 1 ===============}
Case Pos of
1: OPEN_PASCAL_FILE; {*Open File "DSTEST.BIN" With Pascal*}
3: If Del_File=True Then {*Open File "DSTEST.BIN" With Asm Dos*}
CREATE_DOS_FILE Else OPEN_DOS_FILE;
End;
Nb:=T[Pos].Length Div T[Pos].Buffer; {*Calcule Size des Blocks*}
Len:=T[Pos].Buffer; {*Taille du Buffer à Ecrire*}
Qtt:=0;
Init_Time; {*Set Time to 0*}
For A:=1 to Nb do
Begin
Case Pos of
1: WRITE_PASCAL_FILE(Len); {*Ecrit "n" fois le Buffer en Pascal*}
3: WRITE_DOS_FILE(Len); {*Ecrit "n" fois le Buffer en Asm Dos*}
4: WRITE_TRACKS_I26(Len,Drive);{*Ecrit "n" fois le Buffer en Track Dos*}
End;
Qtt:=Qtt+Len; {*Add Length Bytes Ecrits*}
End;
A:=T[Pos].Length Mod T[Pos].Buffer; {*Calcule le Reste Eventuel 2 la Taille*}
If A<>0 Then Begin
Case Pos of
1: WRITE_PASCAL_FILE(A); {*Ecrit la Fin du Fichier En Pascal*}
3: WRITE_DOS_FILE(A); {*Ecrit la Fin du Fichier En Asm Dos*}
End;
Qtt:=Qtt+A; {*Add Last Length Bytes Ecrits*}
Nb:=Nb+1; {*1 Iteration de Plus*}
End;
TMoy:=Calc_Time; {*Calcule le Temps Moyen*}
If TMoy>60000 Then TMoy:=0; {*Error in Time => Correct Bug*}
T[Pos].Time:=TMoy; {*Save Time in Tableau*}
If TMoy<>0 Then
T[Pos].Rate:=Round((Qtt/1024)*(Freq/TMoy)){*Calcule Rate et Stock ds Tableau*}
Else T[Pos].Rate:=0;
Case Pos of
1: CLOSE_PASCAL_FILE; {*Close File with Pascal*}
3: CLOSE_DOS_FILE; {*Close File with Asm Dos*}
End;
{============== PASS 2 ===============}
If Macro=False Then Begin {*Do Only if it's not a Macro !!!*}
Case Pos of
1: OPEN_PASCAL_FILE; {*Open File "DSTEST.BIN" with Pascal*}
3: If Del_File=True Then {*Open File "DSTEST.BIN" with Asm Dos*}
CREATE_DOS_FILE Else OPEN_DOS_FILE;
End;
Nb:=T[Pos].Length Div T[Pos].Buffer; {*Calcule Size des Blocks*}
Len:=T[Pos].Buffer; {*Taille du Buffer à Ecrire*}
TBes:=$FFFF; TWor:=0; {*Init All*}
For A:=1 to Nb do
Begin
Init_Time; {*Set Time to 0*}
Case Pos of
1: WRITE_PASCAL_FILE(Len); {*Ecrit "n" fois le Buffer en Pascal*}
3: WRITE_DOS_FILE(Len); {*Ecrit "n" fois le Buffer en Asm Dos*}
4: WRITE_TRACKS_I26(Len,Drive);{*Ecrit "n" fois le Buffer en Track Dos*}
End;
Temp:=Calc_Time; {*Calcul Temps Moyen*}
If Temp<TBes Then TBes:=Temp; {*Search Best Time*}
If Temp>TWor Then TWor:=Temp; {*Search Worse Time*}
End;
A:=T[Pos].Length Mod T[Pos].Buffer; {*Calcule le Reste Eventuel 2 la Taille*}
If A<>0 Then
Case Pos of
1: WRITE_PASCAL_FILE(A); {*Ecrit la fin du Fichier with Pascal*}
3: WRITE_DOS_FILE(A); {*Ecrit la fin du Fichier with Asm Dos*}
End;
If TBes<>0 Then T[Pos].BRate:=(Freq*Len) Div (1024*TBes);{*Calcule BRate et Stock ds Tableau*}
If TWor<>0 Then T[Pos].WRate:=(Freq*Len) Div (1024*TWor);{*Calcule WRate et Stock ds Tableau*}
Case Pos of
1: CLOSE_PASCAL_FILE; {*Close File with Pascal*}
3: CLOSE_DOS_FILE; {*Close File with Asm Dos*}
End;
End; {*Fin Test si Macro = On ne le Fait Pas*}
{============= KILL ALL ==============}
Kill_Window(W); {*Sucre Fenêtre "Writing"*}
Set_Pointer(P_Arrow); {*Souris Pointeur Arrow*}
If Del_File=True Then
Begin
Case Pos of
1: DELETE_PASCAL_FILE; {*Sucre File with Pascal*}
3: DELETE_DOS_FILE; {*Sucre File with Asm Dos*}
End;
End;
If Macro=False Then
DISPLAY_RESULTS_WRITING(Pos,Nb,Qtt); {*Affiche Resultats*}
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE EXEC_MACROS ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ EXPLAIN: Execute une Macro pour les Différents Module. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure EXEC_MACROS(Num:Byte; W:Win);
Var A:Longint;
N,Loop:Integer;
X1,Y1,X2,Y2:Integer; {*Coordonées du Repère*}
OldX,OldY:Integer; {*Anciennes Coordonées*}
Px,Py:Integer; {*Position X et Y du point*}
Pos:Integer; {*Position dans Tableau*}
PasX:Real; {*Pas en X*}
IncX:Real; {*Augmentation du Pas X*}
St:String; {*Pour Transfert ASCII*}
Begin
Macro:=True; {*Mode Macro*}
Max_Buffer:=Scan;
If NoClear=False Then CLEAR_WINDOW(W); {*Cls Window Before Draw*}
DRAW_REPERE(Num,W); {*Affiche le Repère dans la Fenêtre*}
For Loop:=1 to Ite do {*Boucle D'Itération => Moyenne*}
Begin
BEVEL(220,129,636,146,1,7,False,True);{*Clear Info Bar*}
A:=0; {*Begin of Range = 0 *}
Pos:=1; {*1er Element du Tableau = 1 *}
COORDONEES_REPERE(W,X1,Y1,X2,Y2); {*Calcule les Coordonées*}
X1:=X1-W.X1-1; Y1:=Y1-W.Y1-16; {*Deplace Coordonées pour Clipping*}
X2:=X2-W.X1; Y2:=Y1-W.Y1;
OldX:=X1; OldY:=Y1; {*Save Olds Coordonées*}
PasX:=Abs(X2-X1)/(Scan/Step); {*Calcul du Pas X*}
IncX:=PasX; {*Initialisation des Incréments*}
Repeat
SetColor(Col0);
Str(Scan,St); St:='SCAN='+St+' Bts'; DispG(230,131,Col7,St);
Str(A,St); St:='BUFFER='+St+' Bts'; DispG(348,131,Col7,St);
Str(Step,St); St:='STEP='+St+' Bts'; DispG(473,131,Col7,St);
Str(Loop,St); St:='PASS='+St; DispG(580,131,Col7,St);
A:=A+Step; {*Incrément de Step*}
If Loop=1 Then Begin {*Save Nb de Points*}
Qtt_Points:=Pos; XMax:=Pos; Nb_Points:=Pos; End;
If Loop=1 Then Max_Buffer:=A; {*Stocke pour Abscisse Repère*}
T[Num].Buffer:=A;
EXEC_MODULES(Num); {*Write Severals Modules*}
Px:=Round(X1+IncX); Py:=Y1-T[Num].Rate;
IncX:=IncX+PasX; {*Addition du Pas à L'Incrément*}
If Loop=1 Then P[Pos]:=T[Num].Rate{*Stocke Pos Y dans Tableau*}
Else {*Plusieurs Itérations => Moyenne*}
P[Pos]:=(P[Pos]+T[Num].Rate) Div 2;
SetColor(Col13);
If (P[Pos]=0) Or (OldY=Y1) Then {*Determine Couleur de Tracé*}
If Pos<>1 Then SetColor(Col9) Else
Else SetColor(Col13);
If Pos<Max_Pts Then Pos:=Pos+1; {*Maximum de Points*}
Clip_Window(ClipOn,W); {*Clipping Window On*}
Hidemouse;
Line(OldX,OldY,Px,Py); {*Draw Line*}
ShowMouse;
Clip_Window(ClipOff,W); {*Clipping Window Off*}
OldX:=Px; OldY:=Py;
If Click_Mouse(3)=True Then Begin
EZ_REQUESTG('D-SPEED REQUEST','DO YOU WANT REALLY TO ABORT OPERATION ?|',' _YES | _NO |',N);
If N=1 Then Begin
XMin:=1; XMax:=Qtt_Points; Nb_Points:=Qtt_Points;{*Reset Ranges*}
If NoClear=False Then CLEAR_WINDOW(W); {*Cls Window Before Draw*}
DRAW_REPERE(Num,W); {*Affiche le Repère dans la Fenêtre*}
If Grid=True Then DRAW_GRID(W); {*Affiche la Grille*}
DRAW_COURBE(Num,W); {*Affiche la Courbe*}
Exit; End; {*On Arrete tout*}
End;
Until A>Scan; {*De 0 à Scan Maximum (Macro Prefs)*}
End; {*End Boucle D'Itération For Moyenne*}
XMin:=1; XMax:=Qtt_Points; Nb_Points:=Qtt_Points;{*Reset Ranges*}
If NoClear=False Then CLEAR_WINDOW(W); {*Cls Window Before Draw*}
DRAW_REPERE(Num,W); {*Affiche le Repère dans la Fenêtre*}
If Grid=True Then DRAW_GRID(W); {*Affiche la Grille*}
DRAW_COURBE(Num,W); {*Affiche la Courbe*}
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE MACRO ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ EXPLAIN: Selectionne le Module, et Fait une Boucle dessus. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure MACRO_MODULES(Var Num:Byte; Var W:Win);
Var Choix,Ite:Byte; {*Pour Cancel ou Execute*}
Step:Integer; {*Step pour le Scan*}
Begin
If Help=True Then AFF(1); {*Affiche Help*}
If Num=2 Then Begin Error_21; Exit; End;{*Module not Implemented !*}
MACRO_PREFS(Num,W,Choix); {*Demande les Paramètres Avant*}
If Choix=2 Then Exit; {*Touche Cancel Préssée*}
If (Choix=3) Or (Choix=1) Then {*Suprime Gadget Lens sur Barre Title*}
Begin W.NbGsp:=2; RENAME_WINDOW(W.Name,W); End;
If Choix=3 Then
Begin
{ Radio_Box(W2.X1+170,W2.Y1+38,1,True,Rad1);}
Exit; {*Une Courbe has Been Loaded*}
End;
If Num=4 Then
Begin
If WARNING_14=False Then Exit; {*Avertissement - Prudence*}
Drive:=SELECT_DRIVE; {*Sélectionne Drive*}
If Drive=-1 Then Exit; {*Annulation*}
If WARNING_19=False Then Exit; {*Second Avertissement - Prudence*}
End;
EXEC_MACROS(Num,W); {*Execute Macro du Module Num*}
BEVEL(220,129,636,146,1,7,False,True); {*Clear Info Bar*}
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE EXECUTE_MODULE ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ EXPLAIN: Détermine le Module D'écriture sur Disque. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure EXECUTE_MODULES(Num:Byte);
Begin
Macro:=False; {*Mode Normal*}
If Num=2 Then Begin Error_21; Exit; End;{*Module not Implemented !*}
If Num=4 Then {*Avertissement - Prudence*}
Begin
If WARNING_14=False Then Exit;
Drive:=SELECT_DRIVE; {*Sélectionne Drive*}
If Drive=-1 Then Exit; {*Annulation*}
If WARNING_19=False Then Exit; {*Second Avertissement - Prudence*}
End;
EXEC_MODULES(Num); {*Write Severals Modules*}
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE PRINCIPALE ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure MAIN;
Var But0,But1,But2,But3, {*Buttons*}
But4,But5,But6,But7,
But8,But9,ButA,ButB,
ButC,ButD,ButE :ButG;
Rad0,Rad1,Rad2,Rad3,Rad4 :Rad; {*Radio Boxes*}
Cyc0 :ButG; {*Boutons Cyclers*}
LB0 :LightB; {*For Light Box*}
W0,W1,W2,W3,W4,W5 :Win; {*Structures Windows*}
ExitFlg :Boolean; {*Flag Sortie Programme*}
NUM :Integer; {*Numéro Gadets Cliqué*}
Even :Byte; {*Evenements pour Fenêtres*}
NewNum :Byte; {*Nouveau Numero de Module*}
Display_WPos :Boolean; {*Affiche Window 1st & Test MB*}
OldX :Word; {*Old Position X for Pointer*}
LightB_Bool :Boolean; {*Présence de la Light Box*}
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE LOAD_CONFIG ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ EXPLAIN: Charge une Nouvelle Configuration, et la met en Place. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure LOAD_CONFIG;
Var DirSel,FilSel :String; {*Nom et Path Fichiers*}
FSize :Longint; {*Taille Fichier à Charger*}
Code :Integer; {*Code Error pour Val*}
Fil1 :Text; {*Fichier Texte de Sauvegarde*}
NUM :Integer; {*Pour EZ_Requestg*}
St :String; {*Pour Conversion Boolean*}
Begin
AFF(28); {*Display Help on Gadgets*}
Assign(Fil1,'DSCONFIG.CFG'); {*Répertoire Courant*}
{$I-}
Reset(Fil1);
{$I+}
If IOResult=0 Then {*Teste les Erreurs...*}
Begin
Readln(Fil1); Readln(Fil1);
Readln(Fil1,St); If Upper(St)='GRID=TRUE' Then Grid:=True Else Grid:=False;
Readln(Fil1,St); If Upper(St)='DELETE FILE=TRUE' Then Del_File:=True Else Del_File:=False;
Readln(Fil1,St); If Upper(St)='DISP RATE=TRUE' Then Disp_Rate:=True Else Disp_Rate:=False;
Readln(Fil1,St); If Upper(St)='INLINE HELP=TRUE' Then Help:=True Else Help:=False;
Readln(Fil1,St); If Upper(St)='NO CLEAR WINDOW=TRUE' Then NoClear:=True Else NoClear:=False;
Readln(Fil1);
Readln(Fil1,St); Val(Copy(St,14,Length(St)-13),Scan1,Code);
Readln(Fil1,St); Val(Copy(St,14,Length(St)-13),Step1,Code);
Readln(Fil1,St); Val(Copy(St,19,Length(St)-18),Ite1,Code);
Readln(Fil1); Readln(Fil1); Readln(Fil1);
Readln(Fil1,St); Val(Copy(St,24,Length(St)-23),LBAMin,Code);
Readln(Fil1,St); Val(Copy(St,13,Length(St)-12),Mouse_Speed,Code);
Readln(Fil1,St); Val(Copy(St,14,Length(St)-13),Dbl_Click_Val,Code);
Readln(Fil1,St); Val(Copy(St,19,Length(St)-18),Delay_Mse_Val,Code);
Readln(Fil1,St); Val(Copy(St,20,Length(St)-19),CBlink,Code);
Readln(Fil1,St); Val(Copy(St,13,Length(St)-12),CType,Code);
Readln(Fil1,St); If Upper(St)='MOUSE BLANKER=TRUE' Then MBlanker:=True Else MBlanker:=False;
Close(Fil1); {*Ferme le Fichier*}
Radio_Box(W2.X1+170,W2.Y1+20,1,Del_File,Rad0);{*Redefine Radios*}
Radio_Box(W2.X1+170,W2.Y1+38,1,Disp_Rate,Rad1);
Radio_Box(W2.X1+170,W2.Y1+56,1,Help,Rad2);
Radio_Box(W2.X1+170,W2.Y1+74,1,NoClear,Rad3);
Radio_Box(W2.X1+170,W2.Y1+92,1,Grid,Rad4);
EZ_REQUESTG('D-SPEED REQUEST','CONFIGURATION FILE HAS BEEN SUCCESSFULLY LOADED|','_I KNOW !|',NUM);
End
Else ERROR_18;
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROCEDURE SAVE_CONFIG ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ EXPLAIN: Sauve la Configuration Courante. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure SAVE_CONFIG;
Var DirSel,FilSel :String; {*Nom et Path Fichiers*}
FSize :Longint; {*Taille Fichier à Charger*}
NUM :Integer; {*Pour EZ_Requestg*}
Fil1 :Text; {*Fichier Texte de Sauvegarde*}
Begin
AFF(29); {*Display Help on Gadgets*}
Assign(Fil1,'DSCONFIG.CFG'); {*Répertoire Courant*}
{$I-}
Rewrite(Fil1);
{$I+}
If IOResult=0 Then {*Teste les Erreurs...*}
Begin
Writeln(Fil1,'DISK SPEED v1.0 CONFIGURATION FILE');
Writeln(Fil1);
Writeln(Fil1,'GRID=',Grid);
Writeln(Fil1,'DELETE FILE=',Del_File);
Writeln(Fil1,'DISP RATE=',Disp_Rate);
Writeln(Fil1,'INLINE HELP=',Help);
Writeln(Fil1,'NO CLEAR WINDOW=',NoClear);
Writeln(Fil1);
Writeln(Fil1,'MACRO - SCAN=',Scan1);
Writeln(Fil1,'MACRO - STEP=',Step1);
Writeln(Fil1,'MACRO - ITERATION=',Ite1);
Writeln(Fil1);
Writeln(Fil1,'MOS v1.0 CONFIGURATION');
Writeln(Fil1);
Writeln(Fil1,'LIGHT BOX MINIMAL SIZE=',LBAMin);
Writeln(Fil1,'MOUSE SPEED=',Mouse_Speed);
Writeln(Fil1,'DOUBLE CLICK=',Dbl_Click_Val);
Writeln(Fil1,'DELAY CLICK MOUSE=',Delay_Mse_Val);
Writeln(Fil1,'BLINK CURSOR SPEED=',CBlink);
Writeln(Fil1,'CURSOR TYPE=',CType);
Writeln(Fil1,'MOUSE BLANKER=',MBlanker);
Close(Fil1); {*Ferme le Fichier*}
EZ_REQUESTG('D-SPEED REQUEST','CONFIGURATION FILE HAS BEEN SUCCESSFULLY SAVED IN CURRENT DIRECTORY|','_I KNOW !|',NUM);
End
Else ERROR_17;
End;
{********************* INITIALISATION WINDOW DE BASE ************************}
Procedure INIT_SCREENBASE;
Begin
HideMouse;
INIT_WINDOW(0,0,GetMaxX,GetMaxY,$0099,'D-SPEED v1.0 (C)1994 F.CHEVEAU.',W0);
SUP_WINDOW(0,0,GetMaxX,GetMaxY,59,50,GetMaxX,GetMaxY,0,Col7,$0008,W0);
INIT_WINDOW(003,16,216,146,$0181,' COMMANDS SECTION',W1);
INIT_WINDOW(220,16,416,126,$0181,' OPTIONS SECTION',W2);
INIT_WINDOW(420,16,636,126,$0181,' CONFIGURATION SECTION',W3);
INIT_WINDOW(003,149,636,GetMaxY-23,$55CF,'DRAWING TRANSFERT RATE FOR MODULE '+T[1].Name,W4);
SUP_WINDOW(003,149,207,GetMaxY-48,200,80,GetMaxX-6,177,0,Col7,$0001,W4);
ButtonG(W1.X1+005,W1.Y1+20,059,False,But0,'E_XIT'); {*Initialise les Boutons*}
ButtonG(W1.X1+005,W3.Y1+38,105,False,But4,'_WRITE ON DISK');
ButtonG(W1.X1+010,W3.Y2-22,100,False,But8,'_RESULTS');
ButtonG(W1.X1+010,W3.Y2-4,100,False,But9,'PARAME_TERS');
ButtonG(W1.X1+117,W3.Y1+20,90,False,ButA,'_ABOUT D-SPEED');
ButtonG(W1.X1+117,W3.Y1+38,90,False,ButB,'D-SPEED _INFOS');
ButtonG(W1.X1+117,W3.Y2-22,85,False,ButD,'MEM_ORY INFO');
ButtonG(W1.X1+117,W3.Y2-4,85,False,ButE,'MA_CRO');
Radio_Box(W2.X1+170,W2.Y1+20,1,True,Rad0);
Radio_Box(W2.X1+170,W2.Y1+38,1,True,Rad1);
Radio_Box(W2.X1+170,W2.Y1+56,1,True,Rad2);
Radio_Box(W2.X1+170,W2.Y1+74,1,False,Rad3);
Radio_Box(W2.X1+170,W2.Y1+92,1,Grid,Rad4);
ButtonG(W3.X1+005,W3.Y1+20,110,False,But1,'SELECT _PALETTE');
ButtonG(W3.X1+005,W3.Y1+38,110,False,But2,'SELECT _FONTE');
ButtonG(W3.X1+005,W3.Y1+56,110,False,But3,'SHOW _HARDWARE');
ButtonG(W3.X1+122,W3.Y1+20,88,False,But5,'_LOAD CONFIG');
ButtonG(W3.X1+122,W3.Y1+38,88,False,But6,'_SAVE CONFIG');
ButtonG(W3.X1+005,W3.Y1+92,130,False,But7,'CONFIGURE _MODULES');
ButtonG(W3.X1+005,W3.Y1+74,130,False,ButC,'CONFIGURE S_YSTEM');
Cycler_But(W1.X1+005,W1.Y1+56,87,1,Cyc0,Modules);
ShowMouse;
End;
{*********************** REDRAW WINDOW BASE ELEMENTS ************************}
Procedure DRAW_SCREEN;
Begin
DRAW_WINDOW(W1);
DRAW_WINDOW(W2); DRAW_WINDOW(W3);
DRAW_WINDOW(W4);
BEVEL(W1.X1+5,W1.Y2-47,W1.X2-5,W1.Y2-5,1,12,False,True);
BEVEL(W2.X1,W2.Y2+3,W3.X2,W2.Y2+20,1,7,False,False);
BEVEL(W1.X1,GetMaxY-20,W3.X2,GetMaxY-3,1,4,False,True);
DRAW_RADIO_BOX(Rad0); DRAW_RADIO_BOX(Rad1);
DRAW_RADIO_BOX(Rad2); DRAW_RADIO_BOX(Rad3);
DRAW_RADIO_BOX(Rad4);
DRAW_BUTTONG(But0); DRAW_BUTTONG(But1);
DRAW_BUTTONG(But2); DRAW_BUTTONG(But3);
DRAW_BUTTONG(But4); DRAW_BUTTONG(But5);
DRAW_BUTTONG(But6); DRAW_BUTTONG(But7);
DRAW_BUTTONG(But8); DRAW_BUTTONG(But9);
DRAW_BUTTONG(ButA); DRAW_BUTTONG(ButB);
DRAW_BUTTONG(ButC); DRAW_BUTTONG(ButD);
DRAW_BUTTONG(ButE);
DRAW_BUTTONG(Cyc0);
DispG(W2.X1+10,W2.Y1+22,7,'DELETE TEST FILE ..............');
DispG(W2.X1+10,W2.Y1+40,7,'DISPLAY TIME/RATE ............');
DispG(W2.X1+10,W2.Y1+58,7,'DISPLAY HELP ON GADGETS ...');
DispG(W2.X1+10,W2.Y1+76,7,'DON''T CLEAR SCREEN ...........');
DispG(W2.X1+10,W2.Y1+94,7,'DISPLAY GRID ....................');
DispG(W1.X1+115,W1.Y1+58,7,'<-- USED MODULE');
DRAW_REPERE(Cyc0.CyclVal,W4); {*Affiche le Repère dans la Fenêtre*}
If Grid=True Then DRAW_GRID(W4); {*Affiche la Grille*}
End;
{******************** CALCULE ET RENVOIS COORDONEES DU POINT ****************}
Procedure CALCULE_POINT;
Begin
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ DISPLAY POSITION WHEN CLICK ON GFX WINDOW ║
╠═══════════════════════════════════════════════════════════════════════════╣
║ EXPLAIN: Affiche les Coordonées de points qd on clique dans la Fenêtre. ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Procedure DISPLAY_POSITION;
Var X,Y:Word; {*Pour Test Souris*}
Ga,Mi,Dr:Boolean;
St:String; {*Pour Conversion String*}
Px,Py:Integer; {*Coordonées d'un Point*}
X1,Y1,X2,Y2:Integer; {*Coordonées du Repère*}
ValY:Longint; {*Position Y sur la Courbe*}
{****************************** DRAW XOR CROIX ******************************}
Procedure DRAW_CROIX(Xa,Ya:Word);
Begin
If (Win_Move=True) Or (Win_Size=True) Then Exit; {*Pas de Tracé*}
SetColor(Col7);
SetWriteMode(XorPut);
HideMouse;
If (Xa>=X1) And (Xa<=X2) Then Line(Xa,Y2,Xa,Y1);
If (Ya>=Y2) And (Ya<=Y1) Then Line(X1,Ya,X2,Ya);
ShowMouse;
SetWriteMode(NormalPut);
End;
{******************** CALCULE ET RENVOIS COORDONEES DU POINT ****************}
Procedure CALCULE_POINT;
Var A:Integer;
High_Point:Longint; {*Valeur du Point le Plus Elevé*}
StockX:Real; {*Tj Problemes Dépassements - Fuck !*}
Begin
Px:=0; Py:=0; {*Vide Variables*}
If (Win_Move=True) Or (Win_Size=True) Then Exit; {*Pas de Tracé*}
High_Point:=0; {*On Recherche la Valeur Maximum*}
For A:=XMin to XMax do {*du Tableau*}
If P[A]>High_Point Then High_Point:=P[A];
If (High_Point=0) Or (Qtt_Points=0) Then
Begin Qtt_Points:=100; High_Point:=400; End;
ValY:=((X-X1)*Qtt_Points) Div (X2-X1); {*Calcul Numéro Elément*}
Px:=Round((Max_Buffer*(X-X1))/Abs(X2-X1)); {*Calcul Px*}
Py:=P[ValY]; {*Calcul Py*}
If Py<>0
Then Begin StockX:=Abs(Y1-Y2)/High_Point; {*Calcul Py en Pixels*}
ValY:=Y1-Round(StockX*Py); End
Else ValY:=0;
If Px<0 Then Px:=0; {*Correction Bornes*}
If Py<0 Then Py:=0;
SetFillStyle(1,Col7); {*Clear Zone Before Print*}
Bar(W5.X1+115,W5.Y1+HaF+15,W5.X1+147,W5.Y1+HaF+25);
Bar(W5.X1+115,W5.Y1+HaF*2+20,W5.X1+147,W5.Y1+HaF*2+30);
SetColor(Col0);
Str(Px,St); DispG(W5.X1+115,W5.Y1+HaF*1+15,7,St);{*Display Position*}
Str(Py,St); DispG(W5.X1+115,W5.Y1+HaF*2+20,7,St);
End;
{========== Procedure Principale =========}
Begin
COORDONEES_REPERE(W4,X1,Y1,X2,Y2); {*Calcule Coordonée du Repère*}
Display_WPos:=False; {*Ne pas Afficher Window avant Test*}
If BoxMouseG(W4.X1+1,W4.Y1+HaF+7,W4.X2-1,W4.Y2-1,10)=True Then{*Change Pointer*}
Set_Pointer(P_Hand);
If (BoxMouseG(W4.X1+1,W4.Y1+HaF+7,W4.X2-1,W4.Y2-1,10)=False) And
(Win_Move=False) Then Set_Pointer(P_Arrow); {*Restore Pointer*}
If (BoxMouseG(W4.X1+1,W4.Y1+HaF+7,W4.X2-1,W4.Y2-1,1)=True) And{*Test M Click*}
(BoxMouseG(W4.X2-19,W4.Y2-HaF-4,W4.X2,W4.Y2,1)=False) And
(Win_Move=False) Then {*Gfx Window is not Moving*}
Begin
Display_WPos:=True; {*On peut Afficher Window*}
GetMouseG(X,Y,Ga,Mi,Dr); {*Récupère Coordonées Souris*}
Str(X-X1,St);
If X-X1<0 Then St:='-'; {*En dehors du Repère*}
If X>X2 Then St:='-';
If (Win_Move=False) And (Win_Size=False) And {*Pas d'interférences*}
(Copy(W5.Name,1,11)<>' POSITIONS') Then {*Create Window First*}
Begin
AFF(43);
INIT_WINDOW(100,120,258,186,$1581,' POSITIONS - POINT: '+St,W5);
SUP_WINDOW(003,149,207,GetMaxY-48,200,80,GetMaxX-6,177,0,Col5,$0000,W5);
DRAW_WINDOW(W5); {*Affiche la Fenêtre*}
Bevel(W5.X1+10,W5.Y1+10+HaF,W5.X2-10,W5.Y2-10,1,Col7,False,True);
CALCULE_POINT; {*Calcule Coordonées*}
DRAW_CROIX(OldX,ValY); {*Display Croix First Time*}
SetColor(Col0);
DispG(W5.X1+18,W5.Y1+15+HaF*1,Col7,'SIZE BUFFER .....');
If Disp_Rate=True
Then DispG(W5.X1+18,W5.Y1+20+HaF*2,Col7,'TRANFERT RATE ..')
Else DispG(W5.X1+18,W5.Y1+20+HaF*2,Col7,'WRITING TIME ....');
End;
If X<>OldX Then
Begin
DRAW_CROIX(OldX,ValY); {*Clear Croix*}
CALCULE_POINT; {*Calcule Coordonées*}
DRAW_CROIX(X,ValY); {*Display Croix After*}
Str(X-X1,St);
If X-X1<0 Then St:='-'; {*En dehors du Repère*}
If X>X2 Then St:='-';
If (Win_Move=False) And (Win_Size=False) Then {*On Peut Tracer*}
RENAME_WINDOW(' POSITIONS - POINT: '+St,W5);{*Aff Numéro du Point*}
End;
OldX:=X; {*Recupère Old Position X*}
End
Else {*Bouton Gauche relaché*}
Begin
If W5.Destroyed=False Then DRAW_CROIX(OldX,ValY);
W5.Name:=''; {*Display Croix First Time*}
KILL_WINDOW(W5); Display_WPos:=False;
End;
End;
{************************ REDRAW GFX WINDOW ELEMENTS ************************}
Procedure REDRAW_FRAME;
Begin
DRAW_REPERE(Cyc0.CyclVal,W4); {*Affiche le Repère dans la Fenêtre*}
If Grid=True Then DRAW_GRID(W4); {*Affiche la Grille*}
DRAW_COURBE(Cyc0.CyclVal,W4); {*Affiche la Courbe dans la Fenêtre*}
ADD_GADGET_LENS(W4); {*Ajoute Gadget Lentille*}
AFF(37); {*Display Help on Gadgets*}
End;
{****************************** MAIN PROCEDURE ******************************}
Begin
INIT_DATAS; {*Initialisation des Datas*}
INIT_SCREENBASE; {*Initialisation Ecran de Base*}
DRAW_WINDOW(W0);
DRAW_SCREEN; {*Affichage Ecran de Base*}
LOAD_CONFIG; {*Charge Configuration*}
AFF(44); {*Help Inline*}
ExitFlg:=False; {*Don't Forget !!!*}
{=========== BOUCLE PRINCIPALE ==========}
Repeat
If GETMSG_BUT(But0,1)=True Then
Begin {*Sortie du Programme*}
AFF(16); {*Help on Gadgets*}
EZ_REQUESTG('D-SPEED REQUEST','DO YOU WANT REALLY TO QUIT ?|',' _YES | _NO |',NUM);
If NUM=1 Then ExitFlg:=True;
End;
If GETMSG_BUT(But1,1)=True Then Begin {*Requester Palette*}
AFF(25);
PALETTE_REQUESTG(100,70,'PLEASE SELECT YOUR PALETTE',NUM);
End;
If GETMSG_BUT(But2,1)=True Then Begin AFF(26); ERROR_20; End;
If GETMSG_BUT(But3,1)=True Then Begin {*Show Hardware*}
AFF(27); {*Help on Gadgets*}
HARDWARE_REQUESTG(150,90,'THIS IS YOUR HARDWARE CONFIGURATION');
End;
If GETMSG_BUT(But4,1)=True Then Begin
AFF(19); {*Help on Gadgets*}
EXECUTE_MODULES(Cyc0.CyclVal); {*Write Modules*}
End;
If GETMSG_BUT(But5,1)=True Then LOAD_CONFIG;{*Load DS Configuration*}
If GETMSG_BUT(But6,1)=True Then SAVE_CONFIG;{*Save DS Configuration*}
If GETMSG_BUT(But7,1)=True Then {*Add or Sub Modules*}
Begin
AFF(30); {*Display Help on Gadgets*}
CONFIGURE_MODULES;
Cycler_But(W1.X1+005,W1.Y1+56,87,1,Cyc0,Modules);
End;
If GETMSG_BUT(But8,1)=True Then MAIN_RESULTS;{*Visualisation des Résultats*}
If GETMSG_BUT(But9,1)=True Then PARAMETERS_MODULES;{*Modif Des Parameters*}
If GETMSG_BUT(ButA,1)=True Then ABOUT; {*ABOUT Requester*}
If GETMSG_BUT(ButB,1)=True Then INFO; {*INFO Requesters*}
If GETMSG_BUT(ButC,1)=True Then Begin {*System Requester*}
AFF(31); {*Help on Gadgets*}
SYSTEM_REQUESTG(100,70,'PLEASE SELECT YOUR CONFIGURATION');
End;
If GETMSG_BUT(ButD,1)=True Then Begin
AFF(15); {*Help on Gadgets*}
MEMORY_REQUESTG(100,70,'YOUR MEMORY CONFIGURATION...');{*INFO sur la Mémoire*}
End;
If GETMSG_BUT(ButE,1)=True Then Begin
NewNum:=Cyc0.CyclVal;
MACRO_MODULES(NewNum,W4); {*Macro Write Modules*}
Cycler_But(W1.X1+005,W1.Y1+56,87,NewNum,Cyc0,Modules);
End;
If GETMSG_RADIO(Rad0,1)=True Then UPDATE_FILE; {*Delete Test File*}
If GETMSG_RADIO(Rad1,1)=True Then UPDATE_ORDONEE(Cyc0.CyclVal,W4);
If GETMSG_RADIO(Rad2,1)=True Then UPDATE_HELP; {*Display Help on Gadgets*}
If GETMSG_RADIO(Rad3,1)=True Then UPDATE_CLEAR;
If GETMSG_RADIO(Rad4,1)=True Then UPDATE_GRID(Cyc0.CyclVal,W4);{*Put Grid On/Off*}
If GETMSG_BUT(Cyc0,1)=True Then AFF(24);
Even:=ACTIVE_WINDOW(W0); {*Active Window W0 = Ecran de Base*}
If Even=1 Then ExitFlg:=True; {*Sortie par Close Gadget*}
If Even=2 Then INIT_WINDOW(0,0,GetMaxX,GetMaxY,$00B9,'D-SPEED v1.0 (C)1994 F.CHEVEAU.',W0);
Even:=ACTIVE_WINDOW(W4);
If Even=9 Then REDRAW_FRAME; {*Window Re-Drawed = Move*}
If Even=3 Then REDRAW_FRAME; {*Window Re-Drawed = Extend*}
If Even=4 Then REDRAW_FRAME; {*Window Re-Drawed = Size*}
If LIGHT_BOX(LB0,3)=True Then {*Light Box Defined*}
ZOOM_COURBE(LB0.X1,LB0.X2,Cyc0.CyclVal,W4);
If LightB_Status=True Then Begin {*Limite Souris dans la Fenêtre*}
LimitMouseG(W4.X1,W4.Y1+HaF+5,W4.X2,W4.Y2);
If LightB_Bool=False Then AFF(41); {*Display Help*}
LightB_Bool:=True; End
Else;
If (LightB_Status=False) And (LightB_Bool=True) Then
Begin LightB_Bool:=False; AFF(42);
LimitMouseG(1,1,GetMaxX,GetMaxY);
End;
If (XMin<>1) Or (XMax<>Qtt_Points) Then
Begin
W4.NbGsp:=3;
If GetMsg_But(But_Lens,1)=True Then
Begin
XMin:=1; XMax:=Qtt_Points; Nb_Points:=Qtt_Points;
W4.NbGsp:=2; DRAW_WINDOW(W4); REDRAW_FRAME;
End;
End;
If But_Lens.Flg_But=True Then
PutImage(W4.X2-20*W4.NbGsp+1,W4.Y1+1,GpD^,NormalPut);
DISPLAY_POSITION; {*Display Position Points*}
MAIN_TASK; {*Gestion All Main*}
Until ExitFlg=True; {*Sortie du Programme*}
{=========== SORTIE DU PROGRAMME ==========}
KILL_WINDOW(W4); {*Kill Windows if Exist !*}
KILL_WINDOW(W3);
KILL_WINDOW(W2);
KILL_WINDOW(W1);
KILL_WINDOW(W0);
End;
{╔═══════════════════════════════════════════════════════════════════════════╗
║ PROGRAMME PRINCIPAL ║
╚═══════════════════════════════════════════════════════════════════════════╝}
Begin
INIT_ASM; {*Initialise All for Hardware*}
INIT_SCREEN; {*Initialise All for Screen*}
INIT_MOUSE; {*Initialise All for Mouse*}
DirectVideo:=False;
MAIN; {*Execute le Programme Principal*}
DONE_MOUSE; {*Restore All for Mouse*}
DONE_SCREEN; {*Restore All for Screen*}
DONE_ASM; {*Restore All for Hardware*}
End.