Add "load" function
Pierre MARECHAL [Wed, 24 Jun 2009 09:57:46 +0000 (11:57 +0200)]
scilab/modules/atoms/macros/atomsAutoload.sci
scilab/modules/atoms/macros/atomsGetLoaded.sci [new file with mode: 0644]
scilab/modules/atoms/macros/atomsIsLoaded.sci
scilab/modules/atoms/macros/atomsLoad.sci [new file with mode: 0644]

index 691c29a..e1ce660 100644 (file)
 
 function result = atomsAutoload()
        
-       result = %F;
-       
-       // Get scilab version (needed for later)
-       // =========================================================================
-       sciversion = strcat(string(getversion('scilab')) + ".");
-       
        // Check input parameters
        // =========================================================================
-       
        rhs = argn(2);
-       
        if rhs > 0 then
                error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"atomsAutoload",0))
        end
        
        // Get the list of packages to load
        // =========================================================================
-       
        packages = atomsGetAutoload();
        
-       // Get the list of lib
+       // Libraries to resume
        // =========================================================================
+       libs_resume = [];
+       
+       // Get the list of lib [before]
+       // =====================================================================
        libs_before = librarieslist();
        
-       // Loop on packages
+       // Load the wanted packages
        // =========================================================================
+       result = atomsLoad(packages(:,1),packages(:,2));
        
-       for i=1:size(packages(:,1),"*")
-               
-               loader_file = pathconvert(packages(i,4)) + "loader.sce";
+       // Get the list of lib [after]
+       // =====================================================================
+       libs_after = librarieslist();
+       
+       // Loop on libs_after
+       // =====================================================================
+       for i=1:size(libs_after,"*")
                
-               if fileinfo(loader_file)==[] then
-                       error(msprintf(gettext("%s: The file ''%s'' doesn''t exist or is not read accessible.\n"),"atomsAutoload",loader_file));
+               if find(libs_after(i) == libs_before) == [] then
+                       libs_resume = [ libs_resume ; libs_after(i) ];
                end
-               
-               exec( loader_file );
        end
        
-       // Get the list of lib
+       // If libs_resume is empty, the job is done
        // =========================================================================
-       libs_after = librarieslist();
+       if isempty(libs_resume) then
+               return;
+       end
        
-       // Loop on libs_after
+       // Build the resume cmd
        // =========================================================================
-       for i=1:size(libs_after,"*")
-               
-               if find(libs_after(i) == libs_before) == [] then
-                       resume_cmd = msprintf("%s = resume(%s);",libs_after(i),libs_after(i));
-                       execstr(resume_cmd,"errcatch");
+       
+       resume_cmd = "[";
+       
+       for i=1:size(libs_resume,"*")
+               resume_cmd = resume_cmd + libs_resume(i);
+               if i<size(libs_resume,"*") then
+                       resume_cmd = resume_cmd + ",";
+               else
+                       resume_cmd = resume_cmd + "] = resume(";
+               end
+       end
+       
+       for i=1:size(libs_resume,"*")
+               resume_cmd = resume_cmd + libs_resume(i);
+               if i<size(libs_resume,"*") then
+                       resume_cmd = resume_cmd + ",";
+               else
+                       resume_cmd = resume_cmd + ");";
                end
        end
        
+       // Exec the resume cmd
+       // =========================================================================
+       execstr(resume_cmd,"errcatch");
+       
 endfunction
