ATOMS: Factorize ATOMS system paths
Pierre MARECHAL [Tue, 20 Oct 2009 07:55:36 +0000 (09:55 +0200)]
scilab/modules/atoms/macros/atomsAutoloadAdd.sci
scilab/modules/atoms/macros/atomsAutoloadDel.sci
scilab/modules/atoms/macros/atomsAutoloadList.sci
scilab/modules/atoms/macros/atoms_internals/atomsPath.sci [new file with mode: 0644]

index decd427..d56f7c4 100644 (file)
@@ -13,7 +13,7 @@
 
 // End-User function
 
-function nbAdd = atomsAutoloadAdd(name,version,allusers)
+function nbAdd = atomsAutoloadAdd(name,version,section)
        
        // Load Atoms Internals lib if it's not already loaded
        // =========================================================================
@@ -67,9 +67,9 @@ function nbAdd = atomsAutoloadAdd(name,version,allusers)
                //  → Add the module to the "autoload" list of the "user" section otherwise
                
                if atomsAUWriteAccess() then
-                       allusers = %T; 
+                       section = "allusers"; 
                else
-                       allusers = %F;
+                       section = "user";
                end
                
        else
@@ -77,35 +77,25 @@ function nbAdd = atomsAutoloadAdd(name,version,allusers)
                // Process the 2nd input argument : allusers
                // Allusers can be a boolean or equal to "user" or "allusers"
                
-               if (type(allusers) <> 4) & (type(allusers) <> 10) then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean or a single string expected.\n"),"atomsAutoloadAdd",3));
+               if type(section) <> 10 then
+                       error(msprintf(gettext("%s: Wrong type for input argument #%d: A single-string expected.\n"),"atomsAutoloadAdd",3));
                end
                
-               if (type(allusers) == 10) & and(allusers<>["user","allusers"]) then
+               if and(section<>["user","allusers"]) then
                        error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' expected.\n"),"atomsAutoloadAdd",3));
                end
                
-               if allusers == "user" then
-                       allusers = %F;
-               elseif allusers == "allusers" then
-                       allusers = %T;
-               end
-               
                // Check if we have the write access
-               if allusers & ~ atomsAUWriteAccess() then
+               if (section=="allusers") & ~ atomsAUWriteAccess() then
                        error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsAutoloadAdd",3,pathconvert(SCI+"/.atoms")));
                end
+               
        end
        
        // Define the path of the file that will record the change according to
-       // the "allusers" value
+       // the "section" value
        // =========================================================================
-       
-       if allusers then
-               atoms_directory = pathconvert(SCI+"/.atoms");
-       else
-               atoms_directory = pathconvert(SCIHOME+"/atoms");
-       end
+       atoms_directory = atomsPath("system",section);
        
        // Does the atoms_directory exist, if not create it
        // =========================================================================
@@ -137,7 +127,7 @@ function nbAdd = atomsAutoloadAdd(name,version,allusers)
        // A module installed in the user section cannot be add in the "autoload" list 
        // of all users
        
-       if allusers & (rhs>=3) & (~ atomsIsInstalled(name,version,"allusers")) then
+       if (rhs>=3) & (section=="allusers") & (~ atomsIsInstalled(name,version,"allusers")) then
                mprintf(gettext("%s: The following modules are installed in the user section, you cannot add them in the ""autoload"" list for all users:\n"),"atomsAutoloadAdd");
                for i=1:size(name,"*")
                        if ~ atomsIsInstalled(name(i),version(i),"allusers") then
index 5d565ea..0bb5e3d 100644 (file)
@@ -13,7 +13,7 @@
 
 // End-User function
 
-function nbDel = atomsAutoloadDel(name,version,allusers)
+function nbDel = atomsAutoloadDel(name,version,section)
        
        // Load Atoms Internals lib if it's not already loaded
        // =========================================================================
@@ -21,7 +21,6 @@ function nbDel = atomsAutoloadDel(name,version,allusers)
                load("SCI/modules/atoms/macros/atoms_internals/lib");
        end
        
-       
        rhs   = argn(2);
        nbDel = 0;
        
@@ -66,31 +65,25 @@ function nbDel = atomsAutoloadDel(name,version,allusers)
        if rhs <= 2 then
                
                if atomsAUWriteAccess() then
-                       allusers = "all"; 
+                       section = "all"; 
                else
-                       allusers = "user";
+                       section = "user";
                end
        
        else
                // Process the 2nd input argument : allusers
                // Allusers can be a boolean or equal to "user" or "allusers"
                
-               if (type(allusers) <> 4) & (type(allusers) <> 10) then
+               if (type(section) <> 4) & (type(section) <> 10) then
                        error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean or a single string expected.\n"),"atomsAutoloadDel",3));
                end
                
-               if (type(allusers) == 10) & and(allusers<>["user","allusers","all"]) then
+               if (type(section) == 10) & and(section<>["user","allusers","all"]) then
                        error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsAutoloadDel",3));
                end
                
-               if allusers == %T then
-                       allusers = "all";
-               elseif allusers == %F then
-                       allusers = "user";
-               end
-               
                // Check if we have the write access
-               if or(allusers==["all","allusers"]) & ~ atomsAUWriteAccess() then
+               if or(section==["all","allusers"]) & ~ atomsAUWriteAccess() then
                        error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsAutoloadAdd",3,pathconvert(SCI+"/.atoms")));
                end
        end
