9c883a9dd10efaed204ba112e138f4488b9bc09d
[scilab.git] / scilab / modules / modules_manager / macros / tbx_build_blocks.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2011 - DIGITEO - ClĂ©ment DAVID <clement.david@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 function tbx_build_blocks(module, names, macros_path)
14     // Build a default block instance
15     //
16     // Syntax
17     //   tbx_build_blocks(module, names)
18     //
19     // Parameters
20     // module: toolbox base directory
21     // names: list of block names (sci file name without extension)
22
23     if argn(2) < 2 then
24         error(msprintf(gettext("%s: Wrong number of input arguments: At least %d expected.\n"),"tbx_build_blocks",2));
25     end
26     if argn(2) > 3 then
27         error(msprintf(gettext("%s: Wrong number of input arguments: At most %d expected.\n"),"tbx_build_blocks",3));
28     end
29
30
31     // checking module argument
32     if type(module) <> 10 then
33         error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"),"tbx_build_blocks",1));
34     end
35     if size(module,"*") <> 1 then
36         error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"tbx_build_blocks",1));
37     end
38     if ~isdir(module) then
39         error(msprintf(gettext("%s: The directory ''%s'' doesn''t exist or is not read accessible.\n"),"tbx_build_blocks",module));
40     end
41
42     // checking names argument
43     if type(names) <> 10 then
44         error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"),"tbx_build_blocks",2));
45     end
46
47     // checking optional macros_path argument
48     if ~exists("macros_path", "l") then
49         macros_path = module + "/macros/";
50     end
51     if type(macros_path) <> 10 then
52         error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"),"tbx_build_blocks",3));
53     end
54     if size(macros_path,"*") <> 1 then
55         error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"tbx_build_blocks",3));
56     end
57     if ~isdir(macros_path) then
58         error(msprintf(gettext("%s: The directory ''%s'' doesn''t exist or is not read accessible.\n"),"tbx_build_blocks",macros_path));
59     end
60
61     mprintf(gettext("Building blocks...\n"));
62
63     // load Xcos libraries when not already loaded.
64     if ~exists("Sourceslib") then loadXcosLibs(); end
65
66     // create directories
67     if ~isdir(module + "/images") then
68         createdir(module + "/images");
69     end
70     if ~isdir(module + "/images/h5") then
71         createdir(module + "/images/h5");
72     end
73     if ~isdir(module + "/images/gif") then
74         createdir(module + "/images/gif");
75     end
76     if ~isdir(module + "/images/svg") then
77         createdir(module + "/images/svg");
78     end
79
80     names = names(:);
81     sciFiles = pathconvert(macros_path + "/") + names + ".sci";
82     h5Files = pathconvert(module + "/images/h5/") + names + ".sod";
83     gif_tlbx = pathconvert(module + "/images/gif");
84     svg_tlbx = pathconvert(module + "/images/svg");
85     for i=1:size(names, "*")
86         // load the interface function
87         exec(sciFiles(i), -1);
88
89         // export the instance
90         execstr(msprintf("scs_m = %s (''define'');", names(i)));
91         try
92             save(h5Files(i), "scs_m");
93         catch
94             error(msprintf(gettext("%s: Unable to export %s to %s.\n"),"tbx_build_blocks",names(i), h5Files(i)));
95         end
96
97         blk = scs_m;
98
99         // export a schema file if it doesn't exist
100         files = svg_tlbx + "/" + names(i) + [".svg" ".png" ".jpg" ".gif"];
101         files = files(isfile(files));
102         if files == [] then
103             filename = svg_tlbx + "/" + names(i) + ".svg";
104             if ~generateBlockImage(blk, svg_tlbx, names(i), "svg", %f) then
105                 error(msprintf(gettext("%s: Unable to export %s to %s .\n"),"tbx_build_blocks",names(i), filename));
106             end
107         end
108
109         // export an image file if it doesn't exist
110         files = gif_tlbx + "/" + names(i) + [".png" ".jpg" ".gif"];
111         files = files(isfile(files));
112         if files == [] then
113             filename = gif_tlbx + "/" + names(i) + ".gif";
114             xcosPalGenerateIcon(filename);
115         end
116     end
117 endfunction