Localization (fileio)
[scilab.git] / scilab / modules / fileio / macros / copyfile.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2004 - INRIA - Allan CORNET
3 // Copyright (C) 2008 - INRIA - Sylvestre
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
12 // copy file
13
14 function [status,msg]=copyfile(varargin)
15 lhs=argn(1);
16 rhs=argn(2);
17
18 fname = 'copyfile';
19
20 Writable=%F;
21 status=0;
22 msg='';
23
24 select rhs
25 case 2
26   SourceFile=varargin(1);
27   DestinationFile=varargin(2);
28   break
29 case 3
30   SourceFile=varargin(1);
31   DestinationFile=varargin(2);
32   flag=convstr(varargin(3),'u');
33   if (flag=='WRITABLE') then
34         Writable=%T;
35   else
36         error(msprintf(gettext("%s: Wrong value for input argument #%d: %s expected.\n"),fname,3,"WRITABLE"));
37   end
38   break
39 else
40   error(msprintf(gettext("%s: Wrong number of input arguments.\n"),fname));
41 end
42
43 [DestDir,DestFile]=GetDirFile(DestinationFile);
44
45 if MSDOS then
46   [SourceDir,SourceFile]=GetDirFile(SourceFile);
47   
48   Src = """"+fullfile(SourceDir,SourceFile)+"""";
49   Dest = """"+fullfile(DestDir,DestFile)+"""";
50   
51   Rep=isdir(SourceDir);
52   if (Rep==%F) then
53         // Check the source directory is a directory
54         msg=msprintf(gettext("%s: Source directory %s does not exist or is unreadable.\n"), fname ,SourceDir);
55         return;
56   end
57   Rep=ls(fullfile(SourceDir,SourceFile))
58
59 else
60   Src=SourceFile
61   Dest=DestinationFile
62   Rep=ls(Src)
63 end
64
65 if (Rep==[]) then
66   // Check the source file existes
67   msg=msprintf(gettext("%s: Source file %s does not exist or unable to access.\n"),fname,SourceFile);
68   return;
69 end
70 // Now checking destination directory...
71 Rep=isdir(DestDir);
72 if (Rep==%F) then
73   msg=msprintf(gettext("%s: Destination directory %s does not exist or is unreadable.\n"),fname,DestDir);
74   return;
75 end
76
77
78 if MSDOS then
79   cmd='copy '+Src+' '+Dest;
80   batchlog = ' >'+ TMPDIR+'\copyfile.out' +' 2>'+TMPDIR+'\copyfile.err';
81 else
82   // strsubst are here to "protect" the space in the path
83   cmd='cp '+strsubst(Src," ","\ ")+' '+strsubst(Dest," ","\ ");
84   batchlog = ' >'+ TMPDIR+'/copyfile.out' +' 2>'+TMPDIR+'/copyfile.err';
85 end
86 cmdline =cmd+batchlog;
87 // TODO: Rewrite this stuff
88 status=unix(cmdline);
89
90 if (status~=0) then
91   if MSDOS then
92         msg='Error : '+mgetl(TMPDIR+'\copyfile.err');
93         msg=msg+' '+mgetl(TMPDIR+'\copyfile.out');
94   else
95         msg='Error : '+mgetl(TMPDIR+'/copyfile.err');
96         msg=msg+' '+mgetl(TMPDIR+'/copyfile.out');
97   end
98   status=0;
99 else
100   msg='';
101   status=1;
102 end
103
104 if (Writable==%T) & (status==1) then
105   if MSDOS then
106         cmd='attrib -r '+ Dest;
107         batchlog = ' >'+ TMPDIR+'\attrib.out' +' 2>'+TMPDIR+'\attrib.err';
108   else
109         cmd='chmod +w '+ Dest;
110         batchlog = ' >'+ TMPDIR+'\attrib.out' +' 2>'+TMPDIR+'\attrib.err';
111   end
112   cmdline =cmd+batchlog;
113   status=unix(cmdline);
114   if (status~=0) then
115         if MSDOS then
116           msg='Error : '+mgetl(TMPDIR+'\attrib.err');
117           msg=msg+' '+mgetl(TMPDIR+'\attrib.out');
118         else
119           msg='Error : '+mgetl(TMPDIR+'/attrib.err');
120           msg=msg+' '+mgetl(TMPDIR+'/attrib.out');
121         end
122   end
123 end
124
125 endfunction
126 //------------------------------------------------------------------------
127 function [Directory,Filename]=GetDirFile(OrigFile)
128 [path,fname,ext]=fileparts(OrigFile);
129 if (path=='') then
130   Directory=pwd();
131   Filename=OrigFile;
132 else
133   Directory=path;
134   Filename=fname+ext;
135 end
136 endfunction
137 //------------------------------------------------------------------------