47c7a2f815e0ac29fcb47e86d21bc784f5989439
[scilab.git] / scilab / modules / scicos_blocks / macros / Sinks / WFILE_f.sci
1 //  Xcos
2 //
3 //  Copyright (C) INRIA - METALAU Project <scicos@inria.fr>
4 //  Copyright 2011 - Bernard DUJARDIN <bernard.dujardin@contrib.scilab.org>
5 //
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 2 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 //
20 // See the file ../license.txt
21 //
22
23 function [x,y,typ]=WFILE_f(job,arg1,arg2)
24 x=[];y=[];typ=[]
25 select job
26 case 'plot' then
27   standard_draw(arg1)
28 case 'getinputs' then
29   [x,y,typ]=standard_inputs(arg1)
30 case 'getoutputs' then
31   x=[];y=[];typ=[];
32 case 'getorigin' then
33   [x,y]=standard_origin(arg1)
34 case 'set' then
35   x=arg1;
36   graphics=arg1.graphics;exprs=graphics.exprs
37   model=arg1.model;
38   dstate=model.dstate
39   lunit=dstate(2)
40   fname=exprs(2)
41   frmt=exprs(3)
42   while %t do
43       [ok,in,fname1,frmt1,N,exprs] = scicos_getvalue([msprintf(gettext("Set %s block parameters"), "WFILE_f");" "; gettext("Write to output file"); " "; ..
44         gettext("Write is done on:"); gettext("&nbsp; - A binary file if no format given"); ..
45         gettext("&nbsp; - A formatted text file if a  format (Fortran type) is given")], [gettext("Input Size"); gettext("Output File Name"); ..
46         gettext("Output Format"); gettext("Buffer Size")], list('vec',1,'str',1,'str',1,'vec',1),exprs)
47
48     if ~ok then break,end //user cancel modification
49     in=int(in)
50
51     nin=in
52
53     fname1 = pathconvert(stripblanks(fname1), %f, %t) // File name expansion
54     frmt1=stripblanks(frmt1)
55
56     if lunit > 0 & min(length(frmt),1) <> min(length(frmt1),1) then
57       block_parameter_error(gettext("Simulation running !!! You cannot switch<br />between formatted and unformatted when running"), gettext("End current simulation first."));
58       ok=%f
59     elseif lunit > 0 & fname1 <> fname then
60       block_parameter_error(gettext("You cannot modify ''Output File Name'' when running."), gettext("End current simulation first."));
61       ok=%f
62     elseif fname1 == "" then
63       block_parameter_error(gettext("Wrong value for ''Output File Name'' parameter"), gettext("You must provide a filename."));
64       ok=%f
65     //Check if directory exist
66     elseif fileparts(fname1) ~= "" then
67       [pa, fn, ex] = fileparts(fname1)
68       if ~isdir(pa) then
69         block_parameter_error(msprintf(gettext("Wrong value for ''%s'' parameter."), gettext("Output File Name")), ..
70           msprintf(gettext("Directory ''%s'' does not exist"), pa ));
71         ok=%f
72       end
73     // Simple check for including of the format's string  in parenthesis
74     elseif frmt1 ~= "" &  (part(frmt1, 1) ~= "(" | part(frmt1, length(frmt1)) ~= ")")
75       block_parameter_error(msprintf(gettext("Wrong value for ''%s'' parameter: %s."), gettext("Input Format"), frmt1), ..
76         gettext("You must enclose the format''s string between parentheses."));
77       ok=%f
78     elseif N < 2 then
79       block_parameter_error(msprintf(gettext("Wrong value for ''%s'' parameter: %d."), gettext("Buffer Size"), N), ..
80         gettext("Must be greater than 1."));
81       ok=%f
82     elseif in <= 0 then
83       block_parameter_error(msprintf(gettext("Wrong value for ''%s'' parameter: %d."), gettext("Input Size"), in), ..
84         gettext("Strictly positive integer expected."));
85       ok=%f
86     end
87
88     if ok then
89       ipar=[length(fname1);length(frmt1);0;N;_str2code(fname1);_str2code(frmt1)]
90       if prod(size(dstate))<>(nin+1)*N+2 then
91         dstate=[-1;lunit;zeros((nin+1)*N,1)]
92       end
93       model.in=nin
94       model.dstate=dstate;model.ipar=ipar
95       model.dep_ut=[%t %f] //compatibility
96       graphics.exprs=exprs;
97       x.graphics=graphics;x.model=model
98       break
99     end
100   end
101 case 'define' then
102   in=1;nin=sum(in)
103   frmt='(7(e10.3,1x))'
104   fname='foo'
105   lunit=0
106   N=2;
107
108   model=scicos_model()
109   model.sim='writef'
110   model.in=in
111   model.evtin=1
112   model.dstate=[-1;lunit;zeros((nin+1)*N,1)]
113   model.ipar=[length(fname);length(frmt);0;N;_str2code(fname);_str2code(frmt)]
114   model.blocktype='d'
115   model.dep_ut=[%t %f]
116   
117   exprs=[sci2exp(in);
118         fname;
119         frmt;
120         string(N)]
121   gr_i=['txt=[''write to'';''output file''];';
122     'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'')']
123   x=standard_define([3 2],model,exprs,gr_i)
124 end
125 endfunction