c9d4598b134d3defc6351df7ad631fa640356e1b
[scilab.git] / scilab / modules / core / macros / toolboxes.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) DIGITEO - 2009 - Allan CORNET
4 // Copyright (C) 2012 - 2015 - Samuel GOUGEON
5 //
6 // Copyright (C) 2012 - 2016 - Scilab Enterprises
7 //
8 // This file is hereby licensed under the terms of the GNU GPL v2.0,
9 // pursuant to article 5.3.4 of the CeCILL v.2.1.
10 // This file was originally licensed under the terms of the CeCILL v2.1,
11 // and continues to be available under such terms.
12 // For more information, see the COPYING file which you should have received
13 // along with this program.
14
15 //===========================================================
16 function [y] = toolboxes(path)
17     // INTERNAL macro should NOT used by users
18     // toolboxes loading
19     // path is a directory to explore for contribs
20     //===========================================================
21     global %toolboxes
22     global %toolboxes_dir
23     //===========================================================
24     [lhs,rhs] = argn(0)
25     y = []
26     // Action
27     if (rhs == 1) & typeof(path)=="constant" then
28         // return string to exec
29         tmp = %toolboxes(path);
30         if part(tmp,1)=="!" then   // ATOMS module
31             atomsMod = atomsGetInstalled();
32             tmp = strtok(tmp, ",") // Trims the part of the release numbers
33             name = atomsMod(find(atomsMod(:,1)==part(tmp, 2:length(tmp))),1);
34             y = "atomsLoad("""+name+""")"
35         else
36             Path = %toolboxes_dir + stripblanks(tmp);
37             y = "exec(""" + pathconvert(Path) + filesep() + "loader.sce" + """);"
38         end
39         return
40     end
41
42     // Non ATOMS modules
43     if rhs == 0 then
44         path = SCI + filesep() + "contrib";
45     end
46
47     cur_wd = pwd();
48     chdir(path);
49     files = listfiles(".");
50     contribs = [];
51     for k = 1:size(files,"*")
52         if isfile(files(k)+"/loader.sce") then
53             contribs = [contribs ; files(k)];
54         end
55     end
56
57     // ATOMS modules without autoloading
58     installed   = atomsGetInstalled()
59     autoloading = atomsAutoloadList()
60     for i = 1:size(installed,1)
61         if and(installed(i,1)~=autoloading(:,1)) then
62             contribs = [contribs ; "!"+installed(i,1)+","+installed(i,2)]
63         end
64     end
65
66     // Creating the menu and its entries
67     if (contribs <> []) & (getscilabmode() == "STD") then
68         contribs = gsort(contribs, "g", "i")
69         delmenu(gettext("&Toolboxes"));
70         h = uimenu("parent", 0, "label", gettext("&Toolboxes"));
71         for k=1:size(contribs,"*")
72             ptitle = strsubst(contribs(k),","," ");
73             if part(ptitle,1)=="!"
74                 ptitle = part(ptitle,2:$)+"  (atoms)";
75             end
76             m = uimenu(h,"label", ptitle, ..
77             "callback","execstr(toolboxes("+msprintf("%d",k)+"))");
78         end
79         unsetmenu(gettext("&Toolboxes"));
80     end
81
82     %toolboxes = contribs;
83     %toolboxes_dir = pathconvert(path);
84     chdir(cur_wd);
85
86 endfunction
87 //===========================================================