Fix some localization issues
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsExtract.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 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
9
10 // Internal function
11
12 function dir_created = atomsExtract(archive_in,dir_out)
13
14     // Check input parameters number
15     // =========================================================================
16
17     rhs  = argn(2);
18
19     if rhs <> 2 then
20         error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsExtract",2));
21     end
22
23     // Check input parameters type
24     // =========================================================================
25
26     if type(archive_in) <> 10 then
27         error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsExtract",1));
28     end
29
30     if type(dir_out) <> 10 then
31         error(msprintf(gettext("%s: Wrong type for input argument #%d: Single string expected.\n"),"atomsExtract",2));
32     end
33
34     // Check input parameters size
35     // =========================================================================
36
37     if size(archive_in,"*") <> 1 then
38         error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsExtract",1));
39     end
40
41     if size(dir_out,"*") <> 1 then
42         error(msprintf(gettext("%s: Wrong size for input argument #%d: Single string expected.\n"),"atomsExtract",2));
43     end
44
45     // Check input parameters value
46     // =========================================================================
47
48     if regexp(archive_in,"/(\.tar\.gz|\.tgz|\.zip)$/","o") == [] then
49         error(msprintf(gettext("%s: Wrong value for input argument #%d: Single string that ends with .tar.gz, .tgz or .zip expected.\n"),"atomsExtract",1));
50     end
51
52     if fileinfo(archive_in) == [] then
53         error(msprintf(gettext("%s: The file ""%s"" does not exist or is not read accessible.\n"),"atomsExtract",archive_in));
54     end
55
56     if ~ isdir(dir_out) then
57         error(msprintf(gettext("%s: The directory ""%s"" does not exist.\n"),"atomsExtract",dir_out));
58     end
59
60     // Operating system detection + Architecture detection
61     // =========================================================================
62     [OSNAME,ARCH,LINUX,MACOSX,SOLARIS,BSD] = atomsGetPlatform();
63
64     // Get the list of directories before the extraction
65     // =========================================================================
66     dirs_before = atomsListDir(dir_out);
67
68     // Build the extract command
69     // =========================================================================
70
71     if ( LINUX | MACOSX | SOLARIS | BSD ) & regexp(archive_in,"/(\.tar\.gz|\.tgz)$/","o") <> [] then
72
73         extract_cmd = "tar xzf "+ archive_in + " -C """+ dir_out + """";
74
75     elseif regexp(archive_in,"/\.zip$/","o") <> [] then
76
77         if getos() == "Windows" then
78             extract_cmd = """" + getshortpathname(pathconvert(SCI+"/tools/zip/unzip.exe",%F)) + """";
79         else
80             extract_cmd = "unzip";
81         end
82
83         extract_cmd = extract_cmd + " -q """ + archive_in + """ -d """ + pathconvert(dir_out,%F) +"""";
84
85     end
86
87     [rep,stat,err] = unix_g(extract_cmd);
88
89     if stat ~= 0 then
90         atomsError("error", ..
91         msprintf(gettext("%s: The extraction of the archive ''%s'' has failed.\n"), ..
92         "atomsExtract", ..
93         strsubst(archive_in,"\","\\") ));
94     end
95
96     // Get the list of directories after the extraction
97     // =========================================================================
98
99     dirs_after = atomsListDir(dir_out);
100
101
102     // Get the name of the created directory
103     // =========================================================================
104
105     dir_created = [];
106
107     for j=1:size(dirs_after,"*")
108         if find(dirs_after(j) == dirs_before) == [] then
109             dir_created = dirs_after(j);
110             break;
111         end
112     end
113
114 endfunction
115
116
117 // =============================================================================
118 // Just get the list of the directories present in the current directory
119 // =============================================================================
120
121 function result = atomsListDir(path)
122
123     // Init the output argument
124     // =========================================================================
125     result = [];
126
127     // Save the initial path
128     // =========================================================================
129     initialpath = pwd();
130
131     chdir(path);
132     items  = listfiles();
133
134     // Loop on items
135     // =========================================================================
136     for i=1:size(items,"*")
137         if isdir(items(i)) then
138             result = [ result ; items(i) ];
139         end
140     end
141
142     // Go to the initial location
143     // =========================================================================
144     chdir(initialpath);
145
146 endfunction