File: do_purge.sci

package info (click to toggle)
scilab 2.4-1
  • links: PTS
  • area: non-free
  • in suites: potato, slink
  • size: 55,196 kB
  • ctags: 38,019
  • sloc: ansic: 231,970; fortran: 148,976; tcl: 7,099; makefile: 4,585; sh: 2,978; csh: 154; cpp: 101; asm: 39; sed: 5
file content (59 lines) | stat: -rw-r--r-- 1,038 bytes parent folder | download
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
function scs_m_new=do_purge(scs_m)
// Copyright INRIA
disablemenus()
//suppress deleted elements in a scicos data structure
nx=size(scs_m);


//get index of deleted blocks
deleted=[];
for k=1:nx
 o=scs_m(k);
 if o(1)=='Deleted' then
   deleted=[deleted,k];
 elseif o(1)=='Block' then
   if o(3)(1)=='super' then
     scs_m(k)(3)(8)=do_purge(scs_m(k)(3)(8))
   end
 end
end


if deleted==[] then
  scs_m_new=scs_m
enablemenus()		
  return
end


retained=1:nx;retained(deleted)=[];
//compute index cross table
old_to_new=ones(1,nx);old_to_new(deleted)=0*deleted;
old_to_new=rtitr(1,%z-1,old_to_new)';//old_to_new(1)=[];
//
scs_m_new=list();
for k=1:size(retained,'*')
  o=scs_m(retained(k))
  if o(1)=='Block' then
    graphics=o(2)
    for i=5:8
      if graphics(i)<>[] then
	graphics(i)=old_to_new(graphics(i)+1);
      end
    end
    o(2)=graphics
  elseif o(1)=='Link' then
    [from,to]=o(8:9)
    from(1)=old_to_new(from(1)+1);
    to(1)=old_to_new(to(1)+1);
    o(8)=from
    o(9)=to
  end
  scs_m_new(k)=o;
end
enablemenus()