	subroutine tecs_plot(auxpar)

	character*(*) auxpar
		
	integer dmax, nmax, tmax, amax, nmenu, chartperiod, naux
	parameter (dmax=400, nmax=9, tmax=8, amax=3, nmenu=13
	1          , 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/
	1    'L'    ,'live off' 
	1   ,'z'    ,'sel. zoom'
	1   ,'+'    ,'zoom in'  
	1   ,'-'    ,'zoom out' 
	1   ,'x'    ,'show all' 
	1   ,'2d'   ,'2 days'  
	1   ,'1h'   ,'1 hour'  
	1   ,'15m'  ,'15 min' 
	1   ,'31.7t','goto date'
	1   ,'c'    ,'show P/He/Aux'
	1   ,'s'    ,'select T'
	1   ,'f'    ,'write file'
	1   ,'q'    ,'quit'/
	character weekdays(7)*4/
	1  'Mon','Tue','Wed','Thu','Fri','Sat','Sun'/
	character buf*8, device*8, name*40, filnam*128, numb*16
	character title*64, pars*64
	character*4 tpar(tmax)/'Te','Tr','Tm','Ts','T1','T2','T3','T4'/
	character*4 apar(amax)/'P', 'He', 'Aux'/
	character*16 parnam(nmax)
	logical gap, done
	logical saveit
	integer iret, lund, numl, mon, day
	integer pars_len, title_len, text_len, name_len
	integer idx(nmax)
	character line*132
	real x0
	logical loop
	
	! functions
	integer sys_gmt_off, myc_now, myc_time, myc_date, get_data
	integer tecs_get_mult, tecs_get_par
	
	data window/0./
	
	if (window .eq. 0) window=1800.
	saveit=.false.
	mode=live
	call pgopen(' ')
	
	call pgqinf('TYPE', device, l)
	if (device .eq. 'NULL') then
	  call pgclos
	  call pgopen('?')
	  call pgqinf('TYPE', device, l)
	  if (device .eq. 'NULL') then
	    print *,'No PGPLOT-Device defined'
	    goto 9
	  endif
	endif
	
	call pgqcol(i,ncol)
	!  print *,i,ncol,' colors ',device
	if (ncol .ge. 8 .and. device .ne. '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 .eq. 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 .lt. 0) goto 99
	if (window .eq. 0) then
	  last=t
	  step=maxRange/dmax
	  window=maxRange
	  first=t-min(dmax*step-1,maxRange-step)
	else if (mode .ge. right) then
	  step=window/(dmax-2)+0.99
	  last=t
	  first=t-min(dmax*step-1,nint(window))
	else
	  if (mode .eq. 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 .eq. 0) step=1
	
	if (step .gt. 60) then   ! normalize step
	  step=(step+59)/60*60
	else if (step .gt. 30) then
	  step=60
	elseif (step .gt. 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
	1              , xd, yd, dmax, nmax, retLen)
	if (iret .lt. 0) goto 99
	
	x2 = last - tbase
	if (mode .ge. right) then
	  x1=x2-window
	else
	  x1 = first - tbase
	endif
	tim0=t-tbase
	do i=1,nset
	  leng=retLen(i)
	  do while (leng .gt. 1 .and. yd(leng,i) .eq. undef)
	    leng=leng-1
	  enddo
	  if (leng .eq. 1) leng=0
	  retLen(i)=leng
	  if (mode .eq. live .and. leng .gt. 0) then
	    xd(leng,i)=tim0
	    yd(leng,i)=yy0(i)
	  endif
	enddo
	if (sel .ne. 0) then
	  do while (sel .lt. nset .and. retLen(sel) .eq. 0)
	    sel=sel+1
	  enddo
	  if (sel .ge. nset) sel = 0
	endif
	if (saveit) goto 9
	if (mode .eq. live) then
	  x2=max(tim0,x2)+min(1800., window*0.5)
	endif
	
	if (window .gt. 50*3600) then
	  ticks=8*3600
	elseif (window .gt. 25*3600) then
	  ticks=4*3600
	else
	  ticks=0.0 ! automatic
	endif
	
	i1=1
	i2=nset-naux
	if (sel .eq. 0) then
	  sel1=i1
	  sel2=i2
	else
	  sel1=sel
	  sel2=sel
	endif
	do rl=1,2
	  if (mode .eq. zoom .and. rl .eq. 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) .ne. 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) .ne. 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 .eq. 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) .lt. ymin(rl)) then
	    ymax(rl)=1.0
	    ymin(rl)=0
	  elseif (ymax(rl) .eq. 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) .eq. undef) then
	        if (j .gt. lastj) then
	          call pgline(j-lastj, xd(lastj,i), yd(lastj,i))
	        endif
	        lastj=j+1
	      else
	        l=j
	      endif
	    enddo
	    if (retLen(i) .gt. lastj)
	1     call pgline(retLen(i)+1-lastj, xd(lastj,i), yd(lastj,i))
	    retLen(i)=l
	  enddo
	  call pgsci(1)
	  if (rl .eq. 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) .gt. 0) then
	        name=parnam(i)
	        if (name .eq. 'Tm') then
	          name='Main Sensor'
	        elseif (name .eq. 'Ts') then
	          name='Sample Sensor'
	        elseif (name .eq. 'Tr') then
	          name='SetPoint'
	        endif
	        call str_trim(name, name, name_len)
	        if (sel .eq. 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) .eq. 'P' .or. parnam(nset) .eq. 'p') then
	      call pgmtxt ('L', 2.5, 0.5, 0.5, 'Power [W]')
	    elseif (parnam(nset) .eq. '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,
	1       '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 .eq. 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))
	
	ex=(i+0.5)*oneDay
	do while (ex .le. x2)
	  done=.true.
	  write(buf,'(i8.8)') myc_date(nint(ex)+tbase)
	  call pgptxt(ex, ey, 0.0, 0.5,
	1   weekdays(mod(i,7)+1)//buf(7:8)//'.'//buf(5:6))
	  ex=ex-12*3600
	  if (ex .gt. x1) then
	    call pgmove(ex, ey)
	    call pgdraw(ex, ey+row)
	  endif
	  ex=ex+oneDay
	  if (ex .lt. x2) then
	    call pgmove(ex, ey)
	    call pgdraw(ex, ey+row)
	  endif
	  i=i+1
	  ex=(i+0.5)*oneDay
	enddo
	if (.not. done) then
	  n=nint(x2)/oneDay*oneDay
	  i=nint(x1)-n
	  j=nint(x2)-n
	  if (i .lt. 0) then
	    if (-i .gt. 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 pgmtxt('B', 3.5, ex, ex,
	1   weekdays(thisday)//buf(7:8)//'.'//buf(5:6))
	endif
	
	iret=tecs_get_par('device', title, 0)
	if (iret .lt. 0) goto 99
	i=index(title, '(')
	if (i .gt. 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 .eq. live) then
	!    if (device(1:1) .eq. '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 .eq. char(0) .or. key .eq. ' ') ! no key or space key pressed
	    iret=tecs_get_mult(pars, t, nset, yy1)
	    if (iret .lt. 0) goto 99
	    tim1=t-tbase
	    if (tim1 .gt. x2) then
	      call pgpage
		window=x2-x1
	      goto 1
	    endif
	    if (tim1 .gt. 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) .ne. undef .and. yy1(i) .ne. undef) then
	            if ((sel .eq. 0 .or. sel .eq. i) .and.
	1               (yy1(i) .lt. ymin(rl) .or.
	1                yy1(i) .gt. 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 .ge. 'a') key=char(ichar(key)-32)
	if (key .eq. '-') then
	  window=min(window*2, 8.0*oneDay)
	  if (mode .eq. 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 .eq. 'X') then
	  window=0
	  mode=0
	elseif (key .eq. '+' .or. key .eq. ',') then
	  window=max(winmin,window/2)
	  if (mode .eq. zoom) then
	    if (ex .eq. 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 .eq. 'Z') then
	  call pgsci(1)
	  if (ex .eq. undef) then
	    call pgmtxt('T', 0.5, 0.0, 0.0,
	1     '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,
	1     '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 .ge. 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 .ge. y2) then
	    y1=ymin(1)
	    y2=ymax(1)
	  endif
	  mode=zoom
	elseif (key .ge. '0' .and. key .le. '9' .or. key .eq. '.') 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 .ne. char(0)) goto 8
	  if (mode .eq. zoom) mode=0
	  goto 7
	elseif (key .eq. 'D') then
	  ex=1
	  read(numb, *, iostat=i) ex
	  window=min(maxRange,max(minRange, nint(oneDay*ex)))
	  if (mode .lt. right) mode=right
	  x1=0
	elseif (key .eq. 'H') then
	  ex=1
	  read(numb, *, iostat=i) ex
	  window=min(maxRange,max(minRange, nint(3600*ex)))
	  if (mode .lt. right) mode=right
	  x1=0
	elseif (key .eq. 'M') then
	  ex=1
	  read(numb, *, iostat=i) ex
	  window=min(maxRange,max(minRange, nint(60*ex)))
	  if (mode .lt. right) mode=right
	  x1=0
	elseif (key .eq. 'T' .or. numl .gt. 0 .and.
	1       (key .eq. char(13) .or. key .eq. char(10))) then
	  j=index(numb,'.')
	  day=0
	  if (j .gt. 1 .and. j .lt. 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 .eq. 'L') then
	  if (mode .eq. live) then
	    mode=right
	  else
	    mode=live
	  endif
	elseif (key .eq. 'F') then
	  saveit=.true.
	elseif (key .eq. 'Q' .or. key .eq. char(13)
	1       .or. key .eq. char(10)) then
	  goto 9
	elseif (key .eq. 'S') then
	  sel=sel+1
	  if (sel .gt. tmax) sel=0
	  if (mode .eq. zoom) mode=0
	elseif (key .eq. 'C') then
	  auxsel=auxsel+1
	  if (auxsel .gt. amax) auxsel=1
	elseif (mode .eq. 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')
	
	  line='time [h]'
	  call str_trim(line, line, l)
	  do j=1,nset
	    idx(j)=0
	    do i=1,retlen(j)
	      if (yd(i,j) .ne. undef) then
	        idx(j)=1
	        l=l+1
	        line(l:l)=char(9)
	        call str_trim(line(l+1:), parnam(j), text_len)
	        l=l+max(9,text_len)
	        goto 109
	      endif
	    enddo
109         continue
	  enddo
	  write(lund, '(a)') line(1:l)
	
	  n=1
	  x0=0
	  do while (x0 .lt. 3e7)
	    x0=4e7
	    do j=1,nmax ! find next x
	      if (idx(j) .gt. 0 .and. idx(j) .lt. retlen(j)) then
	        x0=min(x0,xd(idx(j),j))
	      endif
	    enddo
	    if (x0 .lt. 3e7) then
	      write(line,'(f9.4)') x0/3600.
	      l=9
	      do j=1,nmax
	        if (idx(j) .gt. 0) then
	          l=l+1
	          line(l:l)=char(9)
		  if (idx(j) .le. retlen(j)) then
	            if (xd(idx(j),j) .lt. x0+1) then
	              write(line(l+1:), '(f9.4)')
	1               max(-999.,min(9999.,yd(idx(j),j)))
	              l=l+9
	              idx(j)=idx(j)+1
	            endif
	          endif
	        endif
	      enddo
	      write(lund, '(a)') line(1:l)
	      n=n+1
	    endif
	  enddo
	  close(lund)
	  print *, n, ' lines written to ',filnam(1:48)
	endif
	
	end
	

	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 .lt. 0) then
	  with_timeout=0
	  call pgqinf('VERSION', res, l)
	  if (res(l:l) .eq. '+') then
	    call pgqinf('TYPE', res, l)
	    if (res(1:1) .eq. 'X') then
	      with_timeout=1
	    end if
	  end if
	end if
	if (with_timeout .gt. 0 .or. mode .ge. 0) then
	  call pgband(mode, 0, x, y, x, y, key)
	else
	  call sys_get_key(key, -mode)
	endif
	end
	

	subroutine purge_keys
	character key*1
	key=' '
	do while (key .ne. char(0))
	  call sys_get_key(key, 0)
	end do
	end
	

	subroutine set_win(rl, x1, x2, y1, y2)
	integer rl
	real x1, x2, y1, y2
	
	if (rl .eq. 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

	
	integer function get_data(pars, first, last, step, tbase
	1                        , 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 .gt. maxn) stop 'get_data: nmax>maxn'
	if (last-first .le. oneDay) then
	  get_data=tecs_get_data(pars, first, last, step, tbase
	1                       , 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)
	1        , min(last,(i+1)*oneDay-step), step, tbase
	1        , xd(m+1, 1), yd(m+1, 1), dmax, nmax, rl)
	    if (get_data .lt. 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
