{ ======================================================================= }
{ fonctions de lecture/ecriture de spectres }
unit interpreteurFileIO;

interface
uses InterpreteurBase;

  function readspectre1D(par:parametresNum;pars:parametresStr):integer;
  function readspectre2D(par:parametresNum;pars:parametresStr):integer;
  function lectureFichierHADAS(par:parametresNum;pars:parametresStr):integer;
  function saveToASCII1D(par:parametresNum;pars:parametresStr):integer;
  function openspectre(par:parametresNum;pars:parametresStr):integer;
  function openNeXuS(par:parametresNum;pars:parametresStr):integer;
  function openNeXuSLLB(par:parametresNum;pars:parametresStr):integer;
  function SaveSpectre(par:parametresNum;pars:parametresStr):integer;
  function openPAXY(par:parametresNum;pars:parametresStr):integer;
  function saveToASCII2D(par:parametresNum;pars:parametresStr):integer;
  function ReadLAMPD17(par:parametresNum;pars:parametresStr):integer;

implementation
uses EditData, interpreteur, boiteNoire, sysUtils;
   
    { lecture d'un spectre sauvé sur le disque (ancien format)}
    { A MODIFIER OU SUPPRIMER }
    { INPUT: nom fichier du spectre}
    { OUTPUT: le spectre est transféré dans spect[1] }
    function readspectre1D(par:parametresNum;pars:parametresStr):integer;
    var vind:integer;
    begin
{ ancienne version }
    dataeditform.litspectre1D(pars[1]);
    result:=1;
    end;

    {lecture fichier 2D ancien format
    INPUT pars[1] nom du fichier
          pars[2] nom du spectre}
    function readspectre2D(par:parametresNum;pars:parametresStr):integer;
    var vind:integer;
    begin
    interpreteurform.timer1.enabled:=false;
    vind:=deuxd.indexof(pars[2]);
    if vind<0 then vind:=deuxd.addspectre(pars[2],1,1,1);

    if editdata.fexis(pars[1]) then
      begin
      deuxd.spect[vind].readfromfile(pars[1]);
      boitnoir.receivetext('ouverture de : ' + pars[1]+' dans : '+pars[2]);
      end
    else
      boitnoir.receivetext('!! echec ouverture : ' + pars[1]+' n existe pas');

    interpreteurform.timer1.enabled:=true;
    result:=1;
    end;

    {procedure de sauvegarde générale ancien format}
    {A SUPPRIMER ??
    function savespectre:integer;far;
    begin
    dataeditform.sauve(round(par[1]),pars[2]);
    result:=1;
    end;           }

    {lecture HADAS }
    {!! Le chemin est IMPOSE}
    function lectureFichierHADAS(par:parametresNum;pars:parametresStr):integer;
    var s:string;
    begin
         s:=pars[1]+IntToStr(round(par[2]));
{         lectureFichierHADAS('d:\temp\'+s+'.img'); }
    end;

    { INPUT: pars[1], le nom du spectre à sauvegarder }
    {        pars[2], le nom du fichier (avec chemin) }
    {        pars[3]+..+pars[10], le commentaire en première ligne }
    function saveToASCII1D(par:parametresNum;pars:parametresStr):integer;
    var fich:text;
        i,ind:integer;
    begin
         interpreteurform.timer1.enabled:=false;
         ind:=und.indexof(pars[1]);
         if ind<>-1 then begin
            und.spect[ind].comment:=pars[3]+pars[4]+pars[5]+pars[6]+pars[7]+pars[8]+pars[9]+pars[10];
            und.spect[ind].saveToASCII_2col(pars[2]);
            end;
         interpreteurform.timer1.enabled:=true;
    end;

    { INPUT: pars[1], le nom du spectre a sauvegarder }
    {        pars[2], le nom du fichier (avec chemin) }
    {        pars[3]+..+pars[10], le commentaire en première ligne }
    {OUTPUT : Fichier type 4 col : X,Y,Z(=0), data     }
{    function saveToASCII2D:integer;
    var fich:text;
        i,j,ind:integer;
    begin
         interpreteurform.timer1.enabled:=false;
         ind:=deuxd.indexof(pars[1]);
         if ind<>-1 then begin
            deuxd.spect[ind].comment:=pars[3]+pars[4]+pars[5]+pars[6]+pars[7]+pars[8]+pars[9]+pars[10];
            deuxd.spect[ind].saveToASCII_2col(pars[2]);
            end;
         interpreteurform.timer1.enabled:=true;
    end;    }

    {fonction d'ouverture de spectre au nouveau format}
    {INPUT : par[1] : dim du spectre (=1,2,3)
             pars[2] : nom du fichier
             pars[3] : nom du spectre recepteur}
    function openspectre(par:parametresNum;pars:parametresStr):integer;
    var dim,ind:integer;
    begin
    interpreteurform.timer1.enabled:=false;
    dim:=round(par[1]);
    if editdata.fexis(pars[2]) then
    begin
    case dim of
    1: begin
       ind:=und.addspectre(pars[3],1,1,1);
       und.spect[ind].open(pars[2]);
       end;
    2: begin
       ind:=deuxd.addspectre(pars[3],1,1,1);
       deuxd.spect[ind].open(pars[2]);
       end;
    3: begin
       ind:=troisd.addspectre(pars[3],1,1,1);
       troisd.spect[ind].open(pars[2]);
       end;
    end;
    {boitnoir.receivetext('ouverture de : ' + pars[2]+' dans : '+pars[3]);}
    end
    else boitnoir.receivetext('!! echec ouverture : ' + pars[2]+' n existe pas');
    interpreteurform.timer1.enabled:=true;
    end;

    function openNeXuS(par:parametresNum;pars:parametresStr):integer;
    var dim,ind:integer;
    begin
    interpreteurform.timer1.enabled:=false;
    dim:=round(par[1]);
    if editdata.fexis(pars[2]) then
    begin
    case dim of
    1: begin
       ind:=und.addspectre(pars[3],1,1,1);
       und.spect[ind].readFromNeXus(pars[2]);
       end;
    2: begin
       ind:=deuxd.addspectre(pars[3],1,1,1);
       deuxd.spect[ind].readFromNeXus(pars[2]);
       end;
    3: begin
       ind:=troisd.addspectre(pars[3],1,1,1);
       troisd.spect[ind].readFromNeXus(pars[2]);
       end;
    end;
    {boitnoir.receivetext('ouverture de : ' + pars[2]+' dans : '+pars[3]);}
    end
    else boitnoir.receivetext('!! echec ouverture : ' + pars[2]+' n existe pas');
    interpreteurform.timer1.enabled:=true;
    end;

    {fonction ouvrant les fichiers au format Nex du LLB }

    function openNeXuSLLB(par:parametresNum;pars:parametresStr):integer;
    var dim,ind:integer;
    begin
    interpreteurform.timer1.enabled:=false;
    dim:=round(par[1]);
    if editdata.fexis(pars[2]) then
    begin
    case dim of
    1: begin
       ind:=und.addspectre(pars[3],1,1,1);
       und.spect[ind].readFromNeXusLLB(pars[2]);
       end;
    2: begin
       ind:=deuxd.addspectre(pars[3],1,1,1);
       deuxd.spect[ind].readFromNeXusLLB(pars[2]);
       end;
    3: begin
       ind:=troisd.addspectre(pars[3],1,1,1);
       troisd.spect[ind].readFromNeXusLLB(pars[2]);
       end;
    end;
    {boitnoir.receivetext('ouverture de : ' + pars[2]+' dans : '+pars[3]);}
    end
    else boitnoir.receivetext('!! echec ouverture : ' + pars[2]+' n existe pas');
    interpreteurform.timer1.enabled:=true;
    end;

    {fonction de sauvegarde de spectre au nouveau format}
    {INPUT : par[1] : dim du spectre (=1,2,3)
             pars[2] : nom du spectra a sauvegarder
             pars[3] : nom du fichier "nom complet avec chemin"}
    function SaveSpectre(par:parametresNum;pars:parametresStr):integer;
    var dim,ind:integer;
    begin
    interpreteurform.timer1.enabled:=false;
    dim:=round(par[1]);
    case dim of
    1: begin
       ind:=und.indexof(pars[2]);
       if ind>0 then und.spect[ind].save(pars[3]);
       end;
    2: begin
       ind:=deuxd.indexof(pars[2]);
       if ind>0 then deuxd.spect[ind].save(pars[3]);
       end;
    3: begin
       ind:=troisd.indexof(pars[2]);
       if ind>0 then troisd.spect[ind].save(pars[3]);
       end;
    end;
    interpreteurform.timer1.enabled:=true;
    end;

    {fonction d'ouverture de spectre au format PAXY}
    {INPUT : pars[1] : Chemin terminé par \
             par[2]  : index du fichier
             pars[3] : nom du spectre                               }
    function openPAXY(par:parametresNum;pars:parametresStr):integer;
    var filename,temp:string;
        ind:integer;
        titre,nom,date,heure,temps:string;
    begin
    interpreteurform.timer1.enabled:=false;
    temp:='000'+floattostr(par[2]);
    temp:=copy(temp,length(temp)-3,4);
    filename:=pars[1]+'XY'+temp+'.dat';
    if editdata.fexis(filename) then
      begin
       ind:=deuxd.addspectre(pars[3],128,128,1);
       deuxd.spect[ind].readfromPAXY(filename,titre,nom,date,heure,temps);
      end
    else boitnoir.receivetext('!! echec ouverture : ' + filename +' n existe pas');

    interpreteurform.timer1.enabled:=true;

    end;

{ INPUT: pars[1], le nom du spectre a sauvegarder }
{        pars[2], le nom du fichier (avec chemin) }
{        pars[3]+..+pars[10], le commentaire en première ligne }
{OUTPUT : Fichier type 4 col : X,Y,Z(=0), data     }
function saveToASCII2D(par:parametresNum;pars:parametresStr):integer;
var fich:text;
    i,j,ind:integer;
begin
    interpreteurform.timer1.enabled:=false;
    ind:=deuxd.indexof(pars[1]);
    if ind<>-1
    then begin
            deuxd.spect[ind].comment:=pars[3]+pars[4]+pars[5]+pars[6]+pars[7]+pars[8]+pars[9]+pars[10];
            deuxd.spect[ind].saveToASCII_2col(pars[2]);
         end;
    interpreteurform.timer1.enabled:=true;
end;

  { lecture d'un spectre mesure sur D17 et sauvegardé en format LAMP }
  function ReadLAMPD17(par:parametresNum;pars:parametresStr):integer;
  var vind:integer;
      temp:real;
  begin
{      LectureLAMPD17File(pars[1],pars[2]); }
  end;


end.
