C
C $Id: agback.f,v 1.5 2000/08/22 15:02:09 haley Exp $
C                                                                      
C                Copyright (C)  2000
C        University Corporation for Atmospheric Research
C                All Rights Reserved
C
C This file is free software; you can redistribute it and/or modify
C it under the terms of the GNU General Public License as published
C by the Free Software Foundation; either version 2 of the License, or
C (at your option) any later version.
C
C This software is distributed in the hope that it will be useful, but
C WITHOUT ANY WARRANTY; without even the implied warranty of
C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
C General Public License for more details.
C
C You should have received a copy of the GNU General Public License
C along with this software; if not, write to the Free Software
C Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
C USA.
C
      SUBROUTINE AGBACK
C
C The subroutine AGBACK is used to draw a graph background, as directed
C by the current contents of the parameter list.
C
C The following common block contains the AUTOGRAPH control parameters,
C all of which are real.  If it is changed, all of AUTOGRAPH (especially
C the routine AGSCAN) must be examined for possible side effects.
C
      COMMON /AGCONP/ QFRA,QSET,QROW,QIXY,QWND,QBAC , SVAL(2) ,
     +                XLGF,XRGF,YBGF,YTGF , XLGD,XRGD,YBGD,YTGD , SOGD ,
     +                XMIN,XMAX,QLUX,QOVX,QCEX,XLOW,XHGH ,
     +                YMIN,YMAX,QLUY,QOVY,QCEY,YLOW,YHGH ,
     +                QDAX(4),QSPA(4),PING(4),PINU(4),FUNS(4),QBTD(4),
     +                BASD(4),QMJD(4),QJDP(4),WMJL(4),WMJR(4),QMND(4),
     +                QNDP(4),WMNL(4),WMNR(4),QLTD(4),QLED(4),QLFD(4),
     +                QLOF(4),QLOS(4),DNLA(4),WCLM(4),WCLE(4) ,
     +                QODP,QCDP,WOCD,WODQ,QDSH(26) ,
     +                     QDLB,QBIM,FLLB(10,8),QBAN ,
     +                QLLN,TCLN,QNIM,FLLN(6,16),QNAN ,
     +                XLGW,XRGW,YBGW,YTGW , XLUW,XRUW,YBUW,YTUW ,
     +                XLCW,XRCW,YBCW,YTCW , WCWP,HCWP,SCWP ,
     +                XBGA(4),YBGA(4),UBGA(4),XNDA(4),YNDA(4),UNDA(4),
     +                QBTP(4),BASE(4),QMNT(4),QLTP(4),QLEX(4),QLFL(4),
     +                QCIM(4),QCIE(4),RFNL(4),WNLL(4),WNLR(4),WNLB(4),
     +                WNLE(4),QLUA(4) ,
     +                RBOX(6),DBOX(6,4),SBOX(6,4)
      SAVE /AGCONP/
C
C The following common block contains other AUTOGRAPH variables, both
C real and integer, which are not control parameters.
C
      COMMON /AGORIP/ SMRL , ISLD , MWCL,MWCM,MWCE,MDLA,MWCD,MWDQ ,
     +                INIF
      SAVE /AGORIP/
C
C Declare the block data routine external to force it to load.
C
      EXTERNAL AGDFLT
C
C Do an appropriate SET call for the following routines.  The call is
C equivalent to "CALL SET (XLCW,XRCW,YBCW,YTCW,0.,1.,0.,1.,1)", but
C makes the viewport cover the whole plotter frame, which avoids the
C problems resulting from clipping by GKS.
C
      CALL SET (0.,1.,0.,1.,-XLCW/(XRCW-XLCW),(1.-XLCW)/(XRCW-XLCW),
     +                      -YBCW/(YTCW-YBCW),(1.-YBCW)/(YTCW-YBCW),1)
C
C Draw the labels, if any, first.
C
      IDLB=IFIX(QDLB)
      IF (IDLB.EQ.0) GO TO 101
