ATOMS: Indent with spaces 29/229/1
Pierre MARECHAL [Thu, 22 Apr 2010 13:38:41 +0000 (15:38 +0200)]
Change-Id: I6c28fc28a1bc86a05569c242ee9f421d850fa238

87 files changed:
scilab/modules/atoms/macros/atomsAutoload.sci
scilab/modules/atoms/macros/atomsAutoloadAdd.sci
scilab/modules/atoms/macros/atomsAutoloadDel.sci
scilab/modules/atoms/macros/atomsAutoloadList.sci
scilab/modules/atoms/macros/atomsCategoryList.sci
scilab/modules/atoms/macros/atomsDepTreeShow.sci
scilab/modules/atoms/macros/atomsGetInstalled.sci
scilab/modules/atoms/macros/atomsGetLoaded.sci
scilab/modules/atoms/macros/atomsGetLoadedPath.sci
scilab/modules/atoms/macros/atomsInstall.sci
scilab/modules/atoms/macros/atomsIsInstalled.sci
scilab/modules/atoms/macros/atomsIsLoaded.sci
scilab/modules/atoms/macros/atomsList.sci
scilab/modules/atoms/macros/atomsLoad.sci
scilab/modules/atoms/macros/atomsRemove.sci
scilab/modules/atoms/macros/atomsRepositoryAdd.sci
scilab/modules/atoms/macros/atomsRepositoryDel.sci
scilab/modules/atoms/macros/atomsRepositoryList.sci
scilab/modules/atoms/macros/atomsSearch.sci
scilab/modules/atoms/macros/atomsSetConfig.sci
scilab/modules/atoms/macros/atomsShow.sci
scilab/modules/atoms/macros/atomsSystemInit.sci
scilab/modules/atoms/macros/atomsSystemUpdate.sci
scilab/modules/atoms/macros/atomsTest.sci
scilab/modules/atoms/macros/atomsUpdate.sci
scilab/modules/atoms/macros/atomsVersion.sci
scilab/modules/atoms/macros/atoms_gui/atomsGui.sci
scilab/modules/atoms/macros/atoms_gui/cbAtomsGui.sci
scilab/modules/atoms/macros/atoms_internals/atomsAUWriteAccess.sci
scilab/modules/atoms/macros/atoms_internals/atomsAutoloadCheck.sci
scilab/modules/atoms/macros/atoms_internals/atomsAutoloadLoad.sci
scilab/modules/atoms/macros/atoms_internals/atomsAutoloadSave.sci
scilab/modules/atoms/macros/atoms_internals/atomsCatTree.sci
scilab/modules/atoms/macros/atoms_internals/atomsCompatibleVersions.sci
scilab/modules/atoms/macros/atoms_internals/atomsDESCRIPTIONadd.sci
scilab/modules/atoms/macros/atoms_internals/atomsDESCRIPTIONaddField.sci
scilab/modules/atoms/macros/atoms_internals/atomsDESCRIPTIONcat.sci
scilab/modules/atoms/macros/atoms_internals/atomsDESCRIPTIONget.sci
scilab/modules/atoms/macros/atoms_internals/atomsDESCRIPTIONread.sci
scilab/modules/atoms/macros/atoms_internals/atomsDESCRIPTIONrm.sci
scilab/modules/atoms/macros/atoms_internals/atomsDESCRIPTIONwrite.sci
scilab/modules/atoms/macros/atoms_internals/atomsDepTreeExt.sci
scilab/modules/atoms/macros/atoms_internals/atomsDepTreeFlat.sci
scilab/modules/atoms/macros/atoms_internals/atomsDisp.sci
scilab/modules/atoms/macros/atoms_internals/atomsDisplayMessage.sci
scilab/modules/atoms/macros/atoms_internals/atomsDownload.sci
scilab/modules/atoms/macros/atoms_internals/atomsError.sci
scilab/modules/atoms/macros/atoms_internals/atomsExtract.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetConfig.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetDepChilds.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetDepParents.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetInstalledDetails.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetInstalledPath.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetInstalledStatus.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetInstalledVers.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetMRVersion.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetPlatform.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetVersions.sci
scilab/modules/atoms/macros/atoms_internals/atomsInstallList.sci
scilab/modules/atoms/macros/atoms_internals/atomsInstallRegister.sci
scilab/modules/atoms/macros/atoms_internals/atomsInstallUnregister.sci
scilab/modules/atoms/macros/atoms_internals/atomsIsCompatible.sci
scilab/modules/atoms/macros/atoms_internals/atomsIsDirectChild.sci
scilab/modules/atoms/macros/atoms_internals/atomsIsPackage.sci
scilab/modules/atoms/macros/atoms_internals/atomsLoadInstalledMat.sci
scilab/modules/atoms/macros/atoms_internals/atomsLoadInstalledStruct.sci
scilab/modules/atoms/macros/atoms_internals/atomsLoadInstalleddeps.sci
scilab/modules/atoms/macros/atoms_internals/atomsLoadLoad.sci
scilab/modules/atoms/macros/atoms_internals/atomsLoadSave.sci
scilab/modules/atoms/macros/atoms_internals/atomsOrphanList.sci
scilab/modules/atoms/macros/atoms_internals/atomsPackageIsCompatible.sci
scilab/modules/atoms/macros/atoms_internals/atomsPath.sci
scilab/modules/atoms/macros/atoms_internals/atomsReadDesc.sci
scilab/modules/atoms/macros/atoms_internals/atomsRemoveList.sci
scilab/modules/atoms/macros/atoms_internals/atomsRepositorySetOfl.sci
scilab/modules/atoms/macros/atoms_internals/atomsRmfields.sci
scilab/modules/atoms/macros/atoms_internals/atomsSaveInstalled.sci
scilab/modules/atoms/macros/atoms_internals/atomsSaveInstalleddeps.sci
scilab/modules/atoms/macros/atoms_internals/atomsToolboxDetails.sci
scilab/modules/atoms/macros/atoms_internals/atomsToremoveList.sci
scilab/modules/atoms/macros/atoms_internals/atomsToremoveProcess.sci
scilab/modules/atoms/macros/atoms_internals/atomsToremoveRegister.sci
scilab/modules/atoms/macros/atoms_internals/atomsToremoveUnregister.sci
scilab/modules/atoms/macros/atoms_internals/atomsUpdateDep.sci
scilab/modules/atoms/macros/atoms_internals/atomsUpdateDeps.sci
scilab/modules/atoms/macros/atoms_internals/atomsVersionCompare.sci
scilab/modules/atoms/macros/atoms_internals/atomsVersionSort.sci

index a3c666b..159c545 100644 (file)
 // Load the toolboxes that are marked "autoload"
 
 function result = atomsAutoload()
-       
-       result = [];
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // If the autoload system is disabled, no need to continue
-       // =========================================================================
-       if atomsGetConfig("autoload") == "False" then
-               return;
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       // Save the initial path
-       // =========================================================================
-       ATOMSINITIALPATH = pwd();
-       
-       // Tell atomsLoad() we are in a atomsAutoload() session
-       // =========================================================================
-       ATOMSAUTOLOAD = %T;
-       
-       // 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 = atomsAutoloadLoad("all");
-       
-       // If the list is empty, quit the function
-       // =========================================================================
-       if isempty(packages) then
-               return;
-       end
-       
-       // Libraries to resume
-       // =========================================================================
-       libs_resume = [];
-       
-       // Get the list of lib [before]
-       // =========================================================================
-       libs_before = librarieslist();
-       
-       // This case can happen : 
-       //  → Administrator install a package
-       //  → User add it to its autoload list.
-       //  → Then administrator remove the package
-       // =========================================================================
-       
-       if or( ~ atomsIsInstalled( [packages(:,1) packages(:,2)] )) then
-               
-               // One or more package are not installed : Remove them from the autoload
-               // list
-               
-               if ATOMSALLUSERSWRITEACCESS then
-                       section = "all";
-               else
-                       section = "user";
-               end
-               
-               for i=1:size(packages(:,1),"*")
-                       if ~ atomsIsInstalled([packages(i,1) packages(i,2)],packages(i,3)) then
-                               atomsAutoloadDel(packages(i,:),section);
-                       end
-               end
-               
-       end
-       
-       // Load the wanted packages
-       // =========================================================================
-       result = atomsLoad([packages(:,1) packages(:,2)]);
-       
-       // Get the list of lib [after]
-       // =====================================================================
-       libs_after = librarieslist();
-       
-       // Loop on libs_after
-       // =====================================================================
-       for i=1:size(libs_after,"*")
-               
-               if find(libs_after(i) == libs_before) == [] then
-                       libs_resume = [ libs_resume ; libs_after(i) ];
-               end
-       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");
-       
-       // Go to the initial location
-       // =========================================================================
-       chdir(ATOMSINITIALPATH);
-       
+
+    result = [];
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // If the autoload system is disabled, no need to continue
+    // =========================================================================
+    if atomsGetConfig("autoload") == "False" then
+        return;
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
+
+    // Save the initial path
+    // =========================================================================
+    ATOMSINITIALPATH = pwd();
+
+    // Tell atomsLoad() we are in a atomsAutoload() session
+    // =========================================================================
+    ATOMSAUTOLOAD = %T;
+
+    // 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 = atomsAutoloadLoad("all");
+
+    // If the list is empty, quit the function
+    // =========================================================================
+    if isempty(packages) then
+        return;
+    end
+
+    // Libraries to resume
+    // =========================================================================
+    libs_resume = [];
+
+    // Get the list of lib [before]
+    // =========================================================================
+    libs_before = librarieslist();
+
+    // This case can happen :
+    //  → Administrator install a package
+    //  → User add it to its autoload list.
+    //  → Then administrator remove the package
+    // =========================================================================
+
+    if or( ~ atomsIsInstalled( [packages(:,1) packages(:,2)] )) then
+
+        // One or more package are not installed : Remove them from the autoload
+        // list
+
+        if ATOMSALLUSERSWRITEACCESS then
+            section = "all";
+        else
+            section = "user";
+        end
+
+        for i=1:size(packages(:,1),"*")
+            if ~ atomsIsInstalled([packages(i,1) packages(i,2)],packages(i,3)) then
+                atomsAutoloadDel(packages(i,:),section);
+            end
+        end
+
+    end
+
+    // Load the wanted packages
+    // =========================================================================
+    result = atomsLoad([packages(:,1) packages(:,2)]);
+
+    // Get the list of lib [after]
+    // =====================================================================
+    libs_after = librarieslist();
+
+    // Loop on libs_after
+    // =====================================================================
+    for i=1:size(libs_after,"*")
+
+        if find(libs_after(i) == libs_before) == [] then
+            libs_resume = [ libs_resume ; libs_after(i) ];
+        end
+    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");
+
+    // Go to the initial location
+    // =========================================================================
+    chdir(ATOMSINITIALPATH);
+
 endfunction
index fac8c3e..f32b663 100644 (file)
 // End-User function
 
 function nbAdd = atomsAutoloadAdd(packages,section)
-       
-       rhs            = argn(2);
-       nbAdd          = 0;
-       autoloaded     = []; // Column vector that contains autoloaded packages
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       // 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"),"atomsAutoloadAdd",1,2));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAutoloadAdd",1));
-       end
-       
-       if (size(packages(1,:),"*") < 1) | (size(packages(1,:),"*") > 3) then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1, mx2 or mx3 string matrix expected.\n"),"atomsAutoloadAdd",1));
-       end
-       
-       // Allusers/user management
-       //   - If section is equal to "allusers", module(s) will added to the 
-       //     "autoload" list of the "allusers" section :
-       //       → SCI/.atoms/autoloaded
-       //   - Otherwise, module(s) will added to the "autoload" list of the "user"
-       //     section
-       //       → SCIHOME/atoms/autoloaded
-       // =========================================================================
-       
-       if rhs < 2 then
-               
-               // By default: 
-               //  → Add the module to the "autoload" list of the "allusers" section
-               //    if we have the write access to SCI directory
-               //  → Add the module to the "autoload" list of the "user" section otherwise
-               
-               if ATOMSALLUSERSWRITEACCESS then
-                       section = "allusers"; 
-               else
-                       section = "user";
-               end
-               
-       else
-               
-               // Process the 2nd input argument : allusers
-               // Allusers can be equal to "user" or "allusers"
-               
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsAutoloadAdd",2));
-               end
-               
-               if and(section<>["user","allusers"]) then
-                       error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' expected.\n"),"atomsAutoloadAdd",2));
-               end
-               
-               // Check if we have the write access
-               if (section=="allusers") & ~ ATOMSALLUSERSWRITEACCESS then
-                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsAutoloadAdd",pathconvert(SCI+"/.atoms")));
-               end
-               
-       end
-       
-       // Does the SCIHOME/atoms/autoloaded exist, if yes load it
-       // =========================================================================
-       autoloaded = atomsAutoloadLoad(section);
-       
-       // Complete packages matrix with empty columns
-       // =========================================================================
-       
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
-       
-       elseif size(packages(1,:),"*") == 2 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       end
-       
-       // Loop on input parameter
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               // The module's installed version hasn't been specified or is empty
-               // → Set the MRV available
-               // =====================================================================
-               
-               if isempty(packages(i,2)) then
-                       
-                       if ~ isempty(packages(i,3)) then
-                               searched_section = packages(i,3);
-                       
-                       elseif section=="user" then
-                               // User can add a module to its "user" autoload list even if it's
-                               // installed in the "allusers" section
-                               searched_section = "all";
-                       
-                       else
-                               // A module installed in the user section cannot be add in the 
-                               // "autoload" list of all users
-                               searched_section = "allusers";
-                       
-                       end
-                       
-                       this_module_versions = atomsGetInstalledVers(packages(i,1),searched_section);
-                       
-                       if isempty(this_module_versions) then
-                               error(msprintf(gettext("%s: Module ''%s'' is not installed (''%s'' section).\n"),"atomsLoad",packages(i,1),searched_section));
-                       else
-                               packages(i,2) = this_module_versions(1);
-                       end
-               
-               else
-                       
-                       if ~atomsIsInstalled([packages(i,1) packages(i,2)]) then
-                               error(msprintf(gettext("%s: Module ''%s - %s'' is not installed.\n"),"atomsLoad",packages(i,1),packages(i,2)));
-                       end
-                       
-                       // If the packaging version is not mentioned, define it
-                       if isempty(strindex(packages(i,2),"-")) then
-                               this_package_details = atomsGetInstalledDetails(packages(i,1:3));
-                               packages(i,2)        = this_package_details(2);
-                       end
-                       
-               end
-               
-               // The module's installed section hasn't been specified or is empty
-               // =====================================================================
-               
-               if isempty(packages(i,3)) then
-               
-                       if atomsIsInstalled([packages(i,1) packages(i,2)],section) then
-                               packages(i,3) = section;
-                       
-                       elseif section=="user" & atomsIsInstalled([packages(i,1) packages(i,2)],"allusers") then
-                               packages(i,3) = "allusers";
-                               
-                       elseif section=="allusers" & atomsIsInstalled([packages(i,1) packages(i,2)],"user") then
-                               mprintf(gettext("%s: The following module is installed in the user section, you cannot add it to the ""autoload"" list for all users:\n"),"atomsAutoloadAdd");
-                               printf(gettext("\t - ''%s - %s''\n"),packages(i,1),packages(i,2));
-                               error("");
-                       
-                       else
-                               mprintf(gettext("%s: The following module is not installed:\n"),"atomsAutoloadAdd");
-                               mprintf(gettext("\t - ''%s - %s''\n"),packages(i,1),packages(i,2));
-                       
-                       end
-                       
-               else
-               
-                       // Check if modules are installed
-                       if ~ atomsIsInstalled([packages(i,1) packages(i,2)],packages(i,3)) then
-                               mprintf(gettext("%s: The following modules are not installed:\n"),"atomsAutoloadAdd");
-                               mprintf("\t - ''%s - %s'' (''%s'' section)\n",packages(i,1),packages(i,2),packages(i,3));
-                               error("");
-                       end
-                       
-                       // A module installed in the user section cannot be add in the 
-                       // "autoload" list of all users
-                       
-                       if (section=="allusers") & (packages(i,3)=="user") then
-                               mprintf(gettext("%s: The following module is installed in the user section, you cannot add it to the ""autoload"" list for all users:\n"),"atomsAutoloadAdd");
-                               mprintf(gettext("\t - ''%s - %s''\n"),packages(i,1),packages(i,2));
-                               error("");
-                       end
-                       
-               end
-               
-               // Now we can really add it if it doesn't already exist in the list
-               // =====================================================================
-               
-               if ~ atomsAutoloadCheck(packages(i,:),section) then
-                       nbAdd      = nbAdd + 1;
-                       autoloaded = [ autoloaded ; packages(i,:) ];
-               end
-               
-       end
-       
-       // Apply changes
-       // =========================================================================
-       
-       if nbAdd > 0 then
-               atomsAutoloadSave(autoloaded,section);
-       end
-       
+
+    rhs            = argn(2);
+    nbAdd          = 0;
+    autoloaded     = []; // Column vector that contains autoloaded packages
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
+
+    // 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"),"atomsAutoloadAdd",1,2));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAutoloadAdd",1));
+    end
+
+    if (size(packages(1,:),"*") < 1) | (size(packages(1,:),"*") > 3) then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1, mx2 or mx3 string matrix expected.\n"),"atomsAutoloadAdd",1));
+    end
+
+    // Allusers/user management
+    //   - If section is equal to "allusers", module(s) will added to the
+    //     "autoload" list of the "allusers" section :
+    //       → SCI/.atoms/autoloaded
+    //   - Otherwise, module(s) will added to the "autoload" list of the "user"
+    //     section
+    //       → SCIHOME/atoms/autoloaded
+    // =========================================================================
+
+    if rhs < 2 then
+
+        // By default:
+        //  → Add the module to the "autoload" list of the "allusers" section
+        //    if we have the write access to SCI directory
+        //  → Add the module to the "autoload" list of the "user" section otherwise
+
+        if ATOMSALLUSERSWRITEACCESS then
+            section = "allusers";
+        else
+            section = "user";
+        end
+
+    else
+
+        // Process the 2nd input argument : allusers
+        // Allusers can be equal to "user" or "allusers"
+
+        if type(section) <> 10 then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsAutoloadAdd",2));
+        end
+
+        if and(section<>["user","allusers"]) then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' expected.\n"),"atomsAutoloadAdd",2));
+        end
+
+        // Check if we have the write access
+        if (section=="allusers") & ~ ATOMSALLUSERSWRITEACCESS then
+            error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsAutoloadAdd",pathconvert(SCI+"/.atoms")));
+        end
+
+    end
+
+    // Does the SCIHOME/atoms/autoloaded exist, if yes load it
+    // =========================================================================
+    autoloaded = atomsAutoloadLoad(section);
+
+    // Complete packages matrix with empty columns
+    // =========================================================================
+
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
+
+    elseif size(packages(1,:),"*") == 2 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    end
+
+    // Loop on input parameter
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        // The module's installed version hasn't been specified or is empty
+        // → Set the MRV available
+        // =====================================================================
+
+        if isempty(packages(i,2)) then
+
+            if ~ isempty(packages(i,3)) then
+                searched_section = packages(i,3);
+
+            elseif section=="user" then
+                // User can add a module to its "user" autoload list even if it's
+                // installed in the "allusers" section
+                searched_section = "all";
+
+            else
+                // A module installed in the user section cannot be add in the
+                // "autoload" list of all users
+                searched_section = "allusers";
+
+            end
+
+            this_module_versions = atomsGetInstalledVers(packages(i,1),searched_section);
+
+            if isempty(this_module_versions) then
+                error(msprintf(gettext("%s: Module ''%s'' is not installed (''%s'' section).\n"),"atomsLoad",packages(i,1),searched_section));
+            else
+                packages(i,2) = this_module_versions(1);
+            end
+
+        else
+
+            if ~atomsIsInstalled([packages(i,1) packages(i,2)]) then
+                error(msprintf(gettext("%s: Module ''%s - %s'' is not installed.\n"),"atomsLoad",packages(i,1),packages(i,2)));
+            end
+
+            // If the packaging version is not mentioned, define it
+            if isempty(strindex(packages(i,2),"-")) then
+                this_package_details = atomsGetInstalledDetails(packages(i,1:3));
+                packages(i,2)        = this_package_details(2);
+            end
+
+        end
+
+        // The module's installed section hasn't been specified or is empty
+        // =====================================================================
+
+        if isempty(packages(i,3)) then
+
+            if atomsIsInstalled([packages(i,1) packages(i,2)],section) then
+                packages(i,3) = section;
+
+            elseif section=="user" & atomsIsInstalled([packages(i,1) packages(i,2)],"allusers") then
+                packages(i,3) = "allusers";
+
+            elseif section=="allusers" & atomsIsInstalled([packages(i,1) packages(i,2)],"user") then
+                mprintf(gettext("%s: The following module is installed in the user section, you cannot add it to the ""autoload"" list for all users:\n"),"atomsAutoloadAdd");
+                printf(gettext("\t - ''%s - %s''\n"),packages(i,1),packages(i,2));
+                error("");
+
+            else
+                mprintf(gettext("%s: The following module is not installed:\n"),"atomsAutoloadAdd");
+                mprintf(gettext("\t - ''%s - %s''\n"),packages(i,1),packages(i,2));
+
+            end
+
+        else
+
+            // Check if modules are installed
+            if ~ atomsIsInstalled([packages(i,1) packages(i,2)],packages(i,3)) then
+                mprintf(gettext("%s: The following modules are not installed:\n"),"atomsAutoloadAdd");
+                mprintf("\t - ''%s - %s'' (''%s'' section)\n",packages(i,1),packages(i,2),packages(i,3));
+                error("");
+            end
+
+            // A module installed in the user section cannot be add in the
+            // "autoload" list of all users
+
+            if (section=="allusers") & (packages(i,3)=="user") then
+                mprintf(gettext("%s: The following module is installed in the user section, you cannot add it to the ""autoload"" list for all users:\n"),"atomsAutoloadAdd");
+                mprintf(gettext("\t - ''%s - %s''\n"),packages(i,1),packages(i,2));
+                error("");
+            end
+
+        end
+
+        // Now we can really add it if it doesn't already exist in the list
+        // =====================================================================
+
+        if ~ atomsAutoloadCheck(packages(i,:),section) then
+            nbAdd      = nbAdd + 1;
+            autoloaded = [ autoloaded ; packages(i,:) ];
+        end
+
+    end
+
+    // Apply changes
+    // =========================================================================
+
+    if nbAdd > 0 then
+        atomsAutoloadSave(autoloaded,section);
+    end
+
 endfunction
