* Bug #14582: gettext or _ were applied to broken literal strings
[scilab.git] / scilab / modules / cacsd / macros / syslin.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA -
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function [sl]=syslin(domain,a,b,c,d,x0)
14
15     [lhs,rhs]=argn(0)
16     //
17     // check domain
18     select type(domain)
19     case 1 then  //sampled system
20         if size(domain,"*")<=2 then
21             tp=domain
22         else
23             error(msprintf(gettext("%s: Wrong size for input argument #%d: A scalar expected.\n"),"syslin",1))
24         end
25         z="z"
26     case 10 //continuous or discrete
27         if size(domain,"*")<>1 then
28             error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"syslin",1))
29         end
30
31         domain=part(domain,1)
32         select domain
33         case "c" then
34             z="s"
35         case "d" then
36             z="z"
37         else
38             error(msprintf(gettext("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), "syslin",1,"''c'',''d''"))
39         end;
40     else
41         error(msprintf(gettext("%s: Wrong type for input argument #%d: String, Scalar or empty matrix expected.\n"),"syslin",1))
42     end;
43     //============================================================================
44     if rhs==2 then //syslin(domaine,sys)
45
46         if typeof(a)=="state-space" | typeof(a)=="rational" then
47             sl=a;
48             sl("dt")=domain
49         else
50             error(msprintf(gettext("%s: Wrong type for input argument #%d: Linear state space or a transfer function expected.\n"),"syslin",2))
51         end
52         //============================================================================
53     elseif rhs==3 then // syslin(domaine,num,den)
54         num=a;den=b
55         if type(num)>2 then
56             error(msprintf(gettext("%s: Wrong type for input argument #%d: Polynomial array expected.\n"),"syslin",2))
57         end
58         if  type(den)>2 then
59             error(msprintf(gettext("%s: Wrong type for input argument #%d: Polynomial array expected.\n"),"syslin",3))
60         end
61
62         if or(size(num)<>size(den)) then
63             error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"syslin",2,3))
64         end
65
66         if type(num)==2 & type(den)==2 then
67             if varn(num)<>varn(den) then
68                 error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same formal variable names expected.\n"),"syslin",2,3))
69             end
70         end
71         if type(num)==1 then
72             num=num*poly(1,z,"c")
73         end
74         if type(den)==1 then
75             den=den*poly(1,z,"c")
76         end
77
78         sl=rlist(varn(num,z),varn(den,z),domain)
79         //============================================================================
80     elseif rhs>3 then // syslin(domaine,A,B,C [,D [X0]])
81         if type(a)<>1 then
82             error(msprintf(gettext("%s: Wrong type for input argument #%d: Array of floating point numbers expected.\n"),"syslin",2))
83         end
84         [ma,na]=size(a);
85         if ma<>na then
86             error(msprintf(gettext("%s: Wrong size for input argument #%d: Square matrix expected.\n"),"syslin",2))
87         end
88         if type(b)<>1 then
89             error(msprintf(gettext("%s: Wrong type for input argument #%d: Array of floating point numbers expected.\n"),"syslin",3))
90         end
91         [mb,nb]=size(b);
92         if na<>mb&mb<>0 then
93             error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same row dimensions expected.\n"),"syslin",2,3));
94         end
95         if type(c)<>1 then
96             error(msprintf(gettext("%s: Wrong type for input argument #%d: Array of floating point numbers expected.\n"),"syslin",4))
97         end
98         [mc,nc]=size(c);
99         if na<>nc&nc<>0 then
100             error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),"syslin",2,4));
101         end
102         if rhs<6 then
103             x0=0*ones(na,1)
104         else
105             if type(x0)>1 then
106                 error(msprintf(gettext("%s: Wrong type for input argument #%d: Array of floating point numbers expected.\n"),"syslin",6))
107             end
108             [mx,nx]=size(x0);
109             if mx<>na|nx<>min(na,1) then
110                 msg = _("%s: Incompatible input arguments #%d and #%d: number of elements of #%d must match the column dimension of #%d\n")
111                 error(msprintf(msg,"syslin",6,1,6,1));
112             end
113         end
114         if rhs<5  then
115             d=0*ones(mc,nb)
116         else
117             if type(d)>2 then
118                 error(msprintf(gettext("%s: Wrong type for input argument #%d: Polynomial array expected.\n"),"syslin",5))
119             end
120             [md,nd]=size(d);
121             if c*b<>[] then
122                 if mc<>md then
123                     error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same row dimensions expected.\n"),"syslin",2,5));
124                 end
125                 if nb<>nd then
126                     error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same column dimensions expected.\n"),"syslin",3,5));
127                 end
128
129             end
130         end
131         sl=lsslist(a,b,c,d,x0,domain)
132     end
133
134 endfunction