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
|