Fonction Scilab
fr


generate_palette

Contenu du fichier


////////////////////
//generate_palette
//Version 1 - vendredi 10 sept 2004
//
//Crée un fichier cosf à partir d'une
//liste de fonctions d'interface scicos
//
//lsh
//txt chaine de caractère du fichier cosf
//
//rsh
//lisf  : liste de noms de fonction
//nameP : nom de la palette (sans extension)
//
//Lundi 4 avril 2005
//Rajout du chemin où ecrire le fichier cosf : path
//
//Mercredi 21 Mars 2007
//Alan - je rajoute Modnum pour le titre.
//  Cette fonction doit-être révisée pour les versions
//  Supérieures à scicos_ver=scicos2.7.3
//
//Mardi 24 Avril 2007
// Réecriture avec cos2cosf (assure compatibilité avec
//                           version de scicos > 2.7.3)
// Modif : ne retourne plus aucun argument de sortie
//
function generate_palette(lisf,path,nameP)
 //Affiche un message
 printf("Generate "+nameP+" palette\n");

 //Déclaration variable locale
 sp_x=30     //espace entre chaque block
 sp_y=22     //espace entre chaque ligne
 nb_r=5      //nombre de block par ligne
 lmax=80;    //longeur max d'une ligne txt du fichier
 j=0;        //compteur colonne
 blk_x=0;    //coordonnée x du block
 blk_y=sp_y; //coordonnée y du block
 blk_y1=0;   //memo de la largeur max d'un block sur une ligne

 //Charge librairies Scicos
 load SCI/macros/scicos/lib
 exec(loadpallibs,-1)

 //charge une structure vide
 scs_m=scicos_diagram()

 //Nomme la fenêtre
 scs_m.props("title")="Modnum-"+nameP

 //Ecrit en-tête du fichier cosf
// pause
//  t=['scicos_ver='"scicos2.7.3'"'
//     'scs_m=scicos_diagram()']
//  t1=sci2exp(scs_m.props,lmax);
//  txt=[t;'scs_m.props='+t1(1);t1(2:$)]

 //Pour chaque fonction
 for l=1:size(lisf,1)
   //execute cas define du bloc l
   ierror=execstr('blk='+lisf(l,1)+'(''define'')','errcatch');
   if ierror <>0 then
      message(['Error in GUI function';lasterror()] )
      fct=[]
      return
   end

   //redimensionne block
   blk.graphics("sz")(1)=blk.graphics("sz")(1)*20
   blk.graphics("sz")(2)=blk.graphics("sz")(2)*20

   //Mémorise le bloc le plus haut
   if(blk.graphics("sz")(2)>blk_y1) then
    blk_y1=blk.graphics("sz")(2)
   end 

   //incremente compteur colonne
   j=j+1;
   //Test début de colonne
   if j==1 then
    blk_x=sp_x //position x du bloc colonne 1
   end
   //Position du block dans la palette
   blk.graphics("orig")=[blk_x blk_y]

   //Incrémente la position x du block
   blk_x=blk_x+blk.graphics("sz")(1)+sp_x

   //Test fin de colonne
   if j==nb_r
      j=0                     //RAZ compteur colonne
      blk_y=blk_y+blk_y1+sp_y //Incremente position y
      blk_y1=0                //RAZ longueur bloc le plus haut
   end

   scs_m.objs($+1)=blk
   //Ecrit scs_m.objs(l)
//    lhs='scs_m.objs('+string(l)+')='
//    t1=sci2exp(blk,lmax-length(lhs))
//    n1=size(t1,1)
//    bl1=' ';bl1=part(bl1,1:length(lhs))
//    txt=[txt;lhs+t1(1);bl1(ones(n1-1,1))+t1(2:$)]
 end

  [u,err]=file('open',path+nameP+'.cosf','unknown','formatted')
  if err<>0 then
    message('File or directory write access denied')
    return
  end

  //Test pour les versions de scicos
  ierr = execstr('scicos_ver=get_scicos_version()','errcatch')
  if ierr<>0 then //seulement compatible pour scilab > 3
    tt = "scicos_ver = ""scicos2.7.3"""
    write(u,tt,'(a)')
  end
  cos2cosf(u,do_purge(scs_m))
  file('close',u);

 //Enregistre txt dans nameP.cosf
//  mputl(txt,path+nameP+'.cosf');
endfunction