License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / atoms / macros / atomsDepTreeShow.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 // End user function
14
15 // Input arguments :
16
17 //   name : . technical name of the package
18 //          . single string
19 //          . mandatory
20
21 //   version : . version of the package
22 //             . single string
23 //             . optional
24
25 // Output arguments :
26
27 function atomsDepTreeShow(package)
28
29     // Load Atoms Internals lib if it's not already loaded
30     // =========================================================================
31     if ~ exists("atomsinternalslib") then
32         load("SCI/modules/atoms/macros/atoms_internals/lib");
33     end
34
35     rhs = argn(2);
36
37     // Check number of input arguments
38     // =========================================================================
39
40     if rhs <> 1 then
41         error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsDepTreeShow",1));
42     end
43
44     // Check input parameters type
45     // =========================================================================
46
47     if type(package) <> 10 then
48         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsDepTreeShow",1));
49     end
50
51     if size(package(1,:),"*") > 2 then
52         error(msprintf(gettext("%s: Wrong size for input argument #%d: 1x1 or 1x2 string matrix expected.\n"),"atomsDepTreeShow",1));
53     end
54
55     // Get the dependency tree
56     // =========================================================================
57
58     if size(package(1,:),"*") == 2 then
59         tree = atomsDepTreeExt(package(1),package(2));
60     else
61         tree = atomsDepTreeExt(package(1));
62     end
63
64     situation = struct();
65     situation("current_level")  = 1;
66
67     mprintf("\n");
68     atomsDispTree(tree,situation)
69
70 endfunction
71
72
73 function atomsDispTree(tree,situation)
74
75     fields      = getfield(1,tree);
76     fields(1:2) = [];
77
78     current_level = situation("current_level");
79     situation("level"+string(current_level)+"_number") = size(fields,"*");
80     situation("level"+string(current_level)+"_pos")    = 1;
81
82     for i=1:size(fields,"*")
83
84         this_package_details = tree(fields(i));
85
86         for j=1:current_level-1
87             if situation("level"+string(j)+"_pos") < situation("level"+string(j)+"_number") then
88                 mprintf("|   ");
89             else
90                 mprintf("    ");
91             end
92         end
93
94         if current_level == 1 then
95             mprintf("    ");
96         elseif situation("level"+string(current_level)+"_pos") == situation("level"+string(current_level)+"_number") then
97             mprintf("`-- ");
98         else
99             mprintf("|-- ");
100         end
101
102         mprintf("%s - %s\n",this_package_details("Toolbox"),this_package_details("Version"));
103
104         if isfield(this_package_details,"DependencyTree") then
105
106             next_situation                  = situation;
107             next_situation("current_level") = current_level + 1;
108             this_package_deptree            = this_package_details("DependencyTree");
109             atomsDispTree(this_package_deptree,next_situation);
110
111         end
112
113         situation("level"+string(current_level)+"_pos") = situation("level"+string(current_level)+"_pos") + 1;
114
115     end
116
117 endfunction