* Bug 14395 fixed: %dir_p repaired against []+'..' when no subdir
[scilab.git] / scilab / modules / fileio / macros / %dir_p.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) DIGITEO - 2011 - Allan CORNET
4 //
5 // Copyright (C) 2012 - 2016 - Scilab Enterprises
6 //
7 // This file is hereby licensed under the terms of the GNU GPL v2.0,
8 // pursuant to article 5.3.4 of the CeCILL v.2.1.
9 // This file was originally licensed under the terms of the CeCILL v2.1,
10 // and continues to be available under such terms.
11 // For more information, see the COPYING file which you should have received
12 // along with this program.
13
14 function %dir_p(L)
15     ll = lines();
16     ll = max(ll(1), 20);
17     name = L.name;
18     if name == [] then
19         mprintf("%s \n", "[]");
20         return
21     end
22
23     // If it is a directory, add a trailing "/"
24     tmp = find(L.isdir);
25     if tmp~=[] then
26         name(tmp) = name(tmp) + filesep();
27     end
28
29     nc = 6;
30     l1 = length(name);
31     while %t
32         l2 = l1;
33         n = ceil(size(l1, "*") / nc);
34         if n*nc > size(name, "*") then
35             l2(n * nc) = 0;
36             l1(n * nc) = 0;
37         end
38         l = max(matrix(l2, -1, nc), "r");
39         if (sum(l) < ll)| (nc == 1) then
40             break
41         end
42         nc = nc - 1;
43     end
44     if n * nc > size(name, "*") then
45         name(n*nc) = "";
46     end
47     name = matrix(name, -1, nc);
48     txt = emptystr(n, 1);
49     for k = 1:nc
50         txt = txt + part(name(:, k), 1 : l(k) + 1);
51     end
52     txt = stripblanks(txt);
53     txt(txt == "") = [];
54     mprintf("%s \n",txt);
55 endfunction