* Bug 16679 fixed: get_function_path('acosh') yielded an error
[scilab.git] / scilab / modules / functions / macros / getd.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) ENPC
4 // Copyright (C) 2016, 2017 - 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 function getd(path,option)
16
17     // get all .sci files in the specified directory
18
19     [lhs,rhs]=argn(0);
20
21     if rhs<=0 then
22         path="./";
23     end
24
25     // convert path according to getos() == 'Windows' flag
26     // and with env var substitutions
27     path = pathconvert(path,%t,%t);
28
29     // list the sci files
30     global lst
31     lst          = listfiles(path+"*.sci",%f);
32     lst_filtered = [];
33
34     // remove wrong files extension
35     // bug 2289
36
37     for i = 1:size(lst,"*")
38         if( regexp(lst(i),"/.sci$/") <> [] ) then
39             lst_filtered = [lst_filtered;lst(i)];
40         end
41     end
42
43     lst = lst_filtered;
44     clear lst_filtered;
45
46     if lst==[] | lst== "" then
47         error(msprintf(gettext("%s: I cannot find any files with extension %s in %s\n"),"getd",".sci",path));
48         return ;
49     end
50
51     // Bug http://bugzilla.scilab.org/13583 : some scripts loaded through the
52     //  loop may contain "clear" instructions deleting a) the list of files to
53     //  be processed, and b) the reference list of internal getd() variables not
54     //  to be returned.
55     //  Informations to be protected are set in global variables: lst, old
56     global old          // sets it as global, before first assignment
57     k_getd_loop = 0;
58     old = who("local")
59     old = old(isdef(old, "l"))
60     //prot = funcprot(); funcprot(0)
61     for k_getd_loop = 1:size(lst,"*");
62         global lst // recover it whenever it would have been cleared
63         if fileparts(lst(k_getd_loop),"extension")==".sci" then
64             // disp(basename(lst(k))) // Beware: files are not sorted/loaded in alphabetical order
65             if execstr("exec(lst(k_getd_loop));","errcatch")<>0 then
66                 warning(msprintf(gettext("%s: Incorrect function in file %s.\n"),"getd",lst(k_getd_loop)))
67             end
68         end
69     end
70     global old
71     //funcprot(prot);
72     new = who("local");
73     new = new(isdef(new, "l"))
74     new = setdiff(new, old)
75     clearglobal old lst
76
77     if new<>[] then
78         execstr("["+strcat(new,",")+"]=resume("+strcat(new,",")+")")
79     end
80
81 endfunction