create_palette
function [routines,IntFunc]=create_palette(Path)
// This function generates a palette if Path is a string indicating
// the directoy in which the interfacing functions of the blocks are
// to be found.
// If Path is not present or if it is %t, then standard scicos
// palettes are regenerated. If %f, then only IntFunc (list of
// interfacing functions) is returned. List of routines is empty in
// this case.
load SCI/macros/scicos/lib;
scicos_ver=get_scicos_version();
rhs=argn(2)
if rhs==1 & type(Path)==4 then // generate scicos palettes
rhs=0
gener=Path
elseif rhs==0 then
gener=%t
end
if rhs==1 then
Path=pathconvert(Path,%t,%t)
PalName=basename(part(Path,1:length(Path)-1))
to_del=[]
lisf=listfiles(Path+'*.sci')
for i=1:size(lisf,'*')
fil=lisf(i)
ierror=execstr('getf(fil)','errcatch')
if ierror <>0 then
to_del=[to_del i];
end
end
lisf(to_del)=[];
routines=build_palette(lisf,Path,PalName);IntFunc=lisf
else
[scicos_pal, %scicos_menu, %scicos_short, %scicos_help, ..
%scicos_display_mode, modelica_libs,scicos_pal_libs] = initial_scicos_tables()
clear %scicos_menu %scicos_short %scicos_help %scicos_display_mode modelica_libs
exec(loadpallibs,-1)
path='SCI/macros/scicos/'
routines=[];IntFunc=[];
for txt=scicos_pal(:,1)'
disp('Constructing '+txt)
if txt=='Sources' then
lisf=['CONST_m.sci';'GENSQR_f.sci';'RAMP.sci';
'RAND_m.sci';'RFILE_f.sci';
'CLKINV_f.sci'; 'CURV_f.sci'; 'INIMPL_f.sci'; 'READAU_f.sci';
'SAWTOOTH_f.sci'; 'STEP_FUNCTION.sci';
'CLOCK_c.sci'; 'GENSIN_f.sci'; 'IN_f.sci'; 'READC_f.sci';
'TIME_f.sci'; 'Modulo_Count.sci';'Sigbuilder.sci';'Counter.sci';
'SampleCLK.sci';'TKSCALE.sci';'FROMWSB.sci']
elseif txt=='Sinks' then
lisf=['AFFICH_m.sci'; 'CMSCOPE.sci';
'CSCOPXY.sci'; 'WRITEC_f.sci';
'CANIMXY.sci'; 'CSCOPE.sci';
'OUTIMPL_f.sci';
'CLKOUTV_f.sci'; 'CEVENTSCOPE.sci';
'OUT_f.sci'; 'WFILE_f.sci';
'CFSCOPE.sci'; 'WRITEAU_f.sci';
'CSCOPXY3D.sci'; 'CANIMXY3D.sci';
'CMATVIEW.sci'; 'CMAT3D.sci';
'TOWS_c.sci']
elseif txt=='Branching' then
lisf=['DEMUX.sci';
'MUX.sci'; 'NRMSOM_f.sci'; 'EXTRACTOR.sci';
'SELECT_m.sci';'ISELECT_m.sci';
'RELAY_f.sci';'SWITCH2_m.sci';'IFTHEL_f.sci';
'ESELECT_f.sci';'M_SWITCH.sci';
'SCALAR2VECTOR.sci';'SWITCH_f.sci';'EDGE_TRIGGER.sci';
'Extract_Activation.sci';'GOTO.sci';'FROM.sci';
'GotoTagVisibility.sci';'CLKGOTO.sci';'CLKFROM.sci';
'CLKGotoTagVisibility.sci';'GOTOMO.sci';'FROMMO.sci';
'GotoTagVisibilityMO.sci']
elseif txt=='Non_linear' then
lisf=['ABS_VALUE.sci'; 'TrigFun.sci';
'EXPBLK_m.sci'; 'INTRP2BLK_f.sci';
'INTRPLBLK_f.sci'; 'INVBLK.sci';
'LOGBLK_f.sci'; 'LOOKUP_f.sci'; 'MAXMIN.sci';
'POWBLK_f.sci'; 'PROD_f.sci';
'PRODUCT.sci'; 'QUANT_f.sci';'EXPRESSION.sci';
'SATURATION.sci'; 'SIGNUM.sci' ]
elseif txt=='Events' then
lisf=['ANDBLK.sci';'HALT_f.sci';'freq_div.sci';
'ANDLOG_f.sci';'EVTDLY_f.sci';'IFTHEL_f.sci';'ESELECT_f.sci';
'CLKSOMV_f.sci';'CLOCK_c.sci';'EVTGEN_f.sci';'EVTVARDLY.sci';
'M_freq.sci';'SampleCLK.sci']
elseif txt=='Threshold' then
lisf=[ 'NEGTOPOS_f.sci'; 'POSTONEG_f.sci'; 'ZCROSS_f.sci']
elseif txt=='Others' then
lisf=['c_block.sci';'fortran_block.sci';
'SUPER_f.sci';'scifunc_block_m.sci';
'TEXT_f.sci';'CBLOCK.sci';'RATELIMITER.sci';
'BACKLASH.sci';'DEADBAND.sci';'EXPRESSION.sci';
'CONSTRAINT_f.sci';'HYSTHERESIS.sci';'DEBUG_SCICOS.sci';
'LOGICAL_OP.sci';'RELATIONALOP.sci';'generic_block3.sci';
'MBLOCK.sci';'PDE.sci';'ENDBLK.sci';'AUTOMAT.sci']
elseif txt=='Linear' then
lisf=['DLR.sci';'TCLSS.sci';'DOLLAR_m.sci';
'CLINDUMMY_f.sci';'DLSS.sci';'REGISTER.sci';'TIME_DELAY.sci';
'CLR.sci';'GAINBLK.sci';'SAMPHOLD_m.sci';'VARIABLE_DELAY.sci';
'CLSS.sci';'SUMMATION.sci';'INTEGRAL_m.sci';'SUM_f.sci';
'DERIV.sci';'PID.sci']
elseif txt=='OldBlocks' then
lisf=['CLOCK_f.sci';'ABSBLK_f.sci';
'MAX_f.sci'; 'MIN_f.sci';'SAT_f.sci'; 'MEMORY_f.sci';
'CLKSOM_f.sci';'TRASH_f.sci';'GENERAL_f.sci';'DIFF_f.sci';
'BIGSOM_f.sci';'INTEGRAL_f.sci';'GAINBLK_f.sci';
'DELAYV_f.sci';'DELAY_f.sci'; 'DEMUX_f.sci';'MUX_f.sci';
'MFCLCK_f.sci';'MCLOCK_f.sci';'COSBLK_f.sci'; 'DLRADAPT_f.sci';
'SINBLK_f.sci'; 'TANBLK_f.sci';'generic_block.sci';'RAND_f.sci';
'DOLLAR_f.sci']
elseif txt=='DemoBlocks' then
lisf=['BOUNCE.sci';'BOUNCEXY.sci';'BPLATFORM.sci']
elseif txt=='Electrical' then
lisf=['Capacitor.sci';'Ground.sci';'VVsourceAC.sci';'ConstantVoltage.sci';
'Inductor.sci';'PotentialSensor.sci';'VariableResistor.sci';'CurrentSensor.sci';
'Resistor.sci';'VoltageSensor.sci';'Diode.sci';'VsourceAC.sci';
'NPN.sci';'PNP.sci';'SineVoltage.sci';'Switch.sci'; ...
'OpAmp.sci';'PMOS.sci';
'NMOS.sci';'CCS.sci';'CVS.sci';'IdealTransformer.sci';'Gyrator.sci']
elseif txt=='ThermoHydraulics' then
lisf=['Bache.sci';'VanneReglante.sci';'PerteDP.sci';'PuitsP.sci';'SourceP.sci';]
elseif txt=='Matrix' then
lisf=['MATMUL.sci';'MATTRAN.sci';'MATSING.sci';'MATRESH.sci';'MATDIAG.sci';
'MATEIG.sci';'MATMAGPHI.sci';'EXTRACT.sci';'MATEXPM.sci';'MATDET.sci';
'MATPINV.sci';'EXTTRI.sci';'RICC.sci';'ROOTCOEF.sci';'MATCATH.sci';
'MATLU.sci';'MATDIV.sci';'MATZCONJ.sci';'MATZREIM.sci';'SUBMAT.sci';
'MATBKSL.sci';'MATINV.sci';'MATCATV.sci';'MATSUM.sci';'CUMSUM.sci';'SQRT.sci']
elseif txt=='Integer' then
lisf=['BITCLEAR.sci';'BITSET.sci';'CONVERT.sci';'EXTRACTBITS.sci';'INTMUL.sci';
'SHIFT.sci';'LOGIC.sci';'DLATCH.sci';'DFLIPFLOP.sci';'JKFLIPFLOP.sci';
'SRFLIPFLOP.sci']
else
error('Palette '+txt+' does not exists')
end
IntFunc=[IntFunc;lisf];
if gener then routines=[routines;build_palette(lisf,path,txt)];end
end
end
routines=unique(routines);IntFunc=unique(IntFunc);
endfunction
function [routines]=build_palette(lisf,path,fname)
scs_m=scicos_diagram()
X=0
Y=0
yy=0
sep=30
routines=[];
for fil=lisf'
name=basename(fil)
//name= part(fil,1:length(fil)-4)
ierror=execstr('blk='+name+'(''define'')','errcatch')
if ierror <>0 then
message(['Error in GUI function';lasterror()] )
fct=[]
return
end
routines=[routines;blk.model.sim(1)]
blk.graphics.sz=20*blk.graphics.sz;
blk.graphics.orig=[X Y]
X=X+blk.graphics.sz(1)+sep
yy=max(yy,blk.graphics.sz(2))
if X>400 then X=0,Y=Y+yy+sep,yy=0,end
scs_m.objs($+1)=blk
end
[u,err]=file('open',path+fname+'.cosf','unknown','formatted')
if err<>0 then
message('File or directory write access denied')
return
end
scs_m.props.title=[fname,path]
ierr=cos2cosf(u,do_purge(scs_m))
if ierr<>0 then
message('Directory write access denied')
file('close',u)
return
end
file('close',u)
mprintf('Wrote '+path+fname+'.cosf \n')
endfunction