diff --git a/scilab/modules/atoms/macros/atomsGetLoaded.sci b/scilab/modules/atoms/macros/atomsGetLoaded.sci
new file mode 100644 (file)
index 0000000..7b710e0
--- /dev/null
@@ -0,0 +1,48 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// End user function
+
+// Return a 4xn string matrix :
+// 
+// !toolbox2          0.1  user     /home/pmarecha/.Scilab/scilab-branch-atoms/atoms/contrib/toolbox2/0.1  A  !
+// !                                                                                                          !
+// !toolbox2          0.2  user     /home/pmarecha/.Scilab/scilab-branch-atoms/atoms/contrib/toolbox2/0.2  A  !
+// !                                                                                                          !
+// !toolbox_skeleton  1.3  alluser  /home/pmarecha/work/atoms/scilab/contrib/toolbox_skeleton/1.3          I  !
+
+function packages = atomsGetLoaded()
+       
+       packages = [];
+       
+       // Define the differents path of the file where are installed
+       // =========================================================================
+       loaded_file   = pathconvert(TMPDIR+"/atoms/loaded",%F);
+       
+       if fileinfo(loaded_file) == [] then
+               packages = [];
+               return;
+       end
+       
+       // load the loaded_file
+       // =========================================================================
+       loaded = mgetl(loaded_file);
+       
+       // Loop on each URL specified as first input argument
+       // =========================================================================
+       
+       for i=1:size(loaded,"*")
+               current_name_length  = regexp(loaded(i),"/\s-\s/","o");
+               current_name         = part(loaded(i),1:current_name_length-1);
+               current_version      = part(loaded(i),current_name_length+3:length(loaded(i)));
+               
+               packages = [ packages ; atomsGetInstalledDetails(current_name,current_version) ];
+       end
+       
+endfunction
index 7f86d36..98ee89f 100644 (file)
@@ -1,6 +1,4 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - INRIA - Simon LIPP <simon.lipp@inria.fr>
-// Copyright (C) 2009 - DIGITEO - Sylvestre LEDRU <sylvestre.ledru@scilab.org>
 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
 //
 // This file must be used under the terms of the CeCILL.
 
 // End user function
 
-// If a toolbox is registered, return %t and its path ; %f else
+// Return %T if a (or several) toolbox has been loaded in this scilab session
 
-function [reg,path] = atomsIsLoaded(name)
-  if argn(2) == 1 then
-  reg = %f
-  path = ""
-  
-  tboxes = atomsGetLoaded()
-  for i=1:size(tboxes, 1)
-    if tboxes(i,1) == name then
-         reg = %t
-         path = tboxes(i,2)
-         return
+function res = atomsIsLoaded(name,version)
+       
+       rhs = argn(2);
+       res = [];
+       
+       // Check number of input arguments
+       // =========================================================================
+       
+       if rhs < 1 | rhs > 2 then
+               error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsIsLoaded",1,2));
        end
-  end  
-  else
-    error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsIsLoaded",1))
-  end
-
+       
+       // Check input parameters type
+       // =========================================================================
+       
+       if type(name) <> 10 then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsLoaded",1));
+       end
+       
+       if rhs>1 &  (~isempty(version)) & type(version)<>10  then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsLoaded",2));
+       end
+       
+       // name and version must have the same size
+       // =========================================================================
+       
+       if rhs>1 & version<>[] & or(size(name)<>size(version)) then
+               error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsIsLoaded",1,2));
+       end
+       
+       // Value of version if not precised
+       // =========================================================================
+       
+       if rhs < 2 then
+               version = [];
+       end
+       
+       // Get the list of installed packages
+       // =========================================================================
+       packages = atomsGetLoaded();
+       
+       // Loop on name
+       // =========================================================================
+       
+       for i=1:size(name,"*")
+               
+               if isempty(version) then
+                       // Just check the name
+                       res(i) = or(packages(:,1) == name(i));
+               
+               else
+                       // Filter on names
+                       packages_version = packages( find(packages(:,1) == name(i)) , 2 );
+                       
+                       // Check if the wnated version is present$
+                       res(i) = or(packages_version == version(i) );
+               end
+               
+       end
+       
+       // Reshape the matrix
+       // =========================================================================
+       res = matrix(res,size(name) );
+       
 endfunction
