Scicos: indent c_pass1 and related modelica files
[scilab.git] / scilab / modules / scicos / macros / scicos_scicos / build_modelica_block.sci
1 //  Scicos
2 //
3 //  Copyright (C) INRIA - Serge Steer <serge.steer@inria.fr> - 2003
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 2 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 //
19 // See the file ../license.txt
20 //
21
22 function [model,ok]=build_modelica_block(blklstm,corinvm,cmmat,NiM,NoM,scs_m,path)
23     // given the blocks definitions in blklstm and connections in cmmat this
24     // function first create  the associated modelicablock  and writes its code
25     // in the file named 'imppart_'+name+'.mo' in the directory given by path
26     // Then modelica compiler is called to produce the C code of scicos block
27     // associated to this modelica block. filbally the C code is compiled and
28     // dynamically linked with Scilab.
29     // The correspondind model data structure is returned.
30
31
32     //## get the name of the generated main modelica file
33     name=stripblanks(scs_m.props.title(1))+"_im";
34
35     //## generation of the txt for the main modelica file
36     //## plus return ipar/rpar for the model of THE modelica block
37     [txt,rpar,ipar]=create_modelica(blklstm,corinvm,cmmat,name,scs_m);
38
39     //## write txt in the file path+name+'.mo'
40     path=pathconvert(stripblanks(path),%t,%t)
41     mputl(txt,path+name+".mo");
42     mprintf("%s\n",["--------------------------------------------\";
43     msprintf(_(" Main Modelica : %s"),path+name+".mo")
44     ""])
45
46     //## search for
47
48     Mblocks = [];
49     for i=1:lstsize(blklstm)
50         if type(blklstm(i).sim)==15 then
51             if blklstm(i).sim(2)==30004 then
52                 o = scs_m(scs_full_path(corinvm(i)))
53                 Mblocks=[Mblocks;
54                 o.graphics.exprs.nameF]
55             end
56         end
57     end
58
59     //generating XML and Flat_Model
60     //## compile modelica files
61     [ok,name,nipar,nrpar,nopar,nz,nx,nx_der,nx_ns,nin,nout,nm,ng,dep_u]=compile_modelica(path+name+".mo",Mblocks);
62
63     if ~ok then return,end
64
65     //nx is the state dimension
66     //ng is the number of surfaces
67     //name1 of the model+flat
68
69     //build model data structure of the block equivalent to the implicit part
70     model=scicos_model(sim=list(name,10004),..
71     in=ones(nin,1),out=ones(nout,1),..
72     state=zeros(nx*2,1),..
73     dstate=zeros(nz,1),..
74     rpar=rpar,..
75     ipar=ipar,..
76     dep_ut=[dep_u %t],nzcross=ng,nmode=nm)
77 endfunction