index 66c9770..d9c8fa8 100644 (file)
 // End-User function
 
 function nbDel = atomsAutoloadDel(packages,section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       rhs   = argn(2);
-       nbDel = 0;
-       
-       // 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"),"atomsAutoloadDel",1,2));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAutoloadDel",1));
-       end
-       
-       if (size(packages(1,:),"*") < 1) | (size(packages(1,:),"*") > 3) then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1, mx2 or mx3 string matrix expected.\n"),"atomsAutoloadDel",1));
-       end
-       
-       // Allusers/user management
-       //   - If Allusers is equal to "all", module(s) will removed from both "user"
-       //     and "allusers" list
-       //       → SCI/.atoms/autoloaded
-       //       → SCIHOME/atoms/autoloaded
-       //   - If Allusers is equal to "allusers", module(s) will removed from the
-       //     "allusers" list
-       //       → SCI/.atoms/autoloaded
-       //   - If Allusers is equal to "user", module(s) will removed from the
-       //     "user" list
-       //       → SCIHOME/atoms/autoloaded
-       // =========================================================================
-       
-       if rhs < 2 then
-               
-               if ATOMSALLUSERSWRITEACCESS then
-                       section = "all"; 
-               else
-                       section = "user";
-               end
-       
-       else
-               // Process the 2nd input argument : allusers
-               // Allusers can equal to "user","allusers" or "all"
-               
-               if (type(section) <> 4) & (type(section) <> 10) then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Boolean or single string expected.\n"),"atomsAutoloadDel",2));
-               end
-               
-               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",2));
-               end
-               
-               // Check if we have the write access
-               if or(section==["all","allusers"]) & ~ ATOMSALLUSERSWRITEACCESS then
-                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsAutoloadDel",pathconvert(SCI+"/.atoms")));
-               end
-       end
-       
-       if section == "all" then
-               sections = ["user","allusers"];
-       else
-               sections = section;
-       end
-       
-       // Complete packages matrix with empty columns
-       // =========================================================================
-       
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
-       
-       elseif size(packages(1,:),"*") == 2 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       end
-       
-       // First filter : No need to process packages that are not present
-       // =========================================================================
-       packages(find(atomsAutoloadCheck(packages,section)==%F),:) = [];
-       
-       // Loop on each sections
-       // =========================================================================
-       
-       for i=1:size(sections,"*")
-               
-               autoloaded = atomsAutoloadLoad(sections(i));
-               
-               for j=1:size(packages(:,1),"*")
-                       
-                       if ~isempty(packages(j,2)) & ~isempty(packages(j,3)) then
-                               
-                               // Version : specified
-                               // Section : specified
-                               
-                               del_index = [];
-                               
-                               for k=1:size(autoloaded(:,1),"*")
-                                       if and( packages(j,:) == autoloaded(k,:) ) then
-                                               nbDel     = nbDel + 1;
-                                               del_index = [ del_index k ];
-                                       end
-                               end
-                               
-                               autoloaded(del_index,:) = [];
-                               
-                       elseif ~isempty(packages(j,2)) & isempty(packages(j,3)) then
-                               
-                               // Version : specified
-                               // Section : It doesn't matter
-                               
-                               del_index = [];
-                               
-                               for k=1:size(autoloaded(:,1),"*")
-                                       if and([packages(j,1) packages(j,2)] == [autoloaded(k,1) autoloaded(k,2)]) then
-                                               nbDel     = nbDel + 1;
-                                               del_index = [ del_index k ];
-                                       end
-                               end
-                               
-                               autoloaded(del_index,:) = [];
-                               
-                       elseif isempty(packages(j,2)) & ~isempty(packages(j,3)) then
-                               
-                               // Version : It doesn't matter
-                               // Section : specified
-                               
-                               del_index = [];
-                               
-                               for k=1:size(autoloaded(:,1),"*")
-                                       if and([packages(j,1) packages(j,3)] == [autoloaded(k,1) autoloaded(k,3)]) then
-                                               nbDel     = nbDel + 1;
-                                               del_index = [ del_index k ];
-                                       end
-                               end
-                               
-                               autoloaded(del_index,:) = [];
-                               
-                       elseif isempty(packages(j,2)) & isempty(packages(j,3)) then
-                               
-                               // Version : It doesn't matter
-                               // Section : It doesn't matter
-                               
-                               del_index = [];
-                               
-                               for k=1:size(autoloaded(:,1),"*")
-                                       if packages(j,1) == autoloaded(k,1) then
-                                               nbDel     = nbDel + 1;
-                                               del_index = [ del_index k ];
-                                       end
-                               end
-                               
-                               autoloaded(del_index,:) = [];
-                               
-                       end
-                       
-               end
-               
-               atomsAutoloadSave(autoloaded,sections(i));
-               
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
+
+    rhs   = argn(2);
+    nbDel = 0;
+
+    // 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"),"atomsAutoloadDel",1,2));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAutoloadDel",1));
+    end
+
+    if (size(packages(1,:),"*") < 1) | (size(packages(1,:),"*") > 3) then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1, mx2 or mx3 string matrix expected.\n"),"atomsAutoloadDel",1));
+    end
+
+    // Allusers/user management
+    //   - If Allusers is equal to "all", module(s) will removed from both "user"
+    //     and "allusers" list
+    //       → SCI/.atoms/autoloaded
+    //       → SCIHOME/atoms/autoloaded
+    //   - If Allusers is equal to "allusers", module(s) will removed from the
+    //     "allusers" list
+    //       → SCI/.atoms/autoloaded
+    //   - If Allusers is equal to "user", module(s) will removed from the
+    //     "user" list
+    //       → SCIHOME/atoms/autoloaded
+    // =========================================================================
+
+    if rhs < 2 then
+
+        if ATOMSALLUSERSWRITEACCESS then
+            section = "all";
+        else
+            section = "user";
+        end
+
+    else
+        // Process the 2nd input argument : allusers
+        // Allusers can equal to "user","allusers" or "all"
+
+        if (type(section) <> 4) & (type(section) <> 10) then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Boolean or single string expected.\n"),"atomsAutoloadDel",2));
+        end
+
+        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",2));
+        end
+
+        // Check if we have the write access
+        if or(section==["all","allusers"]) & ~ ATOMSALLUSERSWRITEACCESS then
+            error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsAutoloadDel",pathconvert(SCI+"/.atoms")));
+        end
+    end
+
+    if section == "all" then
+        sections = ["user","allusers"];
+    else
+        sections = section;
+    end
+
+    // Complete packages matrix with empty columns
+    // =========================================================================
+
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
+
+    elseif size(packages(1,:),"*") == 2 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    end
+
+    // First filter : No need to process packages that are not present
+    // =========================================================================
+    packages(find(atomsAutoloadCheck(packages,section)==%F),:) = [];
+
+    // Loop on each sections
+    // =========================================================================
+
+    for i=1:size(sections,"*")
+
+        autoloaded = atomsAutoloadLoad(sections(i));
+
+        for j=1:size(packages(:,1),"*")
+
+            if ~isempty(packages(j,2)) & ~isempty(packages(j,3)) then
+
+                // Version : specified
+                // Section : specified
+
+                del_index = [];
+
+                for k=1:size(autoloaded(:,1),"*")
+                    if and( packages(j,:) == autoloaded(k,:) ) then
+                        nbDel     = nbDel + 1;
+                        del_index = [ del_index k ];
+                    end
+                end
+
+                autoloaded(del_index,:) = [];
+
+            elseif ~isempty(packages(j,2)) & isempty(packages(j,3)) then
+
+                // Version : specified
+                // Section : It doesn't matter
+
+                del_index = [];
+
+                for k=1:size(autoloaded(:,1),"*")
+                    if and([packages(j,1) packages(j,2)] == [autoloaded(k,1) autoloaded(k,2)]) then
+                        nbDel     = nbDel + 1;
+                        del_index = [ del_index k ];
+                    end
+                end
+
+                autoloaded(del_index,:) = [];
+
+            elseif isempty(packages(j,2)) & ~isempty(packages(j,3)) then
+
+                // Version : It doesn't matter
+                // Section : specified
+
+                del_index = [];
+
+                for k=1:size(autoloaded(:,1),"*")
+                    if and([packages(j,1) packages(j,3)] == [autoloaded(k,1) autoloaded(k,3)]) then
+                        nbDel     = nbDel + 1;
+                        del_index = [ del_index k ];
+                    end
+                end
+
+                autoloaded(del_index,:) = [];
+
+            elseif isempty(packages(j,2)) & isempty(packages(j,3)) then
+
+                // Version : It doesn't matter
+                // Section : It doesn't matter
+
+                del_index = [];
+
+                for k=1:size(autoloaded(:,1),"*")
+                    if packages(j,1) == autoloaded(k,1) then
+                        nbDel     = nbDel + 1;
+                        del_index = [ del_index k ];
+                    end
+                end
+
+                autoloaded(del_index,:) = [];
+
+            end
+
+        end
+
+        atomsAutoloadSave(autoloaded,sections(i));
+
+    end
+
 endfunction
index 1ffc610..6e4b13f 100644 (file)
 // get the list of repositories
 
 function modules = atomsAutoloadList(section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs      = argn(2);
-       modules  = [];
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs > 1 then
-               error(msprintf(gettext("%s: Wrong number of input argument: at most %d expected.\n"),"atomsAutoloadList",1));
-       end
-       
-       // Allusers/user management
-       //   - If Allusers is equal to "all", display both "user" and "allusers" autoload list
-       //       → SCI/.atoms/autoloaded
-       //       → SCIHOME/atoms/autoloaded
-       //   - If Allusers is equal to "allusers",display only "allusers" autoload list
-       //       → SCI/.atoms/autoloaded
-       //   - If Allusers is equal to "user",display only "user" autoload list
-       //       → SCIHOME/atoms/autoloaded
-       // =========================================================================
-       
-       if rhs < 1 then
-               section = "all";
-       
-       else
-               
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsAutoloadList",1));
-               end
-               
-               if size(section,"*")<>1 then
-                       error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsAutoloadList",1));
-               end
-               
-               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
-       
-       if section == "all" then
-               sections = ["user";"allusers"];
-       else
-               sections = section;
-       end
-       
-       // Loop on sections
-       // =========================================================================
-       
-       for i=1:size(sections,"*")
-               
-               autoloaded = atomsAutoloadLoad(sections(i));
-               
-               if ~ isempty(autoloaded) then
-                       modules = [ modules ; autoloaded emptystr(size(autoloaded(:,1),"*"),1) + sections(i) ];
-               end
-               
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs      = argn(2);
+    modules  = [];
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs > 1 then
+        error(msprintf(gettext("%s: Wrong number of input argument: at most %d expected.\n"),"atomsAutoloadList",1));
+    end
+
+    // Allusers/user management
+    //   - If Allusers is equal to "all", display both "user" and "allusers" autoload list
+    //       → SCI/.atoms/autoloaded
+    //       → SCIHOME/atoms/autoloaded
+    //   - If Allusers is equal to "allusers",display only "allusers" autoload list
+    //       → SCI/.atoms/autoloaded
+    //   - If Allusers is equal to "user",display only "user" autoload list
+    //       → SCIHOME/atoms/autoloaded
+    // =========================================================================
+
+    if rhs < 1 then
+        section = "all";
+
+    else
+
+        if type(section) <> 10 then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsAutoloadList",1));
+        end
+
+        if size(section,"*")<>1 then
+            error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsAutoloadList",1));
+        end
+
+        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
+
+    if section == "all" then
+        sections = ["user";"allusers"];
+    else
+        sections = section;
+    end
+
+    // Loop on sections
+    // =========================================================================
+
+    for i=1:size(sections,"*")
+
+        autoloaded = atomsAutoloadLoad(sections(i));
+
+        if ~ isempty(autoloaded) then
+            modules = [ modules ; autoloaded emptystr(size(autoloaded(:,1),"*"),1) + sections(i) ];
+        end
+
+    end
+
 endfunction
index 8009f88..bcc9449 100644 (file)
 // get the list of repositories
 
 function categories_mat = atomsCategoryList(section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs            = argn(2);
-       categories_mat = [];
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs > 1 then
-               error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsCategoryList",0,1));
-       end
-       
-       // Check input argument type (if any)
-       // =========================================================================
-       
-       if (rhs==1) & (type(section) <> 10) then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsCategoryList",1));
-       end
-       
-       // Check input argument dimension (if any)
-       // =========================================================================
-       
-       if (rhs==1) & (size(section,"*")<>1) then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsCategoryList",1));
-       end
-       
-       // Check input argument values (if any)
-       // =========================================================================
-       
-       if (rhs==1) & (and(section<>["all","main"])) then
-               error(msprintf(gettext("%s: Wrong value for input argument #%d: ''all'' or ''main'' expected.\n"),"atomsCategoryList",1));
-       end
-       
-       // Default value of section
-       // =========================================================================
-       
-       if rhs==0 then
-               section = "all";
-       end
-       
-       // Get the main categories structure
-       // =========================================================================
-       
-       [packages,categories_flat,categories] = atomsDESCRIPTIONget();
-       
-       categories_mat      = getfield(1,categories);
-       categories_mat(1:2) = [];
-       categories_mat      = gsort(categories_mat,"lc","i");
-       categories_mat      = categories_mat';
-       
-       if section == "all" then
-               
-               main_mat       = categories_mat;
-               categories_mat = [];
-               
-               for i=1:size(main_mat,"*")
-                       categories_mat = [ categories_mat ; main_mat(i) "" ];
-                       sub_categories = gsort(categories(main_mat(i)),"lc","i");
-                       if sub_categories <> [] then
-                               categories_mat = [ categories_mat ; emptystr(size(sub_categories,"*"))+main_mat(i) sub_categories ];
-                       end
-               end
-               
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs            = argn(2);
+    categories_mat = [];
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs > 1 then
+        error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsCategoryList",0,1));
+    end
+
+    // Check input argument type (if any)
+    // =========================================================================
+
+    if (rhs==1) & (type(section) <> 10) then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsCategoryList",1));
+    end
+
+    // Check input argument dimension (if any)
+    // =========================================================================
+
+    if (rhs==1) & (size(section,"*")<>1) then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsCategoryList",1));
+    end
+
+    // Check input argument values (if any)
+    // =========================================================================
+
+    if (rhs==1) & (and(section<>["all","main"])) then
+        error(msprintf(gettext("%s: Wrong value for input argument #%d: ''all'' or ''main'' expected.\n"),"atomsCategoryList",1));
+    end
+
+    // Default value of section
+    // =========================================================================
+
+    if rhs==0 then
+        section = "all";
+    end
+
+    // Get the main categories structure
+    // =========================================================================
+
+    [packages,categories_flat,categories] = atomsDESCRIPTIONget();
+
+    categories_mat      = getfield(1,categories);
+    categories_mat(1:2) = [];
+    categories_mat      = gsort(categories_mat,"lc","i");
+    categories_mat      = categories_mat';
+
+    if section == "all" then
+
+        main_mat       = categories_mat;
+        categories_mat = [];
+
+        for i=1:size(main_mat,"*")
+            categories_mat = [ categories_mat ; main_mat(i) "" ];
+            sub_categories = gsort(categories(main_mat(i)),"lc","i");
+            if sub_categories <> [] then
+                categories_mat = [ categories_mat ; emptystr(size(sub_categories,"*"))+main_mat(i) sub_categories ];
+            end
+        end
+
+    end
+
 endfunction
index 9dfa15b..ae40a77 100644 (file)
 // Output arguments :
 
 function atomsDepTreeShow(package)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs = argn(2);
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs <> 1 then
-               error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsDepTreeShow",1));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(package) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsDepTreeShow",1));
-       end
-       
-       if size(package(1,:),"*") > 2 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: 1x1 or 1x2 string matrix expected.\n"),"atomsDepTreeShow",1));
-       end
-       
-       // Get the dependency tree
-       // =========================================================================
-       
-       if size(package(1,:),"*") == 2 then
-               tree = atomsDepTreeExt(package(1),package(2));
-       else
-               tree = atomsDepTreeExt(package(1));
-       end
-       
-       situation = struct();
-       situation("current_level")  = 1;
-       
-       mprintf("\n");
-       atomsDispTree(tree,situation)
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs = argn(2);
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs <> 1 then
+        error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsDepTreeShow",1));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(package) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsDepTreeShow",1));
+    end
+
+    if size(package(1,:),"*") > 2 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: 1x1 or 1x2 string matrix expected.\n"),"atomsDepTreeShow",1));
+    end
+
+    // Get the dependency tree
+    // =========================================================================
+
+    if size(package(1,:),"*") == 2 then
+        tree = atomsDepTreeExt(package(1),package(2));
+    else
+        tree = atomsDepTreeExt(package(1));
+    end
+
+    situation = struct();
+    situation("current_level")  = 1;
+
+    mprintf("\n");
+    atomsDispTree(tree,situation)
+
 endfunction
 
 
 function atomsDispTree(tree,situation)
-       
-       fields      = getfield(1,tree);
-       fields(1:2) = [];
-       
-       current_level = situation("current_level");
-       situation("level"+string(current_level)+"_number") = size(fields,"*");
-       situation("level"+string(current_level)+"_pos")    = 1;
-       
-       for i=1:size(fields,"*")
-               
-               this_package_details = tree(fields(i));
-               
-               for j=1:current_level-1
-                       if situation("level"+string(j)+"_pos") < situation("level"+string(j)+"_number") then
-                               mprintf("|   ");
-                       else
-                               mprintf("    ");
-                       end
-               end
-               
-               if current_level == 1 then
-                       mprintf("    ");
-               elseif situation("level"+string(current_level)+"_pos") == situation("level"+string(current_level)+"_number") then
-                       mprintf("`-- ");
-               else
-                       mprintf("|-- ");
-               end
-               
-               mprintf("%s - %s\n",this_package_details("Toolbox"),this_package_details("Version"));
-               
-               if isfield(this_package_details,"DependencyTree") then
-                       
-                       next_situation                  = situation;
-                       next_situation("current_level") = current_level + 1;
-                       this_package_deptree            = this_package_details("DependencyTree");
-                       atomsDispTree(this_package_deptree,next_situation);
-                       
-               end
-               
-               situation("level"+string(current_level)+"_pos") = situation("level"+string(current_level)+"_pos") + 1;
-               
-       end
-       
+
+    fields      = getfield(1,tree);
+    fields(1:2) = [];
+
+    current_level = situation("current_level");
+    situation("level"+string(current_level)+"_number") = size(fields,"*");
+    situation("level"+string(current_level)+"_pos")    = 1;
+
+    for i=1:size(fields,"*")
+
+        this_package_details = tree(fields(i));
+
+        for j=1:current_level-1
+            if situation("level"+string(j)+"_pos") < situation("level"+string(j)+"_number") then
+                mprintf("|   ");
+            else
+                mprintf("    ");
+            end
+        end
+
+        if current_level == 1 then
+            mprintf("    ");
+        elseif situation("level"+string(current_level)+"_pos") == situation("level"+string(current_level)+"_number") then
+            mprintf("`-- ");
+        else
+            mprintf("|-- ");
+        end
+
+        mprintf("%s - %s\n",this_package_details("Toolbox"),this_package_details("Version"));
+
+        if isfield(this_package_details,"DependencyTree") then
+
+            next_situation                  = situation;
+            next_situation("current_level") = current_level + 1;
+            this_package_deptree            = this_package_details("DependencyTree");
+            atomsDispTree(this_package_deptree,next_situation);
+
+        end
+
+        situation("level"+string(current_level)+"_pos") = situation("level"+string(current_level)+"_pos") + 1;
+
+    end
+
 endfunction
index 3122b35..ba0c7ae 100644 (file)
@@ -10,7 +10,7 @@
 // End user function
 
 // Return a 5xn 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 = atomsGetInstalled(section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs      = argn(2);
-       packages = [];
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs > 1 then
-               error(msprintf(gettext("%s: Wrong number of input argument: at most %d expected.\n"),"atomsGetInstalled",1));
-       end
-       
-       // Load all packages, "user" section or "allusers" section packages ?
-       // =========================================================================
-       
-       if rhs == 0 then
-               section = "all";
-       else
-               
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsGetInstalled",1));
-               end
-               
-               if and(section<>["user","allusers","all"]) then
-                       error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsGetInstalled",1));
-               end
-               
-       end
-       
-       // Call atomsLoadInstalledMat
-       // =========================================================================
-       packages = atomsLoadInstalledMat(section);
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs      = argn(2);
+    packages = [];
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs > 1 then
+        error(msprintf(gettext("%s: Wrong number of input argument: at most %d expected.\n"),"atomsGetInstalled",1));
+    end
+
+    // Load all packages, "user" section or "allusers" section packages ?
+    // =========================================================================
+
+    if rhs == 0 then
+        section = "all";
+    else
+
+        if type(section) <> 10 then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsGetInstalled",1));
+        end
+
+        if and(section<>["user","allusers","all"]) then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsGetInstalled",1));
+        end
+
+    end
+
+    // Call atomsLoadInstalledMat
+    // =========================================================================
+    packages = atomsLoadInstalledMat(section);
+
 endfunction
index ceed35d..cfd4f90 100644 (file)
@@ -10,7 +10,7 @@
 // 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()
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       loaded = atomsLoadLoad();
-       
-       if isempty(loaded) then
-               packages = [];
-       else
-               packages = atomsGetInstalledDetails(loaded);
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    loaded = atomsLoadLoad();
+
+    if isempty(loaded) then
+        packages = [];
+    else
+        packages = atomsGetInstalledDetails(loaded);
+    end
+
 endfunction
index f7dd286..de243fb 100644 (file)
 // End user function
 
 function res = atomsGetLoadedPath(packages)
-       
-       rhs           = argn(2);
-       res           = [];
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs <> 1 then
-               error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsGetLoadedPath",1));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsGetLoadedPath",1));
-       end
-       
-       if size(packages(1,:),"*") > 3 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1,mx2 or mx3 string matrix expected.\n"),"atomsGetLoadedPath",1));
-       end
-       
-       packages = stripblanks(packages);
-       
-       // Complete packages matrix with empty columns to have a mx3 matrix
-       // =========================================================================
-       
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
-       
-       elseif size(packages(1,:),"*") == 2 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       end
-       
-       // Get the list of installed packages
-       // =========================================================================
-       loadedpackages = atomsGetLoaded();
-       
-       // Loop on name
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               if ~ atomsIsLoaded(packages(i,:)) then
-                       res(i) = "";
-                       
-               else
-                       // Filter on names
-                       packages_filtered = loadedpackages( find(loadedpackages(:,1) == packages(i,1)),:);
-                       
-                       res(i) = packages_filtered(1,4);
-               end
-       end
-       
+
+    rhs           = argn(2);
+    res           = [];
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs <> 1 then
+        error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsGetLoadedPath",1));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsGetLoadedPath",1));
+    end
+
+    if size(packages(1,:),"*") > 3 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1,mx2 or mx3 string matrix expected.\n"),"atomsGetLoadedPath",1));
+    end
+
+    packages = stripblanks(packages);
+
+    // Complete packages matrix with empty columns to have a mx3 matrix
+    // =========================================================================
+
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
+
+    elseif size(packages(1,:),"*") == 2 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    end
+
+    // Get the list of installed packages
+    // =========================================================================
+    loadedpackages = atomsGetLoaded();
+
+    // Loop on name
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        if ~ atomsIsLoaded(packages(i,:)) then
+            res(i) = "";
+
+        else
+            // Filter on names
+            packages_filtered = loadedpackages( find(loadedpackages(:,1) == packages(i,1)),:);
+
+            res(i) = packages_filtered(1,4);
+        end
+    end
+
 endfunction
index 96f2e92..94273b3 100644 (file)
 // Installation of a toolbox
 
 function result = atomsInstall(packages,section)