C
      LBIM=IFIX(QBIM)
      CALL AGLBLS (IDLB,WCWP,HCWP,FLLB,LBIM,FLLN,DBOX,SBOX,RBOX)
C
C Now draw each of the four axes.
C
  101 I=0
C
  102 I=I+1
C
      IF (I.EQ.5) GO TO 108
C
      IF (QDAX(I).EQ.0.) GO TO 102
C
      GO TO (103,104,105,106) , I
C
C Y axis - left.
C
  103 WNLB(1)=0.-YBGW
      IF (XBGA(1)-WNLL(1).LT.DBOX(3,2).AND.
     +                XBGA(1)+WNLR(1).GT.DBOX(3,1)) WNLB(1)=0.-DBOX(3,4)
C
      WNLE(1)=YTGW-1.
      IF (XBGA(1)-WNLL(1).LT.DBOX(4,2).AND.
     +                XBGA(1)+WNLR(1).GT.DBOX(4,1)) WNLE(1)=DBOX(4,3)-1.
C
      GO TO 107
C
C Y axis - right.
C
  104 WNLB(2)=YTGW-1.
      IF (XBGA(2)-WNLR(2).LT.DBOX(4,2).AND.
     +                XBGA(2)+WNLL(2).GT.DBOX(4,1)) WNLB(2)=DBOX(4,3)-1.
C
      WNLE(2)=0.-YBGW
      IF (XBGA(2)-WNLR(2).LT.DBOX(3,2).AND.
     +                XBGA(2)+WNLL(2).GT.DBOX(3,1)) WNLE(2)=0.-DBOX(3,4)
C
      GO TO 107
C
C X axis - bottom.
C
  105 WNLB(3)=XRGW-1.
      IF (YBGA(3)-WNLL(3).LT.DBOX(2,4).AND.
     +                YBGA(3)+WNLR(3).GT.DBOX(2,3)) WNLB(3)=DBOX(2,1)-1.
C
      WNLE(3)=0.-XLGW
      IF (YBGA(3)-WNLL(3).LT.DBOX(1,4).AND.
     +                YBGA(3)+WNLR(3).GT.DBOX(1,3)) WNLE(3)=0.-DBOX(1,2)
C
      GO TO 107
C
C X axis - top.
C
  106 WNLB(4)=0.-XLGW
      IF (YBGA(4)-WNLR(4).LT.DBOX(1,4).AND.
     +                YBGA(4)+WNLL(4).GT.DBOX(1,3)) WNLB(4)=0.-DBOX(1,2)
C
      WNLE(4)=XRGW-1.
      IF (YBGA(4)-WNLR(4).LT.DBOX(2,4).AND.
     +                YBGA(4)+WNLL(4).GT.DBOX(2,3)) WNLE(4)=DBOX(2,1)-1.
C
  107 Q=AMIN1(0.,QDAX(I))
C
      CALL AGAXIS (I,Q,
     +             QSPA(I),WCWP,HCWP,XBGA(I),YBGA(I),XNDA(I),YNDA(I),
     +             QLUA(I),UBGA(I),UNDA(I),FUNS(I),QBTP(I),BASE(I),
     +             QJDP(I),WMJL(I),WMJR(I),QMNT(I),QNDP(I),WMNL(I),
     +             WMNR(I),QLTP(I),QLEX(I),QLFL(I),QLOF(I),QLOS(I),
     +             DNLA(I),WCLM(I),WCLE(I),RFNL(I),QCIM(I),QCIE(I),
     +             WNLL(I),WNLR(I),WNLB(I),WNLE(I))
C
      GO TO 102
C
C Do set call for user and return.
C
  108 CALL SET (XLCW,XRCW,YBCW,YTCW,XLUW,XRUW,YBUW,YTUW,
     +                            1+IABS(IFIX(QLUX))*2+IABS(IFIX(QLUY)))
C
C Make sure buffers are flushed.
C
      CALL SFLUSH
C
      RETURN
C
      END
