pro get_wind,index,xsize=xsize,ysize=ysize,free=free,$
             ypos=ypos,xpos=xpos,retain=retain,title=title

if (!d.name ne 'X') then return
if n_elements(retain) eq 0 then retain=2
if n_elements(xpos) eq 0 then xpos=0
if n_elements(ypos) eq 0 then ypos=0
if (n_elements(xsize) eq 0) and (n_elements(ysize) ne 0) then xsize=ysize
if (n_elements(ysize) eq 0) and (n_elements(xsize) ne 0) then ysize=xsize
if (n_elements(ysize) eq 0) and (n_elements(xsize) eq 0) then begin
 xsize=512 & ysize=512
endif
if n_elements(title) eq 0 then title=''

avail=0
device,window=ow
owx=where(ow eq 1)
dt=datatype(index,2)
if (dt gt 5) or (dt eq 0) then index=-2
find=where(float(index) eq float(owx),count)
get_new=0

if keyword_set(free) then get_new=1 else begin
 if count gt 0 then begin
  index=(owx(find))(0)
  wset,index
  if (!d.x_size ne xsize) or (!d.y_size ne ysize) then get_new=1
 endif else get_new=1
endelse

if get_new then $
 window,/free,xsize=xsize,ysize=ysize,xpos=xpos,retain=retain,title=title,ypos=ypos
index=!d.window
wshow,index & wset,index

return & end