

pro stereo_pointing_display,input_x,input_y,input_image,input_contour_data,$
                  position=position,$
                  noerase=noerase,use_tv=use_tv,$
                  xtitle=xtitle,ytitle=ytitle,title=title,$
                  ticklen=ticklen,$
                  noxtickmarks=noxtickmarks,noytickmarks=noytickmarks,$
                  nlevels=nlevels,ccolors=ccolors,xticks=xticks,$
                  levels=levels,c_labels=c_labels,c_linestyle=c_linestyle,$
                  charsize=charsize,ct_reverse=ct_reverse,yticks=yticks,$
                  xtickname=xtickname,ytickname=ytickname,$
                  xtickformat=xtickformat,ytickformat=ytickformat,$
                  interp=interp,$
                  ylog=ylog,utplot=utplot,true=true,$
                  black=black

;; ----------------------------------------------------------------------

if keyword_set(ylog) then begin
  nx   = (size(input_image))[1]
  ny   = (size(input_image))[2]
  y    = input_y
  x    = input_x
  yold = y[0] + (y[1]-y[0])*findgen(ny)/(ny-1)
  
  ns   = 2*ny
  y1   = alog10(y[0])
  y2   = alog10(y[1])
  dy   = (y2-y1)/(ns-1)
  ylog = y1 + dy*findgen(ns)
  ynew = 10.0^ylog
  
  image = fltarr(nx,ns)
  for i=0,nx-1 do image[i,*] = interpol(input_image[i,*],yold,ynew)
  
  y = minmax(ynew)
endif

if keyword_set(xlog)+keyword_set(ylog) eq 0 then begin
  x = input_x
  y = input_y
  image = input_image
  if n_params() eq 4 then contour_data = input_contour_data
end

;; ----------------------------------------------------------------------

if not(keyword_set(noerase)) and (!d.name ne 'PS') then erase

