Regenerate dia.ref after indentation hook
[scilab.git] / scilab / modules / io / macros / unix_w.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) XXXX-2008 - INRIA
3 // Copyright (C) XXXX-2008 - INRIA - Allan CORNET
4 //
5 // Copyright (C) 2012 - 2016 - Scilab Enterprises
6 //
7 // This file is hereby licensed under the terms of the GNU GPL v2.0,
8 // pursuant to article 5.3.4 of the CeCILL v.2.1.
9 // This file was originally licensed under the terms of the CeCILL v2.1,
10 // and continues to be available under such terms.
11 // For more information, see the COPYING file which you should have received
12 // along with this program.
13
14
15 function unix_w(cmd)
16     //unix_w - shell command execution results redirected in main scilab window
17     //%Syntax
18     // unix_w(cmd)
19     //%Parameters
20     // cmd - a character string
21     //%Description
22     // cmd instruction (sh syntax) is passed to shell, the standard output
23     // is redirected  to main scilab window
24     //%Examples
25     // unix_w("ls")
26     //%See also
27     // host unix_x unix_s unix_g
28     //!
29
30     [lhs,rhs] = argn(0);
31
32     if rhs <> 1 then
33         error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"unix_w",1));
34     end
35
36     if type(cmd) <> 10 then
37         error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"unix_w",1));
38     end
39
40     if size(cmd,"*") <> 1 then
41         error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"unix_w",1));
42     end
43
44     if getos() == "Windows" then
45         [rep,stat]=dos(cmd,"-echo");
46         if (~stat) then
47             error(msprintf(gettext("%s: error during ""%s"" execution"),"unix_w",cmd));
48         end
49     else
50         tmp=TMPDIR+"/unix.out";
51         cmd1="("+cmd+")>"+ tmp +" 2>"+TMPDIR+"/unix.err;";
52         stat=host(cmd1);
53
54         select stat
55         case 0 then
56             write(%io(2),read(tmp,-1,1,"(a)"));
57         case -1 then // host failed
58             error(msprintf(gettext("%s: The system interpreter does not answer..."),"unix_w"));
59         else
60             msg=read(TMPDIR+"/unix.err",-1,1,"(a)");
61             if (size(msg,"*") == 0) then // If the program does not return anything
62                 msg=""
63             end
64             errmsg = msprintf(gettext("%s: The command failed with the error code ""%s"" and the following message:\n"),"unix_w",string(stat));
65             error(msprintf("%s\n"+strcat(msg, "\n"), errmsg));
66         end
67         deletefile(tmp);
68     end
69 endfunction