	SUBROUTINE LC_ABND  ( area, iartyp, rlatll, rlonll, rlatur,
     +			      rlonur, stn, nstn, stcn, cdproj, cenlat,
     +			      cenlon, iret )
C************************************************************************
C* LC_ABND								*
C*									*
C* This subroutine translates a GEMPAK subarea.  For area types 1-3,	*
C* the latitude/longitude bounds are returned.  For area type 1, CDPROJ	*
C* contains the default projection string, and CENLAT & CENLON contain	*
C* the centroid location.  For area type 2, STN	contains the center	*
C* station.  For area type 6, STN contains the list of stations.  For	*
C* area types 5 and 7, the state or country is returned in STCN.  Area	*
C* types 2 and 3 may be followed by a number of * or - to contract or	*
C* expand the region.							*
C*									*
C* LC_ABND  ( AREA, IARTYP, RLATLL, RLONLL, RLATUR, RLONUR, STN, NSTN,	*
C*            STCN, CDPROJ, CENLAT, CENLON, IRET )			*
C*									*
C* Input parameters:							*
C*	AREA		CHAR*		Area name			*
C*									*
C* Output parameters:							*
C*	IARTYP		INTEGER		Area type 			*
C*					  -1 = none			*
C*					   1 = area name 		*
C*					   2 = center on station 	*
C*					   3 = lat/lon bounds 		*
C*					   4 = DSET 	 		*
C*					   5 = @ST	 		*
C*					   6 = @STN1;...;STNN		*
C*					   7 = @CN:C			*
C*	RLATLL		REAL		Lower left latitude		*
C*	RLONLL		REAL		Lower left longitude		*
C*	RLATUR		REAL		Upper right latitude		*
C*	RLONUR		REAL		Upper right longitude		*
C*	STN  (NSTN)	CHAR*		Stations			*
C*	NSTN		INTEGER 	Number of stations 		*
C*	STCN		CHAR*		State/country			*
C*	CDPROJ		CHAR*		Default projection string	*
C*	CENLAT		REAL		Centroid latitude		*
C*	CENLON		REAL		Centroid longitude		*
C*	IRET		INTEGER		Return code			*
C*					   0 = area found		*
C*					  -1 = invalid area name	*
C*					  -3 = station file open error	*
C**									*
C* Log:									*
C* I. Graffman/CSC	 3/82	Original 				*
C* M. Koslowski/CSC	 4/83	Modified to accept stations, * and - 	*
C* M. Goodman/RDS       12/84   Fixed @xx processing			*
C* M. desJardins/GSFC	 4/86	Removed sort of latitudes,longitudes	*
C* I. Graffman/RDS	11/87	Added :C for country			*
C* I. Graffman/RDS	 5/88	Remove STNLST				*
C* M. desJardins/GSFC	 6/88	Cleaned up				*
C* M. desJardins/GSFC	 8/88	Added #clat;clon;dlat;dlon		*
C* L. Williams/EAI	 5/94	Added "+" symbol to zoom factor		*
C* S. Jacobs/NMC	 7/94	Added SFSTBL to call to LC_FSTN		*
C* D. Keiser/GSC	12/95	Changed SFSTBL to 'sfstns.tbl'		*
C* G. Krueger/EAI	 6/96	Add corner points, default projection	*
C* K. Tyle/GSC		 7/96	Added case for AREA = GAREA		*
C* M. James/UCAR	 9/14	Construct 4-char IACO from 3-char	*
C************************************************************************
	INCLUDE		'GEMPRM.PRM'
C
	CHARACTER*(*)	area, stn(*), stcn, cdproj
C*
	REAL		rltln (4)
	CHARACTER	loc*132, c*1
C------------------------------------------------------------------------
C*	Initialize.
C
	iartyp   = -1
	rlatll   = 0.0
	rlonll   = 0.0
	rlatur   = 0.0
	rlonur   = 0.0
	iret     = -1
	stn(1)   = ' '
	stcn     = ' '
	nstn     = 0
	cdproj   = ' '
	cenlat   = 0.0
	cenlon   = 0.0
C
C*	Translate area name to upper case and find length.
C
	CALL ST_LCUC  ( area, loc, ier )
	CALL ST_LSTR  ( loc, lens, ier )
C
C*	No name was entered if length of string was 0.
C
	IF  ( lens .eq. 0 )  RETURN
C
C*	Check to see if DS or DSET was entered.
C
	IF  ( ( loc .eq. 'DS' ) .or. ( loc .eq. 'DSET' ) )  THEN
	    rlatll = -90.
	    rlonll = -180.
	    rlatur = 90.
	    rlonur = 180.
	    iartyp = 4
	    iret   = 0
	    RETURN
	ELSE IF ( loc .eq. 'GAREA' ) THEN
	    CALL GQBND ( 'M', rlatll, rlonll, rlatur, rlonur, iret )
	    iartyp = 1
	    RETURN
	ENDIF
