File: scopxy.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 (165 lines) | stat: -rw-r--r-- 5,294 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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
      subroutine scopxy(flag,nevprt,t,xd,x,nx,z,nz,tvec,ntvec,
     &     rpar,nrpar,ipar,nipar,u,nu,y,ny)
c     Copyright INRIA

c     Scicos block simulator
c     ipar(1) = win_num
c     ipar(2) = 0/1 color flag
c     ipar(3) = buffer size
c     ipar(4) = dash,color or mark choice
c     ipar(5) = line or mark size
c     ipar(6) = mode : animated =0 fixed=1
c     ipar(7) =
c     ipar(8:9) = window position
c     ipar(10:11) = window size
c
c     rpar(1)=xmin
c     rpar(2)=xmax
c     rpar(3)=ymin
c     rpar(4)=ymax
c
      double precision t,xd(*),x(*),z(*),tvec(*),rpar(*),u(*),y(*)
      integer flag,nevprt,nx,nz,ntvec,nrpar,ipar(*)
      integer nipar,nu,ny

c
c
      double precision xmin,xmax,ymin,ymax,rect(4)
      integer n,verb,cur,na,v,wid,nax(4)
      character*20 strf,buf
      double precision dv
      double precision frect(4)
      character*(4) logf
      character*4 name
      common /dbcos/ idb
      data frect / 0.00d0,0.00d0,1.00d0,1.00d0/
      data cur/0/,verb/0/

c     
      if(idb.eq.1) then
         write(6,'(''Scopxy t='',e10.3,'' flag='',i1,''window='',i3)') t
     $        ,flag,ipar(1) 
      endif
c     
      call dr1('xgetdr'//char(0),name,v,v,v,v,v,v,
     $     dv,dv,dv,dv)
      if(name(1:3).ne.'Rec') then
         call dr1('xsetdr'//char(0),'Rec'//char(0),v,v,v,v,v,v,
     $        dv,dv,dv,dv)
      endif


c     
      if(flag.eq.2) then
         wid=ipar(1)
         N=ipar(3)
c     
         call dr1('xget'//char(0),'window'//char(0),verb,cur,na,v,v,v,
     $        dv,dv,dv,dv)
         if(cur.ne.wid) then
            call dr1('xset'//char(0),'window'//char(0),wid,v,v,v,v,v,
     $           dv,dv,dv,dv)
         endif
c     erase first point
         if(ipar(6).eq.0) then
            z(1)=z(1)+1.0d0
            if(ipar(4).lt.0) then
               call dr1('xpolys'//char(0),'v'//char(0),v,v,ipar(4),
     &              1,1,v,z(2),z(2+N),dv,dv)
            else
               call dr1('xpolys'//char(0),'v'//char(0),v,v,ipar(4),
     &              1,2,v,z(2),z(2+N),dv,dv)
            endif
         endif
c     shift buffer left
         call dcopy(N-1,z(3),1,z(2),1)
         z(N+1)=u(1)
         call dcopy(N-1,z(N+3),1,z(N+2),1)
         z(2*N+1)=u(2)
c     draw new point
         if(ipar(4).lt.0) then
            call dr1('xpolys'//char(0),'v'//char(0),v,v,ipar(4),
     &           1,1,v,z(1+N),z(1+2*N),dv,dv)
         else
            call dr1('xpolys'//char(0),'v'//char(0),v,v,ipar(4),
     &           1,2,v,z(N),z(2*N),dv,dv)
         endif
         if(int(z(1)).gt.N.and.ipar(6).eq.0) then
c     erase memory
            call dr('xstart'//char(0),'v'//char(0),wid,v,v,v,v,v,
     $           dv,dv,dv,dv) 
            z(1)=0.0d0
         endif
      elseif(flag.eq.4) then
         wid=ipar(1)
         N=ipar(3)
         xmin=rpar(1)
         xmax=rpar(2)
         ymin=rpar(3)
         ymax=rpar(4)
         nax(1)=2
         nax(2)=10
         nax(3)=2
         nax(4)=10
         call sciwin()
         call dr1('xget'//char(0),'window'//char(0),verb,cur,na,v,v,v,
     $        dv,dv,dv,dv)
         if(cur.ne.wid) then
            call dr1('xset'//char(0),'window'//char(0),wid,v,v,v,v,v,
     $           dv,dv,dv,dv)
         endif
         iwp=8
         if(ipar(iwp).ge.0) then
            call dr1('xset'//char(0),'wpos'//char(0),ipar(iwp),
     $           ipar(iwp+1),v,v,v,v,dv,dv,dv,dv)
         endif
         iwd=10
         if(ipar(iwd).ge.0) then
            call dr1('xset'//char(0),'wdim'//char(0),ipar(iwd),
     $           ipar(iwd+1),v,v,v,v,dv,dv,dv,dv)
         endif
         rect(1)=xmin
         rect(2)=ymin
         rect(3)=xmax
         rect(4)=ymax
         call  setscale2d(frect,rect,'nn'//char(0))
         call dr1('xset'//char(0),'use color'//char(0),ipar(2),0,0,
     &        0,0,v,dv,dv,dv,dv)
         call dr1('xset'//char(0),'alufunction'//char(0),3,0,0,
     &        0,0,v,dv,dv,dv,dv)
         call dr1('xclear'//char(0),'v'//char(0),v,v,v,v,v,v,
     $        dv,dv,dv,dv)
         call dr('xstart'//char(0),'v'//char(0),wid,v,v,v,v,v,
     $        dv,dv,dv,dv)
         buf='t@ @input and output'
         strf='011'//char(0)
         call dr1('xset'//char(0),'dashes'//char(0),0,0,0,
     &        0,0,v,dv,dv,dv,dv)
         call dr1('xset'//char(0),'alufunction'//char(0),3,v,v,v,v,v,
     $        dv,dv,dv,dv)
         call plot2d(rect(1),rect(2),1,1,-1,strf,buf,rect,nax)
         call dr1('xset'//char(0),'alufunction'//char(0),6,v,v,v,v,v,
     $        dv,dv,dv,dv)
         call sxevents()
c first point drawing
         if(ipar(4).lt.0) then
            call dr1('xset'//char(0),'mark'//char(0),ipar(4),ipar(5),
     $        v,v,v,v,dv,dv,dv,dv)
            call dr1('xpolys'//char(0),'v'//char(0),v,v,ipar(4),
     &           1,1,v,z(2),z(2+N),dv,dv)
         else
            call dr1('xset'//char(0),'thickness'//char(0),ipar(5),v,
     $        v,v,v,v,dv,dv,dv,dv)
            call dr1('xpolys'//char(0),'v'//char(0),v,v,ipar(4),
     &           1,2,v,z(2),z(2+N),dv,dv)
         endif
         z(1)=0
         
      elseif(flag.eq.5) then
         call dr1('xset'//char(0),'alufunction'//char(0),3,v,v,v,v,v,
     $        dv,dv,dv,dv)
      endif

      call dr1('xsetdr'//char(0),name,v,v,v,v,v,v,
     $     dv,dv,dv,dv)
      end