Scilab permet d’exécuter un programme écrit en Ada1 qui
Au retour du programme Ada, le programme Scilab peut lire les fichiers créés ou modifiés par Ada.
De plus, nous pouvons afficher dans la console de Scilab toutes les sorties écran du programme Ada.
Notons que les données en Scilab et en Ada doivent être du même format. Comme Scilab a des réels double précision, on travaillera en nombre réelé, c’est-à-dire on codera les entiers en réels, et en Ada on aura le type Float pour les données.
Nous donnons ci-après les listings en Ada et en Scilab des programmes
qui permettent la communication entre Scilab et Ada.
Échange des fichiers texte
Les programmes suivants permettent l’échange du fichier Texte.TXT, qui est un fichier texte, entre Scilab et Ada.
Le programme en Ada est le suivant
-------------------------------------------- -- -- Fichier séquentiel texte -- * écrit en Scilab; -- * lu en Ada; -- * modifié en ADA, et -- * récupéré par Scilab -- -------------------------------------------- with Text_Io; use Text_Io; WITH Ada.Float_Text_IO; WITH Ada.Integer_Text_IO; WITH Ada.Text_IO; procedure Texte is F : File_Type; S : String (1..180); L : Integer; V : Float; package Fio is new Float_Io(Float); BEGIN Ada.Text_IO.Put('' **** AFFICHAGE ADA ****''); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; -- Lecture du fichier Texte.TXT créé par Scilab Ada.Text_IO.Put(''Affichage fichier Scilab''); Ada.Text_IO.New_Line; Ada.Text_IO.Put(''------------------------''); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; Open (F,In_File,''Texte.TXT''); Get_Line (F,S,L); Ada.Text_IO.Put(''Première ligne : ''); Ada.Text_IO.Put_Line (S(1..L)); Fio.Get (F,V); Ada.Text_IO.Put(''Deuxième ligne : ''); Ada.Float_Text_IO.Put (Item =>V, Fore => 10); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; Close (F); -- Ecriture du fichier Texte.TXT L := 39; -- Longueur du texte de la première ligne du fichier S(1..L):=''Passage fichier texte d'ADA vers Scilab''; V := V + 10.0; Ada.Text_IO.Put(''Nouveau fichier écrit par Ada''); Ada.Text_IO.New_Line; Ada.Text_IO.Put(''-----------------------------''); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; Ada.Text_IO.Put(''Première ligne : ''); Ada.Text_IO.Put_Line (S(1..L)); Ada.Text_IO.Put(''Deuxième ligne : ''); Ada.Float_Text_IO.Put (Item =>V, Fore => 10); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; Open (F,Out_File,''Texte.TXT''); Put_Line (F,S(1..L)); Fio.Put (f,V); Put_Line (f,''''); Close (F); end Texte;
Le programme correspondant en Scilab est le suivant :
// Echange d'un fichier texte entre Scilab et Ada // Ecriture du fichier ft = mopen (''Texte.TXT'',''w''); disp(''**** Affichage Scilab''); s='' -- Passage fichier texte de Scilab vers Ada --''; disp(''Première ligne du fichier''); disp (s); mfprintf (ft,''%s\n'',s); val = %pi; disp(''Deuxière ligne du fichier''); disp (val); mfprintf (ft,''%f\n'',val); mclose (ft); // Appel du programme Ada // v = host (''texte.exe'') // Si =0 ==> opération correcte unix_w (''texte.exe''); // Lecture du fichier modifié par Ada ft = mopen (''Texte.TXT'',''r''); s1=mgetl (ft,1); disp(''**** Affichage Scilab du retour d ADA''); disp(''Première ligne du fichier''); disp (s1); s2=mgetl (ft,1); val=sscanf (s2,''%f''); disp(''Deuxière ligne du fichier''); disp (val); mclose (ft);
Notons qu’il faut compiler le programme Ada avant de l’appeler par Scilab. En effet scilab appelle l’exécutable de ce programme.
Si dans Scilab nous utilisons, pour l’appel du programme Ada, la commande host(NomProgrammeEnAda.exe) le programme sera exécuté mais les affichages d’Ada n’apparaîtront pas à la console de Scilab. Si on veut que ces affichages apparaissent, il faut utiliser la commande uix_w(NomProgrammeEnAda.exe) .
Échange des fichiers séquentiels binaires
Comme pour les fichiers texte, on peut aussi échanger des fichiers binaires entre Scilab et Ada. Nous donnons les listings des programmes qui font l’échange du fichier Data.DAT, qui est un fichier séquentiel. La démarche pour un fichier binaire en accès direct est a même. Le programme en Ada est le suivant :
-------------------------------------------- -- -- Fichier séquentiel binaire -- * \UNICODE{0xe9}crit en Scilab; -- * lu en Ada; -- * modifié en ADA, et -- * récupéré par Scilab -- -------------------------------------------- WITH Ada.Float_Text_IO; WITH Ada.Text_IO; with Sequential_io; procedure Data is package sio is new Sequential_Io(Float); F : sio.File_Type; T : array (1..10) of Float; begin Ada.Text_IO.Put('' **** AFFICHAGE ADA ****''); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; -- Lecture du fichier Data.DAT créé par Scilab Ada.Text_IO.Put(''Affichage fichier Scilab''); Ada.Text_IO.New_Line; Ada.Text_IO.Put(''------------------------''); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; Sio.Open (F,Sio.In_File,''Data.DAT''); for I in 1..10 loop Sio.Read (F,T(I)); Ada.Float_Text_IO.Put (Item =>T(I), Fore => 6, Aft => 0, Exp => 0); end loop; Sio.Close (F); Ada.Text_IO.New_Line; -- Ecriture du fichier Data.DAT for I in 1..10 loop T(I):=10.0+T(I); end loop; Ada.Text_IO.Put(''Nouveau fichier écrit par Ada''); Ada.Text_IO.New_Line; Ada.Text_IO.Put(''-----------------------------''); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; Sio.Open (F,Sio.Out_File,''Data.DAT''); for I in 1..10 loop Sio.Write (F,T(I)); Ada.Float_Text_IO.Put (Item =>T(I), Fore => 6, Aft => 0, Exp => 0); end loop; Sio.Close (F); Ada.Text_IO.New_Line; Ada.Text_IO.New_Line; end Data;
Le programme Scilab est le suivant :
// Aler-retour d'un fichier binaire séquentiel entre Scilab et Ada t=[]; for i=1:10 do t(i)=i; end; t=t'; // Ada renvoie un vecteur ligne disp(''**** Affichage Scilab''); disp (t); // Ecriture du fichier fd = mopen (''Data.DAT'',''wb''); mput (t,''f'',fd); mclose (fd); // Appel du programme Ada unix_w (''data.exe''); // Lecture du fichier modifié par Ada fd = mopen (''Data.DAT'',''rb''); t=mget (10,''f'',fd); mclose (fd); disp(''**** Affichage Scilab du retour d ADA''); disp (t);
Ce document a été traduit de LATEX par HEVEA