File: allops.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 (92 lines) | stat: -rw-r--r-- 2,222 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
      subroutine allops
c ======================================================================
c     Calling function according to arguments type
c ======================================================================
      include '../stack.h'
      integer ogettype, vt,vt1,id(nsiz),r
      logical compil,ptover
      integer iadr,sadr
c
      iadr(l)=l+l-1
      sadr(l)=(l/2)+1

      r=0
      if(pt.gt.0) r=rstk(pt)
c
      if (ddt .eq. 4) then
         write(buf(1:12),'(3i4)') fin,pt,r
         call basout(io,wte,' allops op:'//buf(1:4)//' pt:'//buf(5:8)//
     &                   ' rstk(pt):'//buf(9:12))
      endif
c
c     compilation allops :<5 fin rhs lhs>
      if ( compil(5,fin,rhs,lhs,0)) then
         if (err.gt.0) return
         fun=0
         return
      endif
c
 01   ir=r/100
      if(ir.eq.4) then
         if (r.eq.401) then 
            call putid(syn(1),ids(1,pt))
            pt=pt-1
         else if (r.eq.402) then 
            pt=pt-1
         endif
         return
      endif
      if(err1.gt.0) return
      vt=0
      do 03 i=1,rhs
         vt1=abs(ogettype(top+1-i))
         if(vt1.gt.vt) vt=vt1
 03   continue
c
      goto (10,20,05,30,70,35,05,05,05,40,60,05,60,60,50,50) ,vt
 05   call error(43)
      return
 10   call matops
      goto 80
 20   call polops
      goto 80
 30   call logic
      goto 80
 35   call lspops
      goto 80
 40   call strops
      goto 80
 50   call lstops
      goto 80
 60   call misops
      goto 80
 70   call spops
      goto 80

c
 80   if(err.gt.0) return
      if(fun.ne.0) then 
c        ------appel d'un matfn necessaire pour achever l'evaluation
         if (ptover(1,psiz)) return
         rstk(pt)=402
         icall=9
c        *call* matfns
      return
      endif
      if(fin.gt.0) return
c     ---------------recherche d'une macro associee a une operation macro 
c                    programme
      fin=-fin
      call mname(fin,id)
      if(err.gt.0) return
c     ---------------appel de la macro
      fin=lstk(fin)
      if (ptover(1,psiz)) return
      call putid(ids(1,pt),syn(1))
c next line suppressed to allow multiple extraction
c      lhs=1
      rstk(pt)=401
      icall=5
c     *call* macro
      return
      end