1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
// Scicos
//
// Copyright (C) INRIA - METALAU Project <scicos@inria.fr>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// See the file ../license.txt
//
function [x,y,typ]=RFILE(job,arg1,arg2)
x=[];y=[];typ=[]
select job
case 'plot' then
standard_draw(arg1)
case 'getinputs' then
[x,y,typ]=standard_inputs(arg1)
case 'getoutputs' then
[x,y,typ]=standard_outputs(arg1)
case 'getorigin' then
[x,y]=standard_origin(arg1)
case 'set' then
x=arg1;
graphics=arg1.graphics;exprs=graphics.exprs
model=arg1.model;
dstate=model.dstate
ipar=model.ipar
ievt=ipar(3);N=ipar(4);
imask=5+ipar(1)+ipar(2)
tmask=ipar(imask)
lunit=dstate(3)
fname=exprs(3)
frmt=exprs(4)
//for backward compatibility
if size(exprs,'*')>5 then exprs(6)=[],end
while %t do
[ok,tmask1,outmask,fname1,frmt1,N,exprs]=scicos_getvalue(..
['Set RFILE block parameters';
'Read is done on';
' - a binary file if no format given';
' - a formatted file if a format (fortran type) is given'],..
['Time record selection';
'Outputs record selection';
'Input file name';
'Input Format';
'Buffer size'],..
list('vec',-1,'vec',-1,'str',1,'str',1,'vec',1),..
exprs)
if ~ok then break,end //user cancel modification
fname1=stripblanks(fname1)
frmt1=stripblanks(frmt1)
//out=int(out)
//nout=out
nout = size(outmask,'*')
if prod(size(tmask1))>1 then
message('Time record selection must be a scalar or an empty matrix')
elseif lunit>0&min(length(frmt),1)<>min(length(frmt1),1) then
message(['You cannot swich from formatted to unformatted';
'or from unformatted to formatted when running';' '])
elseif lunit>0&fname1<>fname then
message('You cannot modify Output file name when running')
elseif lunit>0&size(tmask1)<>size(tmask) then
message('You cannot modify time management when running')
elseif N<2 then
message('Buffer size must be at least 2')
elseif nout==0 then
message('You must read at least one record')
elseif min(outmask)<=0 then
message('Records must be > 0.')
else
if tmask1==[] then ievt=0;cout=[];tmask1=0;else ievt=1,cout=1;end
[model,graphics,ok]=check_io(model,graphics,[],nout,1,cout)
if ok then
if ievt==0 then
model.firing=[]
else
model.firing=0
end
ipar=[length(fname1);
length(frmt1);
ievt;
N;
str2code(fname1);
str2code(frmt1);
tmask1
outmask(:)]
if prod(size(dstate))<>(nout+ievt)*N+3 then
dstate=[-1;-1;lunit;zeros((nout+ievt)*N,1)]
end
model.dstate=dstate;model.ipar=ipar
graphics.exprs=exprs;
x.graphics=graphics;x.model=model
break
end
end
end
case 'define' then
out=1;nout=sum(out)
frmt='(7(e10.3,1x))'
fname='foo'
lunit=0
N=2;
rpar=[]
tmask=0
outmask=1
ipar=[length(fname);length(frmt);0;N;str2code(fname);str2code(frmt);
tmask;outmask]
dstate=[1;1;lunit;zeros((nout)*N,1)]
model=scicos_model()
model.sim=list('readf4',4)
model.out=nout
model.evtin=1
model.dstate=dstate
model.ipar=[length(fname);length(frmt);0;N;str2code(fname);str2code(frmt);
tmask;outmask]
model.blocktype='d'
model.dep_ut=[%f %f]
exprs=[sci2exp([]);
sci2exp(outmask);
fname;
frmt;
string(N);
sci2exp(out)]
gr_i=['txt=[''read from'';''input file''];';
'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'')']
x=standard_define([3 2],model,exprs,gr_i)
end
endfunction
|