*
*  Script to plot a colorbar
*
*  The script will assume a colorbar is wanted even if there is
*  not room -- it will plot on the side or the bottom if there is
*  room in either place, otherwise it will plot along the bottom and
*  overlay labels there if any.  This can be dealt with via
*  the 'set parea' command.  In version 2 the default parea will
*  be changed, but we want to guarantee upward compatibility in
*  sub-releases.
*
*
*       modifications by Mike Fiorino              940614
*                     by Rupa Kumar Kolli          971204
*
*       - the extreme colors are plotted as triangles
*       - the colors are boxed in white
*       - full control on the x,y size of bar and character size
*       - the bar can be placed in physical coordinates anywhere on
*         the full page
*       - input arguments in during a run execution:
*
*       run cbar_rup leng thik vert xmid ymid csiz page
*
*       leng - length of bar in vpage coordinates
*       thik - thickness of bar in vpage coordinates
*       vert - H draws a horizontal bar
*            - V draws a vertical bar
*       xmid - the x position on the virtual page of center of bar
*       ymid - the y position on the virtual page of center of bar
*       csiz - character size for numbers (default=0.12)
*       page - 0 places the bar in current vpage coordinates (default)
*            - l or L places the bar in physical page coordinates (landscape)
*            - p or P places the bar in physical page coordinates (portrait)
*
*       if vert,xmid,ymid are not specified, they are selected
*       as in the original algorithm
*
*       Please report bugs to kolli@tropmet.ernet.in

function colorbar (args)

leng=subwrd(args,1)
thik=subwrd(args,2)
vert=subwrd(args,3)
  vert=substr(vert,1,1)
  if(vert='v');vert='V';endif
xmid=subwrd(args,4)
ymid=subwrd(args,5)
csiz=subwrd(args,6)
page=subwrd(args,7)
*say leng
*say thik
*say vert
*say xmid
*say ymid
*say csiz
*say page

*
*  Check shading information
*
  'query shades'
  shdinfo = result
  if (subwrd(shdinfo,1)='None')
    say 'Cannot plot color bar: No shading information'
    return
  endif

if(page='L' | page='l')
  'set vpage 0 11 0 8.5'
  else
  if(page='P' | page='p')
  'set vpage 0 8.5 0 11'
  endif
endif

*
*  Get plot size info
*
  'query gxinfo'
  rec2 = sublin(result,2)
  rec3 = sublin(result,3)
  rec4 = sublin(result,4)
  xsiz = subwrd(rec2,4)
  ysiz = subwrd(rec2,6)
  ylo = subwrd(rec4,4)
  xlo = subwrd(rec3,4)
  xhi = subwrd(rec3,6)
  xd = xsiz - xhi

  sf=1.0

  ylolim=0.6*sf
  xdlim1=1.0*sf
  xdlim2=1.5*sf
  barsf=0.8*sf
  yoffset=0.2*sf
  stroff=0.05*sf
  if csiz=''
    strxsiz=0.12
    strysiz=0.13
   else
    strxsiz=csiz
    strysiz=csiz+csiz/10.
  endif

*
*  Decide if horizontal or vertical color bar
*  and set up constants.
*
  if(page!='L' & page!='l' & page!='P' & page!='p' & ylo<ylolim & xd<xdlim1)
*    say ylo
*    say ylolim
*    say xd
*    say xdlim1
    say "Not enough room in plot for a colorbar"
    return
  endif
  cnum = subwrd(shdinfo,5)
*
*       logic for setting the bar orientation with user overides
*
  if (ylo<ylolim | xd>xdlim1)
    vchk = 1
    if(vert != 'V') ; vchk = 0 ; endif
  else
    vchk = 0
    if(vert = 'V') ; vchk = 1 ; endif
  endif
*
*       vertical bar
*

  if (vchk = 1 )

    if(xmid = '') ; xmid = xhi+xd/2 ; endif
    if(thik>0)
      xwid=thik
     else
      xwid = 0.2*sf
    endif
    if(leng>0)
      ywid=leng/cnum
     else
      ywid = 0.5*sf
    endif

    xl = xmid-xwid/2
    xr = xl + xwid
    if (ywid*cnum > ysiz*barsf)
      ywid = ysiz*barsf/cnum
    endif
    if(ymid = '') ; ymid = ysiz/2 ; endif
    yb = ymid - ywid*cnum/2
    'set string 1 l 2'
    vert = 'V'

  else

