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
|
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,cresmat
integer srhs,percen,blank,fptr,mode(2),eye(nsiz),sfun,slhs
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 fin=l
c
c load it in the variables stack
c create a variable with the bin file path
n=nbibn
c get name and its length
call namstr(id,istr,nn,1)
top=top+1
if(.not.cresmat(' ',top,1,1,nbibn+4+nn)) return
call getsimat(fname,top,top,mp,np,1,1,ilp,nlp)
c path
call icopy(nbibn,istk(lbibn),1,istk(ilp),1)
c name
call icopy(nn,istr,1,istk(ilp+nbibn),1)
c extension
call cvstr(4,istk(ilp+nbibn+nn),'.bin',0)
c load variables stored in the given file
srhs=rhs
slhs=lhs
fun=0
rhs=1
lhs=1
call intload(id,k)
if(err.gt.0) return
rhs=srhs
lhs=slhs
top=top-1
if(k.eq.0) then
c . requested varible not loaded
fun=0
fin=0
else
fun=-2
fin=k
endif
return
c
end
|