Regenerate dia.ref after indentation hook
[scilab.git] / scilab / modules / io / macros / unix_g.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 //
6 // Copyright (C) 2012 - 2016 - Scilab Enterprises
7 //
8 // This file is hereby licensed under the terms of the GNU GPL v2.0,
9 // pursuant to article 5.3.4 of the CeCILL v.2.1.
10 // This file was originally licensed under the terms of the CeCILL v2.1,
11 // and continues to be available under such terms.
12 // For more information, see the COPYING file which you should have received
13 // along with this program.
14
15
16 function varargout = unix_g(cmd)
17     //unix_g - shell command execution
18     //%Syntax
19     //rep=unix_g(cmd)
20     //%Parameters
21     // cmd - a character string
22     // rep - a column vector of character strings
23     //%Description
24     // cmd instruction (sh syntax) is passed to shell, the standard output
25     // is redirected  to scilab variable rep.
26     //%Examples
27     // unix_g("ls")
28     //%See also
29     // host unix_x unix_s
30     //!
31
32     [lhs,rhs] = argn(0);
33
34     if rhs <> 1 then
35         error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"unix_g",1));
36     end
37
38     if type(cmd) <> 10 then
39         error(msprintf(gettext("%s: Wrong type for input argument #%d: String expected.\n"),"unix_g",1));
40     end
41
42     if size(cmd,"*") <> 1 then
43         error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"unix_g",1));
44     end
45
46     if lhs > 3 then
47         error(msprintf(gettext("%s: Wrong number of output argument(s).\n"),"unix_g"));
48     end
49
50     // initialize variables
51     stderr = emptystr();
52     stat = 1;
53     rep = emptystr();
54
55     if getos() == "Windows" then
56         [rep,stat] = dos(cmd);
57         if (stat == %t) then
58             stat = 0;
59         else
60             if lhs == 3 then
61                 stderr = rep;
62             else
63                 for i=1:size(rep,"*") do write(%io(2),"   "+rep(i));end
64             end
65
66             stat = 1;
67             rep = emptystr();
68         end
69     else
70         tmp = TMPDIR+"/unix.out";
71         cmd1 = "("+cmd+")>"+ tmp +" 2>"+TMPDIR+"/unix.err;";
72         stat = host(cmd1);
73
74         select stat
75
76         case 0 then
77             rep = mgetl(tmp);
78             if (size(rep,"*")==0) | (length(rep)==0) then
79                 rep = [];
80             end;
81
82         case 1 then
83             rep = mgetl(tmp);
84
85         case -1 then
86             // host failed
87             if lhs == 3 then
88                 stderr = msprintf(gettext("%s: The system interpreter does not answer..."),"unix_g");
89             else
90                 disp(msprintf(gettext("%s: The system interpreter does not answer..."),"unix_g"));
91             end
92             rep = emptystr();
93         else
94             msg = mgetl(TMPDIR+"/unix.err");
95             if lhs == 3 then
96                 stderr = msg;
97             else
98                 disp(msg(1));
99             end
100             rep = emptystr();
101         end
102
103         mdelete(tmp);
104     end
105
106     // output arguments
107
108     varargout(1) = rep;
109
110     if lhs >= 2 then
111         varargout(2) = stat;
112     end
113
114     if lhs >= 3 then
115         varargout(3) = stderr;
116     end
117
118 endfunction