bug #13983: who_user returns wrong values
[scilab.git] / scilab / modules / core / macros / who_user.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) 2012 - Scilab Enterprises - Antoine ELIAS
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10
11 //2012/08/06 add return value with variable list.
12
13 function ret = who_user(%__bPrint__)
14     //get user variables
15     [nams,mem]=who("get"); //get all variables
16     p=predef("names");
17
18     //remove predef vars
19     ke=grep(nams,p);
20     nams(ke) = [];
21     mem(ke) = [];
22
23     //modifiable system variables
24     excluded=["nargin","nargout","demolist","%helps","%helps_modules","home","who_user", "%__bPrint__"];
25     ke=grep(nams,excluded)
26     nams(ke)=[];mem(ke)=[];
27     ret = nams
28
29     [%_lhs, %_rhs] = argn();
30
31     if %_rhs == 0 then
32         %__bPrint__ = %t;
33     end
34
35     if %__bPrint__ == %f then
36         return;
37     end
38
39     n=size(nams,1);
40
41     if n==0 then
42         return
43     end
44
45     //format names on n*10 characters
46     ll=length(nams)+2;m=int((ll-1)/10)+1;
47     for k=1:max(m)
48         ks=find(m==k);
49         if ks<>[] then
50             nams(ks)=part(nams(ks),1:(k*10));
51         end
52     end
53
54     nlc=lines(); nc=nlc(1)//window sizes
55
56     txt=[]
57
58     k=1
59     while k<=n
60         m=find(cumsum(length(nams(k:$)))<nc);
61         m=m($)
62         txt=[txt;strcat(nams(k:k-1+m))];
63         k=k+m;
64     end
65
66     txt=[gettext("User variables are:");
67     "";
68     txt;
69     "";
70     msprintf(gettext("Using %s elements"),string(sum(mem)))]
71     write(%io(2),txt,"(1x,a)")
72 endfunction