@@ -98,18 +91,7 @@ function nbDel = atomsAutoloadDel(name,version,allusers)
        // Define the path of the files that will record the change according to
        // the "allusers" value and the existence of the latter
        // =========================================================================
-       
-       if allusers=="all" then
-               atoms_files = [ pathconvert(SCI+"/.atoms/autoloaded",%F) ; ..
-                           pathconvert(SCIHOME+"/atoms/autoloaded",%F) ];
-       
-       elseif allusers=="allusers" then
-               atoms_files = [ pathconvert(SCI+"/.atoms/autoloaded",%F) ];
-       
-       elseif allusers=="user" then
-               atoms_files = [  pathconvert(SCIHOME+"/atoms/autoloaded",%F) ];
-       
-       end
+       atoms_files = atomsPath("system","all") + "autoloaded";
        
        // Loop on each installed file specified as first input argument
        // =========================================================================
index edba1bc..d96f331 100644 (file)
@@ -9,7 +9,7 @@
 
 // get the list of repositories
 
-function modules = atomsAutoloadList(allusers)
+function modules = atomsAutoloadList(section)
        
        // Load Atoms Internals lib if it's not already loaded
        // =========================================================================
@@ -38,36 +38,31 @@ function modules = atomsAutoloadList(allusers)
        // =========================================================================
        
        if rhs < 1 then
-               allusers = "all";
+               section = "all";
        
        else
                
-               if type(allusers) <> 10 then
+               if type(section) <> 10 then
                        error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsAutoloadList",1));
                end
                
-               if size(allusers,"*")<>1 then
+               if size(section,"*")<>1 then
                        error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsAutoloadList",1));
                end
                
-               if and(allusers<>["user","allusers","all"]) then
+               if and(section<>["user","allusers","all"]) then
                        error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsAutoloadList",1));
                end
                
        end
        
-       // Define the needed paths
-       // =========================================================================
-       
-       allusers_autoload = pathconvert(SCI+"/.atoms/autoloaded",%F);
-       user_autoload     = pathconvert(SCIHOME+"/atoms/autoloaded",%F);
-       
        // All users autoload
        // =========================================================================
        
-       if or(allusers==["all";"allusers"]) then
-               if fileinfo(allusers_autoload) <> [] then
-                       module_list = mgetl(allusers_autoload);
+       if or(section==["all";"allusers"]) then
+               autoloaded_file = atomsPath("system","allusers") + "autoloaded";
+               if fileinfo(autoloaded_file) <> [] then
+                       module_list = mgetl(autoloaded_file);
                        for i=1:size(module_list,"*")
                                modules = [ modules ; module_list(i)  "allusers" ];
                        end
@@ -77,9 +72,10 @@ function modules = atomsAutoloadList(allusers)
        // User repositories
        // =========================================================================
        
-       if or(allusers==["all";"user"]) then
-               if fileinfo(user_autoload) <> [] then
-                       module_list = mgetl(user_autoload);
+       if or(section==["all";"user"]) then
+               autoloaded_file = atomsPath("system","user") + "autoloaded";
+               if fileinfo(autoloaded_file) <> [] then
+                       module_list = mgetl(autoloaded_file);
                        for i=1:size(module_list,"*")
                                modules = [ modules ; module_list(i)  "user" ];
                        end
diff --git a/scilab/modules/atoms/macros/atoms_internals/atomsPath.sci b/scilab/modules/atoms/macros/atoms_internals/atomsPath.sci
new file mode 100644 (file)
index 0000000..238ce30
--- /dev/null
@@ -0,0 +1,71 @@
+// 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
+
+// Add an URL to the list of repositories, and returns
+
+function path = atomsPath(whataction,section)
+       
+       path = [];
+       
+       // Check number of input arguments
+       // =========================================================================
+       rhs = argn(2);
+       
+       if rhs <> 2 then
+               error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsPath",2));
+       end
+       
+       // Check input argument type
+       // =========================================================================
+       
+       if type(whataction) <> 10 then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: Single String expected.\n"),"atomsPath",1));
+       end
+       
+       if type(section) <> 10 then
+               error(msprintf(gettext("%s: Wrong type for input argument #%d: Single String expected.\n"),"atomsPath",2));
+       end
+       
+       // Check input argument value
+       // =========================================================================
+       
+       if and(whataction<>["system","install"]) then
+               error(msprintf(gettext("%s: Wrong value for input argument #%d: ''system'' or ''install'' expected.\n"),"atomsPath",1));
+       end
+       
+       if and(section<>["all","allusers","user"]) then
+               error(msprintf(gettext("%s: Wrong value for input argument #%d: ''all'',''allusers'' or ''user'' expected.\n"),"atomsPath",2));
+       end
+       
+       // Check input argument value
+       // =========================================================================
+       
+       if (whataction=="system") then
+               
+               if or( section == ["all","allusers"]) then
+                       path = [ path ; pathconvert(SCI+"/.atoms") ];
+               end
+               
+               if or( section == ["all","user"]) then
+                       path = [ path ; pathconvert(SCIHOME+"/.atoms") ];
+               end
+               
+       elseif (whataction=="install") then
+               
+               if or( section == ["all","allusers"]) then
+                       path = [ path ; pathconvert(SCI+"/contrib") ];
+               end
+               
+               if or( section == ["all","user"]) then
+                       path = [ path ; pathconvert(SCIHOME+"/atoms") ];
+               end
+               
+       end
+       
+endfunction