C
C*	Check if latitudes and longitudes were explicitly entered.
C*	If the first character is #, then clat;clon;dlat;dlon were
C*	entered.
C*	Code to sort latitudes and longitudes removed to allow drawing
C*	world maps.
C
	IF  ( loc (1:1) .eq. '#' )  THEN
	    is = 2
	  ELSE
	    is = 1
	END IF
	CALL ST_RLST  ( loc (is:), ';', RMISSD, 4, rltln, num, ier )
	IF  ( ( ier .eq. 0 ) .and. ( num .eq. 4 ) )  THEN
	    IF  ( is .eq. 1 )  THEN
		rlatll = rltln (1)
		rlonll = rltln (2)
		rlatur = rltln (3)
		rlonur = rltln (4)	
		cenlat = (rlatll + rlatur) / 2.
		cenlon = (rlonll + rlonur) / 2.
	      ELSE
		rlatll = rltln (1) - rltln (3)
		rlatur = rltln (1) + rltln (3)
		rlonll = rltln (2) - rltln (4)
		rlonur = rltln (2) + rltln (4)
		cenlat = rltln (1)
		cenlon = rltln (2)
	    END IF
	    IF ( cenlat .gt. 25. ) THEN
		cdproj = 'NPS'
	    ELSE IF ( cenlat .lt. -25. ) THEN
		cdproj = 'SPS'
	    ELSE
		cdproj = 'MER'
	    END IF
	    iartyp = 3
	    iret   = 0
	    RETURN
	ENDIF
C
C*	Check for @ followed by state or station list.
C
	IF  ( loc (1:1) .eq. '@' )  THEN
C
C*	    Check if the 2:3 characters are numbers
C
	    CALL ST_CRNM  ( loc (2:3), stnum, ierr )
C
C*	    If 3 characters total were entered, this is @ST.
C
	    IF  ( ( lens .eq. 3 ) .and. ( ierr .ne. 0 ) )  THEN
	        iartyp = 5
	        iret   = 0
	        stcn   = loc (2:3)
	        RETURN
C
C*		Check for @CN:C.
C
	      ELSE IF  ( ( lens .eq. 5 ) .and. ( ierr .ne. 0 ) .and.
     +			 ( loc (4:5) .eq. ':C' ) )  THEN
		iartyp = 7
		iret   = 0
		stcn   = loc (2:3)
		RETURN
C
C*	  	Otherwise, this is a station list.
C
	      ELSE
C
C*		Note that a maximum of LLMXST stations will be read.
C
		CALL ST_CLST  ( loc (2:), ';', ' ', LLMXST, stn, nstn,
     +				ier )
	        iartyp = 6
	        iret   = 0
	        RETURN
	    END IF
	END IF
C
C*	Have eliminated special cases.  Now find area using area name.
C
C*	Check for zoom factors.
C
	izoom = 0
	i     = lens
	c     = loc (i:i)
C
	DO WHILE  ( ( c .eq. '*' ) .or. ( c .eq. '-' ) .or.
     +		    ( c .eq. '+' ) ) 
	    IF  ( ( c .eq. '*' ) .or. ( c .eq. '+' ) )
     +		izoom = izoom + 1
	    IF  ( c .eq. '-' )  izoom = izoom - 1
	    loc  (i:i) = ' '
	    i = i - 1
	    IF  ( i .gt. 0 )  THEN
		c = loc (i:i)
	      ELSE
		c = ' '
	    ENDIF
	ENDDO
C
C*	Check for area in the geographic file list.
C
	CALL TB_FGEO  ( loc, tlatll, tlonll, tlatur, tlonur, cdproj,
     +			cenlat, cenlon, ier )
	IF  ( ier .eq. 0 )  THEN
	    iartyp = 1
	    iret   = 0
	ELSE
C
C*	    Check for area in the station file.
C

	    CALL LC_FSTN  ( 'sfstns.tbl', loc, cenlat, cenlon, ier )
	    IF  ( ier .eq. 0 )  THEN
		diflat = 4.0
		diflon = 7.0
		iartyp = 2
		stn(1) = loc
		IF ( cenlat .gt. 25. ) THEN
		    cdproj = 'NPS'
		ELSE IF ( cenlat .lt. -25. ) THEN
		    cdproj = 'SPS'
		ELSE
		    cdproj = 'MER'
		END IF
		iret   = 0
	    ELSE IF  ( ier .eq. -3 )  THEN
		iret   = -3
	    ELSE IF  ( ( ier .eq. -4 ) .and.
     +          ( LEN_TRIM(loc) .eq. 3 ) ) THEN
C
C*              Construct 4-char ICAO and check again
C 
                loc = 'K' // loc
                CALL LC_FSTN  ( 'sfstns.tbl', loc, cenlat, cenlon, ier )
                IF  ( ier .eq. 0 )  THEN
                    diflat = 4.0
                    diflon = 7.0
                    iartyp = 2
                    stn(1) = loc
                    IF ( cenlat .gt. 25. ) THEN
                        cdproj = 'NPS'
                    ELSE IF ( cenlat .lt. -25. ) THEN
                        cdproj = 'SPS'
                    ELSE
                        cdproj = 'MER'
                    END IF
                    iret   = 0
                ELSE IF  ( ier .eq. -3 )  THEN
                    iret   = -3
                ENDIF
	    ENDIF
	ENDIF
C
C*	If area has been found--compute bounds with zoom factors.
C
	IF  ( iartyp .gt. 0 )  THEN
	    IF  ( izoom .le. 0 )  THEN
		zoomul = 2 ** (-izoom)
	    ELSE
		zoomul = 1. / (2 ** izoom)
	    ENDIF
	    IF ( iartyp .eq. 1 ) THEN
		zmofst = (1. - zoomul) / 2.
		rlatll = tlatll + (tlatur - tlatll) * zmofst
		rlatur = tlatur - (tlatur - tlatll) * zmofst
		rlonll = tlonll + (tlonur - tlonll) * zmofst
		rlonur = tlonur - (tlonur - tlonll) * zmofst
	    ELSE
		rlatll = cenlat - zoomul * diflat
		rlatur = cenlat + zoomul * diflat
		rlonll = cenlon - zoomul * diflon
		rlonur = cenlon + zoomul * diflon
	    ENDIF	
	ENDIF
C*
	RETURN
	END