diff --git a/scilab/modules/atoms/macros/atomsLoad.sci b/scilab/modules/atoms/macros/atomsLoad.sci
new file mode 100644 (file)
index 0000000..8692385
--- /dev/null
@@ -0,0 +1,172 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// Load one or several toolboxes
+
+function result = atomsLoad(name,version)
+       
+       // Init the output argument
+       // =========================================================================
+       result = [];
+       
+       // Check number of input arguments
+       // =========================================================================
+       rhs = argn(2);
+       if rhs <> 2 then
+               error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsLoad",2));
+       end
+       
+       // Check input parameters type
+       // =========================================================================
+       
+       if type(name) <> 10 then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsLoad",1));
+       end
+       
+       if type(version) <> 10 then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsLoad",2));
+       end
+       
+       // name and version must have the same size
+       // =========================================================================
+       
+       if or( size(name) <> size(version) ) then
+               error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsLoad",1,2));
+       end
+       
+       // Check if the packages to load are installed
+       // =========================================================================
+       
+       if or( ~ atomsIsInstalled(name,version) ) then
+               for i=1:size(name,"*")
+                       if ~atomsIsInstalled(name(i),version(i)) then
+                               error(msprintf(gettext("%s: the package ''%s - %s'' is not installed.\n"),"atomsLoad",name(i),version(i)));
+                       end
+               end
+       end
+       
+       // Get path of the toolboxes
+       // =========================================================================
+       path = atomsGetInstalledPath(name,version);
+       
+       // Create the TMPDIR/atoms directory
+       // =========================================================================
+       if ~ isdir(TMPDIR+"/atoms") then
+               status = mkdir( TMPDIR+"/atoms" );
+               if status <> 1 then
+                       error(msprintf( ..
+                               gettext("%s: The directory ""%s"" cannot been created, please check if you have write access on this directory.\n"), ..
+                               "atomsLoad", ..
+                               TMPDIR+"/atoms"));
+               end
+       end
+       
+       // Define the path of the loaded file
+       // =========================================================================
+       loaded_file = pathconvert(TMPDIR+"/atoms/loaded",%F);
+       
+       // Does the loaded file exist, if yes load it
+       // =========================================================================
+       nbAdd = 0;
+       if fileinfo(loaded_file) <> [] then
+               loaded = mgetl(loaded_file);
+       else
+               loaded = [];
+       end
+       
+       // Libraries to resume
+       // =========================================================================
+       libs_resume = [];
+       
+       // Loop on packages
+       // =========================================================================
+       
+       for i=1:size(name,"*")
+               
+               // Get the list of lib
+               // =====================================================================
+               libs_before = librarieslist();
+               
+               // Exec the loader
+               // =====================================================================
+               
+               loader_file = pathconvert(path(i)) + "loader.sce";
+               
+               if fileinfo(loader_file)==[] then
+                       error(msprintf(gettext("%s: The file ''%s'' doesn''t exist or is not read accessible.\n"),"atomsLoad",loader_file));
+               end
+               
+               exec( loader_file );
+               
+               // Get the list of lib
+               // =====================================================================
+               libs_after = librarieslist();
+               
+               // Loop on libs_after
+               // =====================================================================
+               for j=1:size(libs_after,"*")
+                       
+                       if find(libs_after(j) == libs_before) == [] then
+                               libs_resume = [ libs_resume ; libs_after(j) ];
+                       end
+               end
+               
+               // Fill the output argument
+               // =====================================================================
+               result = [ result ; name(i) version(i) path(i) ];
+               
+               // fill the loaded matrix
+               // =====================================================================
+               if find(loaded == name(i)+" - "+version(i)) == [] then
+                       nbAdd  = nbAdd + 1;
+                       loaded = [ loaded ; name(i)+" - "+version(i) ];
+               end
+               
+       end
+       
+       // Apply changes
+       // =========================================================================
+       if nbAdd > 0 then
+               mputl(loaded,loaded_file);
+       end
+       
+       // If libs_resume is empty, the job is done
+       // =========================================================================
+       if isempty(libs_resume) then
+               return;
+       end
+       
+       // Build the resume cmd
+       // =========================================================================
+       
+       resume_cmd = "[";
+       
+       for i=1:size(libs_resume,"*")
+               resume_cmd = resume_cmd + libs_resume(i);
+               if i<size(libs_resume,"*") then
+                       resume_cmd = resume_cmd + ",";
+               else
+                       resume_cmd = resume_cmd + "] = resume(";
+               end
+       end
+       
+       for i=1:size(libs_resume,"*")
+               resume_cmd = resume_cmd + libs_resume(i);
+               if i<size(libs_resume,"*") then
+                       resume_cmd = resume_cmd + ",";
+               else
+                       resume_cmd = resume_cmd + ");";
+               end
+       end
+       
+       // Exec the resume cmd
+       // =========================================================================
+       execstr(resume_cmd,"errcatch");
+       
+endfunction