34145c8a0e7a6ada3d64195043dd9a7fa28da73b
[scilab.git] / scilab / modules / fileio / macros / mkdir.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2007 - INRIA - Allan CORNET
3 // Copyright (C) 2010 - DIGITEO - Allan CORNET
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-en.txt
10
11 function [status, msg]=mkdir(varargin)
12   // mkdir Make a directory
13   //------------------------------------------------------------------------
14
15   lhs  = argn(1);
16   rhs  = argn(2);
17
18   DirName  = "";
19   NewDirName = "";
20   status   = 0 ;
21   msg  = "";
22
23   select rhs
24
25   case 0
26     error(msprintf(gettext("%s: Wrong number of input argument(s).\n"), "mkdir"));
27     break
28
29   case 1
30     NewDirName   = varargin(1);
31     if type(NewDirName) <> 10 then
32       error(999, msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"), "mkdir", 1));
33     end
34
35     if size(NewDirName, "*") <> 1 then
36       error(999, msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"), "mkdir", 1));
37     end
38
39     NewDirName   = stripblanks(NewDirName, %T);
40     if is_absolute_path(NewDirName) then
41       NewDirectory = NewDirName;
42     else
43       NewDirectory = fullfile(pwd(),NewDirName);
44     end
45     break
46
47   case 2
48     DirName  = varargin(1);
49     if type(DirName) <> 10 then
50       error(999, msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"), "mkdir", 1));
51     end
52
53     if size(DirName, "*") <> 1 then
54       error(999, msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"), "mkdir", 1));
55     end
56
57     NewDirName   = varargin(2);
58     if type(NewDirName) <> 10 then
59       error(999, msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"), "mkdir", 2));
60     end
61
62     if size(NewDirName, "*") <> 1 then
63       error(999, msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n"), "mkdir", 2));
64     end
65
66     NewDirName   = stripblanks(NewDirName, %T);
67     DirName  = stripblanks(DirName, %T);
68     NewDirectory = fullfile(DirName, NewDirName);
69     break
70
71   else
72     error(msprintf(gettext("%s: Wrong number of input argument(s).\n"), "mkdir"));
73   end
74
75   NewDirectory = fullpath(NewDirectory);
76
77   if ~isdir(NewDirectory) & ~isfile(NewDirectory) then
78     // The directory does not exist
79     status = 1;
80   else
81     // The directory or file exists
82     if isfile(NewDirectory) then
83       // it is a file
84       status = -2;
85     else
86       // it is a directory
87       status = 2;
88     end
89   end
90
91   select status
92
93   case 0
94     break
95
96   case 1
97     bAddFirstDirSep = %f;
98     subdirs = strsplit(NewDirectory, ["/" "\"]);
99     if subdirs(1) == "" then
100       subdirs(1) = [];
101       bAddFirstDirSep = %t;
102     end
103     for i = 1:size(subdirs, "*")
104       currentsubdir = strcat(subdirs(1:i), filesep());
105       if bAddFirstDirSep then
106         currentsubdir = filesep() + currentsubdir;
107       end
108       if ~isfile(currentsubdir) & ~isdir(currentsubdir) then
109         status = createdir(currentsubdir);
110         if ~status then break, end
111       end
112     end
113
114     if ~isdir(NewDirectory) & ~isfile(NewDirectory) then
115       status = createdir(NewDirectory);
116     end
117
118     if (~status) then
119       msg  =  msprintf(gettext("%s: An error occurred: %s\n"),"mkdir",gettext("Impossible to create directory ")) + NewDirectory;
120       status = 0;
121     else
122       msg  = "";
123       status = 1;
124     end
125     break
126
127   case 2
128     msg  =  msprintf(gettext("%s: An error occurred: %s\n"),"mkdir",gettext("This directory already exists in ")) + NewDirectory;
129     break
130
131   case -2
132     msg  =  msprintf(gettext("%s: An error occurred: %s\n"),"mkdir",gettext("A file with the same name already exists in ")) + DirName;
133     break
134
135   else
136     msg  =  msprintf(gettext("%s: An error occurred: %s\n"),"mkdir",gettext("Impossible to create directory ")) + NewDirectory;
137   end
138
139 endfunction