
	pro xtext_event,ev

common Exch_xtext,scbase,Txt,Out_Text,lun,Filename

goto, obh_print

        CASE !version.OS OF

'windows':      prn_funct='copy '+Filename+' prn:'

'Win32':        prn_funct='copy '+Filename+' prn:'

ELSE:           prn_funct='lpr '+Filename

        ENDCASE


obh_print:

WIDGET_CONTROL,ev.id,GET_UVALUE = wuv, /hour

CASE wuv OF

"QUIT"	:	WIDGET_CONTROL,ev.top,/DESTROY

"File"	:	begin

	file=dialog_pickfile(/read)
	if file eq '' then return
	WIDGET_CONTROL,ev.top,/DESTROY
	xtext, File=File

		end


"PRINT"	:	IF Filename ne '' THEN begin
		flush,lun
	if strmid(!version.release,0,1) lt 5 then spawn, prn_funct else begin

	;	 set_plot,'printer'
		 ;device,filename=filename,/close_document

	a = execute('f=dialog_printersetup()')

		if a eq 0 then return else begin
file = 'idl.' + STRLOWCASE(!D.NAME)
;stop
;file = 'idl.' + string(filename)
;cmd = 'lpr ' + file
;cmd = cmd + ';
;SPAWN, cmd
spawn, prn_funct

	endelse

	endelse
		;if strmid(!version.release,0,1) lt 5 then spawn, prn_funct else f=dialog_printersetup()
		wait,1
		endif

'INPUT':	begin
	widget_control, ev.id, get_val = n_line
pos = long(n_line(0))
	widget_control, ev.id, set_text_top_line = pos, $
		set_text_select = [pos,40]
		end

ELSE:

ENDCASE

end



   pro xtext,Text=Text,File=File,group_leader=group_leader, $
identifier=identifier, numbers = numbers, one_argument

;	Displays interactively a text. xtext is similar to XDISPLAYFILE.

common Exch_xtext,scbase,Txt,Out_Text,lun,Filename


IF(XRegistered("xtext") NE 0) THEN return


	device,get_scr=scr

if n_elements(group_leader) le 0 then group_leader=0L

	CASE 1 OF
n_params() eq 1:	Out_text = one_argument

n_params() eq 0 and n_elements(Text) gt 0: Out_text = Text

n_params() eq 0 and n_elements(File) gt 0: Out_text = readform(file)

	ELSE:
	ENDCASE

goto, obh_new

	if n_elements(File) le 0 then begin
if n_elements(Text) le 0 then Out_text='             ' else Out_text=Text
Filename='prn_file.tmp'

	openw,lun,Filename,/get
for j=0, n_elements(Out_text)-1 do printf, lun, Out_text(j)
	flush, lun
	;free_lun,lun
	close, lun

	endif else begin

widget_control,/hour
Filename=File

;Out_text = readform(file)

if file eq '' then Out_text =''

widget_control, /hour

   openr, lun, file, /get

st = fstat(lun)
data = bytarr(st.size)
readu, lun, data

point_lun, lun, 0

iii = where(data eq '0A'xB)
N = n_elements(iii)

data = strarr(N)

readf, lun, data

st = fstat(lun)

   if (st.cur_ptr + 1) lt st.size then begin
tmp = ''
readf, lun, tmp
data = [data, tmp]
   endif

   close, lun
Out_text=data

;----
obh:
	endelse

obh_new:

N = n_elements(Out_text)

	if keyword_set(numbers) then begin

n_signs = ceil(alog10(N))

	Out_text = strmid(sindgen(N), 12-n_signs, n_signs)+'  '+Out_text

	endif

scbase= widget_base(title='xtext', group_leader=group_leader, /column)

menubase=widget_base(scbase, /row)

button=widget_button(menubase, val="QUIT", uval="QUIT")
button=widget_button(menubase, val="Load", uval="File")
;button=widget_button(menubase, val="Print", uval="PRINT")

;input=widget_text(menubase, val=string(N), uval="INPUT", /edit)

Txt = WIDGET_TEXT(SCBASE,/frame, Ysize = N < scr(1)/24 < 30 > 4, $
	value=Out_text,/scroll,uvalue='', xsize=max(strlen(Out_text)) +2 > 10)

WIDGET_CONTROL, scbase, /realize, /hourglass

identifier=scbase

xmanager,'xtext', SCBASE, GROUP_LEADER = GROUP_LEADER, /no_block

end