ang = string("305B)

if not(keyword_set(ytitle)) then ytitle = "Solar Y (arcsec)"
if not(keyword_set(xtitle)) then xtitle = "Wavelength ("+ang+")" ;; "

xmin = x(0)
xmax = x(1)
ymin = y(0)
ymax = y(1)

if keyword_set(position) then begin
  dx_n = [position(0),1-position(2)]
  dy_n = [position(1),1-position(3)]
  h    = 1 - dy_n(0) - dy_n(1)
  w    = 1 - dx_n(0) - dx_n(1)
  dd_d = convert_coord([position(0),position(1)],/normal,/to_device)
  dx_d = dd_d(0)
  dy_d = dd_d(1)

  !p.position = position
  plot_units  = ",/normal"
endif else begin
  dx_d = !x.margin*!d.x_ch_size
  dy_d = !y.margin*!d.y_ch_size
  d    = convert_coord(dx_d,dy_d,/device,/to_normal)
  dx_n = [d(0,0),d(0,1)]
  dy_n = [d(1,0),d(1,1)]
  h    = 1 - dy_n(0) - dy_n(1)
  w    = 1 - dx_n(0) - dx_n(1)
  position   = [dx_n(0),dy_n(0),dx_n(0)+w,dy_n(0)+h]
  plot_units = ",/data"
endelse

if n_params() eq 4 then begin

  if n_elements(c_linestyle) eq 0 then c_linestyle = [0]
  if n_elements(nlevels) eq 0 then nlevels = 4
  if n_elements(ccolors) eq 0 then ccolors = $
      !d.table_size*findgen(nlevels)/float(nlevels-1)
  if n_elements(c_labels) eq 0 then c_labels = intarr(nlevels)
  
  if n_elements(levels) eq 0 then begin
    mm = minmax(contour_data)
    dl = (mm(1)-mm(0))/float(nlevels)
    levels = mm(0) + dl*findgen(nlevels)
  endif

endif

if !d.name ne 'PS' then begin
  h_d = h*!d.y_size
  w_d = w*!d.x_size

  if keyword_set(true) then begin
    image_c = bytarr(3,w_d,h_d)
    for i=0,2 do begin
      image_c[i,*,*] = congrid(reform(image[i,*,*]),w_d,h_d,interp=interp)
    endfor
  endif else begin
    image_c = congrid(image,w_d,h_d,interp=interp)
  endelse

  if keyword_set(use_tv) then com = "tv," else com = "tvscl,"
  com = com + "image_c,dx_n(0),dy_n(0),/normal"
  if keyword_set(true) then com = com + ',true=1'
  res = execute(com)
  if n_params() eq 4 then begin
    contour,contour_data,/noerase,xstyle=5,ystyle=5,$
        position=[dx_n(0),dy_n(0),dx_n(0)+w,dy_n(0)+h],$
        nlevels=nlevels,c_colors=ccolors,/follow,levels=levels,$
        c_labels=c_labels,c_linestyle=c_linestyle
  endif
endif else begin
  if keyword_set(ct_reverse) then reverse_colors
  if keyword_set(use_tv) then com = "tv," else com = "tvscl,"
  if keyword_set(interp) then begin

    if keyword_set(true) then begin
      nx = (size(image))(1)
      ny = (size(image))(2)
      image_c = bytarr(3,2*nx,2*ny)
      for i=0,2 do begin
        image_c[i,*,*] = congrid(reform(image[i,*,*]),2*nx,2*ny,/interp)
      endfor
      image = image_c
    endif else begin
      nx = (size(image))(1)
      ny = (size(image))(2)
      image = congrid(image,nx*2,ny*2,/interp)
    endelse

  endif

  com = com + "image,dx_n(0),dy_n(0),xsize=w,ysize=h,/normal"
  if keyword_set(true) then com = com + ',true='+trim(true)
  if keyword_set(true) then loadct,0,/silent
  res = execute(com)
  if n_params() eq 4 then begin
    contour,contour_data,/noerase,xstyle=5,ystyle=5,$
        position=[dx_n(0),dy_n(0),dx_n(0)+w,dy_n(0)+h],$
        nlevels=nlevels,c_colors=ccolors,/follow,levels=levels,$
        c_labels=c_labels,c_linestyle=[0]
  endif
  if keyword_set(ct_reverse) then reverse_colors
endelse

;; ----------------------------------------------------------------------

if keyword_set(ticklen) then tl = ticklen else tl = 0.0

if keyword_set(utplot) then begin
  delvarx,xtitle
  com = "utplot"
endif else com = "plot"

com = com + ",[xmin,xmax],[ymin,ymax],/nodata,/noerase"
com = com + ",xrange=[xmin,xmax],yrange=[ymin,ymax]"
com = com + ",xstyle=1,ystyle=1"
com = com + plot_units
com = com + ",ticklen = "+strtrim(string(tl),2)

if keyword_set(black) then com = com + ',color=0'

if keyword_set(noxtickmarks) then begin
   com = com + ",xtickname = replicate(' ',60)"
   com = com + ",xtitle=' '"
endif else begin
  com = com + ",xtitle=xtitle"
  if keyword_set(xticks) then com = com + ",xticks=xticks"
  if keyword_set(xtickname) then com = com + ",xtickname=xtickname"
endelse

if keyword_set(noytickmarks) then begin
   com = com + ",ytickname = replicate(' ',60)"
   com = com + ",ytitle=' '"
endif else begin
  com = com + ",ytitle=ytitle"
  if keyword_set(yticks) then com = com + ",yticks=yticks"
  if keyword_set(ytickname) then com = com + ",ytickname=ytickname"
endelse

if keyword_set(xtickformat) then com = com + ",xtickformat=xtickformat"
if keyword_set(ytickformat) then com = com + ",ytickformat=ytickformat"

if keyword_set(xlog) then com = com + ",/xlog"
if keyword_set(ylog) then com = com + ",/ylog"

result = execute(com)

if keyword_set(title) then begin
  if keyword_set(charsize) then cs = charsize else cs = 0.9
  dy = 2.5*get_charsize(/y)
  dy = get_charsize(/y)
  xyouts,dx_n(0)+w/2,position(3)+dy/2.0,title,alignment=0.5,/normal,$
      charsize=cs
endif



!p.position=-1

return
end