-       
-       result = [];
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       // Save the initial path
-       // =========================================================================
-       ATOMSINITIALPATH = pwd();
-       
-       // Get scilab version (needed for later)
-       // =========================================================================
-       sciversion = strcat(string(getversion("scilab")) + ".");
-       
-       // Check input parameters
-       // =========================================================================
-       
-       rhs = argn(2);
-       
-       if rhs < 1 | rhs > 2 then
-               error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsInstall",1,2))
-       end
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsInstall",1));
-       end
-       
-       if size(packages(1,:),"*") > 2 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1 or mx2 string matrix expected.\n"),"atomsInstall",1));
-       end
-       
-       // Remove leading and trailing whitespace
-       // =========================================================================
-       packages = stripblanks(packages);
-       
-       // Operating system detection + Architecture detection
-       // =========================================================================
-       [OSNAME,ARCH,LINUX,MACOSX,SOLARIS,BSD] = atomsGetPlatform();
-       
-       // Verbose Mode ?
-       // =========================================================================
-       if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
-               ATOMSVERBOSE = %T;
-       else
-               ATOMSVERBOSE = %F;
-       end
-       
-       // Allusers/user management
-       //   - If Allusers is equal to "allusers", packages will installed in the "allusers" section :
-       //       → SCI/contrib    : location of the packages
-       //       → SCI/.atoms     : ATOMS system files
-       //   - Otherwise, packages will installed in the "user" section :
-       //       → SCIHOME/atoms  : location of the packages
-       //       → SCIHOME/.atoms : location of the packages & ATOMS system files
-       // =========================================================================
-       
-       if rhs <= 1 then
-               
-               // By default: 
-               //  → Install in the "allusers" section if we have the write access to
-               //    SCI directory
-               //  → Install in the "user" otherwise
-               
-               if ATOMSALLUSERSWRITEACCESS then
-                       section = "allusers"; 
-               else
-                       section = "user";
-               end
-               
-       else
-               
-               // Process the 2nd input argument : section
-               // Allusers can be a boolean or equal to "user" or "allusers"
-               
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsInstall",2));
-               end
-               
-               if and(section<>["user","allusers"]) then
-                       error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' expected.\n"),"atomsInstall",2));
-               end
-               
-               // Check if we have the write access
-               if (section=="allusers") & ~ ATOMSALLUSERSWRITEACCESS then
-                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsInstall",pathconvert(SCI+"/.atoms")));
-               end
-       end
-       
-       // Create needed directories
-       // =========================================================================
-       atoms_system_directory  = atomsPath("system" ,section);
-       atoms_install_directory = atomsPath("install",section);
-       atoms_session_directory = atomsPath("system","session");
-       atoms_tmp_directory     = pathconvert( atomsPath("system" ,section) + "tmp_" + sprintf("%d\n",getdate("s")) );
-       
-       directories2create = [  atoms_system_directory ;   ..
-                                                       atoms_install_directory ;  ..
-                                                       atoms_session_directory ;  ..
-                                                       atoms_tmp_directory ];
-       
-       for i=1:size(directories2create,"*")
-               if ~ isdir( directories2create(i) ) & (mkdir( directories2create(i) ) <> 1) then
-                       error(msprintf( ..
-                               gettext("%s: The directory ''%s'' cannot been created, please check if you have write access on this directory.\n"),..
-                               directories2create(i)));
-               end
-       end
-       
-       // Define the "archives" directory path
-       // Create it if it's not exist
-       // =========================================================================
-       archives_directory = atoms_install_directory + "archives";
-       
-       if ~ isdir( archives_directory ) & (mkdir( archives_directory ) <> 1) then
-               error(msprintf( ..
-                       gettext("%s: The directory ''%s'' cannot been created, please check if you have write access on this directory.\n"),..
-                       "atomsInstall", ..
-                       archives_directory));
-       end
-       
-       // Complete packages matrix with empty columns
-       // =========================================================================
-       
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       end
-       
-       // "Archive" installation
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               this_package = packages(i,1);
-               
-               if ~ isempty(regexp(this_package,"/(\.tar\.gz|\.tgz|\.zip)$/","o")) then
-                       
-                       if fileinfo( this_package ) then
-                               error(msprintf(gettext("%s: The file ''%s'' doesn''t exist or is not read accessible\n"),"atomsInstall",this_package));
-                       end
-                       
-                       tmp_dir = atomsExtract(this_package,atoms_tmp_directory);
-                       tmp_dir = pathconvert(atoms_tmp_directory+tmp_dir);
-                       
-                       if fileinfo( tmp_dir + "DESCRIPTION" ) then
-                               error(msprintf(gettext("%s: DESCRIPTION file cannot be found in the package ''%s''\n"),"atomsInstall",this_package));
-                       end
-                       
-                       this_package_description = atomsDESCRIPTIONread(tmp_dir + "DESCRIPTION");
-                       this_package_packages    = this_package_description("packages");
-                       
-                       // Get package name and version
-                       // -----------------------------------------------------------------
-                       
-                       this_package_name    = getfield(1,this_package_packages);
-                       this_package_name    = this_package_name(3);
-                       
-                       this_package_version = getfield(1,this_package_packages(this_package_name));
-                       this_package_version = this_package_version(3);
-                       
-                       // Save the extracted directory
-                       // -----------------------------------------------------------------
-                       
-                       this_package_description = atomsDESCRIPTIONaddField( .. 
-                               this_package_description, ..
-                               this_package_name,        ..
-                               this_package_version,     ..
-                               "extractedDirectory",     ..
-                               tmp_dir);
-                       
-                       this_package_description = atomsDESCRIPTIONaddField( .. 
-                               this_package_description, ..
-                               this_package_name,        ..
-                               this_package_version,     ..
-                               "archiveFile",            ..
-                               this_package);
-                               
-                       this_package_description = atomsDESCRIPTIONaddField( .. 
-                               this_package_description, ..
-                               this_package_name,        ..
-                               this_package_version,     ..
-                               "fromRepository",         ..
-                               "0");
-                       
-                       // Save the DESCRIPTION_archives
-                       // -----------------------------------------------------------------
-                       
-                       if fileinfo( atoms_tmp_directory + "DESCRIPTION_archives" )<>[] then
-                               packages_description = atomsDESCRIPTIONread(atomsPath("system","session")+"DESCRIPTION_archives");
-                               packages_description = atomsDESCRIPTIONcat(packages_description,this_package_description);
-                       else
-                               packages_description = this_package_description;
-                       end
-                       
-                       atomsDESCRIPTIONwrite(packages_description,atomsPath("system","session")+"DESCRIPTION_archives");
-                       
-                       // change the packages var
-                       // -----------------------------------------------------------------
-                       packages(i,:) = [ this_package_name this_package_version ];
-                       
-               end
-               
-       end
-       
-       // Force update the system informations
-       // =========================================================================
-       atomsDESCRIPTIONget(%T)
-       
-       // Get the install list
-       // =========================================================================
-       [install_package_list,dependency_tree] = atomsInstallList(packages,section);
-       
-       // Loop on install_package_list to print if a package has to be installed
-       // or not
-       // =========================================================================
-       for i=1:size(install_package_list(:,1),"*")
-               if install_package_list(i,1) == "+" then
-                       atomsDisp(msprintf("\t%s (%s) will be installed in the ''%s'' section\n\n",install_package_list(i,3),install_package_list(i,4),section));
-               elseif install_package_list(i,1) == "~" then
-                       atomsDisp(msprintf("\t%s (%s) is already installed in the ''%s'' section and up-to-date\n\n",install_package_list(i,3),install_package_list(i,4),section));
-               end
-       end
-       
-       // Now really install the packages
-       // =========================================================================
-       
-       for i=1:size(install_package_list(:,1),"*")
-               
-               this_package_name    = install_package_list(i,3);
-               this_package_version = install_package_list(i,4);
-               
-               this_package_details = dependency_tree(this_package_name+" - "+this_package_version);
-               
-               if install_package_list(i,1) <> "+" then
-                       continue;
-               end
-               
-               atomsDisp(msprintf("\tInstalling %s (%s) ...",this_package_name,this_package_version));
-               
-               // Define the path of the directory where will be installed this toolbox
-               // =====================================================================
-               this_package_directory = atomsPath("install",section) + this_package_name + filesep();
-               
-               // Create the parent directory of this toolbox if it's not already exist
-               // =====================================================================
-               
-               if ~isdir(this_package_directory) & (mkdir(this_package_directory)<>1) then
-                       atomsError("error", ..
-                               msprintf( gettext("%s: The directory ""%s"" cannot been created, please check if you have write access on this directory.\n"), ..
-                                       "atomsInstall", ..
-                                       strsubst(this_package_directory,"\","\\") ));
-               end
-               
-               // "Repository" installation ; Download and Extract
-               // =====================================================================
-               
-               if this_package_details("fromRepository") == "1" then
-                       
-                       // Define the path of the downloaded file
-                       // =================================================================
-                       
-                       if isfield(this_package_details,"binaryName") then
-                               fileprefix = "binary";
-                       elseif isfield(this_package_details,OSNAME+ARCH+"Name") then
-                               fileprefix = OSNAME+ARCH;
-                       else
-                               fileprefix = OSNAME;
-                       end
-                       
-                       fileout = pathconvert(this_package_directory+this_package_details(fileprefix+"Name"),%F);
-                       filein  = this_package_details(fileprefix+"Url");
-                       filemd5 = this_package_details(fileprefix+"Md5");
-                       
-                       // Launch the download
-                       // =================================================================
-                       atomsDownload(filein,fileout,filemd5);
-                       
-                       // unarchive it
-                       // =================================================================
-                       this_package_details("extractedDirectory") = this_package_directory + atomsExtract(fileout,this_package_directory);
-               end
-               
-               // Rename the created directory
-               // =====================================================================
-               
-               if getos() == 'Windows' then
-                       rename_cmd = "rename """+this_package_details("extractedDirectory")+""" """+this_package_version+"""";
-               else
-                       rename_cmd = "mv """+this_package_details("extractedDirectory")+""" """+this_package_directory+this_package_version+"""";
-               end
-               
-               [rep,stat,err]=unix_g(rename_cmd);
-               
-               if stat <> 0 then
-                       
-                       // Second try after a sleep
-                       // This is needed on windows platforms
-                       
-                       if getos() == 'Windows' then
-                               sleep(2000);
-                               [rep,stat,err]=unix_g(rename_cmd);
-                       end
-                       
-                       if stat <> 0 then
-                               atomsError("error", ..
-                                       msprintf(gettext("%s: Error while creating the directory ''%s''.\n"),..
-                                               "atomsInstall", ..
-                                               strsubst(pathconvert(this_package_directory+this_package_version),"\","\\") ));
-                       end
-                       
-               end
-               
-               // Move the created directory
-               // → Only under windows
-               // → Only if it's a local package
-               // =====================================================================
-               
-               if getos() == 'Windows' & (this_package_details("fromRepository") == "0") then
-                       
-                       move_cmd = "move """+atoms_tmp_directory+this_package_version+""" """+pathconvert(this_package_directory,%F)+"""";
-                       
-                       [rep,stat,err]=unix_g(move_cmd);
-                       
-                       if stat <> 0 then
-                               
-                               // Second try after a sleep
-                               // This is needed on windows platforms
-                               
-                               if getos() == 'Windows' then
-                                       sleep(2000);
-                                       [rep,stat,err]=unix_g(move_cmd);
-                               end
-                               
-                               atomsError("error", ..
-                                       msprintf(gettext("%s: Error while creating the directory ''%s''.\n"),..
-                                               "atomsInstall",..
-                                               strsubst(pathconvert(this_package_directory+this_package_version),"\","\\") ));
-                       end
-                       
-               end
-               
-               // Register the successfully installed package
-               // =====================================================================
-               
-               if install_package_list(i,2) == "U" then
-                       // Intentionnaly Installed
-                       this_package_status = "I";
-               else
-                       // Automatically installed
-                       this_package_status = "A";
-               end
-               
-               atomsInstallRegister(this_package_name,this_package_version,this_package_status,section);
-               
-               // Autoload the toolbox unless precised
-               // =====================================================================
-               
-               if ~ (atomsGetConfig("autoloadAddAfterInstall") == "False") then
-                       
-                       // Add a package to the autoload list only if it's intentionnaly
-                       // installed
-                       
-                       if this_package_status=="I" then
-                               // If another version is on the autoload list, remove it
-                               atomsAutoloadDel([this_package_name ""                   section],section);
-                               atomsAutoloadAdd([this_package_name this_package_version section],section);
-                       end
-                       
-               end
-               
-               // Move the archive file (.tar.gz or .zip file) to the archive directory
-               // =====================================================================
-               
-               if this_package_details("fromRepository")=="1" then
-                       this_package_archive = fileout;
-               else
-                       this_package_archive = this_package_details("archiveFile");
-               end
-               
-               if copyfile( this_package_archive , archives_directory ) <> 1 then
-                       atomsError("error", ..
-                               msprintf(gettext("%s: Error while copying the file ''%s'' to the directory ''%s''.\n"), ..
-                                       "atomsInstall", ..
-                                       strsubst(this_package_archive,"\","\\"), ..
-                                       strsubst(archives_directory,"\","\\") ));
-               end
-               
-               if this_package_details("fromRepository")=="1" then
-                       mdelete( fileout );
-               end
-               
-               // Fill the result matrix
-               // =====================================================================
-               result = [ result ; atomsGetInstalledDetails([this_package_name this_package_version]) ];
-               
-               // Save the description
-               // Needed to remove the toolbox if it's has been removed from the 
-               // repository list
-               // =====================================================================
-               
-               DESCRIPTION_file = atoms_system_directory+"DESCRIPTION_installed";
-               
-               if isempty(fileinfo(DESCRIPTION_file)) then
-                       DESCRIPTION = struct();
-               else
-                       DESCRIPTION = atomsDESCRIPTIONread(DESCRIPTION_file);
-               end
-               
-               DESCRIPTION = atomsDESCRIPTIONadd(DESCRIPTION,this_package_name,this_package_version,this_package_details);
-               atomsDESCRIPTIONwrite(DESCRIPTION,DESCRIPTION_file);
-               
-               // Sucess message if needed
-               // =====================================================================
-               atomsDisp(msprintf(" success\n\n"));
-               
-       end
-       
-       // The TMPDIR DESCRIPTION_archives is no more needed
-       // =========================================================================
-       
-       if ~ isempty(fileinfo(atoms_tmp_directory + "DESCRIPTION_archives")) then
-               mdelete(atoms_tmp_directory + "DESCRIPTION_archives");
-       end
-       
-       // The atoms_tmp_directory is no more needed
-       // =========================================================================
-       
-       if ~ isempty(fileinfo(atoms_tmp_directory)) then
-               rmdir(atoms_tmp_directory,"s");
-       end
-       
-       // Update the dependencies of packages that use another version of packages
-       // that have been installed
-       // =========================================================================
-       
-       for i=1:size( result(:,1) , "*" )
-               
-               packages_out = atomsUpdateDeps([result(i,1) result(i,2)],section);
-               
-               if ATOMSVERBOSE then
-                       for j=1:size(packages_out(:,1),"*")
-                               atomsDisp(msprintf("\t%s (%s) will now use the version %s of the package %s\n\n",packages_out(j,1),packages_out(j,2),result(i,1),result(i,2)));
-                       end
-               end
-               
-       end
-       
-       // Remove orphan packages
-       // =========================================================================
-       
-       if section=="all" then
-               sections = ["user";"allusers"];
-       else
-               sections = section;
-       end
-       
-       for i=1:size(sections,"*")
-               
-               orphan_list = atomsOrphanList(sections(i));
-               
-               if ~ isempty(orphan_list) then
-                       atomsRemove( [ orphan_list(:,1) orphan_list(:,2) ] , sections(i) );
-               end
-               
-       end
-       
-       // Go to the initial location
-       // =========================================================================
-       chdir(ATOMSINITIALPATH);
-       
+
+    result = [];
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
+
+    // Save the initial path
+    // =========================================================================
+    ATOMSINITIALPATH = pwd();
+
+    // Get scilab version (needed for later)
+    // =========================================================================
+    sciversion = strcat(string(getversion("scilab")) + ".");
+
+    // Check input parameters
+    // =========================================================================
+
+    rhs = argn(2);
+
+    if rhs < 1 | rhs > 2 then
+        error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsInstall",1,2))
+    end
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsInstall",1));
+    end
+
+    if size(packages(1,:),"*") > 2 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1 or mx2 string matrix expected.\n"),"atomsInstall",1));
+    end
+
+    // Remove leading and trailing whitespace
+    // =========================================================================
+    packages = stripblanks(packages);
+
+    // Operating system detection + Architecture detection
+    // =========================================================================
+    [OSNAME,ARCH,LINUX,MACOSX,SOLARIS,BSD] = atomsGetPlatform();
+
+    // Verbose Mode ?
+    // =========================================================================
+    if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
+        ATOMSVERBOSE = %T;
+    else
+        ATOMSVERBOSE = %F;
+    end
+
+    // Allusers/user management
+    //   - If Allusers is equal to "allusers", packages will installed in the "allusers" section :
+    //       → SCI/contrib    : location of the packages
+    //       → SCI/.atoms     : ATOMS system files
+    //   - Otherwise, packages will installed in the "user" section :
+    //       → SCIHOME/atoms  : location of the packages
+    //       → SCIHOME/.atoms : location of the packages & ATOMS system files
+    // =========================================================================
+
+    if rhs <= 1 then
+
+        // By default:
+        //  → Install in the "allusers" section if we have the write access to
+        //    SCI directory
+        //  → Install in the "user" otherwise
+
+        if ATOMSALLUSERSWRITEACCESS then
+            section = "allusers";
+        else
+            section = "user";
+        end
+
+    else
+
+        // Process the 2nd input argument : section
+        // Allusers can be a boolean or equal to "user" or "allusers"
+
+        if type(section) <> 10 then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsInstall",2));
+        end
+
+        if and(section<>["user","allusers"]) then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' expected.\n"),"atomsInstall",2));
+        end
+
+        // Check if we have the write access
+        if (section=="allusers") & ~ ATOMSALLUSERSWRITEACCESS then
+            error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsInstall",pathconvert(SCI+"/.atoms")));
+        end
+    end
+
+    // Create needed directories
+    // =========================================================================
+    atoms_system_directory  = atomsPath("system" ,section);
+    atoms_install_directory = atomsPath("install",section);
+    atoms_session_directory = atomsPath("system","session");
+    atoms_tmp_directory     = pathconvert( atomsPath("system" ,section) + "tmp_" + sprintf("%d\n",getdate("s")) );
+
+    directories2create = [  atoms_system_directory ;   ..
+                            atoms_install_directory ;  ..
+                            atoms_session_directory ;  ..
+                            atoms_tmp_directory ];
+
+    for i=1:size(directories2create,"*")
+        if ~ isdir( directories2create(i) ) & (mkdir( directories2create(i) ) <> 1) then
+            error(msprintf( ..
+                gettext("%s: The directory ''%s'' cannot been created, please check if you have write access on this directory.\n"),..
+                directories2create(i)));
+        end
+    end
+
+    // Define the "archives" directory path
+    // Create it if it's not exist
+    // =========================================================================
+    archives_directory = atoms_install_directory + "archives";
+
+    if ~ isdir( archives_directory ) & (mkdir( archives_directory ) <> 1) then
+        error(msprintf( ..
+            gettext("%s: The directory ''%s'' cannot been created, please check if you have write access on this directory.\n"),..
+            "atomsInstall", ..
+            archives_directory));
+    end
+
+    // Complete packages matrix with empty columns
+    // =========================================================================
+
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+    end
+
+    // "Archive" installation
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        this_package = packages(i,1);
+
+        if ~ isempty(regexp(this_package,"/(\.tar\.gz|\.tgz|\.zip)$/","o")) then
+
+            if fileinfo( this_package ) then
+                error(msprintf(gettext("%s: The file ''%s'' doesn''t exist or is not read accessible\n"),"atomsInstall",this_package));
+            end
+
+            tmp_dir = atomsExtract(this_package,atoms_tmp_directory);
+            tmp_dir = pathconvert(atoms_tmp_directory+tmp_dir);
+
+            if fileinfo( tmp_dir + "DESCRIPTION" ) then
+                error(msprintf(gettext("%s: DESCRIPTION file cannot be found in the package ''%s''\n"),"atomsInstall",this_package));
+            end
+
+            this_package_description = atomsDESCRIPTIONread(tmp_dir + "DESCRIPTION");
+            this_package_packages    = this_package_description("packages");
+
+            // Get package name and version
+            // -----------------------------------------------------------------
+
+            this_package_name    = getfield(1,this_package_packages);
+            this_package_name    = this_package_name(3);
+
+            this_package_version = getfield(1,this_package_packages(this_package_name));
+            this_package_version = this_package_version(3);
+
+            // Save the extracted directory
+            // -----------------------------------------------------------------
+
+            this_package_description = atomsDESCRIPTIONaddField( ..
+                this_package_description, ..
+                this_package_name,        ..
+                this_package_version,     ..
+                "extractedDirectory",     ..
+                tmp_dir);
+
+            this_package_description = atomsDESCRIPTIONaddField( ..
+                this_package_description, ..
+                this_package_name,        ..
+                this_package_version,     ..
+                "archiveFile",            ..
+                this_package);
+
+            this_package_description = atomsDESCRIPTIONaddField( ..
+                this_package_description, ..
+                this_package_name,        ..
+                this_package_version,     ..
+                "fromRepository",         ..
+                "0");
+
+            // Save the DESCRIPTION_archives
+            // -----------------------------------------------------------------
+
+            if fileinfo( atoms_tmp_directory + "DESCRIPTION_archives" )<>[] then
+                packages_description = atomsDESCRIPTIONread(atomsPath("system","session")+"DESCRIPTION_archives");
+                packages_description = atomsDESCRIPTIONcat(packages_description,this_package_description);
+            else
+                packages_description = this_package_description;
+            end
+
+            atomsDESCRIPTIONwrite(packages_description,atomsPath("system","session")+"DESCRIPTION_archives");
+
+            // change the packages var
+            // -----------------------------------------------------------------
+            packages(i,:) = [ this_package_name this_package_version ];
+
+        end
+
+    end
+
+    // Force update the system informations
+    // =========================================================================
+    atomsDESCRIPTIONget(%T)
+
+    // Get the install list
+    // =========================================================================
+    [install_package_list,dependency_tree] = atomsInstallList(packages,section);
+
+    // Loop on install_package_list to print if a package has to be installed
+    // or not
+    // =========================================================================
+    for i=1:size(install_package_list(:,1),"*")
+        if install_package_list(i,1) == "+" then
+            atomsDisp(msprintf("\t%s (%s) will be installed in the ''%s'' section\n\n",install_package_list(i,3),install_package_list(i,4),section));
+        elseif install_package_list(i,1) == "~" then
+            atomsDisp(msprintf("\t%s (%s) is already installed in the ''%s'' section and up-to-date\n\n",install_package_list(i,3),install_package_list(i,4),section));
+        end
+    end
+
+    // Now really install the packages
+    // =========================================================================
+
+    for i=1:size(install_package_list(:,1),"*")
+
+        this_package_name    = install_package_list(i,3);
+        this_package_version = install_package_list(i,4);
+
+        this_package_details = dependency_tree(this_package_name+" - "+this_package_version);
+
+        if install_package_list(i,1) <> "+" then
+            continue;
+        end
+
+        atomsDisp(msprintf("\tInstalling %s (%s) ...",this_package_name,this_package_version));
+
+        // Define the path of the directory where will be installed this toolbox
+        // =====================================================================
+        this_package_directory = atomsPath("install",section) + this_package_name + filesep();
+
+        // Create the parent directory of this toolbox if it's not already exist
+        // =====================================================================
+
+        if ~isdir(this_package_directory) & (mkdir(this_package_directory)<>1) then
+            atomsError("error", ..
+                msprintf( gettext("%s: The directory ""%s"" cannot been created, please check if you have write access on this directory.\n"), ..
+                    "atomsInstall", ..
+                    strsubst(this_package_directory,"\","\\") ));
+        end
+
+        // "Repository" installation ; Download and Extract
+        // =====================================================================
+
+        if this_package_details("fromRepository") == "1" then
+
+            // Define the path of the downloaded file
+            // =================================================================
+
+            if isfield(this_package_details,"binaryName") then
+                fileprefix = "binary";
+            elseif isfield(this_package_details,OSNAME+ARCH+"Name") then
+                fileprefix = OSNAME+ARCH;
+            else
+                fileprefix = OSNAME;
+            end
+
+            fileout = pathconvert(this_package_directory+this_package_details(fileprefix+"Name"),%F);
+            filein  = this_package_details(fileprefix+"Url");
+            filemd5 = this_package_details(fileprefix+"Md5");
+
+            // Launch the download
+            // =================================================================
+            atomsDownload(filein,fileout,filemd5);
+
+            // unarchive it
+            // =================================================================
+            this_package_details("extractedDirectory") = this_package_directory + atomsExtract(fileout,this_package_directory);
+        end
+
+        // Rename the created directory
+        // =====================================================================
+
+        if getos() == 'Windows' then
+            rename_cmd = "rename """+this_package_details("extractedDirectory")+""" """+this_package_version+"""";
+        else
+            rename_cmd = "mv """+this_package_details("extractedDirectory")+""" """+this_package_directory+this_package_version+"""";
+        end
+
+        [rep,stat,err]=unix_g(rename_cmd);
+
+        if stat <> 0 then
+
+            // Second try after a sleep
+            // This is needed on windows platforms
+
+            if getos() == 'Windows' then
+                sleep(2000);
+                [rep,stat,err]=unix_g(rename_cmd);
+            end
+
+            if stat <> 0 then
+                atomsError("error", ..
+                    msprintf(gettext("%s: Error while creating the directory ''%s''.\n"),..
+                        "atomsInstall", ..
+                        strsubst(pathconvert(this_package_directory+this_package_version),"\","\\") ));
+            end
+
+        end
+
+        // Move the created directory
+        // → Only under windows
+        // → Only if it's a local package
+        // =====================================================================
+
+        if getos() == 'Windows' & (this_package_details("fromRepository") == "0") then
+
+            move_cmd = "move """+atoms_tmp_directory+this_package_version+""" """+pathconvert(this_package_directory,%F)+"""";
+
+            [rep,stat,err]=unix_g(move_cmd);
+
+            if stat <> 0 then
+
+                // Second try after a sleep
+                // This is needed on windows platforms
+
+                if getos() == 'Windows' then
+                    sleep(2000);
+                    [rep,stat,err]=unix_g(move_cmd);
+                end
+
+                atomsError("error", ..
+                    msprintf(gettext("%s: Error while creating the directory ''%s''.\n"),..
+                        "atomsInstall",..
+                        strsubst(pathconvert(this_package_directory+this_package_version),"\","\\") ));
+            end
+
+        end
+
+        // Register the successfully installed package
+        // =====================================================================
+
+        if install_package_list(i,2) == "U" then
+            // Intentionnaly Installed
+            this_package_status = "I";
+        else
+            // Automatically installed
+            this_package_status = "A";
+        end
+
+        atomsInstallRegister(this_package_name,this_package_version,this_package_status,section);
+
+        // Autoload the toolbox unless precised
+        // =====================================================================
+
+        if ~ (atomsGetConfig("autoloadAddAfterInstall") == "False") then
+
+            // Add a package to the autoload list only if it's intentionnaly
+            // installed
+
+            if this_package_status=="I" then
+                // If another version is on the autoload list, remove it
+                atomsAutoloadDel([this_package_name ""                   section],section);
+                atomsAutoloadAdd([this_package_name this_package_version section],section);
+            end
+
+        end
+
+        // Move the archive file (.tar.gz or .zip file) to the archive directory
+        // =====================================================================
+
+        if this_package_details("fromRepository")=="1" then
+            this_package_archive = fileout;
+        else
+            this_package_archive = this_package_details("archiveFile");
+        end
+
+        if copyfile( this_package_archive , archives_directory ) <> 1 then
+            atomsError("error", ..
+                msprintf(gettext("%s: Error while copying the file ''%s'' to the directory ''%s''.\n"), ..
+                    "atomsInstall", ..
+                    strsubst(this_package_archive,"\","\\"), ..
+                    strsubst(archives_directory,"\","\\") ));
+        end
+
+        if this_package_details("fromRepository")=="1" then
+            mdelete( fileout );
+        end
+
+        // Fill the result matrix
+        // =====================================================================
+        result = [ result ; atomsGetInstalledDetails([this_package_name this_package_version]) ];
+
+        // Save the description
+        // Needed to remove the toolbox if it's has been removed from the
+        // repository list
+        // =====================================================================
+
+        DESCRIPTION_file = atoms_system_directory+"DESCRIPTION_installed";
+
+        if isempty(fileinfo(DESCRIPTION_file)) then
+            DESCRIPTION = struct();
+        else
+            DESCRIPTION = atomsDESCRIPTIONread(DESCRIPTION_file);
+        end
+
+        DESCRIPTION = atomsDESCRIPTIONadd(DESCRIPTION,this_package_name,this_package_version,this_package_details);
+        atomsDESCRIPTIONwrite(DESCRIPTION,DESCRIPTION_file);
+
+        // Sucess message if needed
+        // =====================================================================
+        atomsDisp(msprintf(" success\n\n"));
+
+    end
+
+    // The TMPDIR DESCRIPTION_archives is no more needed
+    // =========================================================================
+
+    if ~ isempty(fileinfo(atoms_tmp_directory + "DESCRIPTION_archives")) then
+        mdelete(atoms_tmp_directory + "DESCRIPTION_archives");
+    end
+
+    // The atoms_tmp_directory is no more needed
+    // =========================================================================
+
+    if ~ isempty(fileinfo(atoms_tmp_directory)) then
+        rmdir(atoms_tmp_directory,"s");
+    end
+
+    // Update the dependencies of packages that use another version of packages
+    // that have been installed
+    // =========================================================================
+
+    for i=1:size( result(:,1) , "*" )
+
+        packages_out = atomsUpdateDeps([result(i,1) result(i,2)],section);
+
+        if ATOMSVERBOSE then
+            for j=1:size(packages_out(:,1),"*")
+                atomsDisp(msprintf("\t%s (%s) will now use the version %s of the package %s\n\n",packages_out(j,1),packages_out(j,2),result(i,1),result(i,2)));
+            end
+        end
+
+    end
+
+    // Remove orphan packages
+    // =========================================================================
+
+    if section=="all" then
+        sections = ["user";"allusers"];
+    else
+        sections = section;
+    end
+
+    for i=1:size(sections,"*")
+
+        orphan_list = atomsOrphanList(sections(i));
+
+        if ~ isempty(orphan_list) then
+            atomsRemove( [ orphan_list(:,1) orphan_list(:,2) ] , sections(i) );
+        end
+
+    end
+
+    // Go to the initial location
+    // =========================================================================
+    chdir(ATOMSINITIALPATH);
+
 endfunction
index ae979ae..7bb2d6c 100644 (file)
 //   res      : matrix of boolean
 
 function res = atomsIsInstalled(packages,section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs           = argn(2);
-       res           = [];
-       installed     = []; // Column vector that contains user repositories
-       
-       // 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"),"atomsIsInstalled",1,2));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsInstalled",1));
-       end
-       
-       if size(packages(1,:),"*") > 3 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1, mx2 or mx3 string matrix expected.\n"),"atomsIsInstalled",1));
-       end
-       
-       // Remove leadind & trailing whitespaces
-       // =========================================================================
-       packages = stripblanks(packages);
-       
-       // Complete packages matrix with empty columns to have a mx3 matrix
-       // =========================================================================
-       
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
-       
-       elseif size(packages(1,:),"*") == 2 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       end
-       
-       // "all", "user" section or "allusers" section packages ?
-       // =========================================================================
-       
-       if rhs < 2 then
-               section = "all"
-               
-       else
-               // Just check if it's a boolean
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsIsInstalled",2));
-               end
-               
-               if and(section<>["user","allusers","all"]) then
-                       error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsIsInstalled",2));
-               end
-               
-       end
-       
-       // Get the list of installed packages
-       // =========================================================================
-       installedpackages = atomsGetInstalled(section);
-       
-       // Loop on packages
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               name    = packages(i,1);
-               version = packages(i,2);
-               section = packages(i,3);
-               res(i)  = %F;
-               
-               if packages(i,3) == "all" then
-                       section = "";
-               else
-                       section = packages(i,3);
-               end
-               
-               if isempty(version) & isempty(section) then
-                       // Just check the name
-                       res(i) = or(installedpackages(:,1) == name);
-                       
-               elseif isempty(version) & ~isempty(section) then
-                       // Filter on names
-                       packages_filtered = installedpackages( find(installedpackages(:,1) == name) , 3 );
-                       
-                       // Check if the wanted section is present
-                       res(i) = or(packages_filtered == section);
-                       
-               elseif ~isempty(version) & isempty(section) then
-                       
-                       // Filter on names
-                       packages_filtered = installedpackages( find(installedpackages(:,1) == name) , 2 );
-                       
-                       // Filter on versions
-                       
-                       //  + The packaging version is mentioned
-                       if ~ isempty(strindex(version,"-")) then
-                               res(i) = or(packages_filtered == version);
-                       
-                       //  + The packaging version is not mentioned
-                       else
-                               // Loop on installed versions
-                               for j=1:size(packages_filtered,"*")
-                                       
-                                       if ~ isempty(strindex(packages_filtered(j),"-")) then
-                                               packages_filtered(j) = part(packages_filtered(j),1:strindex(packages_filtered(j),"-")-1);
-                                       end
-                                       
-                                       if version == packages_filtered(j) then
-                                               res(i) = %T;
-                                               break;
-                                       end
-                                       
-                               end
-                               
-                       end
-                       
-               else
-                       // Filter on names
-                       packages_filtered = installedpackages( find(installedpackages(:,1) == name) , [2 3] );
-                       
-                       // Filter on section
-                       packages_filtered = packages_filtered( find(packages_filtered(:,2) == section) , 1 );
-                       
-                       // Filter on versions
-                       
-                       //  + The packaging version is mentioned
-                       if ~ isempty(strindex(version,"-")) then
-                               res(i) = or(packages_filtered == version);
-                       
-                       //  + The packaging version is not mentioned
-                       else
-                               // Loop on installed versions
-                               for j=1:size(packages_filtered,"*")
-                                       
-                                       if ~ isempty(strindex(packages_filtered(j),"-")) then
-                                               packages_filtered(j) = part(packages_filtered(j),1:strindex(packages_filtered(j),"-")-1);
-                                       end
-                                       
-                                       if version == packages_filtered(j) then
-                                               res(i) = %T;
-                                               break;
-                                       end
-                                       
-                               end
-                               
-                       end
-                       
-               end
-               
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs           = argn(2);
+    res           = [];
+    installed     = []; // Column vector that contains user repositories
+
+    // 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"),"atomsIsInstalled",1,2));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsInstalled",1));
+    end
+
+    if size(packages(1,:),"*") > 3 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1, mx2 or mx3 string matrix expected.\n"),"atomsIsInstalled",1));
+    end
+
+    // Remove leadind & trailing whitespaces
+    // =========================================================================
+    packages = stripblanks(packages);
+
+    // Complete packages matrix with empty columns to have a mx3 matrix
+    // =========================================================================
+
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
+
+    elseif size(packages(1,:),"*") == 2 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    end
+
+    // "all", "user" section or "allusers" section packages ?
+    // =========================================================================
+
+    if rhs < 2 then
+        section = "all"
+
+    else
+        // Just check if it's a boolean
+        if type(section) <> 10 then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsIsInstalled",2));
+        end
+
+        if and(section<>["user","allusers","all"]) then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'',''allusers'' or ''all'' expected.\n"),"atomsIsInstalled",2));
+        end
+
+    end
+
+    // Get the list of installed packages
+    // =========================================================================
+    installedpackages = atomsGetInstalled(section);
+
+    // Loop on packages
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        name    = packages(i,1);
+        version = packages(i,2);
+        section = packages(i,3);
+        res(i)  = %F;
+
+        if packages(i,3) == "all" then
+            section = "";
+        else
+            section = packages(i,3);
+        end
+
+        if isempty(version) & isempty(section) then
+            // Just check the name
+            res(i) = or(installedpackages(:,1) == name);
+
+        elseif isempty(version) & ~isempty(section) then
+            // Filter on names
+            packages_filtered = installedpackages( find(installedpackages(:,1) == name) , 3 );
+
+            // Check if the wanted section is present
+            res(i) = or(packages_filtered == section);
+
+        elseif ~isempty(version) & isempty(section) then
+
+            // Filter on names
+            packages_filtered = installedpackages( find(installedpackages(:,1) == name) , 2 );
+
+            // Filter on versions
+
+            //  + The packaging version is mentioned
+            if ~ isempty(strindex(version,"-")) then
+                res(i) = or(packages_filtered == version);
+
+            //  + The packaging version is not mentioned
+            else
+                // Loop on installed versions
+                for j=1:size(packages_filtered,"*")
+
+                    if ~ isempty(strindex(packages_filtered(j),"-")) then
+                        packages_filtered(j) = part(packages_filtered(j),1:strindex(packages_filtered(j),"-")-1);
+                    end
+
+                    if version == packages_filtered(j) then
+                        res(i) = %T;
+                        break;
+                    end
+
+                end
+
+            end
+
+        else
+            // Filter on names
+            packages_filtered = installedpackages( find(installedpackages(:,1) == name) , [2 3] );
+
+            // Filter on section
+            packages_filtered = packages_filtered( find(packages_filtered(:,2) == section) , 1 );
+
+            // Filter on versions
+
+            //  + The packaging version is mentioned
+            if ~ isempty(strindex(version,"-")) then
+                res(i) = or(packages_filtered == version);
+
+            //  + The packaging version is not mentioned
+            else
+                // Loop on installed versions
+                for j=1:size(packages_filtered,"*")
+
+                    if ~ isempty(strindex(packages_filtered(j),"-")) then
+                        packages_filtered(j) = part(packages_filtered(j),1:strindex(packages_filtered(j),"-")-1);
+                    end
+
+                    if version == packages_filtered(j) then
+                        res(i) = %T;
+                        break;
+                    end
+
+                end
+
+            end
+
+        end
+
+    end
+
 endfunction
index 97a698a..40638da 100644 (file)
@@ -12,7 +12,7 @@
 // Output arguments :
 
 //   res  :  .%T if the toolbox is loaded in this scilab session
-//           . Matrix of boolean ( n x 1 ) 
+//           . Matrix of boolean ( n x 1 )
 //           . mandatory
 
 //   version_out : . If the toolbox is loaded, version_out is the version of the
 //                 . mandatory
 
 function [res,version_out] = atomsIsLoaded(packages)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs         = argn(2);
-       lhs         = argn(1);
-       res         = [];
-       version_out = [];
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs <> 1 then
-               error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsIsLoaded",1));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsLoaded",1));
-       end
-       
-       if size(packages(1,:),"*") > 3 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1,mx2 or mx3 string matrix expected.\n"),"atomsIsLoaded",1));
-       end
-       
-       // Complete packages matrix with empty columns to have a mx3 matrix
-       // =========================================================================
-       
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
-       
-       elseif size(packages(1,:),"*") == 2 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       end
-       
-       // Get the list of installed packages
-       // =========================================================================
-       loadedpackages = atomsGetLoaded();
-       
-       // Loop on name
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               name    = packages(i,1);
-               version = packages(i,2);
-               section = packages(i,3);
-               res(i)  = %F;
-               
-               if packages(i,3) == "all" then
-                       section = "";
-               else
-                       section = packages(i,3);
-               end
-               
-               if isempty(version) & isempty(section) then
-                       // Just check the name
-                       res(i) = or(loadedpackages(:,1) == name);
-                       
-               elseif isempty(version) & ~isempty(section) then
-                       // Filter on names
-                       packages_filtered = loadedpackages( find(loadedpackages(:,1) == name) , 3 );
-                       
-                       // Check if the wanted section is present
-                       res(i) = or(packages_filtered == section);
-                       
-               elseif ~isempty(version) & isempty(section) then
-                       // Filter on names
-                       packages_filtered = loadedpackages( find(loadedpackages(:,1) == name) , 2 );
-                       
-                       // Check if the wanted version is present
-                       res(i) = or(packages_filtered == version);
-                       
-                       // Filter on versions
-                       
-                       //  + The packaging version is mentioned
-                       if ~ isempty(strindex(version,"-")) then
-                               res(i) = or(packages_filtered == version);
-                       
-                       //  + The packaging version is not mentioned
-                       else
-                               // Loop on installed versions
-                               for j=1:size(packages_filtered,"*")
-                                       
-                                       if ~ isempty(strindex(packages_filtered(j),"-")) then
-                                               packages_filtered(j) = part(packages_filtered(j),1:strindex(packages_filtered(j),"-")-1);
-                                       end
-                                       
-                                       if version == packages_filtered(j) then
-                                               res(i) = %T;
-                                               break;
-                                       end
-                                       
-                               end
-                               
-                       end
-                       
-               else
-                       // Filter on names
-                       packages_filtered = loadedpackages( find(loadedpackages(:,1) == name) , [2 3] );
-                       
-                       // Filter on section
-                       packages_filtered = packages_filtered( find(packages_filtered(:,2) == section) , 1 );
-                       
-                       // Filter on versions
-                       
-                       //  + The packaging version is mentioned
-                       if ~ isempty(strindex(version,"-")) then
-                               res(i) = or(packages_filtered == version);
-                       
-                       //  + The packaging version is not mentioned
-                       else
-                               // Loop on installed versions
-                               for j=1:size(packages_filtered,"*")
-                                       
-                                       if ~ isempty(strindex(packages_filtered(j),"-")) then
-                                               packages_filtered(j) = part(packages_filtered(j),1:strindex(packages_filtered(j),"-")-1);
-                                       end
-                                       
-                                       if version == packages_filtered(j) then
-                                               res(i) = %T;
-                                               break;
-                                       end
-                                       
-                               end
-                               
-                       end
-                       
-               end
-               
-               if lhs>1 then
-                       if res(i) then
-                               version_out(i) = loadedpackages( find(loadedpackages(:,1) == name) , 2 )
-                       else
-                               version_out(i) = "";
-                       end
-               end
-               
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs         = argn(2);
+    lhs         = argn(1);
+    res         = [];
+    version_out = [];
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs <> 1 then
+        error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsIsLoaded",1));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsIsLoaded",1));
+    end
+
+    if size(packages(1,:),"*") > 3 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1,mx2 or mx3 string matrix expected.\n"),"atomsIsLoaded",1));
+    end
+
+    // Complete packages matrix with empty columns to have a mx3 matrix
+    // =========================================================================
+
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
+
+    elseif size(packages(1,:),"*") == 2 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    end
+
+    // Get the list of installed packages
+    // =========================================================================
+    loadedpackages = atomsGetLoaded();
+
+    // Loop on name
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        name    = packages(i,1);
+        version = packages(i,2);
+        section = packages(i,3);
+        res(i)  = %F;
+
+        if packages(i,3) == "all" then
+            section = "";
+        else
+            section = packages(i,3);
+        end
+
+        if isempty(version) & isempty(section) then
+            // Just check the name
+            res(i) = or(loadedpackages(:,1) == name);
+
+        elseif isempty(version) & ~isempty(section) then
+            // Filter on names
+            packages_filtered = loadedpackages( find(loadedpackages(:,1) == name) , 3 );
+
+            // Check if the wanted section is present
+            res(i) = or(packages_filtered == section);
+
+        elseif ~isempty(version) & isempty(section) then
+            // Filter on names
+            packages_filtered = loadedpackages( find(loadedpackages(:,1) == name) , 2 );
+
+            // Check if the wanted version is present
+            res(i) = or(packages_filtered == version);
+
+            // Filter on versions
+
+            //  + The packaging version is mentioned
+            if ~ isempty(strindex(version,"-")) then
+                res(i) = or(packages_filtered == version);
+
+            //  + The packaging version is not mentioned
+            else
+                // Loop on installed versions
+                for j=1:size(packages_filtered,"*")
+
+                    if ~ isempty(strindex(packages_filtered(j),"-")) then
+                        packages_filtered(j) = part(packages_filtered(j),1:strindex(packages_filtered(j),"-")-1);
+                    end
+
+                    if version == packages_filtered(j) then
+                        res(i) = %T;
+                        break;
+                    end
+
+                end
+
+            end
+
+        else
+            // Filter on names
+            packages_filtered = loadedpackages( find(loadedpackages(:,1) == name) , [2 3] );
+
+            // Filter on section
+            packages_filtered = packages_filtered( find(packages_filtered(:,2) == section) , 1 );
+
+            // Filter on versions
+
+            //  + The packaging version is mentioned
+            if ~ isempty(strindex(version,"-")) then
+                res(i) = or(packages_filtered == version);
+
+            //  + The packaging version is not mentioned
+            else
+                // Loop on installed versions
+                for j=1:size(packages_filtered,"*")
+
+                    if ~ isempty(strindex(packages_filtered(j),"-")) then
+                        packages_filtered(j) = part(packages_filtered(j),1:strindex(packages_filtered(j),"-")-1);
+                    end
+
+                    if version == packages_filtered(j) then
+                        res(i) = %T;
+                        break;
+                    end
+
+                end
+
+            end
+
+        end
+
+        if lhs>1 then
+            if res(i) then
+                version_out(i) = loadedpackages( find(loadedpackages(:,1) == name) , 2 )
+            else
+                version_out(i) = "";
+            end
+        end
+
+    end
+
 endfunction
index 473737d..63438e1 100644 (file)
 // display of the available toolboxes
 
 function atomsList()
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check input parameters
-       // =========================================================================
-       
-       rhs = argn(2);
-       
-       if rhs <> 0 then
-               error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"atomsInstall",0))
-       end
-       
-       // Get the list of available toolboxes
-       // =========================================================================
-       
-       packages_struct    = atomsDESCRIPTIONget();
-       
-       packages_list      = getfield(1,packages_struct);
-       packages_list(1:2) = [];
-       
-       packages_disp      = [];
-       
-       // Loop on package list
-       // =========================================================================
-       
-       for i=1:size(packages_list,"*")
-               
-               this_package_name = packages_list(i);
-               
-               // Get the list of versions compatibles with this version of Scilab
-               this_package_versions = atomsCompatibleVersions(packages_list(i));
-               
-               if isempty(this_package_versions) then
-                       continue;
-               end
-               
-               // Use the Most Recent Version
-               this_package_version = this_package_versions(1);
-               
-               // Get the details of this toolbox
-               this_package_details = atomsToolboxDetails([this_package_name,this_package_version]);
-               this_package_summary = this_package_details("Summary");
-               
-               packages_disp        = [ packages_disp ; this_package_name this_package_summary ];
-               
-       end
-       
-       // Loop on package list ... a second time
-       // =========================================================================
-       
-       for i=1:size(packages_disp(:,1),"*")
-               mprintf("% "+string(max(length(packages_disp(:,1))))+"s - %s\n",packages_disp(i,1),packages_disp(i,2));
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check input parameters
+    // =========================================================================
+
+    rhs = argn(2);
+
+    if rhs <> 0 then
+        error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"atomsInstall",0))
+    end
+
+    // Get the list of available toolboxes
+    // =========================================================================
+
+    packages_struct    = atomsDESCRIPTIONget();
+
+    packages_list      = getfield(1,packages_struct);
+    packages_list(1:2) = [];
+
+    packages_disp      = [];
+
+    // Loop on package list
+    // =========================================================================
+
+    for i=1:size(packages_list,"*")
+
+        this_package_name = packages_list(i);
+
+        // Get the list of versions compatibles with this version of Scilab
+        this_package_versions = atomsCompatibleVersions(packages_list(i));
+
+        if isempty(this_package_versions) then
+            continue;
+        end
+
+        // Use the Most Recent Version
+        this_package_version = this_package_versions(1);
+
+        // Get the details of this toolbox
+        this_package_details = atomsToolboxDetails([this_package_name,this_package_version]);
+        this_package_summary = this_package_details("Summary");
+
+        packages_disp        = [ packages_disp ; this_package_name this_package_summary ];
+
+    end
+
+    // Loop on package list ... a second time
+    // =========================================================================
+
+    for i=1:size(packages_disp(:,1),"*")
+        mprintf("% "+string(max(length(packages_disp(:,1))))+"s - %s\n",packages_disp(i,1),packages_disp(i,2));
+    end
+
 endfunction
index a604ac8..7e3201b 100644 (file)
 // Load one or several toolboxes
 
 function result = atomsLoad(packages)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Init the output argument
-       // =========================================================================
-       result = [];
-       
-       // Check ATOMSAUTOLOAD variable
-       // =========================================================================
-       if ~isdef("ATOMSAUTOLOAD") | (ATOMSAUTOLOAD<>%T) then
-               ATOMSAUTOLOAD = %F;
-       end
-       
-       // Check input parameters
-       // =========================================================================
-       
-       rhs = argn(2);
-       
-       if rhs <> 1 then
-               error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"atomsLoad",1,2))
-       end
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsLoad",1));
-       end
-       
-       if size(packages(1,:),"*") > 3 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1,mx2 or mx3 string matrix expected.\n"),"atomsLoad",1));
-       end
-       
-       packages = stripblanks(packages);
-       
-       // Complete packages matrix with empty columns
-       // =========================================================================
-       
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
-       
-       elseif size(packages(1,:),"*") == 2 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       end
-       
-       // Plan the path → 4th column
-       // =========================================================================
-       packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       // Verbose Mode ?
-       // =========================================================================
-       if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
-               ATOMSVERBOSE = %T;
-       else
-               ATOMSVERBOSE = %F;
-       end
-       
-       // Already loaded modules :
-       // =========================================================================
-       loaded = atomsLoadLoad();
-       nbAdd  = 0;
-       
-       // Loop on input parameter
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               // The module's installed version hasn't been specified or is empty
-               // → Set the MRV available
-               // =====================================================================
-               
-               if isempty(packages(i,2)) then
-                       
-                       if ~ isempty(packages(i,3)) then
-                               section = packages(i,3);
-                       
-                       else
-                               section = "all";
-                       
-                       end
-                       
-                       this_module_versions = atomsGetInstalledVers(packages(i,1),section);
-                       
-                       if isempty(this_module_versions) then
-                               if section == "all" then
-                                       error(msprintf(gettext("%s: Module ''%s'' is not installed.\n"),"atomsLoad",packages(i,1)));
-                               else
-                                       error(msprintf(gettext("%s: Module ''%s'' is not installed (''%s'' section).\n"),"atomsLoad",packages(i,1),section));
-                               end
-                       else
-                               packages(i,2) = this_module_versions(1);
-                       end
-                       
-               else
-                       
-                       if ~atomsIsInstalled([packages(i,1) packages(i,2)]) then
-                               error(msprintf(gettext("%s: Module ''%s - %s'' is not installed.\n"),"atomsLoad",packages(i,1),packages(i,2)));
-                       end
-                       
-                       // If the packaging version is not mentioned, define it
-                       if isempty(strindex(packages(i,2),"-")) then
-                               this_package_details = atomsGetInstalledDetails([packages(i,1) packages(i,2) packages(i,3)]);
-                               packages(i,2)        = this_package_details(2);
-                       end
-                       
-               end
-               
-               // The module's installed section hasn't been specified or is empty
-               // → If the module (same name/same version) is installed in both sections,
-               //   module installed in the "user" section is taken
-               // =====================================================================
-               
-               if isempty(packages(i,3)) then
-                       
-                       sections = ["user","allusers"];
-                       
-                       for j=1:size(sections,"*")
-                               if atomsIsInstalled([packages(i,1) packages(i,2)],sections(j)) then
-                                       packages(i,3) = sections(j);
-                               end
-                       end
-                       
-               else
-               
-                       // Check if modules are installed
-                       if ~ atomsIsInstalled([packages(i,1) packages(i,2)],packages(i,3)) then
-                               mprintf(gettext("%s: The following modules are not installed:\n"),"atomsAutoloadAdd");
-                               mprintf("\t - ''%s - %s'' (''%s'' section)\n",packages(i,1),packages(i,2),packages(i,3));
-                               error("");
-                       end
-                       
-               end
-               
-               // Get the installed path
-               // =====================================================================
-               packages(i,4) = atomsGetInstalledPath([packages(i,1) packages(i,2) packages(i,3)]);
-               
-       end
-       
-       // Loop on packages gived by the user
-       // =========================================================================
-       
-       mandatory_packages      = struct();
-       mandatory_packages_name = struct();
-       mandatory_packages_mat  = [];
-       
-       for i=1:size(packages(:,1),"*")
-               
-               this_package_name    = packages(i,1);
-               this_package_version = packages(i,2);
-               this_package_section = packages(i,3);
-               this_package_path    = packages(i,4);
-               
-               // Check if the user try to load 2 versions of the same toolbox at the
-               // same time
-               // =====================================================================
-               if size( find( this_package_name == packages(:,1) ) > 1 ) then
-                       this_versions = packages( find( this_package_name == packages(:,1) ) , 2 );
-                       for j=2:size(this_versions,"*")
-                               if this_versions(j) <> this_versions(1) then
-                                       mprintf(gettext("%s: Several versions of a package (%s) cannot be loaded at the same scilab session :\n"),"atomsLoad",this_package_name);
-                                       mprintf(gettext("\t - You''ve asked ''%s - %s''\n"),this_package_name,this_versions(1));
-                                       mprintf(gettext("\t - You''ve asked ''%s - %s''\n"),this_package_name,this_versions(j));
-                                       mprintf("\n");
-                                       
-                                       if ATOMSAUTOLOAD then
-                                               return;
-                                       else
-                                               error("");
-                                       end
-                               end
-                       end
-               end
-               
-               // Check if this toolbox is already loaded
-               // =====================================================================
-               if atomsIsLoaded([this_package_name this_package_version]) then
-                       atomsDisp(msprintf("\tThe package %s (%s) is already loaded\n\n",this_package_name,this_package_version));
-                       continue;
-               end
-               
-               // Check if another version of this toolbox is already loaded
-               // =====================================================================
-               [is_loaded,loaded_version] =  atomsIsLoaded(this_package_name);
-               if is_loaded then
-                       if ATOMSAUTOLOAD then
-                               mprintf(gettext("%s: Another version of the package %s is already loaded : %s\n"),"atomsLoad",this_package_name,loaded_version);
-                       else
-                               error(msprintf(gettext("%s: Another version of the package %s is already loaded : %s\n"),"atomsLoad",this_package_name,loaded_version));
-                       end
-                       continue;
-               end
-               
-               mandatory_packages(this_package_name+" - "+this_package_version) = "asked_by_user";
-               mandatory_packages_name(this_package_name) = this_package_version;
-               mandatory_packages_mat = [ mandatory_packages_mat ; this_package_name this_package_version this_package_section this_package_path ];
-               
-       end
-       
-       // Fill the list of package to load
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               this_package_name    = packages(i,1);
-               this_package_version = packages(i,2);
-               this_package_section = packages(i,3);
-               this_package_path    = packages(i,4);
-               
-               childs = atomsGetDepChilds([this_package_name this_package_version]);
-               
-               for j=1:size( childs(:,1) , "*")
-                       
-                       // Check if it is already loaded
-                       // -------------------------------------------------------
-                       if atomsIsLoaded(childs(j,:)) then
-                               continue;
-                       end
-                       
-                       // Check if another version of this package is already loaded
-                       // -------------------------------------------------------
-                       [is_loaded,loaded_version] =  atomsIsLoaded(childs(j,1));
-                       if is_loaded then
-                               mprintf(gettext("%s: Several versions of a package (%s) cannot be loaded at the same scilab session :\n"),"atomsLoad",childs(j,1));
-                               mprintf(gettext("\t - ''%s - %s'' is already loaded\n"),childs(j,1),loaded_version);
-                               mprintf(gettext("\t - ''%s - %s'' is needed by ''%s - %s''\n"),childs(j,1),childs(j,2),this_package_name,this_package_version);
-                               mprintf("\n");
-                               
-                               if ATOMSAUTOLOAD then
-                                       return;
-                               else
-                                       error("");
-                               end
-                       end
-                       
-                       // Check if it is already in the list
-                       // -------------------------------------------------------
-                       if isfield( mandatory_packages , childs(j,1)+" - "+childs(j,2) ) then
-                               continue;
-                       end
-                       
-                       // Check if another version is already in the list
-                       // -------------------------------------------------------
-                       if isfield( mandatory_packages_name , childs(j,1) ) then
-                               
-                               // if it's not the name version => error
-                               if mandatory_packages_name(childs(j,1)) <> childs(j,2) then
-                                       
-                                       mprintf(gettext("%s: Several versions of a package (%s) cannot be loaded at the same scilab session :\n"),"atomsLoad",childs(j,1));
-                                       mprintf(gettext("\t - ''%s - %s'' is needed by ''%s - %s''\n"),childs(j,1),childs(j,2),packages(i,1),packages(i,2));
-                                       
-                                       // The other version of the package is asked by the user
-                                       if mandatory_packages(childs(j,1)+" - "+mandatory_packages_name(childs(j,1))) == "asked_by_user" then
-                                               mprintf(gettext("\t - You''ve asked ''%s - %s''\n"),childs(j,1),mandatory_packages_name(childs(j,1)));
-                                       
-                                       // The other version of the package is a need by another package
-                                       else
-                                               mprintf(gettext("\t - ''%s - %s'' is needed by ''%s''\n"), .. 
-                                                       childs(j,1), .. // name
-                                                       mandatory_packages_name(childs(j,1)), .. // version
-                                                       mandatory_packages(childs(j,1)+" - "+mandatory_packages_name(childs(j,1))) .. // name - version
-                                                       );
-                                       end
-                                       
-                                       mprintf("\n");
-                                       if ATOMSAUTOLOAD then
-                                               return;
-                                       else
-                                               error("");
-                                       end
-                               end
-                       end
-                       
-                       // The child has passed the test, add it to the mandatory
-                       // packages to load
-                       // -------------------------------------------------------
-                       
-                       mandatory_packages(childs(j,1)+" - "+childs(j,2)) = packages(i,1)+" - "+packages(i,2);
-                       mandatory_packages_name(childs(j,1)) = childs(j,2);
-                       mandatory_packages_mat = [ mandatory_packages_mat ; childs(j,1) childs(j,2) this_package_section atomsGetInstalledPath(childs(j,:),this_package_section) ];
-                       
-               end
-       end
-       
-       // Libraries to resume
-       // =========================================================================
-       libs_resume = [];
-       
-       if ~ isempty(mandatory_packages_mat) then
-               mprintf("\n");
-       end
-       
-       for i=1:size(mandatory_packages_mat(:,1),"*")
-               
-               this_package_name    = mandatory_packages_mat(i,1);
-               this_package_version = mandatory_packages_mat(i,2);
-               this_package_section = mandatory_packages_mat(i,3);
-               this_package_path    = mandatory_packages_mat(i,4);
-               
-               // Get the list of lib
-               // =====================================================================
-               libs_before = librarieslist();
-               
-               // Exec the loader
-               // =====================================================================
-               
-               loader_file = pathconvert(this_package_path) + "loader.sce";
-               
-               if fileinfo(loader_file)==[] then
-                       if ATOMSAUTOLOAD then
-                               mprintf(gettext("%s: The file ''%s'' doesn''t exist or is not read accessible.\n"),"atomsLoad",loader_file);
-                               return;
-                       else
-                               error(msprintf(gettext("%s: The file ''%s'' doesn''t exist or is not read accessible.\n"),"atomsLoad",loader_file));
-                       end
-               end
-               
-               ierr = execstr("exec(loader_file,-1)","errcatch");
-               
-               if ierr > 0 then
-                       mprintf(gettext("%s: An error occurred while loading ''%s-%s'':\n"),"atomsLoad",this_package_name,this_package_version);
-                       errormsg = lasterror(%T);
-                       mprintf("\t%s\n",errormsg);
-                       if ATOMSAUTOLOAD then
-                               continue;
-                       else
-                               error("");
-                       end
-               end
-               
-               mprintf("\n");
-               
-               // Get the list of libraries (macros)
-               // =====================================================================
-               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 ; mandatory_packages_mat(i,:) ];
-               
-               // fill the loaded matrix
-               // =====================================================================
-               
-               if and(loaded(:,1) <> this_package_name) then
-                       nbAdd  = nbAdd + 1;
-                       loaded = [ loaded ; this_package_name this_package_version this_package_section ];
-               end
-               
-       end
-       
-       // Apply changes
-       // =========================================================================
-       if nbAdd > 0 then
-               atomsLoadSave(loaded);
-       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);
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Init the output argument
+    // =========================================================================
+    result = [];
+
+    // Check ATOMSAUTOLOAD variable
+    // =========================================================================
+    if ~isdef("ATOMSAUTOLOAD") | (ATOMSAUTOLOAD<>%T) then
+        ATOMSAUTOLOAD = %F;
+    end
+
+    // Check input parameters
+    // =========================================================================
+
+    rhs = argn(2);
+
+    if rhs <> 1 then
+        error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"atomsLoad",1,2))
+    end
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsLoad",1));
+    end
+
+    if size(packages(1,:),"*") > 3 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1,mx2 or mx3 string matrix expected.\n"),"atomsLoad",1));
+    end
+
+    packages = stripblanks(packages);
+
+    // Complete packages matrix with empty columns
+    // =========================================================================
+
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
+
+    elseif size(packages(1,:),"*") == 2 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    end
+
+    // Plan the path → 4th column
+    // =========================================================================
+    packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    // Verbose Mode ?
+    // =========================================================================
+    if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
+        ATOMSVERBOSE = %T;
+    else
+        ATOMSVERBOSE = %F;
+    end
+
+    // Already loaded modules :
+    // =========================================================================
+    loaded = atomsLoadLoad();
+    nbAdd  = 0;
+
+    // Loop on input parameter
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        // The module's installed version hasn't been specified or is empty
+        // → Set the MRV available
+        // =====================================================================
+
+        if isempty(packages(i,2)) then
+
+            if ~ isempty(packages(i,3)) then
+                section = packages(i,3);
+
+            else
+                section = "all";
+
+            end
+
+            this_module_versions = atomsGetInstalledVers(packages(i,1),section);
+
+            if isempty(this_module_versions) then
+                if section == "all" then
+                    error(msprintf(gettext("%s: Module ''%s'' is not installed.\n"),"atomsLoad",packages(i,1)));
+                else
+                    error(msprintf(gettext("%s: Module ''%s'' is not installed (''%s'' section).\n"),"atomsLoad",packages(i,1),section));
+                end
+            else
+                packages(i,2) = this_module_versions(1);
+            end
+
+        else
+
+            if ~atomsIsInstalled([packages(i,1) packages(i,2)]) then
+                error(msprintf(gettext("%s: Module ''%s - %s'' is not installed.\n"),"atomsLoad",packages(i,1),packages(i,2)));
+            end
+
+            // If the packaging version is not mentioned, define it
+            if isempty(strindex(packages(i,2),"-")) then
+                this_package_details = atomsGetInstalledDetails([packages(i,1) packages(i,2) packages(i,3)]);
+                packages(i,2)        = this_package_details(2);
+            end
+
+        end
+
+        // The module's installed section hasn't been specified or is empty
+        // → If the module (same name/same version) is installed in both sections,
+        //   module installed in the "user" section is taken
+        // =====================================================================
+
+        if isempty(packages(i,3)) then
+
+            sections = ["user","allusers"];
+
+            for j=1:size(sections,"*")
+                if atomsIsInstalled([packages(i,1) packages(i,2)],sections(j)) then
+                    packages(i,3) = sections(j);
+                end
+            end
+
+        else
+
+            // Check if modules are installed
+            if ~ atomsIsInstalled([packages(i,1) packages(i,2)],packages(i,3)) then
+                mprintf(gettext("%s: The following modules are not installed:\n"),"atomsAutoloadAdd");
+                mprintf("\t - ''%s - %s'' (''%s'' section)\n",packages(i,1),packages(i,2),packages(i,3));
+                error("");
+            end
+
+        end
+
+        // Get the installed path
+        // =====================================================================
+        packages(i,4) = atomsGetInstalledPath([packages(i,1) packages(i,2) packages(i,3)]);
+
+    end
+
+    // Loop on packages gived by the user
+    // =========================================================================
+
+    mandatory_packages      = struct();
+    mandatory_packages_name = struct();
+    mandatory_packages_mat  = [];
+
+    for i=1:size(packages(:,1),"*")
+
+        this_package_name    = packages(i,1);
+        this_package_version = packages(i,2);
+        this_package_section = packages(i,3);
+        this_package_path    = packages(i,4);
+
+        // Check if the user try to load 2 versions of the same toolbox at the
+        // same time
+        // =====================================================================
+        if size( find( this_package_name == packages(:,1) ) > 1 ) then
+            this_versions = packages( find( this_package_name == packages(:,1) ) , 2 );
+            for j=2:size(this_versions,"*")
+                if this_versions(j) <> this_versions(1) then
+                    mprintf(gettext("%s: Several versions of a package (%s) cannot be loaded at the same scilab session :\n"),"atomsLoad",this_package_name);
+                    mprintf(gettext("\t - You''ve asked ''%s - %s''\n"),this_package_name,this_versions(1));
+                    mprintf(gettext("\t - You''ve asked ''%s - %s''\n"),this_package_name,this_versions(j));
+                    mprintf("\n");
+
+                    if ATOMSAUTOLOAD then
+                        return;
+                    else
+                        error("");
+                    end
+                end
+            end
+        end
+
+        // Check if this toolbox is already loaded
+        // =====================================================================
+        if atomsIsLoaded([this_package_name this_package_version]) then
+            atomsDisp(msprintf("\tThe package %s (%s) is already loaded\n\n",this_package_name,this_package_version));
+            continue;
+        end
+
+        // Check if another version of this toolbox is already loaded
+        // =====================================================================
+        [is_loaded,loaded_version] =  atomsIsLoaded(this_package_name);
+        if is_loaded then
+            if ATOMSAUTOLOAD then
+                mprintf(gettext("%s: Another version of the package %s is already loaded : %s\n"),"atomsLoad",this_package_name,loaded_version);
+            else
+                error(msprintf(gettext("%s: Another version of the package %s is already loaded : %s\n"),"atomsLoad",this_package_name,loaded_version));
+            end
+            continue;
+        end
+
+        mandatory_packages(this_package_name+" - "+this_package_version) = "asked_by_user";
+        mandatory_packages_name(this_package_name) = this_package_version;
+        mandatory_packages_mat = [ mandatory_packages_mat ; this_package_name this_package_version this_package_section this_package_path ];
+
+    end
+
+    // Fill the list of package to load
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        this_package_name    = packages(i,1);
+        this_package_version = packages(i,2);
+        this_package_section = packages(i,3);
+        this_package_path    = packages(i,4);
+
+        childs = atomsGetDepChilds([this_package_name this_package_version]);
+
+        for j=1:size( childs(:,1) , "*")
+
+            // Check if it is already loaded
+            // -------------------------------------------------------
+            if atomsIsLoaded(childs(j,:)) then
+                continue;
+            end
+
+            // Check if another version of this package is already loaded
+            // -------------------------------------------------------
+            [is_loaded,loaded_version] =  atomsIsLoaded(childs(j,1));
+            if is_loaded then
+                mprintf(gettext("%s: Several versions of a package (%s) cannot be loaded at the same scilab session :\n"),"atomsLoad",childs(j,1));
+                mprintf(gettext("\t - ''%s - %s'' is already loaded\n"),childs(j,1),loaded_version);
+                mprintf(gettext("\t - ''%s - %s'' is needed by ''%s - %s''\n"),childs(j,1),childs(j,2),this_package_name,this_package_version);
+                mprintf("\n");
+
+                if ATOMSAUTOLOAD then
+                    return;
+                else
+                    error("");
+                end
+            end
+
+            // Check if it is already in the list
+            // -------------------------------------------------------
+            if isfield( mandatory_packages , childs(j,1)+" - "+childs(j,2) ) then
+                continue;
+            end
+
+            // Check if another version is already in the list
+            // -------------------------------------------------------
+            if isfield( mandatory_packages_name , childs(j,1) ) then
+
+                // if it's not the name version => error
+                if mandatory_packages_name(childs(j,1)) <> childs(j,2) then
+
+                    mprintf(gettext("%s: Several versions of a package (%s) cannot be loaded at the same scilab session :\n"),"atomsLoad",childs(j,1));
+                    mprintf(gettext("\t - ''%s - %s'' is needed by ''%s - %s''\n"),childs(j,1),childs(j,2),packages(i,1),packages(i,2));
+
+                    // The other version of the package is asked by the user
+                    if mandatory_packages(childs(j,1)+" - "+mandatory_packages_name(childs(j,1))) == "asked_by_user" then
+                        mprintf(gettext("\t - You''ve asked ''%s - %s''\n"),childs(j,1),mandatory_packages_name(childs(j,1)));
+
+                    // The other version of the package is a need by another package
+                    else
+                        mprintf(gettext("\t - ''%s - %s'' is needed by ''%s''\n"), ..
+                            childs(j,1), .. // name
+                            mandatory_packages_name(childs(j,1)), .. // version
+                            mandatory_packages(childs(j,1)+" - "+mandatory_packages_name(childs(j,1))) .. // name - version
+                            );
+                    end
+
+                    mprintf("\n");
+                    if ATOMSAUTOLOAD then
+                        return;
+                    else
+                        error("");
+                    end
+                end
+            end
+
+            // The child has passed the test, add it to the mandatory
+            // packages to load
+            // -------------------------------------------------------
+
+            mandatory_packages(childs(j,1)+" - "+childs(j,2)) = packages(i,1)+" - "+packages(i,2);
+            mandatory_packages_name(childs(j,1)) = childs(j,2);
+            mandatory_packages_mat = [ mandatory_packages_mat ; childs(j,1) childs(j,2) this_package_section atomsGetInstalledPath(childs(j,:),this_package_section) ];
+
+        end
+    end
+
+    // Libraries to resume
+    // =========================================================================
+    libs_resume = [];
+
+    if ~ isempty(mandatory_packages_mat) then
+        mprintf("\n");
+    end
+
+    for i=1:size(mandatory_packages_mat(:,1),"*")
+
+        this_package_name    = mandatory_packages_mat(i,1);
+        this_package_version = mandatory_packages_mat(i,2);
+        this_package_section = mandatory_packages_mat(i,3);
+        this_package_path    = mandatory_packages_mat(i,4);
+
+        // Get the list of lib
+        // =====================================================================
+        libs_before = librarieslist();
+
+        // Exec the loader
+        // =====================================================================
+
+        loader_file = pathconvert(this_package_path) + "loader.sce";
+
+        if fileinfo(loader_file)==[] then
+            if ATOMSAUTOLOAD then
+                mprintf(gettext("%s: The file ''%s'' doesn''t exist or is not read accessible.\n"),"atomsLoad",loader_file);
+                return;
+            else
+                error(msprintf(gettext("%s: The file ''%s'' doesn''t exist or is not read accessible.\n"),"atomsLoad",loader_file));
+            end
+        end
+
+        ierr = execstr("exec(loader_file,-1)","errcatch");
+
+        if ierr > 0 then
+            mprintf(gettext("%s: An error occurred while loading ''%s-%s'':\n"),"atomsLoad",this_package_name,this_package_version);
+            errormsg = lasterror(%T);
+            mprintf("\t%s\n",errormsg);
+            if ATOMSAUTOLOAD then
+                continue;
+            else
+                error("");
+            end
+        end
+
+        mprintf("\n");
+
+        // Get the list of libraries (macros)
+        // =====================================================================
+        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 ; mandatory_packages_mat(i,:) ];
+
+        // fill the loaded matrix
+        // =====================================================================
+
+        if and(loaded(:,1) <> this_package_name) then
+            nbAdd  = nbAdd + 1;
+            loaded = [ loaded ; this_package_name this_package_version this_package_section ];
+        end
+
+    end
+
+    // Apply changes
+    // =========================================================================
+    if nbAdd > 0 then
+        atomsLoadSave(loaded);
+    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);
+
 endfunction
index 3ee380d..30af0dc 100644 (file)
 // Remove a toolbox
 
 function result = atomsRemove(packages,section)
-       
-       result = [];
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       // Save the initial path
-       // =========================================================================
-       ATOMSINITIALPATH = pwd();
-       
-       // Get scilab version (needed for later)
-       // =========================================================================
-       sciversion = strcat(string(getversion('scilab')) + ".");
-       
-       // Check input parameters
-       // =========================================================================
-       
-       rhs = argn(2);
-       
-       if rhs < 1 | rhs > 2 then
-               error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsRemove",1,2))
-       end
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRemove",1));
-       end
-       
-       if size(packages(1,:),"*") > 2 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1 or mx2 string matrix expected.\n"),"atomsInstall",1));
-       end
-       
-       packages = stripblanks(packages);
-       
-       // If mx1 matrix, add a 2nd column with empty versions
-       // =========================================================================
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       end
-       
-       // Operating system detection + Architecture detection
-       // =========================================================================
-       [OSNAME,ARCH,LINUX,MACOSX,SOLARIS,BSD] = atomsGetPlatform();
-       
-       // Verbose Mode ?
-       // =========================================================================
-       if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
-               ATOMSVERBOSE = %T;
-       else
-               ATOMSVERBOSE = %F;
-       end
-       
-       // Allusers/user management
-       //   - If section is equal to "all" or to True, packages located in both 
-       //     "allusers" and "user" sections will removed.
-       //   - If section is equal to "allusers", only packages located in the
-       //     "allusers" section will be removed.
-       //   - If section is equal to "user" or to False, only packages located in 
-       //     the "user" will be removed
-       // =========================================================================
-       
-       if rhs <= 1 then
-               
-               // By default: 
-               //  → Remove packages located in both "allusers" and "user" sections if
-               //    we have the write access to SCI directory
-               //  → Remove only package located in the "user" sections otherwise
-               
-               if ATOMSALLUSERSWRITEACCESS then
-                       section = "all"; 
-               else
-                       section = "user";
-               end
-               
-       else
-               
-               // Process the 2nd input argument : section
-               // Allusers can be a boolean or equal to "user" or "allusers"
-               
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsRemove",2));
-               end
-               
-               if and(section<>["user","allusers","all"]) then
-                       error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' or ''all'' expected.\n"),"atomsRemove",1));
-               end
-               
-               // Check if we have the write access
-               if or(section==["all","allusers"]) & ~ ATOMSALLUSERSWRITEACCESS then
-                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsRemove",2,atomsPath("system","user")));
-               end
-       end
-       
-       // Some checking on packages variable
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               package_names(i)    = packages(i,1);
-               package_versions(i) = packages(i,2);
-               
-               // Check if this package is installed
-               if ~ atomsIsInstalled([package_names(i) package_versions(i)],section) then
-                       
-                       // Print a warning if the package isn't installed
-                       
-                       if isempty(package_versions(i)) then
-                               atomsDisp(msprintf("\t%s isn''t installed\n\n",package_names(i)));
-                       else
-                               atomsDisp(msprintf("\t%s (%s) isn''t installed\n\n",package_names(i),package_versions(i)));
-                       end
-               
-               elseif (section=="user") & (~ isempty(package_versions(i)) ) then
-                       
-                       // The package is installed, now check if we have the right to
-                       // uninstall it
-                       
-                       installed_details = atomsGetInstalledDetails(packages(i,:),section);
-                       
-                       if installed_details(3) == "allusers" then
-                               error(msprintf(gettext("%s: You have not enough rights to remove the package %s (%s).\n"),"atomsRemove",package_names(i),package_versions(i)));
-                       end
-               
-               elseif (section=="user") & isempty(package_versions(i)) then
-                       
-                       // Check if we have the right to remove at least one of the version
-                       // of the package
-                       if isempty(atomsGetInstalledVers(package_names(i),section)) then
-                               error(msprintf(gettext("%s: You have not enough rights to remove any version of the package %s.\n"),"atomsRemove",package_names(i)));
-                       end
-                       
-               end
-               
-       end
-       
-       // Build the list of package to Uninstall
-       // =========================================================================
-       remove_package_list = atomsRemoveList(packages,section);
-       
-       // Loop on remList to print if a package has to be remove
-       // or not
-       // =========================================================================
-       if ATOMSVERBOSE 
-               for i=1:size(remove_package_list(:,1),"*")
-                       if remove_package_list(i,1) == "-" then
-                               atomsDisp(msprintf("\t%s (%s) will be removed from the ''%s'' section\n\n",remove_package_list(i,3),remove_package_list(i,4),remove_package_list(i,5)));
-                       elseif (remove_package_list(i,1) == "~") & (remove_package_list(i,1) == "B") then
-                               atomsDisp(msprintf("\t%s (%s) cannot be removed from the ''%s'' section and will be broken\n\n",remove_package_list(i,3),remove_package_list(i,4),remove_package_list(i,5)));
-                       end
-               end
-       end
-       
-       // Now we have the list of package that have to be uninstalled
-       // =========================================================================
-       
-       for i=1:size(remove_package_list(:,1),"*")
-               
-               // If the package must be keeped, the job is done
-               if remove_package_list(i,1) <> "-" then
-                       continue;
-               end
-               
-               this_package_name      = remove_package_list(i,3);
-               this_package_version   = remove_package_list(i,4);
-               this_package_section   = remove_package_list(i,5);
-               
-               this_package_details   = atomsToolboxDetails([this_package_name this_package_version]);
-               this_package_insdet    = atomsGetInstalledDetails([this_package_name this_package_version],section);
-               this_package_directory = this_package_insdet(4);
-               
-               // Add the package to list of package to remove
-               atomsToremoveRegister(this_package_name,this_package_version,this_package_section);
-               
-               // Check if the package is loaded or not
-               if atomsIsLoaded([this_package_name this_package_version]) then
-                       mprintf( "\tthe package %s (%s) is currently loaded, It will be removed at next Scilab start\n" , this_package_name , this_package_version );
-                       continue;
-               end
-               
-               atomsDisp(msprintf( "\tRemoving %s (%s)(%s) ... " , this_package_name , this_package_version , this_package_section));
-               
-               // Check if this_package_directory start with SCI or SCIHOME
-               
-               if  (grep(this_package_directory,pathconvert(SCI)) == []) & ..
-                       (grep(this_package_directory,pathconvert(SCIHOME)) == []) &..
-                       (grep(this_package_directory,"/^(SCI|SCIHOME)\"+filesep()+"/","r") == []) then
-                       
-                       atomsError("error", ..
-                               msprintf( ..
-                                       gettext("%s: The directory of this package (%s-%s) is located neither in SCI nor in SCIHOME. For security reason, ATOMS refuses to delete this directory.\n"), ..
-                                               "atomsRemove", ..
-                                               this_package_name, ..
-                                               this_package_version));
-               end
-               
-               if isdir(this_package_directory) then
-                       
-                       uninstall_status = rmdir(this_package_directory,"s");
-                       
-                       if uninstall_status<>1 then
-                               atomsError("error", ..
-                                       msprintf( ..
-                                               gettext("%s: The directory of this package (%s-%s) cannot been deleted, please check if you have write access on this directory : %s.\n"), ..
-                                               "atomsRemove", ..
-                                               this_package_name, ..
-                                               this_package_version, ..
-                                               strsubst(this_package_directory,"\","\\") ));
-                       end
-                       
-               end
-               
-               // Check if the parent directory (directory name == toolbox name ) is empty 
-               // If yes, delete it
-               // =====================================================================
-               this_package_root_dir = part(this_package_directory,1:length(pathconvert(this_package_directory)) - length(this_package_version) - 1 );
-               
-               if isdir(this_package_root_dir) & listfiles(this_package_root_dir)==[] then
-                       stat = rmdir(this_package_root_dir);
-                       if stat<>1 then
-                               atomsError("error", ..
-                                       msprintf( ..
-                                               gettext("%s: The root directory of this package (%s-%s) cannot been deleted, please check if you have write access on this directory : %s.\n"), ..
-                                               "atomsRemove", ..
-                                               this_package_name, ..
-                                               this_package_version, ..
-                                               strsubst(this_package_root_dir,"\","\\") ));
-                       end
-               end
-               
-               // Remove this toolbox from the list of installed packages
-               // =====================================================================
-               atomsInstallUnregister(this_package_name,this_package_version,this_package_section);
-               
-               // Remove this toolbox from the list of autoloaded packages
-               // =====================================================================
-               atomsAutoloadDel([this_package_name this_package_version this_package_section]);
-               
-               // Remove it from the DESCRIPTION_installed file
-               // =====================================================================
-               
-               DESCRIPTION_file = atomsPath("system",this_package_insdet(3)) + "DESCRIPTION_installed";
-               
-               if ~ isempty(fileinfo(DESCRIPTION_file)) then
-                       DESCRIPTION = atomsDESCRIPTIONread(DESCRIPTION_file);
-                       DESCRIPTION = atomsDESCRIPTIONrm(DESCRIPTION,this_package_name,this_package_version);
-                       atomsDESCRIPTIONwrite(DESCRIPTION,DESCRIPTION_file);
-               end
-               
-               // Del the package from the list of package to remove
-               // =====================================================================
-               atomsToremoveUnregister(this_package_name,this_package_version,this_package_section);
-               
-               // Fill the result matrix
-               // =====================================================================
-               result = [ result ; this_package_insdet ];
-               
-               // Sucess message if needed
-               // =====================================================================
-               atomsDisp(msprintf(" success\n\n"));
-       end
-       
-       // Go to the initial location
-       chdir(ATOMSINITIALPATH);
-       
+
+    result = [];
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
+
+    // Save the initial path
+    // =========================================================================
+    ATOMSINITIALPATH = pwd();
+
+    // Get scilab version (needed for later)
+    // =========================================================================
+    sciversion = strcat(string(getversion('scilab')) + ".");
+
+    // Check input parameters
+    // =========================================================================
+
+    rhs = argn(2);
+
+    if rhs < 1 | rhs > 2 then
+        error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsRemove",1,2))
+    end
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRemove",1));
+    end
+
+    if size(packages(1,:),"*") > 2 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1 or mx2 string matrix expected.\n"),"atomsInstall",1));
+    end
+
+    packages = stripblanks(packages);
+
+    // If mx1 matrix, add a 2nd column with empty versions
+    // =========================================================================
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+    end
+
+    // Operating system detection + Architecture detection
+    // =========================================================================
+    [OSNAME,ARCH,LINUX,MACOSX,SOLARIS,BSD] = atomsGetPlatform();
+
+    // Verbose Mode ?
+    // =========================================================================
+    if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
+        ATOMSVERBOSE = %T;
+    else
+        ATOMSVERBOSE = %F;
+    end
+
+    // Allusers/user management
+    //   - If section is equal to "all" or to True, packages located in both
+    //     "allusers" and "user" sections will removed.
+    //   - If section is equal to "allusers", only packages located in the
+    //     "allusers" section will be removed.
+    //   - If section is equal to "user" or to False, only packages located in
+    //     the "user" will be removed
+    // =========================================================================
+
+    if rhs <= 1 then
+
+        // By default:
+        //  → Remove packages located in both "allusers" and "user" sections if
+        //    we have the write access to SCI directory
+        //  → Remove only package located in the "user" sections otherwise
+
+        if ATOMSALLUSERSWRITEACCESS then
+            section = "all";
+        else
+            section = "user";
+        end
+
+    else
+
+        // Process the 2nd input argument : section
+        // Allusers can be a boolean or equal to "user" or "allusers"
+
+        if type(section) <> 10 then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsRemove",2));
+        end
+
+        if and(section<>["user","allusers","all"]) then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' or ''all'' expected.\n"),"atomsRemove",1));
+        end
+
+        // Check if we have the write access
+        if or(section==["all","allusers"]) & ~ ATOMSALLUSERSWRITEACCESS then
+            error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsRemove",2,atomsPath("system","user")));
+        end
+    end
+
+    // Some checking on packages variable
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        package_names(i)    = packages(i,1);
+        package_versions(i) = packages(i,2);
+
+        // Check if this package is installed
+        if ~ atomsIsInstalled([package_names(i) package_versions(i)],section) then
+
+            // Print a warning if the package isn't installed
+
+            if isempty(package_versions(i)) then
+                atomsDisp(msprintf("\t%s isn''t installed\n\n",package_names(i)));
+            else
+                atomsDisp(msprintf("\t%s (%s) isn''t installed\n\n",package_names(i),package_versions(i)));
+            end
+
+        elseif (section=="user") & (~ isempty(package_versions(i)) ) then
+
+            // The package is installed, now check if we have the right to
+            // uninstall it
+
+            installed_details = atomsGetInstalledDetails(packages(i,:),section);
+
+            if installed_details(3) == "allusers" then
+                error(msprintf(gettext("%s: You have not enough rights to remove the package %s (%s).\n"),"atomsRemove",package_names(i),package_versions(i)));
+            end
+
+        elseif (section=="user") & isempty(package_versions(i)) then
+
+            // Check if we have the right to remove at least one of the version
+            // of the package
+            if isempty(atomsGetInstalledVers(package_names(i),section)) then
+                error(msprintf(gettext("%s: You have not enough rights to remove any version of the package %s.\n"),"atomsRemove",package_names(i)));
+            end
+
+        end
+
+    end
+
+    // Build the list of package to Uninstall
+    // =========================================================================
+    remove_package_list = atomsRemoveList(packages,section);
+
+    // Loop on remList to print if a package has to be remove
+    // or not
+    // =========================================================================
+    if ATOMSVERBOSE
+        for i=1:size(remove_package_list(:,1),"*")
+            if remove_package_list(i,1) == "-" then
+                atomsDisp(msprintf("\t%s (%s) will be removed from the ''%s'' section\n\n",remove_package_list(i,3),remove_package_list(i,4),remove_package_list(i,5)));
+            elseif (remove_package_list(i,1) == "~") & (remove_package_list(i,1) == "B") then
+                atomsDisp(msprintf("\t%s (%s) cannot be removed from the ''%s'' section and will be broken\n\n",remove_package_list(i,3),remove_package_list(i,4),remove_package_list(i,5)));
+            end
+        end
+    end
+
+    // Now we have the list of package that have to be uninstalled
+    // =========================================================================
+
+    for i=1:size(remove_package_list(:,1),"*")
+
+        // If the package must be keeped, the job is done
+        if remove_package_list(i,1) <> "-" then
+            continue;
+        end
+
+        this_package_name      = remove_package_list(i,3);
+        this_package_version   = remove_package_list(i,4);
+        this_package_section   = remove_package_list(i,5);
+
+        this_package_details   = atomsToolboxDetails([this_package_name this_package_version]);
+        this_package_insdet    = atomsGetInstalledDetails([this_package_name this_package_version],section);
+        this_package_directory = this_package_insdet(4);
+
+        // Add the package to list of package to remove
+        atomsToremoveRegister(this_package_name,this_package_version,this_package_section);
+
+        // Check if the package is loaded or not
+        if atomsIsLoaded([this_package_name this_package_version]) then
+            mprintf( "\tthe package %s (%s) is currently loaded, It will be removed at next Scilab start\n" , this_package_name , this_package_version );
+            continue;
+        end
+
+        atomsDisp(msprintf( "\tRemoving %s (%s)(%s) ... " , this_package_name , this_package_version , this_package_section));
+
+        // Check if this_package_directory start with SCI or SCIHOME
+
+        if  (grep(this_package_directory,pathconvert(SCI)) == []) & ..
+            (grep(this_package_directory,pathconvert(SCIHOME)) == []) &..
+            (grep(this_package_directory,"/^(SCI|SCIHOME)\"+filesep()+"/","r") == []) then
+
+            atomsError("error", ..
+                msprintf( ..
+                    gettext("%s: The directory of this package (%s-%s) is located neither in SCI nor in SCIHOME. For security reason, ATOMS refuses to delete this directory.\n"), ..
+                        "atomsRemove", ..
+                        this_package_name, ..
+                        this_package_version));
+        end
+
+        if isdir(this_package_directory) then
+
+            uninstall_status = rmdir(this_package_directory,"s");
+
+            if uninstall_status<>1 then
+                atomsError("error", ..
+                    msprintf( ..
+                        gettext("%s: The directory of this package (%s-%s) cannot been deleted, please check if you have write access on this directory : %s.\n"), ..
+                        "atomsRemove", ..
+                        this_package_name, ..
+                        this_package_version, ..
+                        strsubst(this_package_directory,"\","\\") ));
+            end
+
+        end
+
+        // Check if the parent directory (directory name == toolbox name ) is empty
+        // If yes, delete it
+        // =====================================================================
+        this_package_root_dir = part(this_package_directory,1:length(pathconvert(this_package_directory)) - length(this_package_version) - 1 );
+
+        if isdir(this_package_root_dir) & listfiles(this_package_root_dir)==[] then
+            stat = rmdir(this_package_root_dir);
+            if stat<>1 then
+                atomsError("error", ..
+                    msprintf( ..
+                        gettext("%s: The root directory of this package (%s-%s) cannot been deleted, please check if you have write access on this directory : %s.\n"), ..
+                        "atomsRemove", ..
+                        this_package_name, ..
+                        this_package_version, ..
+                        strsubst(this_package_root_dir,"\","\\") ));
+            end
+        end
+
+        // Remove this toolbox from the list of installed packages
+        // =====================================================================
+        atomsInstallUnregister(this_package_name,this_package_version,this_package_section);
+
+        // Remove this toolbox from the list of autoloaded packages
+        // =====================================================================
+        atomsAutoloadDel([this_package_name this_package_version this_package_section]);
+
+        // Remove it from the DESCRIPTION_installed file
+        // =====================================================================
+
+        DESCRIPTION_file = atomsPath("system",this_package_insdet(3)) + "DESCRIPTION_installed";
+
+        if ~ isempty(fileinfo(DESCRIPTION_file)) then
+            DESCRIPTION = atomsDESCRIPTIONread(DESCRIPTION_file);
+            DESCRIPTION = atomsDESCRIPTIONrm(DESCRIPTION,this_package_name,this_package_version);
+            atomsDESCRIPTIONwrite(DESCRIPTION,DESCRIPTION_file);
+        end
+
+        // Del the package from the list of package to remove
+        // =====================================================================
+        atomsToremoveUnregister(this_package_name,this_package_version,this_package_section);
+
+        // Fill the result matrix
+        // =====================================================================
+        result = [ result ; this_package_insdet ];
+
+        // Sucess message if needed
+        // =====================================================================
+        atomsDisp(msprintf(" success\n\n"));
+    end
+
+    // Go to the initial location
+    chdir(ATOMSINITIALPATH);
+
 endfunction
index 638af08..87a0f5e 100644 (file)
 // Add an URL to the list of repositories, and returns
 
 function nbAdd = atomsRepositoryAdd(url,section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       rhs                    = argn(2);
-       nbAdd                = 0;
-       repositories         = []; // Column vector that contains user repositories
-       currentRepositories  = atomsRepositoryList();
-       currentRepositories  = currentRepositories(:,1);
-       valid_url_pattern    = "/^((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\:\/\/)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(\/($|[a-zA-Z0-9\.\,\;\?\''\\\+&amp;%\$#\=~_\-]+))*$/";
-       
-       // 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"),"atomsRepositoryAdd",1,2));
-       end
-       
-       // Check URLs specified as first input argument
-       // =========================================================================
-       
-       if type(url) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRepositoryAdd",1));
-       end
-       
-       for i=1:size(url,"*")
-               if (part(url(i),1:7) <> "file://") & (~ regexp(url(i),valid_url_pattern,"o") == 1) then
-                       error(msprintf(gettext("%s: Wrong value for input argument #%d: This ("+url(i)+") is not a valid URL.\n"),"atomsRepositoryAdd",1));
-               end
-       end
-       
-       // Allusers/user management
-       //   - If section is equal to "allusers", The repository will added for all users
-       //       → SCI/.atoms  : ATOMS system files
-       //   -  If section is equal to "user", The repository will added only for the current user
-       //       → SCIHOME/atoms : location of the modules & ATOMS system files
-       // =========================================================================
-       
-       if rhs <= 1 then
-               if ATOMSALLUSERSWRITEACCESS then
-                       section = "allusers"; 
-               else
-                       section = "user";
-               end
-               
-       else
-               
-               // Process the 2nd input argument : section
-               // Allusers can be equal to "user" or "allusers"
-               
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsRepositoryAdd",2));
-               end
-               
-               if and(section<>["user","allusers"]) then
-                       error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' expected.\n"),"atomsRepositoryAdd",2));
-               end
-               
-               // Check if we have the write access
-               if (section=="allusers") & ~ATOMSALLUSERSWRITEACCESS then
-                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsRepositoryAdd",2,pathconvert(SCI+"/.atoms")));
-               end
-               
-       end
-       
-       // Define the path of the file that will record the change according to
-       // the "section" value
-       // =========================================================================
-       
-       atoms_directory = atomsPath("system",section);
-       
-       // Does the atoms_directory exist, if not create it
-       // =========================================================================
-       
-       if ~ isdir(atoms_directory) then
-               mkdir(atoms_directory);
-       end
-       
-       // Does the SCIHOME/atoms/repositories exist, if yes load it
-       // =========================================================================
-       
-       if fileinfo(atoms_directory+"repositories") <> [] then
-               repositories = mgetl(atoms_directory+"repositories");
-       end
-       
-       // Loop on each URL specified as input argument
-       // =========================================================================
-       
-       for i=1:size(url,"*")
-               // Add the URL only if it doesn't already exist
-               if find( currentRepositories == url(i) ) == [] then
-                       repositories = [ repositories ; url(i) ];
-                       nbAdd = nbAdd + 1;
-               end
-       end
-       
-       // Apply changes
-       // =========================================================================
-       
-       if nbAdd > 0 then
-               
-               mputl(repositories, atoms_directory+"repositories");
-               
-               // Force reload the different distant TOOLBOXES files
-               atomsDESCRIPTIONget(%T);
-               
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
+
+    rhs                    = argn(2);
+    nbAdd                = 0;
+    repositories         = []; // Column vector that contains user repositories
+    currentRepositories  = atomsRepositoryList();
+    currentRepositories  = currentRepositories(:,1);
+    valid_url_pattern    = "/^((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\:\/\/)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(\/($|[a-zA-Z0-9\.\,\;\?\''\\\+&amp;%\$#\=~_\-]+))*$/";
+
+    // 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"),"atomsRepositoryAdd",1,2));
+    end
+
+    // Check URLs specified as first input argument
+    // =========================================================================
+
+    if type(url) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRepositoryAdd",1));
+    end
+
+    for i=1:size(url,"*")
+        if (part(url(i),1:7) <> "file://") & (~ regexp(url(i),valid_url_pattern,"o") == 1) then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: This ("+url(i)+") is not a valid URL.\n"),"atomsRepositoryAdd",1));
+        end
+    end
+
+    // Allusers/user management
+    //   - If section is equal to "allusers", The repository will added for all users
+    //       → SCI/.atoms  : ATOMS system files
+    //   -  If section is equal to "user", The repository will added only for the current user
+    //       → SCIHOME/atoms : location of the modules & ATOMS system files
+    // =========================================================================
+
+    if rhs <= 1 then
+        if ATOMSALLUSERSWRITEACCESS then
+            section = "allusers";
+        else
+            section = "user";
+        end
+
+    else
+
+        // Process the 2nd input argument : section
+        // Allusers can be equal to "user" or "allusers"
+
+        if type(section) <> 10 then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsRepositoryAdd",2));
+        end
+
+        if and(section<>["user","allusers"]) then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' expected.\n"),"atomsRepositoryAdd",2));
+        end
+
+        // Check if we have the write access
+        if (section=="allusers") & ~ATOMSALLUSERSWRITEACCESS then
+            error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsRepositoryAdd",2,pathconvert(SCI+"/.atoms")));
+        end
+
+    end
+
+    // Define the path of the file that will record the change according to
+    // the "section" value
+    // =========================================================================
+
+    atoms_directory = atomsPath("system",section);
+
+    // Does the atoms_directory exist, if not create it
+    // =========================================================================
+
+    if ~ isdir(atoms_directory) then
+        mkdir(atoms_directory);
+    end
+
+    // Does the SCIHOME/atoms/repositories exist, if yes load it
+    // =========================================================================
+
+    if fileinfo(atoms_directory+"repositories") <> [] then
+        repositories = mgetl(atoms_directory+"repositories");
+    end
+
+    // Loop on each URL specified as input argument
+    // =========================================================================
+
+    for i=1:size(url,"*")
+        // Add the URL only if it doesn't already exist
+        if find( currentRepositories == url(i) ) == [] then
+            repositories = [ repositories ; url(i) ];
+            nbAdd = nbAdd + 1;
+        end
+    end
+
+    // Apply changes
+    // =========================================================================
+
+    if nbAdd > 0 then
+
+        mputl(repositories, atoms_directory+"repositories");
+
+        // Force reload the different distant TOOLBOXES files
+        atomsDESCRIPTIONget(%T);
+
+    end
+
 endfunction
index 9ab73b0..5bcabab 100644 (file)
 // Remove an URL to the list of repositories, and returns
 
 function nbDel = atomsRepositoryDel(url,section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       rhs   = argn(2);
-       nbDel = 0;
-       
-       // 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"),"atomsRepositoryDel",1,2));
-       end
-       
-       // Check URLs specified as first input argument
-       // =========================================================================
-       
-       if type(url) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRepositoryDel",1));
-       end
-       
-       // Allusers/user management
-       //
-       //   - If section is equal to "all", The repository to remove is searched in 
-       //     both "user" and "allusers" sections
-       //       → SCI/.atoms
-       //       → SCIHOME/atoms
-       //
-       //   - If section is equal to "allusers", The repository to remove is searched
-       //     only in the "allusers" section
-       //       → SCI/.atoms
-       //
-       //   - If section is equal to "user", The repository to remove is searched
-       //     only in the "user" section
-       //        → SCIHOME/atoms
-       // =========================================================================
-       
-       if rhs == 1 then
-               // By default, add the repository for all users (if we have write access
-               // of course !)
-               if ATOMSALLUSERSWRITEACCESS then
-                       section = "all"; 
-               else
-                       section = "user";
-               end
-       
-       else
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsRepositoryDel",2));
-               end
-               
-               if and(section<>["user","allusers","all"]) then
-                       error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' or ''all'' expected.\n"),"atomsRepositoryDel",2));
-               end
-               
-               // Check if we have the write access
-               if or(section==["all","allusers"]) & ~ ATOMSALLUSERSWRITEACCESS then
-                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsRepositoryDel",pathconvert(SCI+"/.atoms")));
-               end
-               
-       end
-       
-       // Define the path of the files that will record the change according to
-       // the "section" value and the existence of the latter
-       // =========================================================================
-       atoms_files = atomsPath("system",section) + "repositories";
-       
-       // Loop on each repositories file specified as first input argument
-       // =========================================================================
-       
-       for i=1:size(atoms_files,"*")
-               
-               if fileinfo(atoms_files(i)) == [] then
-                       continue;
-               end
-               
-               // Get the URLs list in this file
-               repositories = mgetl(atoms_files(i));
-               
-               // Loop on each URL specified as first input argument
-               for j=1:size(url,"*")
-                       indice = find( repositories == url(j) );
-                       if indice <> [] then
-                               repositories(indice) = [];
-                               nbDel = nbDel + 1;
-                       end
-               end
-               
-               if repositories == [] then
-                       mdelete(atoms_files(i));
-               else
-                       // Apply changes on this file
-                       mputl(repositories,atoms_files(i));
-               
-                       
-               end
-       end
-       
-       // Delete the packages file (created by atomsDESCRIPTIONget) to force reload
-       // the different distant TOOLBOXES files
-       // =========================================================================
-       
-       if nbDel > 0 then
-               atomsDESCRIPTIONget(%T);
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
+
+    rhs   = argn(2);
+    nbDel = 0;
+
+    // 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"),"atomsRepositoryDel",1,2));
+    end
+
+    // Check URLs specified as first input argument
+    // =========================================================================
+
+    if type(url) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRepositoryDel",1));
+    end
+
+    // Allusers/user management
+    //
+    //   - If section is equal to "all", The repository to remove is searched in
+    //     both "user" and "allusers" sections
+    //       → SCI/.atoms
+    //       → SCIHOME/atoms
+    //
+    //   - If section is equal to "allusers", The repository to remove is searched
+    //     only in the "allusers" section
+    //       → SCI/.atoms
+    //
+    //   - If section is equal to "user", The repository to remove is searched
+    //     only in the "user" section
+    //        → SCIHOME/atoms
+    // =========================================================================
+
+    if rhs == 1 then
+        // By default, add the repository for all users (if we have write access
+        // of course !)
+        if ATOMSALLUSERSWRITEACCESS then
+            section = "all";
+        else
+            section = "user";
+        end
+
+    else
+        if type(section) <> 10 then
+            error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsRepositoryDel",2));
+        end
+
+        if and(section<>["user","allusers","all"]) then
+            error(msprintf(gettext("%s: Wrong value for input argument #%d: ''user'' or ''allusers'' or ''all'' expected.\n"),"atomsRepositoryDel",2));
+        end
+
+        // Check if we have the write access
+        if or(section==["all","allusers"]) & ~ ATOMSALLUSERSWRITEACCESS then
+            error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsRepositoryDel",pathconvert(SCI+"/.atoms")));
+        end
+
+    end
+
+    // Define the path of the files that will record the change according to
+    // the "section" value and the existence of the latter
+    // =========================================================================
+    atoms_files = atomsPath("system",section) + "repositories";
+
+    // Loop on each repositories file specified as first input argument
+    // =========================================================================
+
+    for i=1:size(atoms_files,"*")
+
+        if fileinfo(atoms_files(i)) == [] then
+            continue;
+        end
+
+        // Get the URLs list in this file
+        repositories = mgetl(atoms_files(i));
+
+        // Loop on each URL specified as first input argument
+        for j=1:size(url,"*")
+            indice = find( repositories == url(j) );
+            if indice <> [] then
+                repositories(indice) = [];
+                nbDel = nbDel + 1;
+            end
+        end
+
+        if repositories == [] then
+            mdelete(atoms_files(i));
+        else
+            // Apply changes on this file
+            mputl(repositories,atoms_files(i));
+
+
+        end
+    end
+
+    // Delete the packages file (created by atomsDESCRIPTIONget) to force reload
+    // the different distant TOOLBOXES files
+    // =========================================================================
+
+    if nbDel > 0 then
+        atomsDESCRIPTIONget(%T);
+    end
+
 endfunction
index 4d970b9..483bdc3 100644 (file)
 // get the list of repositories
 
 function repositories = atomsRepositoryList(section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs           = argn(2);
-       repositories  = [];
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs > 1 then
-               error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsRepositoryList",0,1));
-       end
-       
-       // Check input argument type (if any)
-       // =========================================================================
-       
-       if (rhs==1) & (type(section) <> 10) then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsRepositoryList",1));
-       end
-       
-       // Check input argument dimension (if any)
-       // =========================================================================
-       
-       if (rhs==1) & (size(section,"*")<>1) then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsRepositoryList",1));
-       end
-       
-       // Check input argument values (if any)
-       // =========================================================================
-       
-       if (rhs==1) & (and(section<>["all","user","allusers","official"])) then
-               error(msprintf(gettext("%s: Wrong value for input argument #%d: ''all'',''user'',''allusers'' or ''official'' expected.\n"),"atomsRepositoryList",1));
-       end
-       
-       // Default value of section
-       // =========================================================================
-       
-       if rhs==0 then
-               section = "all";
-       end
-       
-       // Define the needed paths
-       // =========================================================================
-       
-       official_repositories = pathconvert(SCI+"/modules/atoms/etc/repositories",%F);
-       allusers_repositories = atomsPath("system","allusers") + "repositories";
-       user_repositories     = atomsPath("system","user")     + "repositories";
-       
-       // official repositories
-       // =========================================================================
-       
-       if or(section == ["all";"official"]) then
-               if fileinfo(official_repositories) <> [] then
-                       url_list = mgetl(official_repositories);
-                       for i=1:size(url_list,"*")
-                               repositories = [ repositories ; url_list(i)  "official" ];
-                       end
-               end
-       end
-       
-       // All users repositories
-       // =========================================================================
-       
-       if or(section == ["all";"allusers"]) then
-               if fileinfo(allusers_repositories) <> [] then
-                       url_list = mgetl(allusers_repositories);
-                       for i=1:size(url_list,"*")
-                               repositories = [ repositories ; url_list(i)  "allusers" ];
-                       end
-               end
-       end
-       
-       // User repositories
-       // =========================================================================
-       
-       if or(section == ["all";"user"]) then
-               if fileinfo(user_repositories) <> [] then
-                       url_list = mgetl(user_repositories);
-                       for i=1:size(url_list,"*")
-                               repositories = [ repositories ; url_list(i)  "user" ];
-                       end
-               end
-       end
-       
-       // Filter
-       // =========================================================================
-       if atomsGetConfig("offLine") == "True" then
-               
-               repositories_in = repositories;
-               repositories    = [];
-               
-               for i=1:size(repositories_in(:,1),"*")
-                       if regexp(repositories_in(i,1),"/^(http|ftp):\/\//","o") <> 1 then
-                               repositories = [ repositories ; repositories_in(i,:) ];
-                       end
-               end
-               
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs           = argn(2);
+    repositories  = [];
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs > 1 then
+        error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsRepositoryList",0,1));
+    end
+
+    // Check input argument type (if any)
+    // =========================================================================
+
+    if (rhs==1) & (type(section) <> 10) then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsRepositoryList",1));
+    end
+
+    // Check input argument dimension (if any)
+    // =========================================================================
+
+    if (rhs==1) & (size(section,"*")<>1) then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsRepositoryList",1));
+    end
+
+    // Check input argument values (if any)
+    // =========================================================================
+
+    if (rhs==1) & (and(section<>["all","user","allusers","official"])) then
+        error(msprintf(gettext("%s: Wrong value for input argument #%d: ''all'',''user'',''allusers'' or ''official'' expected.\n"),"atomsRepositoryList",1));
+    end
+
+    // Default value of section
+    // =========================================================================
+
+    if rhs==0 then
+        section = "all";
+    end
+
+    // Define the needed paths
+    // =========================================================================
+
+    official_repositories = pathconvert(SCI+"/modules/atoms/etc/repositories",%F);
+    allusers_repositories = atomsPath("system","allusers") + "repositories";
+    user_repositories     = atomsPath("system","user")     + "repositories";
+
+    // official repositories
+    // =========================================================================
+
+    if or(section == ["all";"official"]) then
+        if fileinfo(official_repositories) <> [] then
+            url_list = mgetl(official_repositories);
+            for i=1:size(url_list,"*")
+                repositories = [ repositories ; url_list(i)  "official" ];
+            end
+        end
+    end
+
+    // All users repositories
+    // =========================================================================
+
+    if or(section == ["all";"allusers"]) then
+        if fileinfo(allusers_repositories) <> [] then
+            url_list = mgetl(allusers_repositories);
+            for i=1:size(url_list,"*")
+                repositories = [ repositories ; url_list(i)  "allusers" ];
+            end
+        end
+    end
+
+    // User repositories
+    // =========================================================================
+
+    if or(section == ["all";"user"]) then
+        if fileinfo(user_repositories) <> [] then
+            url_list = mgetl(user_repositories);
+            for i=1:size(url_list,"*")
+                repositories = [ repositories ; url_list(i)  "user" ];
+            end
+        end
+    end
+
+    // Filter
+    // =========================================================================
+    if atomsGetConfig("offLine") == "True" then
+
+        repositories_in = repositories;
+        repositories    = [];
+
+        for i=1:size(repositories_in(:,1),"*")
+            if regexp(repositories_in(i,1),"/^(http|ftp):\/\//","o") <> 1 then
+                repositories = [ repositories ; repositories_in(i,:) ];
+            end
+        end
+
+    end
+
 endfunction
index e9d6ae4..91dd601 100644 (file)
 // Search
 
 function packages_disp = atomsSearch( search , fields )
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs = argn(2);
-       
-       // 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"),"atomsSearch",1,2));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(search) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsSearch",1));
-       end
-       
-       if (rhs>1) & (type(fields)<>10)  then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsSearch",2));
-       end
-       
-       // Check input parameters dimensions
-       // =========================================================================
-       
-       if size(search,"*") <> 1 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsSearch",1));
-       end
-       
-       // Don't take into account the character cast
-       // =========================================================================
-       search = convstr(search,"l");
-       
-       // Get the list of available toolboxes
-       // =========================================================================
-       
-       packages_struct    = atomsDESCRIPTIONget();
-       
-       packages_list      = getfield(1,packages_struct);
-       packages_list(1:2) = [];
-       
-       packages_disp      = [];
-       
-       // Loop on package list
-       // =========================================================================
-       
-       for i=1:size(packages_list,"*")
-               
-               this_package_name = packages_list(i);
-               
-               // Get the list of versions compatibles with this version of Scilab
-               this_package_versions = atomsCompatibleVersions(packages_list(i));
-               
-               if isempty(this_package_versions) then
-                       continue;
-               end
-               
-               // Use the Most Recent Version
-               this_package_version = this_package_versions(1);
-               
-               // Get the details of this toolbox
-               this_package_details = atomsToolboxDetails([this_package_name,this_package_version]);
-               this_package_summary = this_package_details("Summary");
-               
-               if grep( convstr(this_package_name,"l") , search ) <> [] then
-                       packages_disp = [ packages_disp ; this_package_name this_package_summary ];
-               elseif grep( convstr(this_package_summary,"l") , search ) <> [] then
-                       packages_disp = [ packages_disp ; this_package_name this_package_summary ];
-               end
-               
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs = argn(2);
+
+    // 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"),"atomsSearch",1,2));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(search) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsSearch",1));
+    end
+
+    if (rhs>1) & (type(fields)<>10)  then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsSearch",2));
+    end
+
+    // Check input parameters dimensions
+    // =========================================================================
+
+    if size(search,"*") <> 1 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsSearch",1));
+    end
+
+    // Don't take into account the character cast
+    // =========================================================================
+    search = convstr(search,"l");
+
+    // Get the list of available toolboxes
+    // =========================================================================
+
+    packages_struct    = atomsDESCRIPTIONget();
+
+    packages_list      = getfield(1,packages_struct);
+    packages_list(1:2) = [];
+
+    packages_disp      = [];
+
+    // Loop on package list
+    // =========================================================================
+
+    for i=1:size(packages_list,"*")
+
+        this_package_name = packages_list(i);
+
+        // Get the list of versions compatibles with this version of Scilab
+        this_package_versions = atomsCompatibleVersions(packages_list(i));
+
+        if isempty(this_package_versions) then
+            continue;
+        end
+
+        // Use the Most Recent Version
+        this_package_version = this_package_versions(1);
+
+        // Get the details of this toolbox
+        this_package_details = atomsToolboxDetails([this_package_name,this_package_version]);
+        this_package_summary = this_package_details("Summary");
+
+        if grep( convstr(this_package_name,"l") , search ) <> [] then
+            packages_disp = [ packages_disp ; this_package_name this_package_summary ];
+        elseif grep( convstr(this_package_summary,"l") , search ) <> [] then
+            packages_disp = [ packages_disp ; this_package_name this_package_summary ];
+        end
+
+    end
+
 endfunction
index 8842391..084afaa 100644 (file)
 //  -> ATOMSDIR/config
 
 function nbChanges = atomsSetConfig(field,value)
-       
-       rhs                = argn(2);
-       nbChanges          = 0;
-       systemUpdateNeeded = %F;
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs <> 2 then
-               error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsSetConfig",2));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(field) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsSetConfig",1));
-       end
-       
-       if type(value) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsSetConfig",2));
-       end
-       
-       // field and value must have the same size
-       // =========================================================================
-       
-       if or( size(field) <> size(value) ) then
-               error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsSetConfig",1,2));
-       end
-       
-       // Define the path of the file that will record the change
-       // =========================================================================
-       atoms_directory =  atomsPath("system","user");
-       
-       // Does the atoms_directory exist, if not create it
-       // =========================================================================
-       
-       if ~ isdir(atoms_directory) then
-               mkdir(atoms_directory);
-       end
-       
-       // Get the current config struct
-       // =========================================================================
-       
-       config_struct = atomsGetConfig();
-       
-       // Loop on field
-       // =========================================================================
-       
-       for i=1:size(field,"*")
-               
-               if (~isfield(config_struct,field(i))) | (config_struct(field(i))<> value(i)) then
-                       nbChanges = nbChanges + 1;
-               else
-                       continue;
-               end
-               
-               if field(i) == "offLine" then
-                       systemUpdateNeeded = %T;
-               end
-               
-               config_struct(field(i)) = value(i);
-       end
-       
-       // Shortcut
-       // =========================================================================
-       if nbChanges == 0 then
-               return;
-       end
-       
-       // Apply Changes
-       // =========================================================================
-       
-       config_fields      = getfield(1,config_struct);
-       config_fields(1:2) = [];
-       config_fields      = gsort(config_fields);
-               
-       config_str = [];
-       
-       for i=1:size(config_fields,"*")
-               config_str = [ config_str ; config_fields(i) + " = " + config_struct(config_fields(i)) ];
-       end
-       
-       mputl(config_str,atoms_directory+"config");
-       
-       // SystemUpdate
-       // =========================================================================
-       
-       if systemUpdateNeeded then
-               atomsSystemUpdate();
-       end
-       
+
+    rhs                = argn(2);
+    nbChanges          = 0;
+    systemUpdateNeeded = %F;
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs <> 2 then
+        error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsSetConfig",2));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(field) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsSetConfig",1));
+    end
+
+    if type(value) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsSetConfig",2));
+    end
+
+    // field and value must have the same size
+    // =========================================================================
+
+    if or( size(field) <> size(value) ) then
+        error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"atomsSetConfig",1,2));
+    end
+
+    // Define the path of the file that will record the change
+    // =========================================================================
+    atoms_directory =  atomsPath("system","user");
+
+    // Does the atoms_directory exist, if not create it
+    // =========================================================================
+
+    if ~ isdir(atoms_directory) then
+        mkdir(atoms_directory);
+    end
+
+    // Get the current config struct
+    // =========================================================================
+
+    config_struct = atomsGetConfig();
+
+    // Loop on field
+    // =========================================================================
+
+    for i=1:size(field,"*")
+
+        if (~isfield(config_struct,field(i))) | (config_struct(field(i))<> value(i)) then
+            nbChanges = nbChanges + 1;
+        else
+            continue;
+        end
+
+        if field(i) == "offLine" then
+            systemUpdateNeeded = %T;
+        end
+
+        config_struct(field(i)) = value(i);
+    end
+
+    // Shortcut
+    // =========================================================================
+    if nbChanges == 0 then
+        return;
+    end
+
+    // Apply Changes
+    // =========================================================================
+
+    config_fields      = getfield(1,config_struct);
+    config_fields(1:2) = [];
+    config_fields      = gsort(config_fields);
+
+    config_str = [];
+
+    for i=1:size(config_fields,"*")
+        config_str = [ config_str ; config_fields(i) + " = " + config_struct(config_fields(i)) ];
+    end
+
+    mputl(config_str,atoms_directory+"config");
+
+    // SystemUpdate
+    // =========================================================================
+
+    if systemUpdateNeeded then
+        atomsSystemUpdate();
+    end
+
 endfunction
index beaef27..8eb53a1 100644 (file)
 // Show information on a package
 
 function atomsShow(package)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       rhs = argn(2);
-       
-       // Check number of input arguments
-       // =========================================================================
-       
-       if rhs <> 1 then
-               error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsShow",1));
-       end
-       
-       // Check input parameters type
-       // =========================================================================
-       
-       if type(package) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsShow",1));
-       end
-       
-       if size(package(1,:),"*") > 2 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: 1x1 or 1x2 string matrix expected.\n"),"atomsShow",1));
-       end
-       
-       // Remove leading and trailing parameters
-       // =========================================================================
-       package = stripblanks(package);
-       
-       // If the version is not mentioned, complete with an empty string
-       // =========================================================================
-       
-       if size(package,"*") == 1 then
-               package = [ package "" ];
-       end
-       
-       // Check if it's a valid package
-       // =========================================================================
-       
-       if ~atomsIsInstalled(package) & ~atomsIsPackage(package) then
-               
-               if isempty(package(2)) then
-                       module_full_name = package;
-               else
-                       module_full_name = package(1)+" - "+package(2);
-               end
-               
-               atomsError("error",msprintf(gettext("%s: The package %s is not available.\n"),"atomsShow",module_full_name));
-       end
-       
-       // If version is not mentioned, the Most Recent Version is used
-       // =========================================================================
-       if isempty(package(2)) then
-               package(1,2) = atomsGetMRVersion(package(1));
-       end
-       
-       // Get the details of this package
-       // =========================================================================
-       
-       details = atomsToolboxDetails(package);
-       
-       fields_map = [];
-       fields_map = [ fields_map ; "Toolbox"        gettext("Package")        ];
-       fields_map = [ fields_map ; "Title"          gettext("Title")          ];
-       fields_map = [ fields_map ; "Summary"        gettext("Summary")        ];
-       fields_map = [ fields_map ; "Version"        gettext("Version")        ];
-       fields_map = [ fields_map ; "Depends"        gettext("Depend")         ];
-       fields_map = [ fields_map ; "Category"       gettext("Category(ies)")  ];
-       fields_map = [ fields_map ; "Author"         gettext("Author(s)")      ];
-       fields_map = [ fields_map ; "Maintainer"     gettext("Maintainer(s)")  ];
-       fields_map = [ fields_map ; "Entity"         gettext("Entity")         ];
-       fields_map = [ fields_map ; "WebSite"        gettext("WebSite")        ];
-       fields_map = [ fields_map ; "License"        gettext("License")        ];
-       fields_map = [ fields_map ; "ScilabVersion"  gettext("Scilab Version") ];
-       
-       fields_map = [ fields_map ; "Status"         gettext("Status")         ];
-       
-       if atomsIsInstalled(package) then
-               fields_map = [ fields_map ; "InstallAutomaticaly" gettext("Automatically Installed")];
-               fields_map = [ fields_map ; "installPath"         gettext("Install Directory")];
-       end
-       
-       fields_map = [ fields_map ; "Description"    gettext("Description")    ];
-       
-       // Show it
-       // =========================================================================
-       
-       max_field_len = max( length(fields_map(:,2)) );
-       
-       for i=1:size(fields_map(:,1),"*")
-               
-               value = "";
-               
-               //
-               // Status
-               // 
-               
-               if fields_map(i,1)=="Status" then
-                       if atomsIsInstalled(package) then
-                               value = "Installed";
-                       else
-                               value = "Not installed";
-                       end
-               end
-               
-               //
-               // Automatically Installed ?
-               // 
-               
-               if fields_map(i,1)=="InstallAutomaticaly" then
-                       if atomsGetInstalledStatus(package) == "A" then
-                               value = "yes";
-                       else
-                               value = "no";
-                       end
-               end
-               
-               //
-               // Scilab Version
-               // 
-               
-               if fields_map(i,1)=="ScilabVersion" then
-                       if regexp( details(fields_map(i,1)) , "/^~/" , "o" )<>[] then
-                               value = "any";
-                       else
-                               value = details(fields_map(i,1));
-                       end
-               end
-               
-               //
-               // Dependences
-               // 
-               
-               if fields_map(i,1)=="Depends" then
-                       value = dep2str(details(fields_map(i,1)));
-               end
-               
-               //
-               // Other
-               //
-               
-               if isempty(value) then
-                       value = details(fields_map(i,1));
-               end
-               
-               for j=1:size(value,"*")
-                       
-                       if j==1 then
-                               mprintf("% "+string(max_field_len)+"s : %s\n",fields_map(i,2),value(j))
-                               
-                       else
-                               mprintf("% "+string(max_field_len)+"s   %s\n","",value(j))
-                       end
-               end
-       end
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    rhs = argn(2);
+
+    // Check number of input arguments
+    // =========================================================================
+
+    if rhs <> 1 then
+        error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsShow",1));
+    end
+
+    // Check input parameters type
+    // =========================================================================
+
+    if type(package) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsShow",1));
+    end
+
+    if size(package(1,:),"*") > 2 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: 1x1 or 1x2 string matrix expected.\n"),"atomsShow",1));
+    end
+
+    // Remove leading and trailing parameters
+    // =========================================================================
+    package = stripblanks(package);
+
+    // If the version is not mentioned, complete with an empty string
+    // =========================================================================
+
+    if size(package,"*") == 1 then
+        package = [ package "" ];
+    end
+
+    // Check if it's a valid package
+    // =========================================================================
+
+    if ~atomsIsInstalled(package) & ~atomsIsPackage(package) then
+
+        if isempty(package(2)) then
+            module_full_name = package;
+        else
+            module_full_name = package(1)+" - "+package(2);
+        end
+
+        atomsError("error",msprintf(gettext("%s: The package %s is not available.\n"),"atomsShow",module_full_name));
+    end
+
+    // If version is not mentioned, the Most Recent Version is used
+    // =========================================================================
+    if isempty(package(2)) then
+        package(1,2) = atomsGetMRVersion(package(1));
+    end
+
+    // Get the details of this package
+    // =========================================================================
+
+    details = atomsToolboxDetails(package);
+
+    fields_map = [];
+    fields_map = [ fields_map ; "Toolbox"        gettext("Package")        ];
+    fields_map = [ fields_map ; "Title"          gettext("Title")          ];
+    fields_map = [ fields_map ; "Summary"        gettext("Summary")        ];
+    fields_map = [ fields_map ; "Version"        gettext("Version")        ];
+    fields_map = [ fields_map ; "Depends"        gettext("Depend")         ];
+    fields_map = [ fields_map ; "Category"       gettext("Category(ies)")  ];
+    fields_map = [ fields_map ; "Author"         gettext("Author(s)")      ];
+    fields_map = [ fields_map ; "Maintainer"     gettext("Maintainer(s)")  ];
+    fields_map = [ fields_map ; "Entity"         gettext("Entity")         ];
+    fields_map = [ fields_map ; "WebSite"        gettext("WebSite")        ];
+    fields_map = [ fields_map ; "License"        gettext("License")        ];
+    fields_map = [ fields_map ; "ScilabVersion"  gettext("Scilab Version") ];
+
+    fields_map = [ fields_map ; "Status"         gettext("Status")         ];
+
+    if atomsIsInstalled(package) then
+        fields_map = [ fields_map ; "InstallAutomaticaly" gettext("Automatically Installed")];
+        fields_map = [ fields_map ; "installPath"         gettext("Install Directory")];
+    end
+
+    fields_map = [ fields_map ; "Description"    gettext("Description")    ];
+
+    // Show it
+    // =========================================================================
+
+    max_field_len = max( length(fields_map(:,2)) );
+
+    for i=1:size(fields_map(:,1),"*")
+
+        value = "";
+
+        //
+        // Status
+        //
+
+        if fields_map(i,1)=="Status" then
+            if atomsIsInstalled(package) then
+                value = "Installed";
+            else
+                value = "Not installed";
+            end
+        end
+
+        //
+        // Automatically Installed ?
+        //
+
+        if fields_map(i,1)=="InstallAutomaticaly" then
+            if atomsGetInstalledStatus(package) == "A" then
+                value = "yes";
+            else
+                value = "no";
+            end
+        end
+
+        //
+        // Scilab Version
+        //
+
+        if fields_map(i,1)=="ScilabVersion" then
+            if regexp( details(fields_map(i,1)) , "/^~/" , "o" )<>[] then
+                value = "any";
+            else
+                value = details(fields_map(i,1));
+            end
+        end
+
+        //
+        // Dependences
+        //
+
+        if fields_map(i,1)=="Depends" then
+            value = dep2str(details(fields_map(i,1)));
+        end
+
+        //
+        // Other
+        //
+
+        if isempty(value) then
+            value = details(fields_map(i,1));
+        end
+
+        for j=1:size(value,"*")
+
+            if j==1 then
+                mprintf("% "+string(max_field_len)+"s : %s\n",fields_map(i,2),value(j))
+
+            else
+                mprintf("% "+string(max_field_len)+"s   %s\n","",value(j))
+            end
+        end
+    end
+
 endfunction
 
 // =============================================================================
@@ -177,44 +177,44 @@ endfunction
 //
 // Convert a technical dependence string (For ex. : ">= toolbox_1 1.3") to a
 // display dependence string  (For ex. : "toolbox_1 (>= 1.3)" )
-// 
+//
 // =============================================================================
 
 function str = dep2str(dep)
-       
-       str = [];
-       
-       if isempty(dep) then
-               return;
-       end
-       
-       for i=1:size(dep,"*")
-               
-               this_dep = dep(i);
-               
-               // direction part
-               this_dep         = stripblanks(this_dep);
-               direction_length = regexp(this_dep,"/\s/","o");
-               direction        = stripblanks(part(this_dep,1:direction_length-1));
-               
-               // name part 
-               this_dep         = stripblanks(part(this_dep,direction_length+1:length(this_dep)));
-               name_length      = regexp(this_dep,"/\s/","o");
-               name             = part(this_dep,1:name_length-1);
-               
-               // version part
-               version          = stripblanks(part(this_dep,name_length:length(this_dep)));
-               
-               this_str         = name+" ";
-               
-               if direction == "~" then
-                       this_str = this_str + "(Any version)";
-               else
-                       this_str = this_str + "("+direction+" "+version+")";
-               end
-               
-               str = [ str ; this_str ];
-               
-       end
-       
+
+    str = [];
+
+    if isempty(dep) then
+        return;
+    end
+
+    for i=1:size(dep,"*")
+
+        this_dep = dep(i);
+
+        // direction part
+        this_dep         = stripblanks(this_dep);
+        direction_length = regexp(this_dep,"/\s/","o");
+        direction        = stripblanks(part(this_dep,1:direction_length-1));
+
+        // name part
+        this_dep         = stripblanks(part(this_dep,direction_length+1:length(this_dep)));
+        name_length      = regexp(this_dep,"/\s/","o");
+        name             = part(this_dep,1:name_length-1);
+
+        // version part
+        version          = stripblanks(part(this_dep,name_length:length(this_dep)));
+
+        this_str         = name+" ";
+
+        if direction == "~" then
+            this_str = this_str + "(Any version)";
+        else
+            this_str = this_str + "("+direction+" "+version+")";
+        end
+
+        str = [ str ; this_str ];
+
+    end
+
 endfunction
index 117f7f8..df27790 100644 (file)
 // Load one or several toolboxes
 
 function atomsSystemInit()
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       // Check if we have the write access
-       // =========================================================================
-       if ATOMSALLUSERSWRITEACCESS then
-               section = "all";
-       else
-               section = "user";
-       end
-       
-       // Toremove process
-       // =========================================================================
-       atomsToremoveProcess(section);
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
+
+    // Check if we have the write access
+    // =========================================================================
+    if ATOMSALLUSERSWRITEACCESS then
+        section = "all";
+    else
+        section = "user";
+    end
+
+    // Toremove process
+    // =========================================================================
+    atomsToremoveProcess(section);
+
 endfunction
index 01fa34c..8670b0b 100644 (file)
 // Installation of a toolbox
 
 function atomsSystemUpdate()
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       atomsDESCRIPTIONget(%T);
-       
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check write access on allusers zone
+    // =========================================================================
+    atomsDESCRIPTIONget(%T);
+
 endfunction
index b651c17..f2facdd 100644 (file)
 //          . mandatory
 
 function path = atomsTest(packages)
-       
-       rhs         = argn(2);
-       path        = [];
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       // Check input parameters
-       // =========================================================================
-       
-       rhs = argn(2);
-       
-       if rhs <> 1 then
-               error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"atomsTest",1))
-       end
-       
-       if type(packages) <> 10 then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsTest",1));
-       end
-       
-       if size(packages(1,:),"*") > 3 then
-               error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1,mx2 or mx3 string matrix expected.\n"),"atomsTest",1));
-       end
-       
-       packages = stripblanks(packages);
-       
-       // Complete packages matrix with empty columns
-       // =========================================================================
-       
-       if size(packages(1,:),"*") == 1 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
-       
-       elseif size(packages(1,:),"*") == 2 then
-               packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       end
-       
-       // Check if the module is installed
-       // =========================================================================
-       
-       if ~ and(atomsIsInstalled(packages)) then
-               for i=1:size(packages(:,1),"*")
-                       if ~ atomsIsInstalled(packages(i,:)) then
-                               if isempty(packages(i,2)) & isempty(packages(i,3)) then
-                                       error(msprintf(gettext("%s: Module ''%s'' is not installed.\n"),"atomsTest",packages(i,1)));
-                               elseif ~isempty(packages(i,2)) & isempty(packages(i,3)) then
-                                       error(msprintf(gettext("%s: ''%s - %s'' is not installed.\n"),"atomsTest",packages(i,1),packages(i,2)));
-                               elseif isempty(packages(i,2)) & ~isempty(packages(i,3)) then
-                                       error(msprintf(gettext("%s: ''%s'' (''%s'' section) is not installed.\n"),"atomsTest",packages(i,1),packages(i,3)));
-                               elseif ~isempty(packages(i,2)) & ~isempty(packages(i,3)) then
-                                       error(msprintf(gettext("%s: ''%s - %s'' (''%s'' section) is not installed.\n"),"atomsTest",packages(i,1),packages(i,2),packages(i,3)));
-                               end
-                       end
-               end
-       end
-       
-       // Add a fourth column : the module installation path
-       // =========================================================================
-       packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
-       
-       // Loop on input parameter to set the version and the section if it's not 
-       // already done
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               
-               // The module's installed version hasn't been specified or is empty
-               // → Set the MRV available
-               // =====================================================================
-               
-               if isempty(packages(i,2)) then
-                       
-                       if ~ isempty(packages(i,3)) then
-                               section = packages(i,3);
-                       
-                       else
-                               section = "all";
-                       
-                       end
-                       
-                       this_module_versions = atomsGetInstalledVers(packages(i,1),section);
-                       
-                       if isempty(this_module_versions) then
-                               if section == "all" then
-                                       error(msprintf(gettext("%s: Module ''%s'' is not installed.\n"),"atomsTest",packages(i,1)));
-                               else
-                                       error(msprintf(gettext("%s: Module ''%s'' is not installed (''%s'' section).\n"),"atomsTest",packages(i,1),section));
-                               end
-                       else
-                               packages(i,2) = this_module_versions(1);
-                       end
-                       
-               else
-                       
-                       if ~atomsIsInstalled([packages(i,1) packages(i,2)]) then
-                               error(msprintf(gettext("%s: Module ''%s - %s'' is not installed.\n"),"atomsLoad",packages(i,1),packages(i,2)));
-                       end
-                       
-               end
-               
-               // The module's installed section hasn't been specified or is empty
-               // → If the module (same name/same version) is installed in both sections,
-               //   module installed in the "user" section is taken
-               // =====================================================================
-               
-               if isempty(packages(i,3)) then
-                       
-                       sections = ["user","allusers"];
-                       
-                       for j=1:size(sections,"*")
-                               if atomsIsInstalled([packages(i,1) packages(i,2)],sections(j)) then
-                                       packages(i,3) = sections(j);
-                               end
-                       end
-                       
-               else
-               
-                       // Check if modules are installed
-                       if ~ atomsIsInstalled([packages(i,1) packages(i,2)],packages(i,3)) then
-                               mprintf(gettext("%s: The following modules are not installed:\n"),"atomsAutoloadAdd");
-                               mprintf("\t - ''%s - %s'' (''%s'' section)\n",packages(i,1),packages(i,2),packages(i,3));
-                               error("");
-                       end
-                       
-               end
-               
-               // Get the installed path
-               // =====================================================================
-               packages(i,4) = atomsGetInstalledPath([packages(i,1) packages(i,2) packages(i,3)]);
-               
-       end
-       
-       // Loop on packages
-       // =========================================================================
-       
-       for i=1:size(packages(:,1),"*")
-               test_run(packages(i,4));
-       end
-       
+
+    rhs         = argn(2);
+    path        = [];
+
+    // Load Atoms Internals lib if it's not already loaded
+    // =========================================================================
+    if ~ exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    // Check input parameters
+    // =========================================================================
+
+    rhs = argn(2);
+
+    if rhs <> 1 then
+        error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"atomsTest",1))
+    end
+
+    if type(packages) <> 10 then
+        error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsTest",1));
+    end
+
+    if size(packages(1,:),"*") > 3 then
+        error(msprintf(gettext("%s: Wrong size for input argument #%d: mx1,mx2 or mx3 string matrix expected.\n"),"atomsTest",1));
+    end
+
+    packages = stripblanks(packages);
+
+    // Complete packages matrix with empty columns
+    // =========================================================================
+
+    if size(packages(1,:),"*") == 1 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) emptystr(size(packages(:,1),"*"),1) ];
+
+    elseif size(packages(1,:),"*") == 2 then
+        packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    end
+
+    // Check if the module is installed
+    // =========================================================================
+
+    if ~ and(atomsIsInstalled(packages)) then
+        for i=1:size(packages(:,1),"*")
+            if ~ atomsIsInstalled(packages(i,:)) then
+                if isempty(packages(i,2)) & isempty(packages(i,3)) then
+                    error(msprintf(gettext("%s: Module ''%s'' is not installed.\n"),"atomsTest",packages(i,1)));
+                elseif ~isempty(packages(i,2)) & isempty(packages(i,3)) then
+                    error(msprintf(gettext("%s: ''%s - %s'' is not installed.\n"),"atomsTest",packages(i,1),packages(i,2)));
+                elseif isempty(packages(i,2)) & ~isempty(packages(i,3)) then
+                    error(msprintf(gettext("%s: ''%s'' (''%s'' section) is not installed.\n"),"atomsTest",packages(i,1),packages(i,3)));
+                elseif ~isempty(packages(i,2)) & ~isempty(packages(i,3)) then
+                    error(msprintf(gettext("%s: ''%s - %s'' (''%s'' section) is not installed.\n"),"atomsTest",packages(i,1),packages(i,2),packages(i,3)));
+                end
+            end
+        end
+    end
+
+    // Add a fourth column : the module installation path
+    // =========================================================================
+    packages = [ packages emptystr(size(packages(:,1),"*"),1) ];
+
+    // Loop on input parameter to set the version and the section if it's not
+    // already done
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+
+        // The module's installed version hasn't been specified or is empty
+        // → Set the MRV available
+        // =====================================================================
+
+        if isempty(packages(i,2)) then
+
+            if ~ isempty(packages(i,3)) then
+                section = packages(i,3);
+
+            else
+                section = "all";
+
+            end
+
+            this_module_versions = atomsGetInstalledVers(packages(i,1),section);
+
+            if isempty(this_module_versions) then
+                if section == "all" then
+                    error(msprintf(gettext("%s: Module ''%s'' is not installed.\n"),"atomsTest",packages(i,1)));
+                else
+                    error(msprintf(gettext("%s: Module ''%s'' is not installed (''%s'' section).\n"),"atomsTest",packages(i,1),section));
+                end
+            else
+                packages(i,2) = this_module_versions(1);
+            end
+
+        else
+
+            if ~atomsIsInstalled([packages(i,1) packages(i,2)]) then
+                error(msprintf(gettext("%s: Module ''%s - %s'' is not installed.\n"),"atomsLoad",packages(i,1),packages(i,2)));
+            end
+
+        end
+
+        // The module's installed section hasn't been specified or is empty
+        // → If the module (same name/same version) is installed in both sections,
+        //   module installed in the "user" section is taken
+        // =====================================================================
+
+        if isempty(packages(i,3)) then
+
+            sections = ["user","allusers"];
+
+            for j=1:size(sections,"*")
+                if atomsIsInstalled([packages(i,1) packages(i,2)],sections(j)) then
+                    packages(i,3) = sections(j);
+                end
+            end
+
+        else
+
+            // Check if modules are installed
+            if ~ atomsIsInstalled([packages(i,1) packages(i,2)],packages(i,3)) then
+                mprintf(gettext("%s: The following modules are not installed:\n"),"atomsAutoloadAdd");
+                mprintf("\t - ''%s - %s'' (''%s'' section)\n",packages(i,1),packages(i,2),packages(i,3));
+                error("");
+            end
+
+        end
+
+        // Get the installed path
+        // =====================================================================
+        packages(i,4) = atomsGetInstalledPath([packages(i,1) packages(i,2) packages(i,3)]);
+
+    end
+
+    // Loop on packages
+    // =========================================================================
+
+    for i=1:size(packages(:,1),"*")
+        test_run(packages(i,4));
+    end
+
 endfunction
index b4bf243..72b0748 100644 (file)
 // update of a toolbox
 
 function result = atomsUpdate(name,section)
-       
-       // Load Atoms Internals lib if it's not already loaded
-       // =========================================================================
-       if ~ exists("atomsinternalslib") then
-               load("SCI/modules/atoms/macros/atoms_internals/lib");
-       end
-       
-       result = [];
-       
-       // Verbose Mode ?
-       // =========================================================================
-       if strcmpi(atomsGetConfig("Verbose"),"True") == 0 then
-               ATOMSVERBOSE = %T;
-       else
-               ATOMSVERBOSE = %F;
-       end
-       
-       // Check write access on allusers zone
-       // =========================================================================
-       ATOMSALLUSERSWRITEACCESS = atomsAUWriteAccess();
-       
-       // Check input parameters
-       // =========================================================================
-       
-       rhs = argn(2);
-       
-       if rhs > 2 then
-               error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"),"atomsUpdate",0,2))
-       end
-       
-       if (rhs>0) & (~ isempty(name) ) & (type(name)<>10) then
-               error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsUpdate",1));
-       end
-       
-       // Install for all users or just for me ?
-       // =========================================================================
-       
-       if rhs < 2 then
-               // By default, install for all users (if we have write access of course !)
-               if ATOMSALLUSERSWRITEACCESS then
-                       section = "all";
-               else
-                       section = "user";
-               end
-       
-       else
-               // Just check if it's a boolean
-               if type(section) <> 10 then
-                       error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsInstall",2));
-               end
-               
-               // Check if we have the write access
-               if (section=="allusers") & ~ ATOMSALLUSERSWRITEACCESS then
-                       error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsInstall",2,atomsPath("system","allusers")));
-               end
-       end
-       
-       // Check if all specified toolboxes are effectively installed
-       // =========================================================================
-       
-       if (rhs>0) &  ~isempty(name) then
-               
-               // Remove leading and trealing whitespaces
-               name = stripblanks(name);
-               
-               for i=1:size(name,"*")
-                       if ~ atomsIsInstalled(name(i)) then
-                               error(msprintf(gettext("%s: ''%s'' isn''t installed.\n"),"atomsUpdate",name(i)));
-                       end
-               end
-       end
-       
-       // Get scilab version (needed for later)
-       // =========================================================================
-       sciversion = strcat(string(getversion("scilab")) + ".");
-       
-       // If name isn't defined or empty, get the full list of installed packages
-       // =========================================================================
-       
-       if (rhs==0) | isempty(name) then
-               
-               name               = [];
-               package_installed  = atomsGetInstalled(section);
-               package_installed  = package_installed( find( package_installed(:,5) == "I") , : );
-               
-               for i=1:size(package_installed(:,1),"*")
-                       if find( name == package_installed(i,1) ) == [] then
-                               name = [ name ;  package_installed(i,1) ];
-                       end
-               end
-       end
-       
-       // Build the list of explicit packages to update (i.e without dependencies)
-       // =========================================================================
-       
-       package_main_list = [];
-       
-       for i=1:size(name,"*")
-               
-               if section=="all" then
-                       sections = ["user";"allusers"];
-               else
-                       sections = section;
-               end
-               
-               for j=1:size(sections,"*")
-                       
-                       if ~atomsIsInstalled(name(i),sections(j)) then
-                               continue;
-                       end
-                       
-                       this_package_versions    = atomsGetInstalledVers(name(i),sections(j));
-                       package_main_list        = [ package_main_list ; atomsGetInstalledDetails([name(i) this_package_versions(1)],sections(j)) ];
-                       
-               end
-               
-       end
-       
-       // Install the Most Recent Version of all items of "name" array
-       // =========================================================================
-       
-       for i=1:size(package_main_list(:,1),"*")
-               
-               this_package_MRV_ins     = package_main_list(i,2);     // Most Recent Version Installed
-               this_package_MRV_ava     = atomsGetMRVersion(name(i)); // Most Recent Version Available
-               this_package_ins_section = package_main_list(i,3);
-               
-               if (this_package_MRV_ava == -1) | ..
-                               ( atomsVersionCompare(this_package_MRV_ins,this_package_MRV_ava) == 0 ) then
-                       // The installed version is already the Most Recent Version Available
-                       atomsDisp(msprintf("\t%s (%s) : The most recent version is already installed\n\n",name(i),this_package_MRV_ins));
-               else
-                       // Install the new toolbox
-                       this_result = atomsInstall([name(i) this_package_MRV_ava],this_package_ins_section);
-                       
-                       // Fill the output argument
-                       result = [ result ; this_result ];
-               end
-               
-       end
-       
-       // Loop on name to update dependencies
-       // =========================================================================
-       
-       for i=1:size(package_main_list(:,1),"*")
-               
-               this_package_MRV_ins     = package_main_list(i,2);     // Most Recent Version Installed
-               this_package_MRV_ava     = atomsGetMRVersion(name(i)); // Most Recent Version Available
-               this_package_ins_section = package_main_list(i,3);
-               
-               // Now check if it's dependencies are up-to-date
-               dependencies = atomsInstallList([name(i) this_package_MRV_ins],this_package_ins_section);
-               
-               for j=1:size(dependencies(:,1),"*")
-                       
-                       if ~atomsIsInstalled([dependencies(j,3) dependencies(j,4)],this_package_ins_section) then
-                               
-                               // Install the new toolbox
-                               this_result = atomsInstall([dependencies(j,3) dependencies(j,4)],this_package_ins_section);
-                               
-                               // It's just a dependency
-                               atomsInstallUnregister(dependencies(j,3),dependencies(j,4),this_package_ins_section);
-                               atomsInstallRegister(dependencies(j,3),dependencies(j,4),"A",this_package_ins_section);
-                               
-                               // Fill the output argument
-                               result = [ result ; this_result ];
-                       end
-                       
-               end
-               
-       end
-       
-       // Remove older version of all items of "name" array
-       // =========================================================================
-       
-       for i=1:size(package_main_list(:,1),"*")
-               
-              &nbs