Pro Rdpixg, Image, X0, Y0, Data=Data

;+
; NAME:
; 	RDPIXG
;
; PURPOSE:
; 	Read the value of the pixel under the cursor; display x,y and the pixel value ; ;under 
; 	the cursor; interactively display the X position, Y position, and pixel value 
; 	of the cursor. Modification of the standard routine RDPIX.
;
; CATEGORY:
; 	Image analysis.
;
; CALLING SEQUENCE:
;
; 	RDPIXG, Image [, X0, Y0, Data=Data]
;
; INPUTS:
; 	Image:	The array that represents the image being displayed. This array may be 
; 	of any type.  Rather reading pixel values from the display, they are taken 
; 	from this parameter, avoiding scaling difficulties.
;
; OPTIONAL INPUT PARAMETERS:
; 	X0, Y0: The location of the lower-left corner of the image area on the screen. 
;  	If these parameters are not supplied, they are assumed to be zero.
;
; KEYWORD PARAMETERS:
; 	DATA:   If set and non-zero, data coordinate system is processed established, e.g., 
;   	by the TVCON routine with one argument. 
;
; OUTPUTS:
; 	None.
;
; COMMON BLOCKS:
; 	None.
;
; SIDE EFFECTS:
; 	The X, Y, and value of the pixel under the cursor are continuously displayed.
;
; RESTRICTIONS:
; 	None.
;
; PROCEDURE:
; 	Instructions are printed and the pixel values are printed as the cursor is moved over 
; 	the image. 
; 	Press the left mouse button to create a new line of output, 
; 	saving the previous line.
; 	Press the right mouse button to exit the procedure.
; 	Processing of DATA coordinate system is added.
; 	Overflow of output format is prevented.	
;
; MODIFICATION HISTORY:
;	DMS, Dec, 1987.
;	Rob Montgomery (rob@hao.ucar.edu), 9/21/92;
;		Correct indices for case of !order = 1
;
;	ISTP SD RAS, Feb, 1997.
;	Victor Grechnev (grechnev@iszf.irk.ru):
;	Processing of DATA coordinate system is added.
;	Overflow of output format is prevented.	
;
;-

on_error,2              ;Return to caller if an error occurs
print,'Press left or center mouse button for new output line."
print,'... right mouse button to exit.'
s = size(image)
if s(0) ne 2 then message, 'Image parameter not 2d.'
s(1) = s(1)-1		;To n-1
s(2) = s(2)-1
!err=0
if n_elements(x0) le 0 then x0 = 0
if n_elements(y0) le 0 then y0 = 0
if s(s(0)+1) ge 4 then form = 'G' else form = 'I'
cr = string("15b)	;this codes a newline

if !version.release ge 5 and strlowcase(strmid(!version.OS, 0, 3)) eq 'win' then $
	form="($,'x=',i4,', y=',i4,', value=',"+form+",a, /)" else $
	form="($,'x=',i4,', y=',i4,', value=',"+form+",a)"

while !err ne 4 do begin
	tvrdc,x,y,2,/dev
	if (!err and 3) ne 0 then begin	;New line?
	   print,form="($,a)",string("12b)
	   while (!err ne 0) do begin wait,.1 & tvrdc,x,y,0,/dev & end
	  endif

	x = x-x0 & y = y - y0
	if keyword_set(data) then begin
	xy=convert_coord(x,y,/dev,/to_data)
	x=xy(0)
	y=xy(1)
	endif
	if (x le s(1)) and (y le s(2)) and (x ge 0) and (y ge 0) then begin
	   if (!order eq 1) then yy = s(2) - y else yy = y
	   print,form = form, x,y,Image(x,yy),cr
	endif
endwhile
print,form="(/)"
end

