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 >
Pascal/Delphi Source File  |  1994-08-31  |  37KB  |  812 lines

  1. {╔═══════════════════════════════════════════════════════════════════════════╗
  2.  ║                         - DISK SPEED VERSION 1.0 -                        ║
  3.  ╠═══════════════════════════════════════════════════════════════════════════╣
  4.  ║ Coded by Zuul alias Cheveau Frédéric.                                     ║
  5.  ║ Programmé à HTS sur Turbo Pascal v7.00.                                   ║
  6.  ║ Contact me on 36.14 RTEL1 - Bal "BouFFtou".                               ║
  7.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  8.  
  9. {$M 64000,0,365520}                      {*Stack And Heap*}
  10.  
  11. Program DSPEED_v10;                      {*Nom du Programme*}
  12.  
  13. Uses Crt,
  14.      Dos,                                {*Pour GetTime*}
  15.      Graph,                              {*Toujours en 1er*}
  16.      ZUUL_BAS,                           {*Gestion des Variables*}
  17.      ZUUL_ASM,                           {*Gestion de l'ASM*}
  18.      ZUUL_MSE,                           {*Gestion de la Souris*}
  19.      ZUUL_TXT,                           {*Gestion du Texte*}
  20.      ZUUL_COL,                           {*Gestion des Couleurs*}
  21.      ZUUL_TOO,                           {*Gestion des Tools et Box*}
  22.      ZUUL_GAD,                           {*Gestion des Gadgets*}
  23.      ZUUL_WIN,                           {*Gestion des Fenêtres*}
  24.      ZUUL_REQ,                           {*Gestion des Requesters*}
  25.      ZUUL_DIR,                           {*Gestion des Fichiers*}
  26.  
  27.      DS_LIB;                             {*Unité Pour DS*}
  28.  
  29. {╔═══════════════════════════════════════════════════════════════════════════╗
  30.  ║                              PROCEDURE ABOUT                              ║
  31.  ╠═══════════════════════════════════════════════════════════════════════════╣
  32.  ║ IN.....: /                                                                ║
  33.  ║ OUT....: /                                                                ║
  34.  ║ EXPLAIN: Affiche le About de D-SPEED v1.0.                                ║
  35.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  36.  
  37. Procedure ABOUT;
  38. Var St:String[255];
  39.     NUM:Integer;
  40. Begin
  41. AFF(17);                                {*Display Help on Gadgets*}
  42. St:='D-SPEED v1.0 USE THE M.O.S INTERFACE|INTERFACE CODE ..... F.CHEVEAU|';
  43. St:=St+'  MAIN CODE ............ F.CHEVEAU||';
  44. St:=St+'D-SPEED v1.0 IS SHAREWARE (5$ US)|SO, PLEASE SEND DONATIONS TO:||';
  45. St:=St+'FREDERIC CHEVEAU,|8 PASSAGE DES GRILLONS,|66000 PERPIGNAN, FRANCE.|';
  46. EZ_REQUESTG('ABOUT D-SPEED v1.0 (BY F.CHEVEAU)',St,
  47.    '_I KNOW !|',NUM);
  48. End;
  49.  
  50. {╔═══════════════════════════════════════════════════════════════════════════╗
  51.  ║                              PROCEDURE INFO                               ║
  52.  ╠═══════════════════════════════════════════════════════════════════════════╣
  53.  ║ IN.....: /                                                                ║
  54.  ║ OUT....: /                                                                ║
  55.  ║ EXPLAIN: Affiche les Infos sur D-SPEED v1.0.                              ║
  56.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  57.  
  58. Procedure INFO;
  59. Var St:String[255];
  60.     NUM:Integer;
  61. Begin
  62. AFF(18);                                {*Display Help on Gadgets*}
  63. St:='D-SPEED v1.0 AND THE M.O.S INTERFACE WAS CODED WITH THE|TURBO PASCAL v7.0||';
  64. St:=St+'D-SPEED IS A PROGRAM THAT BE ABLE TO TEST THE SPEED|';
  65. St:=St+'OF THE <WRITE> INSTRUCTIONS SPECIFIC TO A LANGUAGE,|';
  66. St:=St+'AND GIVE SOME STATISTICS ABOUT THE RESULTS.|';
  67. EZ_REQUESTG('D-SPEED INFO - BY F.CHEVEAU',St,' _MORE |_CANCEL|',NUM);
  68. If NUM<>1 Then Exit;
  69.  
  70. St:='D-SPEED USE SOME MODULES PROGRAMS WRITED IN DIFFERENTS LANGUAGES|';
  71. St:=St+'TO TEST THE SPEED OF INSTRUCTIONS.||';
  72. St:=St+'SO, YOU CAN ADD YOUR OWN MODULES WITH THE <CONFIGURE MODULES> OPTION.|';
  73. EZ_REQUESTG('D-SPEED INFO - BY F.CHEVEAU',St,'_OK IT''S ALL RIGHT !|',NUM);
  74. End;
  75.  
  76. {╔═══════════════════════════════════════════════════════════════════════════╗
  77.  ║                          PROCEDURE EXEC_MODULES                           ║
  78.  ╠═══════════════════════════════════════════════════════════════════════════╣
  79.  ║ EXPLAIN: Execute les Modules D'écriture sur Disque, et Affiche le         ║
  80.  ║          Requester "PROGRESS BAR" qui Indique l'Etat de l'écriture.       ║
  81.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  82.  
  83. Procedure EXEC_MODULES(Pos:Byte);
  84. Var TMoy,TBes,TWor,Temp:Longint;
  85.     Len  :Word;
  86.     A,Nb :Word;
  87.     Qtt  :Longint;                   {*Total Nombre D'Octets Ecrits*}
  88.     NUM  :Integer;
  89.     W    :Win;                       {*Structure Fenêtre*}
  90.     IDRES:Word;                      {*For Window Only*}
  91.  
  92. Begin
  93. If Macro=False Then IDRES:=$0005 Else IDRES:=$0004;  {*Chose if Macro*}
  94. INIT_WINDOW(320-75,100,320+75,120+HaF*2,$9101,'',W);
  95. SUP_WINDOW(0,0,0,0,0,0,0,0,0,Col5,IDRES,W);
  96. If NError<>0 Then Exit;              {*Erreurs Initialisations*}
  97.  
  98. DRAW_WINDOW(W);                      {*Affiche la Fenêtre*}
  99. SetColor(Col0);
  100. DispG(W.X1+18,W.Y1+7,5,'WRITING TEST FILE....');
  101. DispG(W.X1+40,W.Y1+12+HaF,5,'PLEASE WAIT');
  102. Set_Pointer(P_Busy);                 {*Souris Pointeur Busy*}
  103.  
  104. {============== PASS 1 ===============}
  105.  
  106. Case Pos of
  107.       1: OPEN_PASCAL_FILE;           {*Open File "DSTEST.BIN" With Pascal*}
  108.       3: If Del_File=True Then       {*Open File "DSTEST.BIN" With Asm Dos*}
  109.             CREATE_DOS_FILE Else OPEN_DOS_FILE;
  110.       End;
  111.  
  112. Nb:=T[Pos].Length Div T[Pos].Buffer; {*Calcule Size des Blocks*}
  113. Len:=T[Pos].Buffer;                  {*Taille du Buffer à Ecrire*}
  114. Qtt:=0;
  115.  
  116. Init_Time;                           {*Set Time to 0*}
  117. For A:=1 to Nb do
  118.    Begin
  119.    Case Pos of
  120.       1: WRITE_PASCAL_FILE(Len);     {*Ecrit "n" fois le Buffer en Pascal*}
  121.       3: WRITE_DOS_FILE(Len);        {*Ecrit "n" fois le Buffer en Asm Dos*}
  122.       4: WRITE_TRACKS_I26(Len,Drive);{*Ecrit "n" fois le Buffer en Track Dos*}
  123.       End;
  124.    Qtt:=Qtt+Len;                     {*Add Length Bytes Ecrits*}
  125.    End;
  126. A:=T[Pos].Length Mod T[Pos].Buffer;  {*Calcule le Reste Eventuel 2 la Taille*}
  127. If A<>0 Then Begin
  128.    Case Pos of
  129.       1: WRITE_PASCAL_FILE(A);       {*Ecrit la Fin du Fichier En Pascal*}
  130.       3: WRITE_DOS_FILE(A);          {*Ecrit la Fin du Fichier En Asm Dos*}
  131.       End;
  132.    Qtt:=Qtt+A;                       {*Add Last Length Bytes Ecrits*}
  133.    Nb:=Nb+1;                         {*1 Iteration de Plus*}
  134.    End;
  135. TMoy:=Calc_Time;                     {*Calcule le Temps Moyen*}
  136. If TMoy>60000 Then TMoy:=0;          {*Error in Time => Correct Bug*}
  137.  
  138. T[Pos].Time:=TMoy;                   {*Save Time in Tableau*}
  139. If TMoy<>0 Then
  140.    T[Pos].Rate:=Round((Qtt/1024)*(Freq/TMoy)){*Calcule Rate et Stock ds Tableau*}
  141.    Else T[Pos].Rate:=0;
  142. Case Pos of
  143.       1: CLOSE_PASCAL_FILE;          {*Close File with Pascal*}
  144.       3: CLOSE_DOS_FILE;             {*Close File with Asm Dos*}
  145.       End;
  146.  
  147. {============== PASS 2 ===============}
  148.  
  149. If Macro=False Then Begin            {*Do Only if it's not a Macro !!!*}
  150. Case Pos of
  151.       1: OPEN_PASCAL_FILE;           {*Open File "DSTEST.BIN" with Pascal*}
  152.       3: If Del_File=True Then       {*Open File "DSTEST.BIN" with Asm Dos*}
  153.             CREATE_DOS_FILE Else OPEN_DOS_FILE;
  154.       End;
  155.  
  156. Nb:=T[Pos].Length Div T[Pos].Buffer; {*Calcule Size des Blocks*}
  157. Len:=T[Pos].Buffer;                  {*Taille du Buffer à Ecrire*}
  158. TBes:=$FFFF; TWor:=0;                {*Init All*}
  159.  
  160. For A:=1 to Nb do
  161.    Begin
  162.    Init_Time;                        {*Set Time to 0*}
  163.    Case Pos of
  164.       1: WRITE_PASCAL_FILE(Len);     {*Ecrit "n" fois le Buffer en Pascal*}
  165.       3: WRITE_DOS_FILE(Len);        {*Ecrit "n" fois le Buffer en Asm Dos*}
  166.       4: WRITE_TRACKS_I26(Len,Drive);{*Ecrit "n" fois le Buffer en Track Dos*}
  167.    End;
  168.    Temp:=Calc_Time;                  {*Calcul Temps Moyen*}
  169.    If Temp<TBes Then TBes:=Temp;     {*Search Best Time*}
  170.    If Temp>TWor Then TWor:=Temp;     {*Search Worse Time*}
  171.    End;
  172.  
  173. A:=T[Pos].Length Mod T[Pos].Buffer;  {*Calcule le Reste Eventuel 2 la Taille*}
  174. If A<>0 Then
  175.    Case Pos of
  176.          1: WRITE_PASCAL_FILE(A);    {*Ecrit la fin du Fichier with Pascal*}
  177.          3: WRITE_DOS_FILE(A);       {*Ecrit la fin du Fichier with Asm Dos*}
  178.          End;
  179.  
  180. If TBes<>0 Then T[Pos].BRate:=(Freq*Len) Div (1024*TBes);{*Calcule BRate et Stock ds Tableau*}
  181. If TWor<>0 Then T[Pos].WRate:=(Freq*Len) Div (1024*TWor);{*Calcule WRate et Stock ds Tableau*}
  182.  
  183. Case Pos of
  184.       1: CLOSE_PASCAL_FILE;          {*Close File with Pascal*}
  185.       3: CLOSE_DOS_FILE;             {*Close File with Asm Dos*}
  186.       End;
  187. End;                                 {*Fin Test si Macro = On ne le Fait Pas*}
  188.  
  189. {============= KILL ALL ==============}
  190.  
  191. Kill_Window(W);                      {*Sucre Fenêtre "Writing"*}
  192. Set_Pointer(P_Arrow);                {*Souris Pointeur Arrow*}
  193.  
  194. If Del_File=True Then
  195.    Begin
  196.    Case Pos of
  197.       1: DELETE_PASCAL_FILE;         {*Sucre File with Pascal*}
  198.       3: DELETE_DOS_FILE;            {*Sucre File with Asm Dos*}
  199.       End;
  200.    End;
  201.  
  202. If Macro=False Then
  203.    DISPLAY_RESULTS_WRITING(Pos,Nb,Qtt); {*Affiche Resultats*}
  204. End;
  205.  
  206. {╔═══════════════════════════════════════════════════════════════════════════╗
  207.  ║                           PROCEDURE EXEC_MACROS                           ║
  208.  ╠═══════════════════════════════════════════════════════════════════════════╣
  209.  ║ EXPLAIN: Execute une Macro pour les Différents Module.                    ║
  210.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  211.  
  212. Procedure EXEC_MACROS(Num:Byte; W:Win);
  213. Var A:Longint;
  214.     N,Loop:Integer;
  215.     X1,Y1,X2,Y2:Integer;                {*Coordonées du Repère*}
  216.     OldX,OldY:Integer;                  {*Anciennes Coordonées*}
  217.     Px,Py:Integer;                      {*Position X et Y du point*}
  218.     Pos:Integer;                        {*Position dans Tableau*}
  219.     PasX:Real;                          {*Pas en X*}
  220.     IncX:Real;                          {*Augmentation du Pas X*}
  221.     St:String;                          {*Pour Transfert ASCII*}
  222. Begin
  223. Macro:=True;                            {*Mode Macro*}
  224. Max_Buffer:=Scan;
  225. If NoClear=False Then CLEAR_WINDOW(W);  {*Cls Window Before Draw*}
  226. DRAW_REPERE(Num,W);                     {*Affiche le Repère dans la Fenêtre*}
  227.  
  228. For Loop:=1 to Ite do                   {*Boucle D'Itération => Moyenne*}
  229.    Begin
  230.    BEVEL(220,129,636,146,1,7,False,True);{*Clear Info Bar*}
  231.    A:=0;                                {*Begin of Range = 0 *}
  232.    Pos:=1;                              {*1er Element du Tableau = 1 *}
  233.    COORDONEES_REPERE(W,X1,Y1,X2,Y2);    {*Calcule les Coordonées*}
  234.    X1:=X1-W.X1-1; Y1:=Y1-W.Y1-16;       {*Deplace Coordonées pour Clipping*}
  235.    X2:=X2-W.X1; Y2:=Y1-W.Y1;
  236.    OldX:=X1; OldY:=Y1;                  {*Save Olds Coordonées*}
  237.    PasX:=Abs(X2-X1)/(Scan/Step);        {*Calcul du Pas X*}
  238.    IncX:=PasX;                          {*Initialisation des Incréments*}
  239.  
  240.       Repeat
  241.       SetColor(Col0);
  242.       Str(Scan,St); St:='SCAN='+St+' Bts'; DispG(230,131,Col7,St);
  243.       Str(A,St); St:='BUFFER='+St+' Bts';  DispG(348,131,Col7,St);
  244.       Str(Step,St); St:='STEP='+St+' Bts'; DispG(473,131,Col7,St);
  245.       Str(Loop,St); St:='PASS='+St;        DispG(580,131,Col7,St);
  246.       A:=A+Step;                        {*Incrément de Step*}
  247.       If Loop=1 Then Begin              {*Save Nb de Points*}
  248.          Qtt_Points:=Pos; XMax:=Pos; Nb_Points:=Pos; End;
  249.       If Loop=1 Then Max_Buffer:=A;     {*Stocke pour Abscisse Repère*}
  250.       T[Num].Buffer:=A;
  251.       EXEC_MODULES(Num);                {*Write Severals Modules*}
  252.       Px:=Round(X1+IncX); Py:=Y1-T[Num].Rate;
  253.       IncX:=IncX+PasX;                  {*Addition du Pas à L'Incrément*}
  254.       If Loop=1 Then P[Pos]:=T[Num].Rate{*Stocke Pos Y dans Tableau*}
  255.          Else                           {*Plusieurs Itérations => Moyenne*}
  256.          P[Pos]:=(P[Pos]+T[Num].Rate) Div 2;
  257.  
  258.       SetColor(Col13);
  259.       If (P[Pos]=0) Or (OldY=Y1) Then   {*Determine Couleur de Tracé*}
  260.          If Pos<>1 Then SetColor(Col9) Else
  261.       Else SetColor(Col13);
  262.  
  263.       If Pos<Max_Pts Then Pos:=Pos+1;   {*Maximum de Points*}
  264.       Clip_Window(ClipOn,W);            {*Clipping Window On*}
  265.       Hidemouse;
  266.       Line(OldX,OldY,Px,Py);            {*Draw Line*}
  267.       ShowMouse;
  268.       Clip_Window(ClipOff,W);           {*Clipping Window Off*}
  269.       OldX:=Px; OldY:=Py;
  270.       If Click_Mouse(3)=True Then Begin
  271.          EZ_REQUESTG('D-SPEED REQUEST','DO YOU WANT REALLY TO ABORT OPERATION ?|',' _YES | _NO |',N);
  272.          If N=1 Then Begin
  273.             XMin:=1; XMax:=Qtt_Points; Nb_Points:=Qtt_Points;{*Reset Ranges*}
  274.             If NoClear=False Then CLEAR_WINDOW(W);  {*Cls Window Before Draw*}
  275.             DRAW_REPERE(Num,W);                     {*Affiche le Repère dans la Fenêtre*}
  276.             If Grid=True Then DRAW_GRID(W);         {*Affiche la Grille*}
  277.             DRAW_COURBE(Num,W);                     {*Affiche la Courbe*}
  278.             Exit; End;  {*On Arrete tout*}
  279.          End;
  280.       Until A>Scan;                     {*De 0 à Scan Maximum (Macro Prefs)*}
  281.    End;                                 {*End Boucle D'Itération For Moyenne*}
  282.  
  283. XMin:=1; XMax:=Qtt_Points; Nb_Points:=Qtt_Points;{*Reset Ranges*}
  284. If NoClear=False Then CLEAR_WINDOW(W);  {*Cls Window Before Draw*}
  285. DRAW_REPERE(Num,W);                     {*Affiche le Repère dans la Fenêtre*}
  286. If Grid=True Then DRAW_GRID(W);         {*Affiche la Grille*}
  287. DRAW_COURBE(Num,W);                     {*Affiche la Courbe*}
  288. End;
  289.  
  290. {╔═══════════════════════════════════════════════════════════════════════════╗
  291.  ║                             PROCEDURE MACRO                               ║
  292.  ╠═══════════════════════════════════════════════════════════════════════════╣
  293.  ║ EXPLAIN: Selectionne le Module, et Fait une Boucle dessus.                ║
  294.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  295.  
  296. Procedure MACRO_MODULES(Var Num:Byte; Var W:Win);
  297. Var Choix,Ite:Byte;                     {*Pour Cancel ou Execute*}
  298.     Step:Integer;                       {*Step pour le Scan*}
  299.  
  300. Begin
  301. If Help=True Then AFF(1);               {*Affiche Help*}
  302. If Num=2 Then Begin Error_21; Exit; End;{*Module not Implemented !*}
  303. MACRO_PREFS(Num,W,Choix);               {*Demande les Paramètres Avant*}
  304. If Choix=2 Then Exit;                   {*Touche Cancel Préssée*}
  305. If (Choix=3) Or (Choix=1) Then          {*Suprime Gadget Lens sur Barre Title*}
  306.    Begin W.NbGsp:=2; RENAME_WINDOW(W.Name,W); End;
  307. If Choix=3 Then
  308.    Begin
  309. {   Radio_Box(W2.X1+170,W2.Y1+38,1,True,Rad1);}
  310.    Exit;                                {*Une Courbe has Been Loaded*}
  311.    End;
  312.  
  313. If Num=4 Then
  314.    Begin
  315.    If WARNING_14=False Then Exit;       {*Avertissement - Prudence*}
  316.    Drive:=SELECT_DRIVE;                 {*Sélectionne Drive*}
  317.    If Drive=-1 Then Exit;               {*Annulation*}
  318.    If WARNING_19=False Then Exit;       {*Second Avertissement - Prudence*}
  319.    End;
  320.  
  321. EXEC_MACROS(Num,W);                     {*Execute Macro du Module Num*}
  322. BEVEL(220,129,636,146,1,7,False,True);  {*Clear Info Bar*}
  323. End;
  324.  
  325. {╔═══════════════════════════════════════════════════════════════════════════╗
  326.  ║                         PROCEDURE EXECUTE_MODULE                          ║
  327.  ╠═══════════════════════════════════════════════════════════════════════════╣
  328.  ║ EXPLAIN: Détermine le Module D'écriture sur Disque.                       ║
  329.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  330.  
  331. Procedure EXECUTE_MODULES(Num:Byte);
  332. Begin
  333. Macro:=False;                           {*Mode Normal*}
  334. If Num=2 Then Begin Error_21; Exit; End;{*Module not Implemented !*}
  335. If Num=4 Then                           {*Avertissement - Prudence*}
  336.    Begin
  337.    If WARNING_14=False Then Exit;
  338.    Drive:=SELECT_DRIVE;                 {*Sélectionne Drive*}
  339.    If Drive=-1 Then Exit;               {*Annulation*}
  340.    If WARNING_19=False Then Exit;       {*Second Avertissement - Prudence*}
  341.    End;
  342.  
  343. EXEC_MODULES(Num);                      {*Write Severals Modules*}
  344. End;
  345.  
  346. {╔═══════════════════════════════════════════════════════════════════════════╗
  347.  ║                          PROCEDURE PRINCIPALE                             ║
  348.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  349.  
  350. Procedure MAIN;
  351. Var But0,But1,But2,But3,                      {*Buttons*}
  352.     But4,But5,But6,But7,
  353.     But8,But9,ButA,ButB,
  354.     ButC,ButD,ButE           :ButG;
  355.  
  356.     Rad0,Rad1,Rad2,Rad3,Rad4 :Rad;            {*Radio Boxes*}
  357.     Cyc0                     :ButG;           {*Boutons Cyclers*}
  358.     LB0                      :LightB;         {*For Light Box*}
  359.  
  360.     W0,W1,W2,W3,W4,W5        :Win;            {*Structures Windows*}
  361.     ExitFlg                  :Boolean;        {*Flag Sortie Programme*}
  362.     NUM                      :Integer;        {*Numéro Gadets Cliqué*}
  363.     Even                     :Byte;           {*Evenements pour Fenêtres*}
  364.     NewNum                   :Byte;           {*Nouveau Numero de Module*}
  365.     Display_WPos             :Boolean;        {*Affiche Window 1st & Test MB*}
  366.     OldX                     :Word;           {*Old Position X for Pointer*}
  367.     LightB_Bool              :Boolean;        {*Présence de la Light Box*}
  368.  
  369. {╔═══════════════════════════════════════════════════════════════════════════╗
  370.  ║                           PROCEDURE LOAD_CONFIG                           ║
  371.  ╠═══════════════════════════════════════════════════════════════════════════╣
  372.  ║ EXPLAIN: Charge une Nouvelle Configuration, et la met en Place.           ║
  373.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  374.  
  375. Procedure LOAD_CONFIG;
  376. Var DirSel,FilSel            :String;         {*Nom et Path Fichiers*}
  377.     FSize                    :Longint;        {*Taille Fichier à Charger*}
  378.     Code                     :Integer;        {*Code Error pour Val*}
  379.     Fil1                     :Text;           {*Fichier Texte de Sauvegarde*}
  380.     NUM                      :Integer;        {*Pour EZ_Requestg*}
  381.     St                       :String;         {*Pour Conversion Boolean*}
  382. Begin
  383. AFF(28);                                      {*Display Help on Gadgets*}
  384. Assign(Fil1,'DSCONFIG.CFG');                  {*Répertoire Courant*}
  385. {$I-}
  386. Reset(Fil1);
  387. {$I+}
  388. If IOResult=0 Then                            {*Teste les Erreurs...*}
  389.    Begin
  390.    Readln(Fil1); Readln(Fil1);
  391.    Readln(Fil1,St); If Upper(St)='GRID=TRUE' Then Grid:=True Else Grid:=False;
  392.    Readln(Fil1,St); If Upper(St)='DELETE FILE=TRUE' Then Del_File:=True Else Del_File:=False;
  393.    Readln(Fil1,St); If Upper(St)='DISP RATE=TRUE' Then Disp_Rate:=True Else Disp_Rate:=False;
  394.    Readln(Fil1,St); If Upper(St)='INLINE HELP=TRUE' Then Help:=True Else Help:=False;
  395.    Readln(Fil1,St); If Upper(St)='NO CLEAR WINDOW=TRUE' Then NoClear:=True Else NoClear:=False;
  396.    Readln(Fil1);
  397.    Readln(Fil1,St); Val(Copy(St,14,Length(St)-13),Scan1,Code);
  398.    Readln(Fil1,St); Val(Copy(St,14,Length(St)-13),Step1,Code);
  399.    Readln(Fil1,St); Val(Copy(St,19,Length(St)-18),Ite1,Code);
  400.    Readln(Fil1); Readln(Fil1); Readln(Fil1);
  401.    Readln(Fil1,St); Val(Copy(St,24,Length(St)-23),LBAMin,Code);
  402.    Readln(Fil1,St); Val(Copy(St,13,Length(St)-12),Mouse_Speed,Code);
  403.    Readln(Fil1,St); Val(Copy(St,14,Length(St)-13),Dbl_Click_Val,Code);
  404.    Readln(Fil1,St); Val(Copy(St,19,Length(St)-18),Delay_Mse_Val,Code);
  405.    Readln(Fil1,St); Val(Copy(St,20,Length(St)-19),CBlink,Code);
  406.    Readln(Fil1,St); Val(Copy(St,13,Length(St)-12),CType,Code);
  407.    Readln(Fil1,St); If Upper(St)='MOUSE BLANKER=TRUE' Then MBlanker:=True Else MBlanker:=False;
  408.    Close(Fil1);                               {*Ferme le Fichier*}
  409.  
  410.    Radio_Box(W2.X1+170,W2.Y1+20,1,Del_File,Rad0);{*Redefine Radios*}
  411.    Radio_Box(W2.X1+170,W2.Y1+38,1,Disp_Rate,Rad1);
  412.    Radio_Box(W2.X1+170,W2.Y1+56,1,Help,Rad2);
  413.    Radio_Box(W2.X1+170,W2.Y1+74,1,NoClear,Rad3);
  414.    Radio_Box(W2.X1+170,W2.Y1+92,1,Grid,Rad4);
  415.  
  416.    EZ_REQUESTG('D-SPEED REQUEST','CONFIGURATION FILE HAS BEEN SUCCESSFULLY LOADED|','_I KNOW !|',NUM);
  417.    End
  418.    Else ERROR_18;
  419. End;
  420.  
  421. {╔═══════════════════════════════════════════════════════════════════════════╗
  422.  ║                           PROCEDURE SAVE_CONFIG                           ║
  423.  ╠═══════════════════════════════════════════════════════════════════════════╣
  424.  ║ EXPLAIN: Sauve la Configuration Courante.                                 ║
  425.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  426.  
  427. Procedure SAVE_CONFIG;
  428. Var DirSel,FilSel            :String;         {*Nom et Path Fichiers*}
  429.     FSize                    :Longint;        {*Taille Fichier à Charger*}
  430.     NUM                      :Integer;        {*Pour EZ_Requestg*}
  431.     Fil1                     :Text;           {*Fichier Texte de Sauvegarde*}
  432. Begin
  433. AFF(29);                                      {*Display Help on Gadgets*}
  434. Assign(Fil1,'DSCONFIG.CFG');                  {*Répertoire Courant*}
  435. {$I-}
  436. Rewrite(Fil1);
  437. {$I+}
  438. If IOResult=0 Then                            {*Teste les Erreurs...*}
  439.    Begin
  440.    Writeln(Fil1,'DISK SPEED v1.0 CONFIGURATION FILE');
  441.    Writeln(Fil1);
  442.    Writeln(Fil1,'GRID=',Grid);
  443.    Writeln(Fil1,'DELETE FILE=',Del_File);
  444.    Writeln(Fil1,'DISP RATE=',Disp_Rate);
  445.    Writeln(Fil1,'INLINE HELP=',Help);
  446.    Writeln(Fil1,'NO CLEAR WINDOW=',NoClear);
  447.    Writeln(Fil1);
  448.    Writeln(Fil1,'MACRO - SCAN=',Scan1);
  449.    Writeln(Fil1,'MACRO - STEP=',Step1);
  450.    Writeln(Fil1,'MACRO - ITERATION=',Ite1);
  451.    Writeln(Fil1);
  452.    Writeln(Fil1,'MOS v1.0 CONFIGURATION');
  453.    Writeln(Fil1);
  454.    Writeln(Fil1,'LIGHT BOX MINIMAL SIZE=',LBAMin);
  455.    Writeln(Fil1,'MOUSE SPEED=',Mouse_Speed);
  456.    Writeln(Fil1,'DOUBLE CLICK=',Dbl_Click_Val);
  457.    Writeln(Fil1,'DELAY CLICK MOUSE=',Delay_Mse_Val);
  458.    Writeln(Fil1,'BLINK CURSOR SPEED=',CBlink);
  459.    Writeln(Fil1,'CURSOR TYPE=',CType);
  460.    Writeln(Fil1,'MOUSE BLANKER=',MBlanker);
  461.    Close(Fil1);                               {*Ferme le Fichier*}
  462.    EZ_REQUESTG('D-SPEED REQUEST','CONFIGURATION FILE HAS BEEN SUCCESSFULLY SAVED IN CURRENT DIRECTORY|','_I KNOW !|',NUM);
  463.    End
  464.    Else ERROR_17;
  465. End;
  466.  
  467. {********************* INITIALISATION WINDOW DE BASE ************************}
  468.  
  469. Procedure INIT_SCREENBASE;
  470. Begin
  471. HideMouse;
  472. INIT_WINDOW(0,0,GetMaxX,GetMaxY,$0099,'D-SPEED v1.0 (C)1994 F.CHEVEAU.',W0);
  473. SUP_WINDOW(0,0,GetMaxX,GetMaxY,59,50,GetMaxX,GetMaxY,0,Col7,$0008,W0);
  474. INIT_WINDOW(003,16,216,146,$0181,'        COMMANDS SECTION',W1);
  475. INIT_WINDOW(220,16,416,126,$0181,'        OPTIONS SECTION',W2);
  476. INIT_WINDOW(420,16,636,126,$0181,'       CONFIGURATION SECTION',W3);
  477. INIT_WINDOW(003,149,636,GetMaxY-23,$55CF,'DRAWING TRANSFERT RATE FOR MODULE '+T[1].Name,W4);
  478. SUP_WINDOW(003,149,207,GetMaxY-48,200,80,GetMaxX-6,177,0,Col7,$0001,W4);
  479.  
  480. ButtonG(W1.X1+005,W1.Y1+20,059,False,But0,'E_XIT');         {*Initialise les Boutons*}
  481. ButtonG(W1.X1+005,W3.Y1+38,105,False,But4,'_WRITE ON DISK');
  482. ButtonG(W1.X1+010,W3.Y2-22,100,False,But8,'_RESULTS');
  483. ButtonG(W1.X1+010,W3.Y2-4,100,False,But9,'PARAME_TERS');
  484. ButtonG(W1.X1+117,W3.Y1+20,90,False,ButA,'_ABOUT D-SPEED');
  485. ButtonG(W1.X1+117,W3.Y1+38,90,False,ButB,'D-SPEED _INFOS');
  486. ButtonG(W1.X1+117,W3.Y2-22,85,False,ButD,'MEM_ORY INFO');
  487. ButtonG(W1.X1+117,W3.Y2-4,85,False,ButE,'MA_CRO');
  488.  
  489. Radio_Box(W2.X1+170,W2.Y1+20,1,True,Rad0);
  490. Radio_Box(W2.X1+170,W2.Y1+38,1,True,Rad1);
  491. Radio_Box(W2.X1+170,W2.Y1+56,1,True,Rad2);
  492. Radio_Box(W2.X1+170,W2.Y1+74,1,False,Rad3);
  493. Radio_Box(W2.X1+170,W2.Y1+92,1,Grid,Rad4);
  494.  
  495. ButtonG(W3.X1+005,W3.Y1+20,110,False,But1,'SELECT _PALETTE');
  496. ButtonG(W3.X1+005,W3.Y1+38,110,False,But2,'SELECT _FONTE');
  497. ButtonG(W3.X1+005,W3.Y1+56,110,False,But3,'SHOW _HARDWARE');
  498. ButtonG(W3.X1+122,W3.Y1+20,88,False,But5,'_LOAD CONFIG');
  499. ButtonG(W3.X1+122,W3.Y1+38,88,False,But6,'_SAVE CONFIG');
  500. ButtonG(W3.X1+005,W3.Y1+92,130,False,But7,'CONFIGURE _MODULES');
  501. ButtonG(W3.X1+005,W3.Y1+74,130,False,ButC,'CONFIGURE S_YSTEM');
  502.  
  503. Cycler_But(W1.X1+005,W1.Y1+56,87,1,Cyc0,Modules);
  504. ShowMouse;
  505. End;
  506.  
  507. {*********************** REDRAW WINDOW BASE ELEMENTS ************************}
  508.  
  509. Procedure DRAW_SCREEN;
  510. Begin
  511. DRAW_WINDOW(W1);
  512. DRAW_WINDOW(W2); DRAW_WINDOW(W3);
  513. DRAW_WINDOW(W4);
  514.  
  515. BEVEL(W1.X1+5,W1.Y2-47,W1.X2-5,W1.Y2-5,1,12,False,True);
  516. BEVEL(W2.X1,W2.Y2+3,W3.X2,W2.Y2+20,1,7,False,False);
  517. BEVEL(W1.X1,GetMaxY-20,W3.X2,GetMaxY-3,1,4,False,True);
  518.  
  519. DRAW_RADIO_BOX(Rad0); DRAW_RADIO_BOX(Rad1);
  520. DRAW_RADIO_BOX(Rad2); DRAW_RADIO_BOX(Rad3);
  521. DRAW_RADIO_BOX(Rad4);
  522.  
  523. DRAW_BUTTONG(But0); DRAW_BUTTONG(But1);
  524. DRAW_BUTTONG(But2); DRAW_BUTTONG(But3);
  525. DRAW_BUTTONG(But4); DRAW_BUTTONG(But5);
  526. DRAW_BUTTONG(But6); DRAW_BUTTONG(But7);
  527. DRAW_BUTTONG(But8); DRAW_BUTTONG(But9);
  528. DRAW_BUTTONG(ButA); DRAW_BUTTONG(ButB);
  529. DRAW_BUTTONG(ButC); DRAW_BUTTONG(ButD);
  530. DRAW_BUTTONG(ButE);
  531.  
  532. DRAW_BUTTONG(Cyc0);
  533.  
  534. DispG(W2.X1+10,W2.Y1+22,7,'DELETE TEST FILE ..............');
  535. DispG(W2.X1+10,W2.Y1+40,7,'DISPLAY TIME/RATE ............');
  536. DispG(W2.X1+10,W2.Y1+58,7,'DISPLAY HELP ON GADGETS ...');
  537. DispG(W2.X1+10,W2.Y1+76,7,'DON''T CLEAR SCREEN ...........');
  538. DispG(W2.X1+10,W2.Y1+94,7,'DISPLAY GRID ....................');
  539. DispG(W1.X1+115,W1.Y1+58,7,'<-- USED MODULE');
  540.  
  541. DRAW_REPERE(Cyc0.CyclVal,W4);            {*Affiche le Repère dans la Fenêtre*}
  542. If Grid=True Then DRAW_GRID(W4);         {*Affiche la Grille*}
  543. End;
  544.  
  545. {******************** CALCULE ET RENVOIS COORDONEES DU POINT ****************}
  546.  
  547. Procedure CALCULE_POINT;
  548. Begin
  549. End;
  550.  
  551. {╔═══════════════════════════════════════════════════════════════════════════╗
  552.  ║                  DISPLAY POSITION WHEN CLICK ON GFX WINDOW                ║
  553.  ╠═══════════════════════════════════════════════════════════════════════════╣
  554.  ║ EXPLAIN: Affiche les Coordonées de points qd on clique dans la Fenêtre.   ║
  555.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  556.  
  557. Procedure DISPLAY_POSITION;
  558. Var X,Y:Word;                            {*Pour Test Souris*}
  559.     Ga,Mi,Dr:Boolean;
  560.     St:String;                           {*Pour Conversion String*}
  561.     Px,Py:Integer;                       {*Coordonées d'un Point*}
  562.     X1,Y1,X2,Y2:Integer;                 {*Coordonées du Repère*}
  563.     ValY:Longint;                        {*Position Y sur la Courbe*}
  564.  
  565. {****************************** DRAW XOR CROIX ******************************}
  566.  
  567. Procedure DRAW_CROIX(Xa,Ya:Word);
  568. Begin
  569. If (Win_Move=True) Or (Win_Size=True) Then Exit;             {*Pas de Tracé*}
  570. SetColor(Col7);
  571. SetWriteMode(XorPut);
  572. HideMouse;
  573. If (Xa>=X1) And (Xa<=X2) Then Line(Xa,Y2,Xa,Y1);
  574. If (Ya>=Y2) And (Ya<=Y1) Then Line(X1,Ya,X2,Ya);
  575. ShowMouse;
  576. SetWriteMode(NormalPut);
  577. End;
  578.  
  579. {******************** CALCULE ET RENVOIS COORDONEES DU POINT ****************}
  580.  
  581. Procedure CALCULE_POINT;
  582. Var A:Integer;
  583.     High_Point:Longint;                  {*Valeur du Point le Plus Elevé*}
  584.     StockX:Real;                         {*Tj Problemes Dépassements - Fuck !*}
  585.  
  586. Begin
  587. Px:=0; Py:=0;                            {*Vide Variables*}
  588. If (Win_Move=True) Or (Win_Size=True) Then Exit;             {*Pas de Tracé*}
  589.  
  590. High_Point:=0;                           {*On Recherche la Valeur Maximum*}
  591. For A:=XMin to XMax do                   {*du Tableau*}
  592.    If P[A]>High_Point Then High_Point:=P[A];
  593. If (High_Point=0) Or (Qtt_Points=0) Then
  594.    Begin Qtt_Points:=100; High_Point:=400; End;
  595.  
  596.    ValY:=((X-X1)*Qtt_Points) Div (X2-X1);       {*Calcul Numéro Elément*}
  597.    Px:=Round((Max_Buffer*(X-X1))/Abs(X2-X1));   {*Calcul Px*}
  598.    Py:=P[ValY];                                 {*Calcul Py*}
  599.    If Py<>0
  600.       Then Begin StockX:=Abs(Y1-Y2)/High_Point; {*Calcul Py en Pixels*}
  601.            ValY:=Y1-Round(StockX*Py); End
  602.       Else ValY:=0;
  603.    If Px<0 Then Px:=0;                          {*Correction Bornes*}
  604.    If Py<0 Then Py:=0;
  605.  
  606. SetFillStyle(1,Col7);                           {*Clear Zone Before Print*}
  607. Bar(W5.X1+115,W5.Y1+HaF+15,W5.X1+147,W5.Y1+HaF+25);
  608. Bar(W5.X1+115,W5.Y1+HaF*2+20,W5.X1+147,W5.Y1+HaF*2+30);
  609. SetColor(Col0);
  610. Str(Px,St); DispG(W5.X1+115,W5.Y1+HaF*1+15,7,St);{*Display Position*}
  611. Str(Py,St); DispG(W5.X1+115,W5.Y1+HaF*2+20,7,St);
  612. End;
  613.  
  614. {========== Procedure Principale =========}
  615.  
  616. Begin
  617. COORDONEES_REPERE(W4,X1,Y1,X2,Y2);       {*Calcule Coordonée du Repère*}
  618. Display_WPos:=False;                     {*Ne pas Afficher Window avant Test*}
  619. If BoxMouseG(W4.X1+1,W4.Y1+HaF+7,W4.X2-1,W4.Y2-1,10)=True Then{*Change Pointer*}
  620.    Set_Pointer(P_Hand);
  621. If (BoxMouseG(W4.X1+1,W4.Y1+HaF+7,W4.X2-1,W4.Y2-1,10)=False) And
  622.    (Win_Move=False) Then Set_Pointer(P_Arrow);    {*Restore Pointer*}
  623. If (BoxMouseG(W4.X1+1,W4.Y1+HaF+7,W4.X2-1,W4.Y2-1,1)=True) And{*Test M Click*}
  624.    (BoxMouseG(W4.X2-19,W4.Y2-HaF-4,W4.X2,W4.Y2,1)=False) And
  625.    (Win_Move=False) Then                 {*Gfx Window is not Moving*}
  626.    Begin
  627.    Display_WPos:=True;                   {*On peut Afficher Window*}
  628.    GetMouseG(X,Y,Ga,Mi,Dr);              {*Récupère Coordonées Souris*}
  629.    Str(X-X1,St);
  630.    If X-X1<0 Then St:='-';               {*En dehors du Repère*}
  631.    If X>X2 Then St:='-';
  632.  
  633.    If (Win_Move=False) And (Win_Size=False) And   {*Pas d'interférences*}
  634.    (Copy(W5.Name,1,11)<>'  POSITIONS') Then {*Create Window First*}
  635.       Begin
  636.       AFF(43);
  637.       INIT_WINDOW(100,120,258,186,$1581,'  POSITIONS - POINT: '+St,W5);
  638.       SUP_WINDOW(003,149,207,GetMaxY-48,200,80,GetMaxX-6,177,0,Col5,$0000,W5);
  639.       DRAW_WINDOW(W5);                   {*Affiche la Fenêtre*}
  640.       Bevel(W5.X1+10,W5.Y1+10+HaF,W5.X2-10,W5.Y2-10,1,Col7,False,True);
  641.       CALCULE_POINT;                     {*Calcule Coordonées*}
  642.       DRAW_CROIX(OldX,ValY);             {*Display Croix First Time*}
  643.       SetColor(Col0);
  644.       DispG(W5.X1+18,W5.Y1+15+HaF*1,Col7,'SIZE BUFFER .....');
  645.       If Disp_Rate=True
  646.          Then DispG(W5.X1+18,W5.Y1+20+HaF*2,Col7,'TRANFERT RATE ..')
  647.          Else DispG(W5.X1+18,W5.Y1+20+HaF*2,Col7,'WRITING TIME ....');
  648.       End;
  649.  
  650.    If X<>OldX Then
  651.       Begin
  652.       DRAW_CROIX(OldX,ValY);             {*Clear Croix*}
  653.       CALCULE_POINT;                     {*Calcule Coordonées*}
  654.       DRAW_CROIX(X,ValY);                {*Display Croix After*}
  655.       Str(X-X1,St);
  656.       If X-X1<0 Then St:='-';            {*En dehors du Repère*}
  657.       If X>X2 Then St:='-';
  658.       If (Win_Move=False) And (Win_Size=False) Then      {*On Peut Tracer*}
  659.          RENAME_WINDOW('  POSITIONS - POINT: '+St,W5);{*Aff Numéro du Point*}
  660.       End;
  661.    OldX:=X;                              {*Recupère Old Position X*}
  662.    End
  663.    Else                                  {*Bouton Gauche relaché*}
  664.    Begin
  665.    If W5.Destroyed=False Then DRAW_CROIX(OldX,ValY);
  666.    W5.Name:='';                          {*Display Croix First Time*}
  667.    KILL_WINDOW(W5); Display_WPos:=False;
  668.    End;
  669. End;
  670.  
  671. {************************ REDRAW GFX WINDOW ELEMENTS ************************}
  672.  
  673. Procedure REDRAW_FRAME;
  674. Begin
  675. DRAW_REPERE(Cyc0.CyclVal,W4);            {*Affiche le Repère dans la Fenêtre*}
  676. If Grid=True Then DRAW_GRID(W4);         {*Affiche la Grille*}
  677. DRAW_COURBE(Cyc0.CyclVal,W4);            {*Affiche la Courbe dans la Fenêtre*}
  678. ADD_GADGET_LENS(W4);                     {*Ajoute Gadget Lentille*}
  679. AFF(37);                                 {*Display Help on Gadgets*}
  680. End;
  681.  
  682. {****************************** MAIN PROCEDURE ******************************}
  683.  
  684. Begin
  685. INIT_DATAS;                              {*Initialisation des Datas*}
  686. INIT_SCREENBASE;                         {*Initialisation Ecran de Base*}
  687. DRAW_WINDOW(W0);
  688. DRAW_SCREEN;                             {*Affichage Ecran de Base*}
  689. LOAD_CONFIG;                             {*Charge Configuration*}
  690. AFF(44);                                 {*Help Inline*}
  691. ExitFlg:=False;                          {*Don't Forget !!!*}
  692.  
  693. {=========== BOUCLE PRINCIPALE ==========}
  694.  
  695. Repeat
  696. If GETMSG_BUT(But0,1)=True Then
  697.    Begin                                 {*Sortie du Programme*}
  698.    AFF(16);                              {*Help on Gadgets*}
  699.    EZ_REQUESTG('D-SPEED REQUEST','DO YOU WANT REALLY TO QUIT ?|',' _YES | _NO |',NUM);
  700.    If NUM=1 Then ExitFlg:=True;
  701.    End;
  702. If GETMSG_BUT(But1,1)=True Then Begin    {*Requester Palette*}
  703.    AFF(25);
  704.    PALETTE_REQUESTG(100,70,'PLEASE SELECT YOUR PALETTE',NUM);
  705.    End;
  706. If GETMSG_BUT(But2,1)=True Then Begin AFF(26); ERROR_20; End;
  707. If GETMSG_BUT(But3,1)=True Then Begin    {*Show Hardware*}
  708.    AFF(27);                              {*Help on Gadgets*}
  709.    HARDWARE_REQUESTG(150,90,'THIS IS YOUR HARDWARE CONFIGURATION');
  710.    End;
  711. If GETMSG_BUT(But4,1)=True Then Begin
  712.    AFF(19);                              {*Help on Gadgets*}
  713.    EXECUTE_MODULES(Cyc0.CyclVal);        {*Write Modules*}
  714.    End;
  715. If GETMSG_BUT(But5,1)=True Then LOAD_CONFIG;{*Load DS Configuration*}
  716. If GETMSG_BUT(But6,1)=True Then SAVE_CONFIG;{*Save DS Configuration*}
  717. If GETMSG_BUT(But7,1)=True Then          {*Add or Sub Modules*}
  718.    Begin
  719.    AFF(30);                              {*Display Help on Gadgets*}
  720.    CONFIGURE_MODULES;
  721.    Cycler_But(W1.X1+005,W1.Y1+56,87,1,Cyc0,Modules);
  722.    End;
  723. If GETMSG_BUT(But8,1)=True Then MAIN_RESULTS;{*Visualisation des Résultats*}
  724. If GETMSG_BUT(But9,1)=True Then PARAMETERS_MODULES;{*Modif Des Parameters*}
  725. If GETMSG_BUT(ButA,1)=True Then ABOUT;   {*ABOUT Requester*}
  726. If GETMSG_BUT(ButB,1)=True Then INFO;    {*INFO Requesters*}
  727. If GETMSG_BUT(ButC,1)=True Then Begin    {*System Requester*}
  728.    AFF(31);                              {*Help on Gadgets*}
  729.    SYSTEM_REQUESTG(100,70,'PLEASE SELECT YOUR CONFIGURATION');
  730.    End;
  731. If GETMSG_BUT(ButD,1)=True Then Begin
  732.    AFF(15);                              {*Help on Gadgets*}
  733.    MEMORY_REQUESTG(100,70,'YOUR MEMORY CONFIGURATION...');{*INFO sur la Mémoire*}
  734.    End;
  735. If GETMSG_BUT(ButE,1)=True Then Begin
  736.    NewNum:=Cyc0.CyclVal;
  737.    MACRO_MODULES(NewNum,W4);             {*Macro Write Modules*}
  738.    Cycler_But(W1.X1+005,W1.Y1+56,87,NewNum,Cyc0,Modules);
  739.    End;
  740.  
  741. If GETMSG_RADIO(Rad0,1)=True Then UPDATE_FILE;   {*Delete Test File*}
  742. If GETMSG_RADIO(Rad1,1)=True Then UPDATE_ORDONEE(Cyc0.CyclVal,W4);
  743. If GETMSG_RADIO(Rad2,1)=True Then UPDATE_HELP;   {*Display Help on Gadgets*}
  744. If GETMSG_RADIO(Rad3,1)=True Then UPDATE_CLEAR;
  745. If GETMSG_RADIO(Rad4,1)=True Then UPDATE_GRID(Cyc0.CyclVal,W4);{*Put Grid On/Off*}
  746. If GETMSG_BUT(Cyc0,1)=True Then AFF(24);
  747.  
  748. Even:=ACTIVE_WINDOW(W0);                 {*Active Window W0 = Ecran de Base*}
  749. If Even=1 Then ExitFlg:=True;            {*Sortie par Close Gadget*}
  750. If Even=2 Then INIT_WINDOW(0,0,GetMaxX,GetMaxY,$00B9,'D-SPEED v1.0 (C)1994 F.CHEVEAU.',W0);
  751.  
  752. Even:=ACTIVE_WINDOW(W4);
  753. If Even=9 Then REDRAW_FRAME;             {*Window Re-Drawed = Move*}
  754. If Even=3 Then REDRAW_FRAME;             {*Window Re-Drawed = Extend*}
  755. If Even=4 Then REDRAW_FRAME;             {*Window Re-Drawed = Size*}
  756.  
  757. If LIGHT_BOX(LB0,3)=True Then            {*Light Box Defined*}
  758.    ZOOM_COURBE(LB0.X1,LB0.X2,Cyc0.CyclVal,W4);
  759.  
  760. If LightB_Status=True Then Begin         {*Limite Souris dans la Fenêtre*}
  761.    LimitMouseG(W4.X1,W4.Y1+HaF+5,W4.X2,W4.Y2);
  762.    If LightB_Bool=False Then AFF(41);    {*Display Help*}
  763.    LightB_Bool:=True; End
  764.    Else;
  765.    If (LightB_Status=False) And (LightB_Bool=True) Then
  766.       Begin LightB_Bool:=False; AFF(42);
  767.       LimitMouseG(1,1,GetMaxX,GetMaxY);
  768.       End;
  769.  
  770. If (XMin<>1) Or (XMax<>Qtt_Points) Then
  771.    Begin
  772.    W4.NbGsp:=3;
  773.    If GetMsg_But(But_Lens,1)=True Then
  774.       Begin
  775.       XMin:=1; XMax:=Qtt_Points; Nb_Points:=Qtt_Points;
  776.       W4.NbGsp:=2; DRAW_WINDOW(W4); REDRAW_FRAME;
  777.       End;
  778.    End;
  779.  
  780. If But_Lens.Flg_But=True Then
  781.    PutImage(W4.X2-20*W4.NbGsp+1,W4.Y1+1,GpD^,NormalPut);
  782.  
  783. DISPLAY_POSITION;                        {*Display Position Points*}
  784. MAIN_TASK;                               {*Gestion All Main*}
  785. Until ExitFlg=True;                      {*Sortie du Programme*}
  786.  
  787. {=========== SORTIE DU PROGRAMME ==========}
  788.  
  789. KILL_WINDOW(W4);                         {*Kill Windows if Exist !*}
  790. KILL_WINDOW(W3);
  791. KILL_WINDOW(W2);
  792. KILL_WINDOW(W1);
  793. KILL_WINDOW(W0);
  794. End;
  795.  
  796. {╔═══════════════════════════════════════════════════════════════════════════╗
  797.  ║                            PROGRAMME PRINCIPAL                            ║
  798.  ╚═══════════════════════════════════════════════════════════════════════════╝}
  799.  
  800. Begin
  801. INIT_ASM;                                {*Initialise All for Hardware*}
  802. INIT_SCREEN;                             {*Initialise All for Screen*}
  803. INIT_MOUSE;                              {*Initialise All for Mouse*}
  804.  
  805. DirectVideo:=False;
  806. MAIN;                                    {*Execute le Programme Principal*}
  807.  
  808. DONE_MOUSE;                              {*Restore All for Mouse*}
  809. DONE_SCREEN;                             {*Restore All for Screen*}
  810. DONE_ASM;                                {*Restore All for Hardware*}
  811. End.
  812.