M.Z.
This commit is contained in:
711
tecs/tecs_plot.f
711
tecs/tecs_plot.f
@ -1,711 +0,0 @@
|
||||
subroutine tecs_plot(auxpar)
|
||||
|
||||
character(len=*) auxpar
|
||||
|
||||
integer dmax, nmax, tmax, amax, nmenu, chartperiod, naux
|
||||
parameter (dmax=400, nmax=9, tmax=8, amax=3, nmenu=13, chartperiod=5, naux=1)
|
||||
integer minRange, maxRange, oneDay
|
||||
parameter (minRange=60, maxRange=7*24*3600, oneDay=24*3600)
|
||||
integer zoom, right, live
|
||||
parameter (zoom=1, right=2, live=3)
|
||||
real winmin, undef
|
||||
parameter (winmin=60., undef=-1.125/1024./1024./1024.)
|
||||
|
||||
real*4 x1,x2,xmin,xmax,ymin(2),ymax(2),window
|
||||
real*4 xd(dmax, nmax),yd(dmax,nmax), yy0(nmax), yy1(nmax)
|
||||
real*4 ylast1,ylast2,y1,y2
|
||||
real*4 ex,ey,fx,fy,row,ticks,tim0,tim1,menuwid
|
||||
integer l,j,i,n,t,leng,i1,i2,rl,startday,thisday
|
||||
integer ncol, nset, mode
|
||||
integer first,last,step,tbase,lastj
|
||||
integer colorList(nmax)/5,3,2,4,6,8,14,15,8/
|
||||
integer color(nmax)
|
||||
integer retLen(nmax)
|
||||
integer sel/0/, sel1, sel2, auxsel/1/
|
||||
character key*1
|
||||
character text(2,nmenu)*16/ &
|
||||
'L' ,'live off' &
|
||||
,'z' ,'sel. zoom' &
|
||||
,'+' ,'zoom in' &
|
||||
,'-' ,'zoom out' &
|
||||
,'x' ,'show all' &
|
||||
,'2d' ,'2 days' &
|
||||
,'1h' ,'1 hour' &
|
||||
,'15m' ,'15 min' &
|
||||
,'31.7t','goto date' &
|
||||
,'c' ,'show P/He/Aux' &
|
||||
,'s' ,'select T' &
|
||||
,'f' ,'write file' &
|
||||
,'q' ,'quit'/
|
||||
character weekdays(7)*4/'Mon','Tue','Wed','Thu','Fri','Sat','Sun'/
|
||||
character buf*8, device*8, name*40, filnam*128, numb*16, title*64, pars*64
|
||||
character(len=4) tpar(tmax)/'Te', 'Tr', 'Tm', 'Ts', 'T1', 'T2', 'T3', 'T4'/
|
||||
character(len=4) apar(amax)/'P', 'He', 'Aux'/
|
||||
character(len=16) parnam(nmax)
|
||||
logical gap, done
|
||||
logical saveit
|
||||
integer iret, lund, numl, mon, day
|
||||
integer pars_len, title_len, text_len, name_len
|
||||
|
||||
! functions
|
||||
integer sys_gmt_off, myc_now, myc_time, myc_date, get_data, tecs_get_mult, tecs_get_par
|
||||
|
||||
data window/0./
|
||||
|
||||
if (window==0) window=1800.
|
||||
saveit=.false.
|
||||
mode=live
|
||||
call pgopen(' ')
|
||||
|
||||
call pgqinf('TYPE', device, l)
|
||||
if (device=='NULL') then
|
||||
call pgclos
|
||||
call pgopen('?')
|
||||
call pgqinf('TYPE', device, l)
|
||||
if (device=='NULL') then
|
||||
print *,'No PGPLOT-Device defined'
|
||||
goto 9
|
||||
endif
|
||||
endif
|
||||
|
||||
call pgqcol(i,ncol)
|
||||
! print *,i,ncol,' colors ',device
|
||||
if (ncol>=8 .and. device /= 'VT125') then
|
||||
call pgscr(0, 1.0, 1.0, 1.0)
|
||||
call pgscr(1, 0.0, 0.0, 0.0)
|
||||
call pgscr(2, 1.0, 0.0, 0.0)
|
||||
call pgscr(3, 0.0, 1.0, 0.0)
|
||||
call pgscr(4, 0.0, 0.0, 1.0)
|
||||
call pgscr(5, 0.0, 1.0, 1.0)
|
||||
call pgscr(6, 1.0, 0.0, 1.0)
|
||||
call pgscr(7, 1.0, 1.0, 0.0)
|
||||
call pgscr(8, 1.0, 0.5, 0.0)
|
||||
endif
|
||||
|
||||
call pgask(.false.)
|
||||
call pgupdt
|
||||
l=0
|
||||
x1=0
|
||||
step=0
|
||||
do i=1,amax
|
||||
if (auxpar == apar(i)) then
|
||||
auxsel=i
|
||||
endif
|
||||
enddo
|
||||
|
||||
1 pars=' '
|
||||
nset=0
|
||||
do i=1,tmax
|
||||
nset=nset+1
|
||||
color(nset)=colorList(i)
|
||||
parnam(nset)=tpar(i)
|
||||
call str_trim(pars, pars, pars_len)
|
||||
pars=pars(1:pars_len)//' '//parnam(nset)
|
||||
enddo
|
||||
nset=nset+1
|
||||
color(nset)=colorList(3)
|
||||
parnam(nset)=apar(auxsel)
|
||||
call str_trim(pars, pars, pars_len)
|
||||
pars=pars(1:pars_len)//' '//parnam(nset)
|
||||
|
||||
iret=tecs_get_mult(pars, t, nset, yy0)
|
||||
if (iret < 0) goto 99
|
||||
if (window == 0) then
|
||||
last=t
|
||||
step=maxRange/dmax
|
||||
window=maxRange
|
||||
first=t-min(dmax*step-1,maxRange-step)
|
||||
else if (mode >= right) then
|
||||
step=window/(dmax-2)+0.99
|
||||
last=t
|
||||
first=t-min(dmax*step-1,nint(window))
|
||||
else
|
||||
if (mode==zoom) then
|
||||
x2=(x1+x2+window)/2
|
||||
x1=x2-window
|
||||
endif
|
||||
if (x1 .gt. x2-minRange) x1=x2-minRange
|
||||
step=(x2-x1)/(dmax-2)+0.99
|
||||
last=x2+tbase
|
||||
first=x1-step+tbase
|
||||
endif
|
||||
if (step == 0) step=1
|
||||
|
||||
if (step>60) then ! normalize step
|
||||
step=(step+59)/60*60
|
||||
else if (step>30) then
|
||||
step=60
|
||||
elseif (step>20) then
|
||||
step=30
|
||||
else
|
||||
step=(step+4)/5*5
|
||||
endif
|
||||
first=last-(last-first+step-1)/step*step ! round first
|
||||
! print *,step,last-first
|
||||
tbase=first-mod(first,7*oneDay)
|
||||
iret=get_data(pars, first, last, step, tbase, xd, yd, dmax, nmax, retLen)
|
||||
if (iret < 0) goto 99
|
||||
|
||||
x2 = last - tbase
|
||||
if (mode >= right) then
|
||||
x1=x2-window
|
||||
else
|
||||
x1 = first - tbase
|
||||
endif
|
||||
tim0=t-tbase
|
||||
do i=1,nset
|
||||
leng=retLen(i)
|
||||
do while (leng > 1 .and. yd(leng,i) == undef)
|
||||
leng=leng-1
|
||||
enddo
|
||||
if (leng == 1) leng=0
|
||||
retLen(i)=leng
|
||||
if (mode==live .and. leng>0) then
|
||||
xd(leng,i)=tim0
|
||||
yd(leng,i)=yy0(i)
|
||||
endif
|
||||
enddo
|
||||
if (sel /= 0) then
|
||||
do while (sel < nset .and. retLen(sel) == 0)
|
||||
sel=sel+1
|
||||
enddo
|
||||
if (sel >= nset) sel = 0
|
||||
endif
|
||||
if (saveit) goto 9
|
||||
if (mode==live) then
|
||||
x2=max(tim0,x2)+min(1800., window*0.5)
|
||||
endif
|
||||
|
||||
if (window>50*3600) then
|
||||
ticks=8*3600
|
||||
elseif (window>25*3600) then
|
||||
ticks=4*3600
|
||||
else
|
||||
ticks=0.0 ! automatic
|
||||
endif
|
||||
|
||||
i1=1
|
||||
i2=nset-naux
|
||||
if (sel==0) then
|
||||
sel1=i1
|
||||
sel2=i2
|
||||
else
|
||||
sel1=sel
|
||||
sel2=sel
|
||||
endif
|
||||
do rl=1,2
|
||||
if (mode==zoom .and. rl==1) then
|
||||
ymin(1)=y1
|
||||
ymax(1)=y2
|
||||
else
|
||||
ymin(rl)=1e30
|
||||
ymax(rl)=-1e30
|
||||
ylast1=ymin(rl)
|
||||
ylast2=ymax(rl)
|
||||
do i=sel1,sel2
|
||||
do j=1,retLen(i)
|
||||
if (yd(j,i)/=undef) then
|
||||
ymin(rl)=min(ymin(rl),yd(j,i))
|
||||
ymax(rl)=max(ymax(rl),yd(j,i))
|
||||
endif
|
||||
enddo
|
||||
do j=max(1,retLen(i)-4),retLen(i)
|
||||
if (yd(j, i)/=undef) then
|
||||
ylast1=min(ylast1,yd(j, i))
|
||||
ylast2=max(ylast2,yd(j, i))
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
|
||||
ey=(ymax(rl)-ymin(rl))
|
||||
fy=abs(ymax(rl))
|
||||
ymax(rl)=ymax(rl)+max(fy*0.0075,ey*0.01)
|
||||
ymin(rl)=ymin(rl)-max(fy*0.005,ey*0.01)
|
||||
if (mode==live) then
|
||||
ymin(rl)=min(ymin(rl),max(0.0,ylast1-ey*0.4))
|
||||
ymax(rl)=max(ymax(rl),ylast2+ey*0.4)
|
||||
endif
|
||||
endif
|
||||
|
||||
if (ymax(rl) < ymin(rl)) then
|
||||
ymax(rl)=1.0
|
||||
ymin(rl)=0
|
||||
elseif (ymax(rl) == ymin(rl)) then
|
||||
ymax(rl)=ymin(rl)*1.00001+1.0
|
||||
ymin(rl)=-1.0e-3
|
||||
endif
|
||||
|
||||
call set_win(rl,x1,x2,ymin(rl),ymax(rl))
|
||||
|
||||
do i=i1,i2
|
||||
call pgsci(color(i))
|
||||
l=0
|
||||
lastj=1
|
||||
do j=1,retLen(i)
|
||||
if (yd(j,i)==undef) then
|
||||
if (j>lastj) then
|
||||
call pgline(j-lastj, xd(lastj,i), yd(lastj,i))
|
||||
endif
|
||||
lastj=j+1
|
||||
else
|
||||
l=j
|
||||
endif
|
||||
enddo
|
||||
if (retLen(i) > lastj) call pgline(retLen(i)+1-lastj, xd(lastj,i), yd(lastj,i))
|
||||
retLen(i)=l
|
||||
enddo
|
||||
call pgsci(1)
|
||||
if (rl == 1) then
|
||||
call pgsch(1.0)
|
||||
call pgtbox('ZHXYBINST', ticks, 0, 'BCINMST', 0.0, 0)
|
||||
call pgtbox('C', 0.0, 0, ' ', 0.0, 0)
|
||||
ey=0.0
|
||||
do i=i1,i2
|
||||
if (retLen(i) > 0) then
|
||||
name=parnam(i)
|
||||
if (name=='Tm') then
|
||||
name='Main Sensor'
|
||||
elseif (name=='Ts') then
|
||||
name='Sample Sensor'
|
||||
elseif (name=='Tr') then
|
||||
name='SetPoint'
|
||||
endif
|
||||
call str_trim(name, name, name_len)
|
||||
if (sel == i) then
|
||||
name=name(1:name_len)//'*'
|
||||
call str_trim(name, name, name_len)
|
||||
endif
|
||||
call pglen(5, name(1:name_len), fx, fy)
|
||||
call pgsci(color(i))
|
||||
call pgmtxt ('L', 2.5, ey, 0.0, name(1:name_len))
|
||||
ey=ey+fy+0.04
|
||||
endif
|
||||
enddo
|
||||
call pgsci(1)
|
||||
call pgmtxt ('L', 2.5, ey, 0.0, 'T [K]')
|
||||
else
|
||||
call pgsch(0.7)
|
||||
call pgtbox('ZCIST', ticks, 0, 'BCVINMST', 0.0, 0)
|
||||
call pgtbox('B', 0.0, 0, ' ', 0.0, 0)
|
||||
call pgsci(color(nset))
|
||||
call pgsch(1.0)
|
||||
if (parnam(nset) == 'P' .or. parnam(nset) == 'p') then
|
||||
call pgmtxt ('L', 2.5, 0.5, 0.5, 'Power [W]')
|
||||
elseif (parnam(nset) == 'He') then
|
||||
title='%'
|
||||
iret=tecs_get_par('heUnits', title, 0)
|
||||
call str_trim(title, title, title_len)
|
||||
call pgmtxt ('L', 2.5, 0.5, 0.5, 'Helium ['//title(1:title_len)//']')
|
||||
else
|
||||
call pgmtxt ('L', 2.5, 0.5, 0.5, parnam(nset))
|
||||
endif
|
||||
endif
|
||||
i1=nset-naux+1
|
||||
i2=nset
|
||||
sel1=i1
|
||||
sel2=i2
|
||||
enddo
|
||||
|
||||
call pgsch(0.7)
|
||||
rl=1
|
||||
call set_win(rl,x1,x2,ymin(rl),ymax(rl))
|
||||
|
||||
call pgsci(1)
|
||||
call pgsclp(0)
|
||||
if (mode==live) then
|
||||
text(2,1)='live off'
|
||||
else
|
||||
text(2,1)='live on'
|
||||
endif
|
||||
text(2,10)='show '//apar(mod(auxsel,3)+1)
|
||||
menuwid=0.0
|
||||
do i=1,nmenu
|
||||
call str_trim(text(2,i), text(2,i), text_len)
|
||||
call pglen(5, text(2,i)(1:text_len), fx, fy)
|
||||
call pgmtxt('T', 3.0, menuwid, 0.0, '|'//text(1,i))
|
||||
call pgmtxt('T', 2.5, menuwid, 0.0, '|')
|
||||
call pgmtxt('T', 2.0, menuwid, 0.0, '|'//text(2,i))
|
||||
menuwid=menuwid+fx+0.01
|
||||
enddo
|
||||
call pgmtxt('T', 3.0, menuwid, 0.0, '|')
|
||||
call pgmtxt('T', 2.5, menuwid, 0.0, '|')
|
||||
call pgmtxt('T', 2.0, menuwid, 0.0, '|')
|
||||
menuwid=menuwid+0.01
|
||||
|
||||
call pgsch(0.8)
|
||||
done=.false.
|
||||
row=(ymax(rl)-ymin(rl))/30.
|
||||
ey=ymin(rl)-row*3.5
|
||||
i=max(0,int((x1+oneDay/2)/oneDay))
|
||||
|
||||
do
|
||||
ex=(i+0.5)*oneDay
|
||||
if (ex > x2) EXIT
|
||||
done=.true.
|
||||
write(buf,'(i8.8)') myc_date(nint(ex)+tbase)
|
||||
call pgptxt(ex, ey, 0.0, 0.5, weekdays(mod(i,7)+1)//buf(7:8)//'.'//buf(5:6))
|
||||
ex=ex-12*3600
|
||||
if (ex > x1) then
|
||||
call pgmove(ex, ey)
|
||||
call pgdraw(ex, ey+row)
|
||||
endif
|
||||
ex=ex+oneDay
|
||||
if (ex < x2) then
|
||||
call pgmove(ex, ey)
|
||||
call pgdraw(ex, ey+row)
|
||||
endif
|
||||
i=i+1
|
||||
enddo
|
||||
if (.not. done) then
|
||||
n=nint(x2)/oneDay*oneDay
|
||||
i=nint(x1)-n
|
||||
j=nint(x2)-n
|
||||
if (i < 0) then
|
||||
if (-i > j) then
|
||||
ex=0.0
|
||||
i=nint(x1)+tbase
|
||||
else
|
||||
ex=1.0
|
||||
i=nint(x2)+tbase
|
||||
endif
|
||||
else
|
||||
ex=0.5
|
||||
i=nint(x2)+tbase
|
||||
endif
|
||||
thisday=mod(i/oneDay,7)+1
|
||||
write(buf,'(i8.8)') myc_date(i)
|
||||
! call pgptxt((x1+x2)/2, ey, 0.0, ex, weekdays(mod(thisday,7)+1)//buf(7:8)//'.'//buf(5:6))
|
||||
call pgmtxt('B', 3.5, ex, ex, weekdays(thisday)//buf(7:8)//'.'//buf(5:6))
|
||||
endif
|
||||
|
||||
iret=tecs_get_par('device', title, 0)
|
||||
if (iret < 0) goto 99
|
||||
i=index(title, '(')
|
||||
if (i > 2 ) then
|
||||
title=title(1:i-1)
|
||||
else
|
||||
title='test - no device'
|
||||
endif
|
||||
|
||||
call pgmtxt('T', -1.5, 0.02, 0.0, title)
|
||||
call pgsclp(1)
|
||||
|
||||
call purge_keys ! purge buffer
|
||||
|
||||
numl=0
|
||||
numb=' '
|
||||
7 ex=undef
|
||||
if (mode==live) then
|
||||
! if (device(1:1)=='X') then
|
||||
! call pgmtxt('T', 0.5, 0.0, 0.0, 'LIVE MODE (click on text window before pressing any further key)')
|
||||
! endif
|
||||
! call get_key(key, 0, chartperiod)
|
||||
i=chartperiod-mod(myc_now(), chartperiod)
|
||||
call get_cursor(ex, ey, key, -i)
|
||||
|
||||
do while (key == char(0) .or. key == ' ') ! no key or space key pressed
|
||||
iret=tecs_get_mult(pars, t, nset, yy1)
|
||||
if (iret<0) goto 99
|
||||
tim1=t-tbase
|
||||
if (tim1 > x2) then
|
||||
call pgpage
|
||||
window=x2-x1
|
||||
goto 1
|
||||
endif
|
||||
if (tim1 > tim0) then
|
||||
i1=1
|
||||
i2=nset-naux
|
||||
do rl=1,2
|
||||
call set_win(rl,x1,x2,ymin(rl),ymax(rl))
|
||||
do i=i1,i2
|
||||
if (yy0(i) /= undef .and. yy1(i) /= undef) then
|
||||
if ((sel==0 .or. sel==i) .and. (yy1(i) < ymin(rl) .or. yy1(i) > ymax(rl))) then
|
||||
call pgpage
|
||||
window=x2-x1
|
||||
goto 1
|
||||
endif
|
||||
call pgsci(color(i))
|
||||
call pgmove(tim0, yy0(i))
|
||||
call pgdraw(tim1, yy1(i))
|
||||
endif
|
||||
yy0(i)=yy1(i)
|
||||
enddo
|
||||
i1=nset-naux+1
|
||||
i2=nset
|
||||
enddo
|
||||
tim0=tim1
|
||||
|
||||
endif
|
||||
i=chartperiod-mod(myc_now(), chartperiod)
|
||||
call get_cursor(ex, ey, key, -i)
|
||||
enddo
|
||||
else
|
||||
call get_cursor(ex, ey, key, 0)
|
||||
endif
|
||||
rl=1
|
||||
call set_win(rl,x1,x2,ymin(rl),ymax(rl))
|
||||
|
||||
8 if (key>='a') key=char(ichar(key)-32)
|
||||
if (key=='-') then
|
||||
window=min(window*2, 8.0*oneDay)
|
||||
if (mode==zoom) then
|
||||
x1=x1-(x2-x1)/2
|
||||
x2=x2+(x2-x1)/3
|
||||
y1=y1-(y2-y1)/2
|
||||
y2=y2+(y2-y1)/3
|
||||
endif
|
||||
elseif (key=='X') then
|
||||
window=0
|
||||
mode=0
|
||||
elseif (key=='+' .or. key==',') then
|
||||
window=max(winmin,window/2)
|
||||
if (mode==zoom) then
|
||||
if (ex==undef) then
|
||||
ex=(x1+x2)/2
|
||||
ey=(min(y2,ymax(1))+max(y1,ymin(1)))/2
|
||||
end if
|
||||
fx=max(winmin,x2-x1)
|
||||
fy=max(y2-y1,1e-3,y2*1e-5)
|
||||
x1=ex-fx/4
|
||||
x2=ex+fx/4
|
||||
y1=ey-fy/4
|
||||
y2=ey+fy/4
|
||||
endif
|
||||
elseif (key=='Z') then
|
||||
call pgsci(1)
|
||||
if (ex==undef) then
|
||||
call pgmtxt('T', 0.5, 0.0, 0.0, 'click on two opposite corners of a selection rectangle')
|
||||
call get_cursor(ex, ey, key, 0)
|
||||
else
|
||||
call pgmtxt('T', 0.5, 0.0, 0.0, 'click on second corner of selection rectangle')
|
||||
endif
|
||||
call pgsci(6)
|
||||
xmin=x1
|
||||
xmax=x2
|
||||
call pgmove(xmin, ey)
|
||||
call pgdraw(xmax, ey)
|
||||
call pgmove(ex, ymin(rl))
|
||||
call pgdraw(ex, ymax(rl))
|
||||
if (device(1:1) .eq. 'X') then
|
||||
fx=ex
|
||||
fy=ey
|
||||
call get_cursor(fx, fy, key, 2)
|
||||
else
|
||||
call get_cursor(fx, fy, key, 0)
|
||||
endif
|
||||
x1=max(xmin,min(ex,fx))
|
||||
x2=min(xmax,max(ex,fx))
|
||||
if (x1>=x2) then
|
||||
x1=xmin
|
||||
x2=xmax
|
||||
endif
|
||||
window=x2-x1
|
||||
y1=max(ymin(1),min(ey,fy))
|
||||
y2=min(ymax(1),max(ey,fy))
|
||||
if (y1>=y2) then
|
||||
y1=ymin(1)
|
||||
y2=ymax(1)
|
||||
endif
|
||||
mode=zoom
|
||||
elseif (key >= '0' .and. key <= '9' .or. key == '.') then ! number
|
||||
if (numl .lt. len(numb)) then
|
||||
numl=numl+1
|
||||
numb(numl:numl)=key
|
||||
call pgsci(1)
|
||||
call pgsch(0.8)
|
||||
call pgmtxt('T', 2.0, menuwid, 0.0, numb(1:numl))
|
||||
endif
|
||||
! call get_cursor(ex, ey, key, -chartperiod)
|
||||
! if (key/=char(0)) goto 8
|
||||
if (mode==zoom) mode=0
|
||||
goto 7
|
||||
elseif (key == 'D') then
|
||||
ex=1
|
||||
read(numb, *, iostat=i) ex
|
||||
window=min(maxRange,max(minRange, nint(oneDay*ex)))
|
||||
if (mode < right) mode=right
|
||||
x1=0
|
||||
elseif (key == 'H') then
|
||||
ex=1
|
||||
read(numb, *, iostat=i) ex
|
||||
window=min(maxRange,max(minRange, nint(3600*ex)))
|
||||
if (mode < right) mode=right
|
||||
x1=0
|
||||
elseif (key == 'M') then
|
||||
ex=1
|
||||
read(numb, *, iostat=i) ex
|
||||
window=min(maxRange,max(minRange, nint(60*ex)))
|
||||
if (mode < right) mode=right
|
||||
x1=0
|
||||
elseif (key == 'T' .or. numl>0 .and. (key==char(13) .or. key==char(10))) then
|
||||
j=index(numb,'.')
|
||||
day=0
|
||||
if (j > 1 .and. j < numl) then
|
||||
read(numb(1:j-1), *, iostat=i) day
|
||||
mon=0
|
||||
read(numb(j+1:numl), *, iostat=i) mon
|
||||
tbase = myc_time(day+mon*100)
|
||||
else
|
||||
read(numb, *, iostat=i) day
|
||||
tbase = myc_time(day)
|
||||
endif
|
||||
x1=0
|
||||
x2=oneDay
|
||||
window=x2
|
||||
mode=0
|
||||
elseif (key == 'L') then
|
||||
if (mode == live) then
|
||||
mode=right
|
||||
else
|
||||
mode=live
|
||||
endif
|
||||
elseif (key == 'F') then
|
||||
saveit=.true.
|
||||
elseif (key=='Q' .or. key==char(13) .or. key==char(10)) then
|
||||
goto 9
|
||||
elseif (key == 'S') then
|
||||
sel=sel+1
|
||||
if (sel > tmax) sel=0
|
||||
if (mode==zoom) mode=0
|
||||
elseif (key == 'C') then
|
||||
auxsel=auxsel+1
|
||||
if (auxsel > amax) auxsel=1
|
||||
elseif (mode==live) then
|
||||
goto 7
|
||||
endif
|
||||
numl=0
|
||||
numb=' '
|
||||
call pgpage
|
||||
goto 1
|
||||
99 call tecs_write_msg(6)
|
||||
9 continue
|
||||
call pgclos
|
||||
call purge_keys
|
||||
print *
|
||||
if (saveit) then
|
||||
lund=41
|
||||
print '(x,a,$)', 'Filename: '
|
||||
read(*,'(a)') filnam
|
||||
open(lund, file=filnam, status='unknown') ! , carriagecontrol='list')
|
||||
|
||||
l=0
|
||||
i2=0
|
||||
do i1=1,nset
|
||||
if (i1 > nset-naux) then
|
||||
j=i1
|
||||
else
|
||||
j=nset-i1+(1-naux)
|
||||
endif
|
||||
|
||||
gap=.false.
|
||||
do i=1,retLen(j)
|
||||
if (yd(i,j)==undef) then
|
||||
if (gap) then
|
||||
write(lund, '(f9.4,2a)') xd(i,j)/3600., char(9), ' '
|
||||
gap=.false.
|
||||
endif
|
||||
else
|
||||
if (i2/=i1) then
|
||||
if (l > 0) write(lund, *)
|
||||
call str_trim(parnam(j), parnam(j), text_len)
|
||||
write(lund, *) ' time [h]',char(9), ' ',parnam(j)(1:text_len)
|
||||
l=l+1
|
||||
i2=i1
|
||||
endif
|
||||
write(lund, '(f9.4,a,f9.4)') xd(i,j)/3600., char(9), max(-999.,min(9999.,yd(i,j)))
|
||||
l=l+1
|
||||
gap=.true.
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
close(lund)
|
||||
print *, l, ' lines written to ',filnam(1:48)
|
||||
endif
|
||||
|
||||
end subroutine
|
||||
|
||||
subroutine get_cursor(x, y, key, mode)
|
||||
character*1 key
|
||||
real*4 x, y
|
||||
integer mode
|
||||
integer with_timeout/-1/
|
||||
integer l
|
||||
character res*32
|
||||
|
||||
if (with_timeout<0) then
|
||||
with_timeout=0
|
||||
call pgqinf('VERSION', res, l)
|
||||
if (res(l:l)=='+') then
|
||||
call pgqinf('TYPE', res, l)
|
||||
if (res(1:1)=='X') then
|
||||
with_timeout=1
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
if (with_timeout>0 .or. mode>=0) then
|
||||
call pgband(mode, 0, x, y, x, y, key)
|
||||
else
|
||||
call sys_get_key(key, -mode)
|
||||
endif
|
||||
end subroutine
|
||||
|
||||
subroutine purge_keys
|
||||
character key*1
|
||||
key=' '
|
||||
do while (key/=char(0))
|
||||
call sys_get_key(key, 0)
|
||||
end do
|
||||
end subroutine
|
||||
|
||||
subroutine set_win(rl, x1, x2, y1, y2)
|
||||
integer rl
|
||||
real x1, x2, y1, y2
|
||||
|
||||
if (rl == 1) then
|
||||
call pgsvp(0.07,0.93,0.3,0.9)
|
||||
else
|
||||
call pgsvp(0.07,0.93,0.01,0.20)
|
||||
endif
|
||||
|
||||
call pgswin(x1,x2,y1,y2)
|
||||
end subroutine
|
||||
|
||||
integer function get_data(pars, first, last, step, tbase, xd, yd, dmax, nmax, retlen)
|
||||
character pars*(*)
|
||||
integer first, last, step, tbase, dmax, nmax, retlen(nmax)
|
||||
real*4 xd(dmax,nmax), yd(dmax,nmax)
|
||||
|
||||
integer oneDay, maxn
|
||||
parameter (oneDay = 24*3600, maxn=9)
|
||||
integer tecs_get_data
|
||||
|
||||
integer i,j,rl(maxn),m,k,n,mm
|
||||
|
||||
if (nmax > maxn) stop 'get_data: nmax>maxn'
|
||||
if (last-first <= oneDay) then
|
||||
get_data=tecs_get_data(pars, first, last, step, tbase, xd, yd, dmax, nmax, retLen)
|
||||
else
|
||||
do j=1,nmax
|
||||
retlen(j)=0
|
||||
enddo
|
||||
m=0
|
||||
do i=first/oneDay,last/oneDay
|
||||
get_data=tecs_get_data(pars, max(first,i*oneDay), min(last,(i+1)*oneDay-step), step, tbase &
|
||||
, xd(m+1, 1), yd(m+1, 1), dmax, nmax, rl)
|
||||
if (get_data<0) return
|
||||
mm=0
|
||||
do j=1,nmax
|
||||
n=retlen(j)
|
||||
do k=m+1,m+rl(j)
|
||||
n=n+1
|
||||
xd(n,j)=xd(k,j)
|
||||
yd(n,j)=yd(k,j)
|
||||
enddo
|
||||
retlen(j)=n
|
||||
mm=max(mm,n)
|
||||
enddo
|
||||
! print *,mm-m,' points read'
|
||||
m=mm
|
||||
enddo
|
||||
endif
|
||||
end function
|
Reference in New Issue
Block a user