File: back.f

package info (click to toggle)
scilab 2.2-4
  • links: PTS
  • area: non-free
  • in suites: hamm
  • size: 31,472 kB
  • ctags: 21,963
  • sloc: fortran: 110,983; ansic: 89,717; makefile: 3,016; sh: 1,892; csh: 150; cpp: 101
file content (102 lines) | stat: -rw-r--r-- 2,161 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
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
      subroutine back(no)
      include '../stack.h'
      integer iadr,sadr
      dimension sstk(2*vsiz)
      equivalence (sstk(1),stk(1))
c
      common/adre/lbot,ie,is,ipal,nbarg,ll(30)
      common/ibfu/ibuf(200)
c
c     
      iadr(l)=l+l-1
      sadr(l)=(l/2)+1
c
      il=iadr(lstk(top))
      istk(il)=1
      is1=3*ie+1
      do 1 k=1,30
      if(is1.ge.200) goto 100
      if(ibuf(is1).eq.no) goto 2
      is1=is1+3
 1    continue
 100  buf='output variable not found'
      call error(999)
      return
  2   continue
      ijkl=is1+3*is
      m=ibuf(ijkl)
      n=ibuf(ijkl+1)
      itf=ibuf(ijkl+2)
      istk(il+1)=m
      istk(il+2)=n
      istk(il+3)=0
      ivol=m*n
      l=sadr(il+4)
      lll=iadr(ll(no))
      if(itf.eq.0) return
c
      if(itf.eq.27) goto 10
      if(itf.eq.18) goto 30
      if(itf.ne.13) then
      buf='invalid (fortran) variable'
      call error(999)
      return
      endif
      lll=ll(no)
      if(lll.ne.l) call dcopy(ivol,stk(lll),1,stk(l),1)
      goto 200
c
  10  continue
      if((lll+ivol-1).ge.iadr(l+ivol-1)) goto 15
      if(lll.le.iadr(l)) goto 20
      iboum=sadr(lll-iadr(l))
      imont=2*iboum-2
      ides=ivol-imont
      do 11 k=1,imont
      stk(l+k-1)=dble(sstk(lll+k-1))
   11 continue
      do 12 k=1,ides
      stk(l+ivol-k)=dble(sstk(lll+ivol-k))
   12 continue
      goto 200
c
   15 do 16 k=1,ivol
      stk(l+k-1)=dble(sstk(lll+k-1))
   16 continue
      goto 200
c
   20 do 21 k=1,ivol
      stk(l+ivol-k)=dble(sstk(lll+ivol-k))
   21 continue
      goto 200
c
   30  continue
      if((lll+ivol-1).ge.iadr(l+ivol-1)) goto 35
      if(lll.le.iadr(l)) goto 40
      iboum=sadr(lll-iadr(l))
      imont=2*iboum-2
      ides=ivol-imont
      do 31 k=1,imont
      stk(l+k-1)=dble(istk(lll+k-1))
   31 continue
      do 32 k=1,ides
      stk(l+ivol-k)=dble(istk(lll+ivol-k))
   32 continue
      goto 200
c
   35 continue
      do 36 k=1,ivol
      stk(l+k-1)=dble(istk(lll+k-1))
   36 continue
      goto 200
c
   40 continue
      do 41 k=1,ivol
      stk(l+ivol-k)=dble(istk(lll+ivol-k))
   41 continue
c
  200 continue
      lstk(top+1)=l+ivol
      top=top+1
      return
      end