Viewing contents of file '../idllib/sdss/allpro/dcenter.pro'
PRO dcenter, xsize, ysize, px, py, silent=silent

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;+
;
; NAME:
;    DCENTER
;       
; PURPOSE:
;    Center up the display
;
; CALLING SEQUENCE:
;    dcenter, xsize, ysize, px, py, silent=silent
;
; INPUTS: 
;    xsize, ysize: the size of the plot.
;
; OPTIONAL INPUTS:
;    NONE
;
; KEYWORD PARAMETERS:
;    NONE
;       
; OUTPUTS: 
;    px,py: the new positions of the plot region.
;
; OPTIONAL OUTPUTS:
;    NONE
;
; CALLED ROUTINES:
;    
; 
; EXAMPLE: 
;    plot, [0,1], [0,1], /nodata, xstyle=4, ystyle=4
;    pxold = !x.window*!d.x_vsize
;    pyold = !y.window*!d.y_vsize
;    xsize = px[1] - px[0]
;    ysize = py[1] - py[0]
;    dcenter, xsize, ysize, px, py
;    position=[ [ px(0), py(0)], [ px(1), py(1) ] ]
;
;    plot, x, y, position=position, /device, /noerase, _extra=extra
;
; REVISION HISTORY:
;    ??-??-2000 Erin Scott Sheldon
;       
;                                      
;-                                       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  IF n_params() LT 2 THEN BEGIN
      print,'-Syntax: dcenter, xsize, ysize, px, py'
      print
      print,'xsize,ysize are size of plot'
      return
  ENDIF 

  IF NOT keyword_set(silent) THEN silent = 0

  IF !p.multi[1] EQ 0 THEN !p.multi[1] = 1
  IF !p.multi[2] EQ 0 THEN !p.multi[2] = 1

  pmult = !p.multi
  px_num = pmult[1]
  py_num = pmult[2]
  pwhich = (long(px_num)*py_num -1) - pmult[0]
  pz_num = pmult[3]
  porder = pmult[4]


  IF (pz_num EQ 0) THEN BEGIN 

      IF n_elements(px) NE 2 THEN px = fltarr(2)
      IF n_elements(py) NE 2 THEN py = fltarr(2)

      ;; Center x
      ptemp = [0., 1.]/px_num
      IF porder EQ 0 THEN addfac = pwhich - (pwhich/px_num)*px_num
      IF porder EQ 1 THEN addfac = pwhich/py_num
      padd = addfac/float(px_num)
      ptemp = (ptemp + padd)*!d.x_vsize

      ptotx = ptemp[1] - ptemp[0]
      pdelta = ptotx - xsize
      px[0] = ptemp[0] + pdelta/2.
      px[1] = px[0] + xsize

      ;; Center y
      ptemp = [0., 1.]/py_num
      IF porder EQ 0 THEN addfac = pwhich/px_num
      IF porder EQ 1 THEN addfac = pwhich - (pwhich/py_num)*py_num
      addfac = py_num - 1 - addfac
      padd = addfac/float(py_num)
      ptemp = (ptemp + padd)*!d.y_vsize
      ptoty = ptemp[1] - ptemp[0]
      pdelta = ptoty - ysize
      py[0] = ptemp[0] + pdelta/2.
      py[1] = py[0] + ysize

  ENDIF ELSE BEGIN
      IF NOT silent THEN print,'!p.multi[3] not equal to zero.  Not centering'
  ENDELSE 

  return 
END