File: funs.f

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 (142 lines) | stat: -rw-r--r-- 3,337 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
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
141
142
      subroutine funs(id)
c     ====================================================================
c     scan primitive function and scilab code function lists for a given name
c     ====================================================================
c     Copyright INRIA
      include '../stack.h'
      parameter (nz1=nsiz-1,nz2=nsiz-2)
      integer id(nsiz),id1(nsiz),istr(nlgh)
c
      logical eqid,loaded
      integer srhs,percen,blank,fptr,mode(2),eye(nsiz)
      integer iadr
      data eye/672014862,nz1*673720360/
      data nclas/29/,percen/56/,blank/40/
c
      iadr(l)=l+l-1
c     
c     look only in scilab code function libraries
      if(fin.eq.-3) goto 35
      if(fin.eq.-4) goto 30
c     
c     
c     if special compilation mode skip primitive functions
      if (comp(3).eq.1) then
         if(.not.eqid(id,eye)) then
            fin=0
            fun=0
            return
         endif
      endif
c
c     look for name in primitive functions
      call funtab(id,fptr,1)
      if(fptr.le.0) then
         if(comp(1).eq.0.and.fin.ne.-5) goto 30
         fin=0
         fun=0
      else
         fun = fptr/100
         fin = mod(fptr,100)
      endif
      return
c     
c     is a scilab code function already loaded in the variables stack
 30   k=bot-1
 31   k=k+1
      if(k.gt.isiz) goto 35
      if(.not.eqid(idstk(1,k),id)) goto 31
      il=iadr(lstk(k))
      if(istk(il).ne.11.and.istk(il).ne.13) goto 35
      fin=k
      fun=-1
      return
c     
c     look in scilab code function libraries
 35   k=bot-1
 36   k=k+1
      if(k.ge.isiz) then
         fin=0
         fun=0
         return
      endif
      il=iadr(lstk(k))
      if(istk(il).ne.14) goto 36
      nbibn=istk(il+1)
      lbibn=il+2
      il=lbibn+nbibn
      ilp=il+1
      call namstr(id,istr,nn,1)
      ip=abs(istr(1))
      if(ip.eq.percen) ip=abs(istr(2))
      ip=max(1,ip-9)
      if(ip.gt.nclas) goto 36
      n=istk(ilp+ip)-istk(ilp+ip-1)
      if(n.eq.0) goto 36
      iln=ilp+nclas+1+(istk(ilp+ip-1)-1)*nsiz
      do 37 l=1,n
         if(eqid(id,istk(iln))) goto 39
         iln=iln+nsiz
 37   continue
      goto 36
c     
c     
 39   if(fin.ne.-1.and.fin.ne.-3) goto 40
      fun=k
      fin=l
      return
c     
 40   fun=-2
      fin=l
c     
c     load it in the variables stack
      n=nbibn
      call cvstr(n,istk(lbibn),buf,1)
      call cvname(id,buf(n+1:n+nlgh),1)
      n=n+nlgh+1
 41   n=n-1
      if(buf(n:n).eq.' ') goto 41
      buf(n+1:n+4)='.bin'
      n=n+4
      lunit=0
      mode(1)=-101
      mode(2)= 0
      call clunit(lunit,buf(1:n),mode)
      if(err.gt.0) then
         buf(n+1:)=' '
         call error(241)
         return
      endif
c
      loaded=.false.
c     initialize file (for comptibility)
      call savlod(lunit,id1,-2,top+1)
 49   top=top+1
      job=lstk(bot)-lstk(top)
c     get all functions defined in the file
      if(err.gt.0) goto 51
      id1(1)=blank
      call savlod(lunit,id1,job,top)
      if(err.gt.0) goto 51
      il=iadr(lstk(top))
      if(istk(il).eq.0) goto 50
      srhs=rhs
      rhs=0
      call stackp(id1,1)
      if(err.gt.0) goto 51
      if(eqid(id,id1)) loaded=.true.
      rhs=srhs
      goto 49
 50   if(.not.loaded) then
         fun=0
         fin=0
      endif
      top=top-1
 51   call  clunit(-lunit,buf,mode)
      return
c
      end