*
*       horizontal bar
*

    if(thik>0)
      ywid=thik
     else
      ywid = 0.2*sf
    endif
    if(leng>0)
      xwid=leng/cnum
     else
      xwid = 0.8
    endif

    if(ymid = '') ; ymid = ylo/2-ywid/2 ; endif
*    yt = ymid + yoffset
    yt = ymid + ywid
    yb = ymid
    if(xmid = '') ; xmid = (xlo+xhi)/2 ; endif
    if (xwid*cnum > xsiz*barsf)
      xwid = xsiz*barsf/cnum
    endif
    xl = xmid - xwid*cnum/2
    'set string 1 tc 2'
    vert = 'H'
  endif


*
*  Plot colorbar
*
  'set font 4'
  'set strsiz 'strxsiz' 'strysiz
  num = 0
  while (num<cnum)
    rec = sublin(shdinfo,num+2)
    col = subwrd(rec,1)
    hi = subwrd(rec,3)
    if (vert = 'V')
      yt = yb + ywid
    else
      xr = xl + xwid
    endif

    if(num!=0 & num!= cnum-1)
    'set line 'col
    'draw recf 'xl' 'yb' 'xr' 'yt
    'set line 1 1 2'
    'draw rec 'xl' 'yb' 'xr' 'yt
    if (num<cnum-1)
      if (vert = 'V')
        xp=xr+stroff
        'draw string 'xp' 'yt' 'hi
      else
        yp=yb-stroff
        'draw string 'xr' 'yp' 'hi
      endif
    endif
    endif

    if(num = 0 )

      if(vert = 'V')

        xm=(xl+xr)*0.5
        'set line 'col
        'draw polyf 'xl' 'yt' 'xm' 'yb' 'xr' 'yt' 'xl' 'yt

        'set line 1 1 2'
        'draw line 'xl' 'yt' 'xm' 'yb
        'draw line 'xm' 'yb' 'xr' 'yt
        'draw line 'xr' 'yt' 'xl' 'yt

      else

        ym=(yb+yt)*0.5
        'set line 'col
        'draw polyf 'xl' 'ym' 'xr' 'yb' 'xr' 'yt' 'xl' 'ym

        'set line 1 1 2'
        'draw line 'xl' 'ym' 'xr' 'yb
        'draw line 'xr' 'yb' 'xr' 'yt
        'draw line 'xr' 'yt' 'xl' 'ym

      endif

    endif

    if (num<cnum-1)
      if (vert = 'V')
         xp=xr+stroff
        'draw string 'xp' 'yt' 'hi
      else
         yp=yb-stroff
        'draw string 'xr' 'yp' 'hi
      endif
    endif

    if(num = cnum-1 )

      if( vert = 'V')
        'set line 'col
        'draw polyf 'xl' 'yb' 'xm' 'yt' 'xr' 'yb' 'xl' 'yb

        'set line 1 1 2'
        'draw line 'xl' 'yb' 'xm' 'yt
        'draw line 'xm' 'yt' 'xr' 'yb
        'draw line 'xr' 'yb' 'xl' 'yb

      else

        'set line 'col
        'draw polyf 'xr' 'ym' 'xl' 'yb' 'xl' 'yt' 'xr' 'ym

        'set line 1 1 2'
        'draw line 'xr' 'ym' 'xl' 'yb
        'draw line 'xl' 'yb' 'xl' 'yt
        'draw line 'xl' 'yt' 'xr' 'ym

      endif

    endif

    if (num<cnum-1)
      if (vert = 'V')
        xp=xr+stroff
        'draw string 'xp' 'yt' 'hi
      else
        yp=yb-stroff
       'draw string 'xr' 'yp' 'hi
      endif
    endif

    num = num + 1
    if (vert = 'V'); yb = yt;
    else; xl = xr; endif;
  endwhile
'set font 0'
return
