aboutsummaryrefslogtreecommitdiff
path: root/sys/gio/ncarutil/ezmap.f
diff options
context:
space:
mode:
Diffstat (limited to 'sys/gio/ncarutil/ezmap.f')
-rw-r--r--sys/gio/ncarutil/ezmap.f4598
1 files changed, 4598 insertions, 0 deletions
diff --git a/sys/gio/ncarutil/ezmap.f b/sys/gio/ncarutil/ezmap.f
new file mode 100644
index 00000000..8d87a4d7
--- /dev/null
+++ b/sys/gio/ncarutil/ezmap.f
@@ -0,0 +1,4598 @@
+C
+C
+C +-----------------------------------------------------------------+
+C | |
+C | Copyright (C) 1986 by UCAR |
+C | University Corporation for Atmospheric Research |
+C | All Rights Reserved |
+C | |
+C | NCARGRAPHICS Version 1.00 |
+C | |
+C +-----------------------------------------------------------------+
+C
+C
+C***********************************************************************
+C P A C K A G E E Z M A P - I N T R O D U C T I O N
+C***********************************************************************
+C
+C THIS FILE CONTAINS IMPLEMENTATION INSTRUCTIONS, A WRITE-UP, AND THE
+C CODE FOR THE PACKAGE EZMAP. BANNERS LIKE THE ONE ABOVE DELIMIT THE
+C MAJOR SECTIONS OF THE FILE. THE CODE ITSELF IS SEPARATED INTO THREE
+C SECTIONS: USER-LEVEL ROUTINES, INTERNAL ROUTINES, AND THE BLOCK DATA
+C ROUTINE WHICH DETERMINES THE DEFAULT VALUES OF INTERNAL PARAMETERS.
+C WITHIN EACH SECTION, ROUTINES APPEAR IN ALPHABETICAL ORDER.
+C
+C***********************************************************************
+C P A C K A G E E Z M A P - I M P L E M E N T A T I O N
+C***********************************************************************
+C
+C THE EZMAP PACKAGE IS WRITTEN IN FORTRAN-77 AND SHOULD BE RELATIVELY
+C EASY TO IMPLEMENT. THE OUTLINE DATA REQUIRED MAY BE GENERATED BY
+C RUNNING THE PROGRAM
+C
+C PROGRAM CONVRT
+C DIMENSION FLIM(4),PNTS(200)
+C 1 READ (1,3,END=2) NPTS,IGID,(FLIM(I),I=1,4)
+C IF (NPTS.GT.1) READ (1,4,END=2) (PNTS(I),I=1,NPTS)
+C WRITE (2) NPTS,IGID,(FLIM(I),I=1,4),(PNTS(I),I=1,NPTS)
+C GO TO 1
+C 2 STOP
+C 3 FORMAT (2I8,4F8.3)
+C 4 FORMAT (10F8.3)
+C END
+C
+C WITH THE FILE EZMAPDAT ASSIGNED TO UNIT 1. THE OUTPUT FILE, ON UNIT
+C 2, CONTAINS THE BINARY OUTLINE DATA TO BE USED BY EZMAP. THE EZMAP
+C ROUTINE MAPIO (WHICH SEE) MUST THEN BE MODIFIED TO ACCESS THIS FILE.
+C
+C THE ROUTINE MAPCHI CONTAINS THE STATEMENTS
+C
+C CALL GETUSV ('IN',INTO)
+C CALL SETUSV ('IN',IFIX(10000.*FLOAT(INTS(IPRT))/255.))
+C
+C (TO BE EXECUTED FOR A POSITIVE VALUE OF IPRT) AND THE STATEMENT
+C
+C CALL SETUSV ('IN',INTO)
+C
+C (TO BE EXECUTED FOR A NEGATIVE VALUE OF IPRT). THESE STATEMENTS
+C SET/RESET THE INTENSITY FOR VARIOUS PORTIONS OF THE MAP. IF COLOR
+C IS AVAILABLE ON THE DEVICE(S) BEING DRIVEN, THESE STATEMENTS SHOULD
+C BE OMITTED AND THE IMPLEMENTOR SHOULD PROVIDE A DEFAULT VERSION OF
+C MAPUSR WHICH SETS/RESETS THE INTENSITY AND COLOR AS DESIRED. THIS
+C DEFAULT VERSION OF MAPUSR SHOULD DECLARE THE LABELLED COMMON BLOCK
+C MAPNTS AND MAKE USE OF THE CURRENT VALUES IN THE ARRAY INTS TO SET
+C THE INTENSITY; IT SHOULD ALSO BE PUBLISHED TO AID USERS IN SETTING
+C UP THEIR OWN VERSIONS.
+C
+C
+C***********************************************************************
+C P A C K A G E E Z M A P - U S E R ' S G U I D E
+C***********************************************************************
+C
+C LATEST REVISION AUGUST, 1985
+C
+C PURPOSE TO PLOT MAPS OF THE EARTH ACCORDING TO ANY
+C ONE OF TEN DIFFERENT PROJECTIONS, SHOWING
+C CONTINENTAL, INTERNATIONAL, AND/OR U.S. STATE
+C OUTLINES, PARALLELS, AND MERIDIANS. THE
+C ORIGIN AND ORIENTATION OF THE PROJECTION ARE
+C SELECTED BY THE USER. POINTS ON THE EARTH
+C DEFINED BY LATITUDE AND LONGITUDE ARE MAPPED
+C TO POINTS IN THE PLANE OF PROJECTION - THE
+C U/V PLANE. THE U AND V AXES ARE PARALLEL TO
+C THE X AND Y AXES OF THE PLOTTER, RESPECTIVELY.
+C A RECTANGULAR FRAME WHOSE SIDES ARE PARALLEL
+C TO THE U AND V AXES IS CHOSEN AND MATERIAL
+C WITHIN THAT FRAME (OR AN INSCRIBED ELLIPTICAL
+C FRAME) IS PLOTTED.
+C
+C USAGE THE ROUTINE MAPDRW DRAWS A COMPLETE MAP, AS
+C DIRECTED BY THE CURRENT VALUES OF PARAMETERS
+C IN THE EZMAP PACKAGE. TO CHANGE THE VALUES
+C OF THOSE PARAMETERS, AND THUS THE APPEARANCE
+C OF THE MAP, ONE MAY FIRST CALL ONE OF THE
+C ROUTINES MAPROJ (TO CHANGE THE PROJECTION TO
+C BE USED), MAPSET (TO CHANGE WHAT PORTION OF
+C THE U/V PLANE IS TO BE VIEWED), MAPPOS (TO
+C CHANGE WHAT PORTION OF THE PLOTTER FRAME IS
+C TO BE USED), OR ONE OF THE PARAMETER-SETTING
+C ROUTINES MAPSTC, MAPSTI, MAPSTL, AND MAPSTR
+C (TO CHANGE VARIOUS OTHER PARAMETERS, OF TYPES
+C CHARACTER, INTEGER, LOGICAL, AND REAL). THE
+C PARAMETER-RETRIEVAL ROUTINES MAPGTC, MAPGTI,
+C MAPGTL, AND MAPGTR ALLOW THE USER TO RETRIEVE
+C THE VALUES OF EZMAP PARAMETERS.
+C
+C THE ROUTINE MAPSAV ALLOWS ONE TO SAVE THE
+C CURRENT STATE OF EZMAP, THE ROUTINE MAPRST TO
+C RESTORE A SAVED STATE.
+C
+C USERS WITH SPECIAL NEEDS MAY WISH TO CALL THE
+C LOWER-LEVEL ROUTINES MAPINT (TO INITIALIZE
+C THE PACKAGE - IT MUST BE CALLED INITIALLY AND
+C AGAIN WHENEVER CERTAIN PARAMETERS ARE CHANGED),
+C MAPGRD (TO DRAW PARALLELS AND MERIDIANS),
+C MAPLBL (TO LABEL THE INTERNATIONAL DATE LINE,
+C THE EQUATOR, THE GREENWICH MERIDIAN, AND THE
+C POLES, AND TO DRAW THE PERIMETER), AND MAPLOT
+C (TO DRAW THE SELECTED GEOGRAPHIC OUTLINES).
+C THESE ROUTINES ARE NORMALLY CALLED BY MAPDRW.
+C
+C INTENSITIES OF VARIOUS MAP PORTIONS MAY BE SET
+C BY CALLS TO THE ROUTINE MAPSTI. THE ROUTINE
+C MAPUSR IS CALLED BY EZMAP JUST BEFORE/AFTER
+C DRAWING VARIOUS PORTIONS OF THE MAP; THE
+C DEFAULT VERSION, WHICH DOES NOTHING, MAY BE
+C REPLACED BY A USER VERSION WHICH SETS/RESTORES
+C COLOR, SPOT SIZE, INTENSITY, DASH PATTERN, ETC.
+C
+C THE ROUTINE MAPEOS IS CALLED BY EZMAP ONCE FOR
+C EACH OUTLINE SEGMENT. THE USER MAY SUPPLY A
+C VERSION WHICH EXAMINES THE SEGMENT TO SEE IF
+C IT OUGHT TO BE PLOTTED AND, IF NOT, TO DELETE
+C IT. THIS MAY BE USED, FOR EXAMPLE, TO REDUCE
+C THE CLUTTER IN NORTHERN CANADA.
+C
+C TO OVERLAY OBJECTS OF ONE'S OWN ON THE MAP
+C DRAWN BY MAPDRW, ONE MAY USE ONE OR MORE OF
+C THE ROUTINES MAPTRN (TO COMPUTE THE U/V
+C COORDINATES OF A POINT, GIVEN ITS LATITUDE
+C AND LONGITUDE), MAPIT (TO DO "PEN-UP/DOWN"
+C MOVES), MAPFST (TO DO "PEN-UP" MOVES), AND
+C MAPVEC (TO DO "PEN-DOWN" MOVES).
+C
+C THE ROUTINE SUPMAP, FROM WHICH EZMAP GREW, IS
+C IMPLEMENTED WITHIN IT AND ALLOWS ONE TO DRAW
+C A COMPLETE MAP WITH A SINGLE, RATHER LENGTHY,
+C CALL. THE ROUTINE SUPCON, WHICH IS THE OLD
+C ANALOGUE OF MAPTRN, IS ALSO IMPLEMENTED.
+C
+C THE OLD ROUTINE EZMAP, WHICH WAS IMPLEMENTED
+C IN SUCH A WAY AS TO CAUSE PORTABILITY PROBLEMS,
+C HAS BEEN REMOVED. STATISTICS INDICATED THAT
+C IT WAS NOT BEING USED, ANYWAY.
+C
+C SEE THE WRITE-UPS OF INDIVIDUAL ROUTINES BELOW.
+C
+C I/O GRAPHICAL OUTPUT IS GENERATED. OUTLINE DATA
+C IS READ FROM A "TAPE UNIT".
+C
+C ERROR CONDITIONS WHEN AN ERROR OCCURS DURING A CALL TO AN EZMAP
+C ROUTINE, AN ERROR MESSAGE IS LOGGED, USING THE
+C NCAR VERSION OF THE PORT ERROR ROUTINE SETERR
+C (CALLED SETER); BY DEFAULT, THE PROGRAM IS THEN
+C ABORTED. ERROR RECOVERY IS POSSIBLE, HOWEVER.
+C INSERT THE CALL
+C
+C CALL ENTSR (IOLD,1)
+C
+C AT THE BEGINNING OF YOUR PROGRAM. THIS MAKES
+C ERROR RECOVERY POSSIBLE. THEN, FOLLOWING EACH
+C CALL TO AN EZMAP ROUTINE WHICH COULD CAUSE AN
+C ERROR, INSERT CODE LIKE THE FOLLOWING:
+C
+C IF (NERRO(IERR).NE.0) THEN
+C CALL EPRIN
+C CALL ERROF
+C END IF
+C
+C THE VALUE OF THE FUNCTION NERRO IS NON-ZERO IF
+C SETER HAS BEEN CALLED. THE CALL TO EPRIN DUMPS
+C OUT THE ERROR MESSAGE (WHICH HAS NOT YET BEEN
+C PRINTED) AND THE CALL TO ERROF TURNS OFF THE
+C ERROR CONDITION IN SETER. THIS DOES NOT CLEAR
+C EZMAP'S ERROR FLAG, HOWEVER; IT REMAINS SET
+C UNTIL AFTER THE NEXT SUCCESSFUL CALL TO MAPINT,
+C PREVENTING OTHER EZMAP ROUTINES FROM TRYING TO
+C EXECUTE (AND POSSIBLY BOMBING AS A RESULT).
+C POSSIBLE ERROR FLAGS ARE AS FOLLOWS:
+C
+C 1 MAPGTC - UNKNOWN PARAMETER NAME XX
+C 2 MAPGTI - UNKNOWN PARAMETER NAME XX
+C 3 MAPGTL - UNKNOWN PARAMETER NAME XX
+C 4 MAPGTR - UNKNOWN PARAMETER NAME XX
+C 5 MAPINT - ATTEMPT TO USE NON-EXISTENT
+C PROJECTION
+C 6 MAPINT - ANGULAR LIMITS TOO GREAT
+C 7 MAPINT - MAP HAS ZERO AREA
+C 8 MAPINT - MAP LIMITS INAPPROPIATE
+C 9 MAPROJ - UNKNOWN PROJECTION NAME XX
+C 10 MAPSET - UNKNOWN MAP AREA SPECIFIER XX
+C 11 MAPSTC - UNKNOWN OUTLINE NAME XX
+C 12 MAPSTC - UNKNOWN PARAMETER NAME XX
+C 13 MAPSTI - UNKNOWN PARAMETER NAME XX
+C 14 MAPSTL - UNKNOWN PARAMETER NAME XX
+C 15 MAPSTR - UNKNOWN PARAMETER NAME XX
+C 16 MAPTRN - ATTEMPT TO USE NON-EXISTENT
+C PROJECTION
+C 17 MAPIO - OUTLINE DATASET IS UNREADABLE
+C 18 MAPIO - EOF ENCOUNTERED IN OUTLINE
+C DATASET
+C 19 MAPPOS - ARGUMENTS ARE INCORRECT
+C 20 MAPRST - ERROR ON READ
+C 21 MAPRST - EOF ON READ
+C 22 MAPSAV - ERROR ON WRITE
+C
+C PRECISION SINGLE.
+C
+C LANGUAGE FORTRAN.
+C
+C HISTORY IN ABOUT 1963, R. L. PARKER OF UCSD WROTE THE
+C ORIGINAL CODE CALLED SUPERMAP, USING OUTLINE
+C DATA GENERATED BY HERSHEY. THIS WAS ADAPTED
+C FOR USE AT NCAR BY LEE, IN 1968. REVISIONS
+C OCCURRED IN JANUARY OF 1969 AND MAY OF 1971.
+C THE CODE WAS PUT IN STANDARD NSSL FORMAT IN
+C OCTOBER OF 1973. FURTHER REVISIONS OCCURRED
+C IN JULY, 1974, IN AUGUST, 1976, AND IN JULY,
+C 1978. IN LATE 1984 AND EARLY 1985, THE CODE
+C WAS HEAVILY REVISED TO ACHIEVE FORTRAN-77 AND
+C GKS COMPATIBILITY, TO REMOVE ERRORS, AND TO
+C EXPAND THE OUTLINE DATASETS. CICELY RIDLEY,
+C JAY CHALMERS, AND DAVE KENNISON (THE CURRENT
+C CURATOR) HAVE ALL HAD A HAND IN THE CREATION
+C OF THIS PACKAGE.
+C
+C REFERENCES HERSHEY, A.V., "THE PLOTTING OF MAPS ON A
+C CRT PRINTER." NWL REPORT NO. 1844, 1963.
+C
+C LEE, TSO-HWA, "STUDENTS' SUMMARY REPORTS,
+C WORK-STUDY PROGRAM IN SCIENTIFIC COMPUTING".
+C NCAR, 1968.
+C
+C PARKER, R.L., "2UCSD SUPERMAP: WORLD
+C PLOTTING PACKAGE".
+C
+C STEERS, J.A., "AN INTRODUCTION TO THE STUDY
+C OF MAP PROJECTIONS". UNIVERSITY OF LONDON
+C PRESS, 1962.
+C
+C ACCURACY THE DEFINITION OF THE MAP PRODUCED IS LIMITED
+C BY TWO FACTORS: THE RESOLUTION OF THE OUTLINE
+C DATA AND THE RESOLUTION OF THE GRAPHICS
+C DEVICE.
+C
+C DATA POINTS IN THE CONTINENTAL OUTLINES ARE
+C ABOUT ONE DEGREE APART AND THE COORDINATES
+C ARE ACCURATE TO .01 DEGREE. DATA POINTS IN
+C U.S. STATE OUTLINES ARE ABOUT .05 DEGREES
+C APART AND THE COORDINATES ARE ACCURATE TO
+C .001 DEGREE. BOTH THE SPACING AND THE
+C ACCURACY OT THE INTERNATIONAL BOUNDARIES
+C FALLS SOMEWHERE BETWEEN THESE TWO EXTREMES.
+C
+C THE DICOMED HAS 15-BIT COORDINATE REGISTERS,
+C BUT AN EFFECTIVE RESOLUTION OF AT MOST 1 IN
+C 4096 IN BOTH X AND Y.
+C
+C TIMING THE MARCH, 1985, UPDATE HAS MADE EZMAP RUN
+C SIGNIFICANTLY SLOWER. THIS IS MOSTLY BECAUSE
+C THE DEFAULT RESOLUTION HAS BEEN INCREASED TO
+C A VALUE SUITABLE FOR THE DICOMED, RATHER THAN
+C THE DD80. USERS WHO ARE CONCERNED ABOUT THIS
+C MAY INCREASE THE VALUES OF THE PARAMETERS 'MV'
+C AND/OR 'DD' (SEE THE DESCRIPTION OF MAPSTX)
+C TO DECREASE THE TIMING (AT THE EXPENSE OF PLOT
+C QUALITY, OF COURSE).
+C
+C PORTABILITY THE CODE IS WRITTEN IN FORTRAN-77 AND SHOULD
+C BE VERY PORTABLE. A BINARY DATASET CONTAINING
+C OUTLINE DATA MUST BE GENERATED AND THE ROUTINE
+C MAPIO MUST BE MODIFIED TO READ THAT DATASET.
+C SEE THE IMPLEMENTATION INSTRUCTIONS AT THE
+C BEGINNING OF THIS FILE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P D R W - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO DRAW THE COMPLETE MAP DESCRIBED BY THE
+C CURRENT VALUES OF THE EZMAP PARAMETERS.
+C
+C MAPDRW CALLS MAPINT (IF REQUIRED), MAPGRD,
+C MAPLBL, AND MAPLOT, IN THAT ORDER. THE USER
+C MAY WISH TO CALL THESE ROUTINES DIRECTLY.
+C
+C USAGE CALL MAPDRW
+C
+C ARGUMENTS NONE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P E O S - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE MAPEOS IS CALLED BY EZMAP TO EXAMINE EACH
+C SEGMENT IN THE OUTLINE DATASETS. THE DEFAULT
+C VERSION DOES NOTHING. A USER-SUPPLIED VERSION
+C MAY CAUSE SELECTED SEGMENTS TO BE DELETED (TO
+C REDUCE THE CLUTTER IN NORTHERN CANADA, FOR
+C EXAMPLE).
+C
+C USAGE (BY EZMAP) CALL MAPEOS (NOUT,NSEG,IGID,NPTS,PNTS)
+C
+C ARGUMENTS NOUT IS THE NUMBER OF THE OUTLINE DATASET FROM
+C WHICH THE SEGMENT COMES, AS FOLLOWS:
+C
+C NOUT DATASET TO WHICH SEGMENT BELONGS.
+C ---- ------------------------------------
+C 1 'CO' - CONTINENTAL OUTLINES ONLY.
+C 2 'US' - U.S STATE OUTLINES ONLY.
+C 3 'PS' - CONTINENTAL, U.S STATE, AND
+C INTERNATIONAL OUTLINES.
+C 4 'PO' - CONTINENTAL AND INTERNATIONAL
+C OUTLINES.
+C
+C NSEG IS THE NUMBER OF THE SEGMENT WITHIN THE
+C OUTLINE DATASET.
+C
+C IGID IDENTIFIES THE GROUP TO WHICH THE SEGMENT
+C BELONGS, AS FOLLOWS:
+C
+C IGID GROUP TO WHICH SEGMENT BELONGS.
+C ---- ------------------------------------
+C 1 CONTINENTAL OUTLINES.
+C 2 U.S. STATE BOUNDARIES.
+C 3 INTERNATIONAL BOUNDARIES.
+C
+C NPTS IS THE NUMBER OF POINTS DEFINING THE
+C OUTLINE SEGMENT. NPTS MAY BE ZEROED TO
+C SUPPRESS PLOTTING OF THE SEGMENT.
+C
+C PNTS IS AN ARRAY OF COORDINATES. PNTS(1)
+C AND PNTS(2) ARE THE LATITUDE AND LONGITUDE
+C OF THE FIRST POINT, PNTS(3) AND PNTS(4) THE
+C LATITUDE AND LONGITUDE OF THE SECOND POINT, ...
+C PNTS(2*NPTS-1) AND PNTS(2*NPTS) THE LATITUDE
+C AND LONGITUDE OF THE LAST POINT.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P F S T - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO DRAW LINES ON THE MAP PRODUCED BY A CALL TO
+C MAPDRW - USED IN CONJUNCTION WITH MAPVEC.
+C
+C USAGE CALL MAPFST (RLAT,RLON)
+C
+C THIS CALL IS EXACTLY EQUIVALENT TO THE CALL
+C
+C CALL MAPIT (RLAT,RLON,0)
+C
+C ARGUMENTS RLAT AND RLON ARE DEFINED AS FOR MAPIT. SEE
+C THE DESCRIPTION OF MAPIT.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P G R D - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO DRAW A GRID MADE UP OF LINES OF LATITUDE AND
+C LONGITUDE. IF EZMAP NEEDS INITIALIZATION OR IF
+C THE ERROR FLAG 'ER' IS NON-ZERO, MAPGRD DOES
+C NOTHING.
+C
+C USAGE CALL MAPGRD
+C
+C ARGUMENTS NONE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P G T X - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO GET THE VALUES OF EZMAP PARAMETERS.
+C
+C USAGE CALL MAPGTC (WHCH,CVAL)
+C CALL MAPGTI (WHCH,IVAL)
+C CALL MAPGTL (WHCH,LVAL)
+C CALL MAPGTR (WHCH,RVAL)
+C
+C ARGUMENTS WHCH IS A CHARACTER STRING SPECIFYING THE
+C PARAMETER TO GET.
+C
+C CVAL, IVAL, LVAL, OR RVAL IS A VARIABLE TO
+C RECEIVE THE VALUE OF THE PARAMETER SPECIFIED
+C BY WHCH - OF TYPE CHARACTER, INTEGER, LOGICAL,
+C OR REAL, RESPECTIVELY.
+C
+C ALL OF THE PARAMETERS LISTED IN THE DISCUSSION
+C OF MAPSTX MAY BE RETRIEVED. THE FOLLOWING MAY
+C ALSO BE RETRIEVED:
+C
+C WHCH TYPE MEANING
+C ---- ---- -------
+C
+C AREA C THE VALUE OF THE MAP LIMITS
+C SPECIFIER JLTS FROM THE LAST
+C CALL TO MAPSET. THE DEFAULT
+C VALUE IS 'MA'.
+C
+C ERROR I THE CURRENT VALUE OF THE ERROR
+C FLAG. DEFAULT IS ZERO.
+C
+C INITIALIZE I,L INITIALIZATION FLAG. IF TRUE
+C (NON-ZERO), EZMAP IS IN NEED
+C OF INITIALIZATION (BY MEANS OF
+C A CALL MAPINT). THE DEFAULT
+C VALUE IS TRUE (NON-ZERO).
+C
+C PROJECTION C THE VALUE OF THE PROJECTION
+C SPECIFIER JPRJ FROM THE LAST
+C CALL TO MAPROJ. THE DEFAULT
+C VALUE IS 'CE'.
+C
+C PN I,R THE VALUE OF PLON FROM THE
+C LAST CALL TO MAPROJ. THE
+C DEFAULT VALUE IS ZERO.
+C
+C PT I,R THE VALUE OF PLAT FROM THE
+C LAST CALL TO MAPROJ. THE
+C DEFAULT VALUE IS ZERO.
+C
+C PN I,R "N" IS AN INTEGER BETWEEN 1
+C AND 8. RETRIEVES VALUES FROM
+C THE LAST CALL TO MAPSET. P1
+C THROUGH P4 GET YOU PLM1(1),
+C PLM2(1), PLM3(1), AND PLM4(1),
+C WHILE P5 THROUGH P8 GET YOU
+C PLM1(2), PLM2(2), PLM3(2), AND
+C PLM4(2). THE DEFAULT VALUES
+C ARE ALL ZERO.
+C
+C ROTATION I,R THE VALUE OF ROTA FROM THE
+C LAST CALL TO MAPROJ. THE
+C DEFAULT VALUE IS ZERO.
+C
+C XLEFT R THE PARAMETERS XLOW, XROW,
+C XRIGHT R YBOW, AND YTOW FROM THE LAST
+C YBOTTOM R CALL TO MAPPOS. DEFAULTS
+C YTOP R ARE .05, .95, .05, AND .95.
+C
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P I N T - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO INITIALIZE THE PACKAGE AFTER THE VALUES OF
+C SOME PARAMETERS HAVE BEEN CHANGED. THE FLAG
+C 'IN', WHICH MAY BE RETRIEVED BY A CALL TO
+C MAPGTI OR MAPGTL, INDICATES WHETHER OR NOT
+C INITIALIZATION IS REQUIRED AT A GIVEN TIME.
+C (SOME PARAMETERS MAY BE RESET AT ANY TIME AND
+C DO NOT REQUIRE MAPINT TO BE CALLED AGAIN.)
+C
+C USAGE CALL MAPINT
+C
+C ARGUMENTS NONE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P I T - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO DRAW LINES ON THE MAP PRODUCED BY A CALL
+C TO MAPDRW. MAPIT ATTEMPTS TO OMIT NON-VISIBLE
+C PORTIONS AND TO HANDLE "CROSS-OVER" - A JUMP
+C FROM ONE END OF THE MAP TO THE OTHER CAUSED
+C BY THE PROJECTION'S HAVING SLIT THE GLOBE
+C ALONG SOME HALF OF A GREAT CIRCLE AND LAID IT
+C OPEN WITH THE TWO SIDES OF THE SLIT AT OPPOSITE
+C ENDS OF THE MAP. CROSS-OVER CAN OCCUR ON
+C CYLINDRICAL AND CONICAL PROJECTIONS; MAPIT
+C HANDLES IT VERY WELL ON THE FORMER AND NOT SO
+C WELL ON THE LATTER.
+C
+C THE EZMAP PARAMETER 'DL' DETERMINES WHETHER
+C MAPIT DRAWS SOLID LINES OR DOTTED LINES. THE
+C PARAMETERS 'DD' AND 'MV' ALSO AFFECT MAPIT'S
+C BEHAVIOR. SEE THE DESCRIPTION OF THE ROUTINE
+C MAPSTX, BELOW.
+C
+C A SEQUENCE OF CALLS TO MAPIT SHOULD BE FOLLOWED
+C BY A CALL TO MAPIQ (WHICH SEE, ABOVE) TO FLUSH
+C ITS BUFFERS.
+C
+C POINTS IN TWO CONTIGUOUS PEN-DOWN CALLS TO
+C MAPIT SHOULD NOT BE FAR APART ON THE GLOBE.
+C
+C USAGE CALL MAPIT (RLAT,RLON,IFST)
+C
+C ARGUMENTS RLAT AND RLON ARE THE LATITUDE AND LONGITUDE
+C OF A POINT TO WHICH THE "PEN" IS TO BE MOVED.
+C BOTH ARE GIVEN IN DEGREES. RLAT MUST BE
+C BETWEEN -90. AND +90., INCLUSIVE; RLON MUST BE
+C BETWEEN -540. AND +540., INCLUSIVE.
+C
+C IFST IS 0 TO DO A "PEN-UP" MOVE, 1 TO DO A
+C "PEN-DOWN" MOVE IF THE DISTANCE FROM THE LAST
+C POINT TO THE NEW POINT IS GREATER THAN 'MV'
+C PLOTTER UNITS, 2 OR GREATER TO DO THE MOVE
+C REGARDLESS OF THE DISTANCE FROM THE LAST POINT
+C TO THE NEW ONE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P I Q - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO FLUSH MAPIT'S BUFFERS. THIS IS PARTICULARLY
+C IMPORTANT BEFORE A STOP OR A CALL FRAME AND
+C BEFORE CHANGING INTENSITY, DASH PATTERN, COLOR,
+C ETC.
+C
+C USAGE CALL MAPIQ
+C
+C ARGUMENTS NONE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P L B L - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO LABEL THE INTERNATIONAL DATE LINE (ID), THE
+C EQUATOR (EQ), THE GREENWICH MERIDIAN (GM), AND
+C THE POLES (NP AND SP), AND TO DRAW THE BORDER
+C AROUND THE MAP. IF EZMAP NEEDS INITIALIZATION
+C OR IF THE ERROR FLAG 'ER' IS SET, MAPLBL DOES
+C NOTHING.
+C
+C USAGE CALL MAPLBL
+C
+C ARGUMENTS NONE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P L O T - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO DRAW THE CONTINENTAL AND/OR INTERNATIONAL
+C AND/OR U.S. STATE OUTLINES SELECTED BY THE
+C PARAMETER 'OU'. IF EZMAP CURRENTLY NEEDS
+C INITIALIZATION OR IF THE ERROR FLAG 'ER' IS
+C SET, MAPLOT DOES NOTHING.
+C
+C USAGE CALL MAPLOT
+C
+C ARGUMENTS NONE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P P O S - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO SPECIFY THE POSITION OF THE MAP ON THE
+C PLOTTER FRAME.
+C
+C USAGE CALL MAPPOS (XLOW,XROW,YBOW,YTOW)
+C
+C ARGUMENTS THE ARGUMENTS ARE FRACTIONS BETWEEN 0 AND 1
+C DETERMINING THE POSITION OF A WINDOW IN THE
+C PLOTTER FRAME WITHIN WHICH THE MAP IS TO BE
+C DRAWN. XLOW AND XROW POSITION THE LEFT AND
+C RIGHT EDGES AND ARE STATED AS FRACTIONS OF THE
+C DISTANCE FROM LEFT TO RIGHT IN THE PLOTTER
+C FRAME. YBOW AND YTOW POSITION THE BOTTOM AND
+C TOP EDGES AND ARE STATED AS FRACTIONS OF THE
+C DISTANCE FROM BOTTOM TO TOP IN THE PLOTTER
+C FRAME. THE MAP IS CENTERED IN THE SPECIFIED
+C WINDOW AND MADE AS LARGE AS POSSIBLE WHILE
+C MAINTAINING ITS PROPER SHAPE.
+C
+C THE DEFAULT VALUES OF THE INTERNAL PARAMETERS
+C CHANGED BY THIS ROUTINE ARE .05, .95, .05, AND
+C .95, RESPECTIVELY.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P R O J - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO SPECIFY THE PROJECTION TO BE USED.
+C
+C USAGE CALL MAPROJ (JPRJ,PLAT,PLON,ROTA)
+C
+C ARGUMENTS JPRJ IS A CHARACTER VARIABLE DEFINING THE
+C DESIRED PROJECTION TYPE, AS FOLLOWS:
+C
+C THE CONIC PROJECTION:
+C
+C 'LC' - LAMBERT CONFORMAL CONIC WITH TWO
+C STANDARD PARALLELS.
+C
+C THE AZIMUTHAL PROJECTIONS:
+C
+C 'ST' - STEREOGRAPHIC.
+C
+C 'OR' - ORTHOGRAPHIC. CAUSES THE PARAMETER
+C 'SA' (WHICH SEE, IN THE DESCRIPTION
+C OF THE ROUTINE MAPSTX) TO BE ZEROED.
+C
+C 'LE' - LAMBERT EQUAL AREA.
+C
+C 'GN' - GNOMONIC.
+C
+C 'AE' - AZIMUTHAL EQUIDISTANT.
+C
+C 'SV' - SATELLITE-VIEW. IF THE PARAMETER
+C 'SA' (WHICH SEE, IN THE DESCRIPTION
+C OF THE ROUTINE MAPSTX) IS GREATER
+C THAN 1 OR LESS THAN -1, IT IS LEFT
+C ALONE; OTHERWISE, IT IS GIVEN THE
+C VALUE 6.631.
+C
+C THE CYLINDRICAL PROJECTIONS:
+C
+C 'CE' - CYLINDRICAL EQUIDISTANT.
+C
+C 'ME' - MERCATOR.
+C
+C 'MO' - MOLLWEIDE. THE PROJECTION USED IS
+C NOT ACTUALLY A TRUE MOLLWEIDE.
+C
+C PLAT, PLON, AND ROTA ARE REALS SPECIFYING THE
+C VALUES OF ANGULAR QUANTITIES, IN DEGREES. HOW
+C THEY ARE USED DEPENDS ON THE VALUE OF JPRJ, AS
+C FOLLOWS:
+C
+C IF JPRJ IS NOT EQUAL TO 'LC': PLAT AND PLON
+C DEFINE THE LATITUDE AND LONGITUDE OF THE POLE
+C OF THE PROJECTION - THE POINT ON THE GLOBE
+C WHICH IS TO BE PROJECTED TO THE ORIGIN OF THE
+C U/V PLANE. PLAT MUST BE BETWEEN -90. AND +90.,
+C INCLUSIVE, POSITIVE IN THE NORTHERN HEMISPHERE,
+C NEGATIVE IN THE SOUTHERN. PLON MUST BE BETWEEN
+C -180. AND +180., INCLUSIVE, POSITIVE TO THE
+C EAST, AND NEGATIVE TO THE WEST, OF GREENWICH.
+C ROTA IS THE ANGLE BETWEEN THE V AXIS AND NORTH
+C AT THE ORIGIN. IT IS TAKEN TO BE POSITIVE IF
+C THE ANGULAR MOVEMENT FROM NORTH TO THE V AXIS
+C IS COUNTER-CLOCKWISE, NEGATIVE OTHERWISE. IF
+C THE ORIGIN IS AT THE NORTH POLE, "NORTH" IS
+C CONSIDERED TO BE IN THE DIRECTION OF PLON+180.
+C IF THE ORIGIN IS AT THE SOUTH POLE, "NORTH" IS
+C CONSIDERED TO BE IN THE DIRECTION OF PLON.
+C FOR THE CYLINDRICAL PROJECTIONS, THE AXIS OF
+C THE PROJECTION IS PARALLEL TO THE V AXIS.
+C
+C IF JPRJ IS EQUAL TO 'LC' (LAMBERT CONFORMAL
+C CONIC WITH TWO STANDARD PARALLELS): PLON
+C DEFINES THE CENTRAL MERIDIAN OF THE PROJECTION,
+C WHILE PLAT AND ROTA DEFINE THE TWO STANDARD
+C PARALLELS. IF PLAT AND ROTA ARE EQUAL, A
+C CONIC PROJECTION WITH ONE STANDARD PARALLEL
+C IS USED.
+C
+C MORE DETAILED DESCRIPTIONS OF THE PROJECTIONS
+C MAY BE FOUND IN THE GRAPHICS MANUAL, TOGETHER
+C WITH HELPFUL DIAGRAMS, BUT A FEW WORDS MAY BE
+C HELPFUL HERE:
+C
+C THE CONICAL PROJECTION MAPS THE SURFACE OF THE
+C EARTH ONTO THE SURFACE OF A CONE INTERSECTING
+C THE EARTH ALONG THE TWO STANDARD PARALLELS.
+C THE CONE IS THEN SLIT ALONG A LINE OPPOSITE
+C THE CENTRAL MERIDIAN AND OPENED UP (WITH SOME
+C STRETCHING) ONTO A FLAT SURFACE.
+C
+C THE AZIMUTHAL PROJECTIONS MAP THE SURFACE OF
+C THE EARTH (OR OF ONE HEMISPHERE OF THE EARTH)
+C ONTO A PLANE WHOSE ORIGIN IS TANGENT TO IT AT
+C THE POINT (PLAT,PLON). THE SEVERAL AZIMUTHAL
+C PROJECTIONS DIFFER ONLY IN THE FUNCTION USED
+C TO MAP THE GREAT-CIRCLE DISTANCE OF A POINT
+C FROM THE POLE (PLAT,PLON) TO A LINEAR DISTANCE
+C OF THE PROJECTED POINT FROM THE ORIGIN (0,0).
+C THE PROJECTED IMAGE MAY BE ROTATED USING THE
+C PARAMETER ROTA.
+C
+C THE CYLINDRICAL PROJECTIONS MAP THE SURFACE OF
+C THE EARTH ONTO A CYLINDER WHICH IS TANGENT TO
+C IT ALONG A GREAT CIRCLE PASSING THROUGH THE
+C POINT (PLAT,PLON) AT AN ANGLE DETERMINED BY
+C ROTA. THE CYLINDER IS THEN SLIT ALONG ITS
+C LENGTH THROUGH THE POINT OPPOSITE (PLAT,PLON)
+C AND OPENED UP ONTO THE PLANE. THE SEVERAL
+C CYLINDRICAL PROJECTIONS DIFFER PRINCIPALLY IN
+C THE FUNCTION USED TO MAP THE DISTANCE FROM THE
+C GREAT CIRCLE OF TANGENCY TO A DISTANCE ALONG
+C THE CYLINDER. IF PLAT IS ZERO AND ROTA IS
+C EITHER 0. OR 180., THE CYLINDRICAL PROJECTIONS
+C ARE PARTICULARLY SIMPLE TO DO AND A FASTER PATH
+C THROUGH THE CODE IS USED.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P R S - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE RECALLS SET. INTENDED TO BE USED WHEN DATA
+C IS TO BE PLOTTED OVER A MAP GENERATED IN A
+C DIFFERENT OVERLAY (E.G., USING A FLASH BUFFER),
+C AND WHEN THE SYSTEM PLOT PACKAGE DOES NOT
+C RESIDE IN AN OUTER OVERLAY.
+C
+C USAGE CALL MAPRS
+C
+C ARGUMENTS NONE.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P R S T - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE RESTORES A SAVED STATE OF EZMAP. THIS IS DONE
+C BY READING SAVED PARAMETER VALUES FROM A USER
+C UNIT AND THEN CALLING MAPINT. SEE MAPSAV.
+C
+C USAGE CALL MAPRST (IFNO)
+C
+C ARGUMENTS IFNO IS THE NUMBER OF A UNIT FROM WHICH A
+C SINGLE UNFORMATTED RECORD IS TO BE READ. IT
+C IS THE USER'S RESPONSIBILITY TO POSITION THIS
+C UNIT. MAPRST DOES NOT REWIND IT, EITHER BEFORE
+C OR AFTER READING THE RECORD.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P S A V - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE SAVES THE CURRENT STATE OF EZMAP BY WRITING
+C PARAMETER VALUES ONTO A USER UNIT. SEE MAPRST.
+C
+C USAGE CALL MAPSAV (IFNO)
+C
+C ARGUMENTS IFNO IS THE NUMBER OF A UNIT TO WHICH A SINGLE
+C UNFORMATTED RECORD IS TO BE WRITTEN. IT IS THE
+C USER'S RESPONSIBILITY TO POSITION THIS UNIT.
+C MAPSAV DOES NOT REWIND IT, EITHER BEFORE OR
+C AFTER WRITING THE RECORD.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P S E T - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO SPECIFY THE RECTANGULAR PORTION OF THE U/V
+C PLANE TO BE DRAWN.
+C
+C USAGE CALL MAPSET (JLTS,PLM1,PLM2,PLM3,PLM4)
+C
+C ARGUMENTS JLTS CAN HAVE THE FOLLOWING CHARACTER VALUES.
+C IT SPECIFIES ONE OF FIVE WAYS IN WHICH THE
+C LIMITS OF THE MAP ARE DEFINED BY THE PARAMETERS
+C PLM1, PLM2, PLM3, AND PLM4.
+C
+C JLTS='MA' (MAXIMUM). THE MAXIMUM USEFUL AREA
+C PRODUCED BY THE PROJECTION IS PLOTTED. PLM1,
+C PLM2, PLM3, AND PLM4 ARE NOT USED.
+C
+C JLTS='CO' (CORNERS). THE POINTS (PLM1,PLM2)
+C AND (PLM3,PLM4) ARE TO BE AT OPPOSITE CORNERS
+C OF THE MAP. PLM1 AND PLM3 ARE LATITUDES, IN
+C DEGREES. PLM2 AND PLM4 ARE LONGITUDES, IN
+C DEGREES. IF A CYLINDRICAL PROJECTION IS BEING
+C USED, THE FIRST POINT SHOULD BE ON THE LEFT
+C EDGE OF THE MAP AND THE SECOND POINT ON THE
+C RIGHT EDGE; OTHERWISE, THE ORDER MAKES NO
+C DIFFERENCE.
+C
+C JLTS='PO' (POINTS). PLM1, PLM2, PLM3, AND PLM4
+C ARE TWO-ELEMENT ARRAYS GIVING THE LATITUDES
+C AND LONGITUDES, IN DEGREES, OF FOUR POINTS
+C WHICH ARE TO BE ON THE EDGES OF THE RECTANGULAR
+C MAP. IF A CYLINDRICAL PROJECTION IS BEING
+C USED, THE FIRST POINT SHOULD BE ON THE LEFT
+C EDGE AND THE SECOND POINT ON THE RIGHT EDGE;
+C OTHERWISE, THE ORDER MAKES NO DIFFERENCE.
+C NOTE THAT THE CALLING PROGRAM SHOULD INCLUDE
+C THE FOLLOWING STATEMENT:
+C
+C DIMENSION PLM1(2),PLM2(2),PLM3(2),PLM4(2)
+C
+C (IN FACT, STRICT ADHERENCE TO THE FORTRAN-77
+C STANDARD REQUIRES THIS, NO MATTER WHAT THE
+C VALUE OF JLTS.)
+C
+C JLTS='AN' (ANGLES). PLM1, PLM2, PLM3, AND PLM4
+C ARE POSITIVE ANGLES, IN DEGREES, REPRESENTING
+C ANGULAR DISTANCES FROM A POINT ON THE MAP TO
+C THE LEFT, RIGHT, BOTTOM, AND TOP EDGES OF THE
+C MAP. FOR MOST PROJECTIONS, THESE ANGLES ARE
+C MEASURED WITH THE CENTER OF THE EARTH AT THE
+C VERTEX AND REPRESENT ANGULAR DISTANCES FROM THE
+C POINT WHICH PROJECTS TO THE ORIGIN OF THE U/V
+C PLANE; ON A SATELLITE-VIEW PROJECTION, THEY ARE
+C MEASURED WITH THE SATELLITE AT THE VERTEX AND
+C REPRESENT ANGULAR DEVIATIONS FROM THE LINE OF
+C SIGHT. ANGULAR LIMITS ARE PARTICULARLY USEFUL
+C FOR POLAR PROJECTIONS AND THE SATELLITE-VIEW
+C PROJECTION; THEY ARE NOT APPROPRIATE FOR THE
+C LAMBERT CONFORMAL CONIC AND AN ERROR WILL
+C RESULT IF ONE ATTEMPTS TO USE JLTS='AN' WITH
+C JPRJ='LC'.
+C
+C JLTS='LI' (LIMITS). PLM1, PLM2, PLM3, AND PLM4
+C SPECIFY THE MINIMUM VALUE OF U, THE MAXIMUM
+C VALUE OF U, THE MINIMUM VALUE OF V, AND THE
+C MAXIMUM VALUE OF V, RESPECTIVELY. KNOWLEDGE
+C OF THE PROJECTION EQUATIONS IS NECESSARY IN
+C ORDER TO USE THIS OPTION CORRECTLY.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P S T X - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO SET THE VALUES OF EZMAP PARAMETERS.
+C
+C USAGE CALL MAPSTC (WHCH,CVAL)
+C CALL MAPSTI (WHCH,IVAL)
+C CALL MAPSTL (WHCH,LVAL)
+C CALL MAPSTR (WHCH,RVAL)
+C
+C ARGUMENTS WHCH IS A CHARACTER STRING SPECIFYING THE
+C PARAMETER TO BE SET.
+C
+C CVAL, IVAL, LVAL, OR RVAL IS THE VALUE TO BE
+C GIVEN TO THE PARAMETER SPECIFIED BY WHCH - OF
+C TYPE CHARACTER, INTEGER, LOGICAL, OR REAL,
+C RESPECTIVELY.
+C
+C SOME PARAMETERS MAY BE SET IN MORE THAN ONE
+C WAY. FOR EXAMPLE, THE PARAMETER 'GR' (GRID),
+C WHICH SPECIFIES THE GRID SPACING, MAY BE GIVEN
+C THE VALUE 10.0 IN EITHER OF TWO WAYS:
+C
+C CALL MAPSTI ('GR',10)
+C CALL MAPSTR ('GR',10.)
+C
+C THE FLAG WHICH CONTROLS DOTTING OF OUTLINES
+C MAY BE TURNED ON USING EITHER OF THESE CALLS:
+C
+C CALL MAPSTI ('DO',1)
+C CALL MAPSTL ('DO',.TRUE.)
+C
+C THE IMPORTANT POINT TO REMEMBER IS THAT THE
+C LAST CHARACTER OF THE ROUTINE NAME IMPLIES
+C THE TYPE OF THE ARGUMENT.
+C
+C ONLY THE FIRST TWO CHARACTERS OF WHCH ARE
+C EXAMINED. FOR THE SAKE OF CODE READABILITY,
+C A LONGER CHARACTER STRING MAY BE USED.
+C
+C BELOW IS A LIST OF ALL THE PARAMETERS WHICH
+C MAY BE SET USING THESE ROUTINES.
+C
+C WHCH TYPE MEANING
+C ---- ---- -------
+C
+C DASHPATTERN I DASHED-LINE PATTERN FOR THE
+C GRIDS. A 16-BIT QUANTITY.
+C DEFAULT IS 21845 (OCTAL 52525
+C OR BINARY 0101010101010101).
+C
+C DD I,R DISTANCE BETWEEN DOTS ALONG A
+C DOTTED LINE DRAWN BY MAPIT.
+C THE DEFAULT VALUE IS 12 (OUT
+C OF 4096; SEE 'RE', BELOW).
+C
+C DL I,L IF TRUE (NON-ZERO), USER CALLS
+C TO MAPIT DRAW DOTTED LINES.
+C DEFAULT IS FALSE (ZERO); LINES
+C DRAWN BY MAPIT ARE SOLID OR
+C DASHED, DEPENDING ON THE
+C CURRENT STATE OF THE DASHCHAR
+C PACKAGE.
+C
+C DOT I,L IF TRUE (NON-ZERO), OUTLINES
+C ARE DOTTED. DEFAULT IS FALSE
+C (ZERO); OUTLINES ARE SOLID.
+C
+C ELLIPTICAL I,L IF TRUE (NON-ZERO), ONLY THAT
+C PART OF THE MAP WHICH FALLS
+C INSIDE AN ELLIPSE INSCRIBED
+C WITHIN THE NORMAL RECTANGULAR
+C PERIMETER IS DRAWN. THIS IS
+C PARTICULARLY APPROPRIATE FOR
+C USE WITH AZIMUTHAL PROJECTIONS
+C AND ANGULAR LIMITS SPECIFYING
+C A SQUARE, IN WHICH CASE THE
+C ELLIPSE BECOMES A CIRCLE, BUT
+C IT WILL WORK FOR ANY MAP. THE
+C DEFAULT VALUE IS ZERO.
+C
+C GD R THE DISTANCE BETWEEN POINTS
+C USED TO DRAW THE GRID, IN
+C DEGREES. THE DEFAULT VALUE
+C IS 1.; USER VALUES MUST FALL
+C BETWEEN .001 AND 10.
+C
+C GRID I,R THE DESIRED GRID SPACING. A
+C ZERO SUPPRESSES THE GRID. THE
+C DEFAULT IS 10 DEGREES.
+C
+C IN I "N" IS AN INTEGER BETWEEN 1
+C AND 7. EACH "IN" SPECIFIES
+C THE INTENSITY OF SOME PORTION
+C OF THE MAP. VALUES ARE IN THE
+C RANGE 0-255. DEFAULTS ARE:
+C
+C N USE DEFAULT
+C - ----------- -------
+C 1 PERIMETER 240
+C 2 GRID 150
+C 3 LABELS 210
+C 4 LIMBS 240
+C 5 CONTINENTS 240
+C 6 U.S. STATES 180
+C 7 COUNTRIES 210
+C
+C LABEL I,L IF TRUE (NON-ZERO), LABEL THE
+C MERIDIANS AND POLES. DEFAULT
+C IS TRUE (NON-ZERO).
+C
+C LS I CONTROLS LABEL SIZE. A
+C CHARACTER WIDTH, TO BE USED
+C IN CALLING PWRIT. THE DEFAULT
+C VALUE IS 1, WHICH GIVES A
+C CHARACTER WIDTH OF 12 PLOTTER
+C UNITS.
+C
+C MV I,R MINIMUM VECTOR LENGTH FOR
+C OUTLINES. A POINT CLOSER TO
+C THE PREVIOUS POINT THAN THIS
+C IS OMITTED. DEFAULT VALUE IS
+C 4 (OUT OF 4096; SEE 'RE',
+C BELOW).
+C
+C OUTLINE C SAYS WHICH SET OF OUTLINE DATA
+C TO USE. POSSIBLE VALUES ARE
+C 'NO', FOR NO OUTLINES, 'CO',
+C FOR THE CONTINENTAL OUTLINES
+C (THE DEFAULT), 'US', FOR U.S.
+C STATE OUTLINES, 'PS', FOR
+C CONTINENTAL OUTLINES PLUS
+C INTERNATIONAL OUTLINES PLUS
+C U.S. STATE OUTLINES, AND 'PO',
+C FOR CONTINENTAL OUTLINES PLUS
+C INTERNATIONAL OUTLINES.
+C DEFAULT IS 'CO'.
+C
+C PERIM I,L IF TRUE (NON-ZERO), DRAW THE
+C PERIMETER. DEFAULT IS TRUE
+C (NON-ZERO).
+C
+C RESOLUTION I,R THE WIDTH OF THE TARGET
+C PLOTTER, IN PLOTTER UNITS.
+C DEFAULT VALUE IS 4096.
+C
+C SATELLITE I,R IF LESS THAN -1 OR GREATER
+C THAN 1, CHANGES ORTHOGRAPHIC
+C PROJECTION TO SATELLITE-VIEW.
+C ABSOLUTE VALUE IS THE DISTANCE
+C OF SATELLITE FROM THE CENTER
+C OF THE EARTH, IN MULTIPLES OF
+C THE EARTH'S RADIUS. THE SIGN
+C INDICATES WHETHER A NORMAL
+C PROJECTION (POSITIVE) OR AN
+C EXTENDED PROJECTION (NEGATIVE)
+C IS TO BE USED. THE EXTENDED
+C PROJECTION IS USEFUL WHEN ONE
+C IS OVERLAYING CONREC OUTPUT ON
+C A MAP. THE DEFAULT VALUE OF
+C 'SA' IS ZERO. SEE ALSO 'S1'
+C AND 'S2', BELOW.
+C
+C S1 AND S2 I,R USED ONLY WHEN 'SA' IS OUTSIDE
+C [-1,1]. BOTH ARE ANGLES, IN
+C DEGREES. 'S1' MEASURES THE
+C ANGLE BETWEEN THE CENTER OF
+C THE EARTH AND THE AIM POINT
+C OF THE SATELLITE'S CAMERA, AS
+C SEEN FROM THE SATELLITE. IF
+C 'S1' IS ZERO, THE PROJECTION
+C SHOWS THE EARTH AS SEEN BY A
+C SATELLITE LOOKING STRAIGHT
+C DOWN; CALL THIS THE "BASIC
+C VIEW". IF 'S1' IS NON-ZERO,
+C 'S2' MEASURES THE ANGLE FROM
+C THE POSITIVE U AXIS OF THE
+C BASIC VIEW TO THE LINE OP,
+C WHERE O IS THE ORIGIN OF THE
+C BASIC VIEW AND P IS THE
+C PROJECTION OF THE DESIRED LINE
+C OF SIGHT ON THE BASIC VIEW,
+C POSITIVE IF MEASURED COUNTER-
+C CLOCKWISE.
+C
+C SR R A SEARCH RADIUS, IN DEGREES.
+C USED BY MAPINT IN FINDING THE
+C LATITUDE/LONGITUDE RANGE OF
+C THE MAP. THE DEFAULT VALUE
+C IS 1.; USER VALUES MUST FALL
+C BETWEEN .001 AND 10. THIS
+C PARAMETER SHOULD PROBABLY NOT
+C BE CHANGED EXCEPT BY ADVICE
+C OF A KNOWLEDGEABLE CONSULTANT.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P T R N - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO FIND THE PROJECTION IN THE U/V PLANE OF A
+C POINT WHOSE LATITUDE AND LONGITUDE ARE KNOWN.
+C MAY BE CALLED AT ANY TIME AFTER EZMAP HAS BEEN
+C INITIALIZED (BY CALLING MAPINT OR OTHERWISE).
+C
+C USAGE CALL MAPTRN (RLAT,RLON,UVAL,VVAL)
+C
+C ARGUMENTS RLAT AND RLON ARE THE LATITUDE AND LONGITUDE,
+C RESPECTIVELY, OF A POINT ON THE GLOBE. RLAT
+C MUST BE BETWEEN -90. AND +90., INCLUSIVE; RLON
+C MUST BE BETWEEN -540. AND +540., INCLUSIVE.
+C
+C (UVAL,VVAL) IS THE PROJECTION IN THE U/V PLANE
+C OF (RLAT,RLON). THE UNITS OF UVAL AND VVAL
+C DEPEND ON THE PROJECTION.
+C
+C IF THE POINT IS NOT PROJECTABLE, UVAL IS
+C RETURNED EQUAL TO 1.E12. NOTE THAT, IF
+C THE POINT IS PROJECTABLE, BUT OUTSIDE THE
+C BOUNDARY OF THE MAP, AS DEFINED BY THE LAST
+C CALL TO MAPSET, ITS U AND V COORDINATES ARE
+C STILL RETURNED BY MAPTRN. THE USER MUST DO
+C THE TEST REQUIRED TO DETERMINE IF THE POINT
+C IS WITHIN LIMITS, IF THAT IS NECESSARY.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P U S R - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE THE ROUTINE MAPUSR IS CALLED BY EZMAP JUST
+C BEFORE AND JUST AFTER PORTIONS OF THE MAP
+C ARE DRAWN. THE DEFAULT VERSION DOES NOTHING.
+C (ACTUALLY, THAT'S NOT QUITE TRUE; FOR THE SAKE
+C OF EFFICIENCY, THE NON-GKS VERSIONS RESETS THE
+C DASH PATTERN FOR GRID LINES TO "SOLID" AND
+C THEN DOES AN OPTN CALL TO MAKE THE TRANSLATOR
+C GENERATE THE DESIRED PATTERN.) A USER-SUPPLIED
+C VERSION MAY SET/RESET THE DOTTING PARAMETER
+C 'DL', THE DASHCHAR DASH PATTERN, THE INTENSITY,
+C THE COLOR, ETC., SO AS TO ACHIEVE A DESIRED
+C EFFECT.
+C
+C USAGE (BY EZMAP) CALL MAPUSR (IPRT)
+C
+C ARGUMENTS IPRT, IF POSITIVE, SAYS THAT A PARTICULAR PART
+C OF THE MAP IS ABOUT TO BE DRAWN, AS FOLLOWS:
+C
+C IPRT PART
+C ---- -----------------------
+C 1 PERIMETER.
+C 2 GRID.
+C 3 LABELS.
+C 4 LIMB LINES.
+C 5 CONTINENTAL OUTLINES.
+C 6 U.S. STATE OUTLINES.
+C 7 INTERNATIONAL OUTLINES.
+C
+C IF IPRT IS NEGATIVE, IT SAYS THAT DRAWING OF
+C THE LAST PART IS COMPLETE. THE ABSOLUTE VALUE
+C OF IPRT WILL BE ONE OF THE ABOVE VALUES.
+C CHANGED QUANTITIES SHOULD BE RESTORED.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E M A P V E C - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO DRAW LINES ON THE MAP PRODUCED BY A CALL TO
+C MAPDRW - USED IN CONJUNCTION WITH MAPFST.
+C
+C USAGE CALL MAPVEC (RLAT,RLON)
+C
+C THIS CALL IS EXACTLY EQUIVALENT TO THE CALL
+C
+C CALL MAPIT (RLAT,RLON,1)
+C
+C ARGUMENTS RLAT AND RLON ARE DEFINED AS FOR MAPIT. SEE
+C THE DESCRIPTION OF MAPIT.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E S U P C O N - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE TO FIND THE PROJECTION IN THE U/V PLANE OF A
+C POINT WHOSE LATITUDE AND LONGITUDE ARE KNOWN.
+C THIS ROUTINE IS PROVIDED FOR COMPATIBILITY
+C WITH EARLIER VERSIONS OF THE PACKAGE. IF
+C EFFICIENCY IS A CONSIDERATION, THE USER SHOULD
+C BY-PASS THIS ROUTINE AND CALL MAPTRN DIRECTLY.
+C
+C USAGE CALL SUPCON (RLAT,RLON,UVAL,VVAL)
+C
+C THIS CALL IS EXACTLY EQUIVALENT TO THE CALL
+C
+C CALL MAPTRN (RLAT,RLON,UVAL,VVAL)
+C
+C ARGUMENTS RLAT, RLON, UVAL, AND VVAL ARE DEFINED AS FOR
+C THE ROUTINE MAPTRN. SEE THE DESCRIPTION OF
+C MAPTRN.
+C
+C-----------------------------------------------------------------------
+C S U B R O U T I N E S U P M A P - D E S C R I P T I O N
+C-----------------------------------------------------------------------
+C
+C PURPOSE AN IMPLEMENTATION OF THE ROUTINE FROM WHICH
+C EZMAP GREW. A SINGLE CALL TO SUPMAP CREATES
+C A MAP OF A DESIRED PORTION OF THE GLOBE,
+C ACCORDING TO A DESIRED PROJECTION, WITH DESIRED
+C OUTLINES DRAWN IN, AND WITH LINES OF LATITUDE
+C AND LONGITUDE AT DESIRED INTERVALS. AN
+C APPROPRIATE CALL TO THE ROUTINE SET IS
+C PERFORMED, AND THE ROUTINE SUPCON (WHICH SEE)
+C IS INITIALIZED SO THAT THE USER MAY MAP POINTS
+C OF KNOWN LATITUDE AND LONGITUDE TO POINTS IN
+C THE U/V PLANE AND USE THE U/V COORDINATES TO
+C DRAW OBJECTS ON THE MAP PRODUCED BY SUPMAP.
+C
+C USAGE CALL SUPMAP (JPRJ,PLAT,PLON,ROTA,PLM1,PLM2,
+C PLM3,PLM4,JLTS,JGRD,IOUT,IDOT,
+C IERR)
+C
+C ARGUMENTS IABS(JPRJ) DEFINES THE PROJECTION TYPE, AS
+C FOLLOWS (VALUES LESS THAN 1 OR GREATER THAN
+C 10 ARE TREATED AS 1 OR 10, RESPECTIVELY):
+C
+C 1 STEREOGRAPHIC.
+C 2 ORTHOGRAPHIC.
+C 3 LAMBERT CONFORMAL CONIC.
+C 4 LAMBERT EQUAL AREA.
+C 5 GNOMONIC.
+C 6 AZIMUTHAL EQUIDISTANT.
+C 7 SATELLITE VIEW.
+C 8 CYLINDRICAL EQUIDISTANT.
+C 9 MERCATOR.
+C 10 MOLLWEIDE.
+C
+C USING THE VALUE 2 CAUSES THE PARAMETER 'SA' TO
+C BE ZEROED. USING THE VALUE 7 CAUSES 'SA' TO
+C BE EXAMINED. IF IT HAS A NON-ZERO VALUE, THE
+C VALUE IS LEFT ALONE. IF IT HAS A ZERO VALUE,
+C ITS VALUE IS RESET TO 6.631, WHICH IS ABOUT
+C RIGHT FOR A SATELLITE IN A GEOSYNCHRONOUS
+C EQUATORIAL ORBIT (FOR WHATEVER THAT'S WORTH).
+C
+C THE SIGN OF JPRJ, WHEN IOUT IS -1, 0, OR 1,
+C INDICATES WHETHER THE CONTINENTAL OUTLINES ARE
+C TO BE PLOTTED OR NOT. SEE IOUT, BELOW.
+C
+C PLAT, PLON, AND ROTA DEFINE THE ORIGIN OF THE
+C PROJECTION AND ITS ROTATION ANGLE AND ARE USED
+C IN THE SAME WAY AS THEY WOULD BE IN A CALL TO
+C THE ROUTINE MAPROJ (WHICH SEE).
+C
+C JLTS, PLM1, PLM2, PLM3, AND PLM4 SPECIFY THE
+C RECTANGULAR LIMITS OF THE MAP. THESE ARGUMENTS
+C ARE USED IN THE SAME WAY AS THEY WOULD BE IN
+C A CALL TO MAPSET (WHICH SEE), EXCEPT THAT JLTS
+C IS AN INTEGER INSTEAD OF A CHARACTER STRING.
+C IABS(JLTS) MAY TAKE ON THE VALUES 1 THROUGH 5,
+C AS FOLLOWS:
+C
+C 1 LIKE JLTS='MA' IN A CALL TO MAPSET.
+C 2 LIKE JLTS='CO' IN A CALL TO MAPSET.
+C 3 LIKE JLTS='LI' IN A CALL TO MAPSET.
+C 4 LIKE JLTS='AN' IN A CALL TO MAPSET.
+C 5 LIKE JLTS='PO' IN A CALL TO MAPSET.
+C
+C AT ONE TIME, THE SIGN OF JLTS SPECIFIED WHETHER
+C OR NOT A LINE OF TEXT WAS TO BE WRITTEN AT THE
+C BOTTOM OF THE PLOT PRODUCED. THIS LINE MAY NO
+C LONGER BE WRITTEN AND THE SIGN OF JLTS IS
+C THEREFORE IGNORED.
+C
+C MOD(IABS(JGRD),1000) IS THE VALUE, IN DEGREES,
+C OF THE INTERVAL AT WHICH LINES OF LATITUDE AND
+C LONGITUDE ARE TO BE PLOTTED. IF THE GIVEN
+C INTERVAL IS ZERO, GRID LINES AND LABELS ARE
+C NOT PLOTTED. IF JGRD IS LESS THAN ZERO, THE
+C PERIMETER IS NOT PLOTTED. SET JGRD TO -1000 TO
+C SUPPRESS BOTH GRID LINES AND PERIMETER AND TO
+C +1000 TO SUPPRESS THE GRID LINES, BUT LEAVE THE
+C PERIMETER. THE VALUE -0 MAY HAVE A MEANING ON
+C ONES' COMPLEMENT MACHINES, BUT SHOULD BE
+C AVOIDED; USE -1000 INSTEAD.
+C
+C IF IOUT HAS THE VALUE 0, U.S. STATE OUTLINES
+C ARE OMITTED. IF IT HAS THE ABSOLUTE VALUE 1,
+C THEY ARE PLOTTED. IN BOTH OF THESE CASES, THE
+C SIGN OF JPRJ INDICATES WHETHER CONTINENTAL
+C OUTLINES ARE TO BE PLOTTED (JPRJ POSITIVE)
+C OR NOT (JPRJ NEGATIVE). ORIGINALLY, SUPMAP
+C RECOGNIZED ONLY THESE VALUES OF IOUT; NOW, IF
+C IOUT IS LESS THAN -1 OR GREATER THAN 1, THE
+C SIGN OF JPRJ IS IGNORED, AND IOUT SELECTS AN
+C OUTLINE GROUP, AS FOLLOWS:
+C
+C -2 OR LESS 'NO' (NO OUTLINES).
+C 2 'CO' (CONTINENTAL OUTLINES).
+C 3 'US' (U.S. STATE OUTLINES).
+C 4 'PS' (CONTINENTAL OUTLINES
+C PLUS INTERNATIONAL
+C OUTLINES PLUS U.S.
+C STATE OUTLINES).
+C 5 OR GREATER 'PO' (CONTINENTAL OUTLINES
+C PLUS INTERNATIONAL
+C OUTLINES, BUT NO U.S.
+C STATE OUTLINES).
+C
+C AT ONE TIME, THE SIGN OF IOUT SPECIFIED WHETHER
+C OR NOT A LINE OF TEXT WAS TO BE WRITTEN ON THE
+C PRINT OUTPUT. THIS MAY NO LONGER BE DONE.
+C
+C IDOT=0 TO GET CONTINUOUS OUTLINES, 1 TO GET
+C DOTTED OUTLINES.
+C
+C IERR IS AN OUTPUT PARAMETER. A NON-ZERO VALUE
+C INDICATES THAT AN ERROR HAS OCCURRED.
+C
+C***********************************************************************
+C T H E C O D E - U S E R - L E V E L R O U T I N E S
+C***********************************************************************
+C
+ SUBROUTINE MAPDRW
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPDRW','VERSION 1')
+C
+C INITIALIZE THE PACKAGE, DRAW AND LABEL THE GRID, AND DRAW OUTLINES.
+C
+ IF (INTF) CALL MAPINT
+ CALL MAPGRD
+ CALL MAPLBL
+ CALL MAPLOT
+C
+ RETURN
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPEOS (NOUT,NSEG,IGID,NPTS,PNTS)
+ DIMENSION PNTS(*)
+ RETURN
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPFST (XLAT,XLON)
+ CALL MAPIT (XLAT,XLON,0)
+ RETURN
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPGRD
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM1/ IPRJ,SINO,COSO,SINR,COSR,PHOC
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMB/ IIER
+C
+C DEFINE LOCAL LOGICAL FLAGS.
+C
+ LOGICAL IMF,IPF
+C
+C DEFINE REQUIRED CONSTANTS.
+C
+ DATA DTOR / .017453292519943 /
+C
+C THE ARITHMETIC STATEMENT FUNCTIONS FLOOR AND CLING GIVE, RESPECTIVELY,
+C THE "FLOOR" OF X - THE LARGEST INTEGER LESS THAN OR EQUAL TO X - AND
+C THE "CEILING" OF X - THE SMALLEST INTEGER GREATER THAN OR EQUAL TO X.
+C
+ FLOOR(X)=AINT(X+1.E4)-1.E4
+ CLING(X)=-FLOOR(-X)
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPGRD','VERSION 1')
+C
+C IF EZMAP NEEDS INITIALIZATION OR IF AN ERROR HAS OCCURRED SINCE THE
+C LAST INITIALIZATION, DO NOTHING.
+C
+ IF (INTF) RETURN
+ IF (IIER.NE.0) RETURN
+C
+C IF THE GRID IS SUPPRESSED, DO NOTHING.
+C
+ IF (GRID.LE.0.) RETURN
+C
+C RESET THE INTENSITY, DOTTING, AND DASH PATTERN FOR THE GRID.
+C
+ CALL MAPCHI (2,0,IDSH)
+C
+C SET THE FLAGS IMF AND IPF, WHICH ARE TRUE IF AND ONLY IF MERIDIANS AND
+C PARALLELS, RESPECTIVELY, ARE STRAIGHT LINES AND IT IS "SAFE" TO DRAW
+C THEM USING LONG LINE SEGMENTS. WHAT WE HAVE TO BE SURE OF IS THAT AT
+C LEAST ONE OF THE TWO ENDPOINTS OF EACH MERIDIAN, OR ITS MIDPOINT, WILL
+C BE VISIBLE. (IF TWO POINTS ARE INVISIBLE, MAPIT DRAWS NOTHING, EVEN
+C THOUGH THE LINE JOINING THEM MAY BE VISIBLE ALONG PART OF ITS LENGTH.)
+C
+ IF (IPRJ.GE.1.AND.IPRJ.LE.6) THEN
+ IF (ELPF) THEN
+ IMF=(UCEN/URNG)**2+(VCEN/VRNG)**2.LT.1.
+ ELSE
+ IMF=UMIN*UMAX.LT.0..AND.VMIN*VMAX.LT.0.
+ END IF
+ IF (IPRJ.NE.1) IMF=IMF.AND.ABS(PHIA).GE.89.9999
+ ELSE IF (IPRJ.EQ.10) THEN
+ IMF=.TRUE.
+ ELSE IF (IPRJ.EQ.11.AND.(.75*(VMAX-VMIN)).LE.VEPS) THEN
+ IMF=.TRUE.
+ ELSE
+ IMF=.FALSE.
+ END IF
+C
+ IPF=IPRJ.EQ.10.OR.IPRJ.EQ.11.OR.(IPRJ.EQ.12.AND.ILTS.EQ.1)
+C
+C TRANSFER THE LATITUDE/LONGITUDE LIMITS COMPUTED BY MAPINT TO LOCAL,
+C MODIFIABLE VARIABLES.
+C
+ SLAT=SLAM
+ BLAT=BLAM
+ SLON=SLOM
+ BLON=BLOM
+C
+C FOR CERTAIN AZIMUTHAL PROJECTIONS CENTERED AT A POLE, THE LATITUDE
+C LIMIT FURTHEST FROM THE POLE NEEDS ADJUSTMENT TO MAKE IT PROJECTABLE
+C AND VISIBLE. OTHERWISE, WE HAVE TROUBLE WITH PORTIONS OF MERIDIANS
+C DISAPPEARING.
+C
+ IF (IPRJ.EQ.3.OR.IPRJ.EQ.4.OR.IPRJ.EQ.6) THEN
+ IF (PHIA.GT.+89.9999) THEN
+ SLAT=SLAT+SRCH
+ IF (IPRJ.EQ.3) SLAT=SLAT+SRCH
+ END IF
+ IF (PHIA.LT.-89.9999) THEN
+ BLAT=BLAT-SRCH
+ IF (IPRJ.EQ.3) BLAT=BLAT-SRCH
+ END IF
+ END IF
+C
+C RLON IS THE SMALLEST LONGITUDE FOR WHICH A MERIDIAN IS TO BE DRAWN,
+C XLON THE BIGGEST. AVOID DRAWING A GIVEN MERIDIAN TWICE.
+C
+ RLON=GRID*FLOOR(SLON/GRID)
+ XLON=GRID*CLING(BLON/GRID)
+ IF (XLON-RLON.GT.359.9999) THEN
+ IF (IPRJ.EQ.1) THEN
+ RLON=GRID*CLING((PHIO-179.9999)/GRID)
+ XLON=GRID*FLOOR((PHIO+179.9999)/GRID)
+ ELSE IF (IPRJ.GE.2.AND.IPRJ.LE.9) THEN
+ XLON=XLON-GRID
+ IF (XLON-RLON.GT.359.9999) XLON=XLON-GRID
+ END IF
+ END IF
+C
+C OLAT IS THE LATITUDE AT WHICH MERIDIANS WHICH ARE NOT MULTIPLES OF 90
+C ARE TO STOP. (EXCEPT ON CERTAIN FAST-PATH CYLINDRICAL PROJECTIONS,
+C ONLY THE MERIDIANS AT LONGITUDES WHICH ARE MULTIPLES OF 90 RUN ALL
+C THE WAY TO THE POLES. THIS AVOIDS A LOT OF CLUTTER.)
+C
+ IF (IPRJ.EQ.10.OR.IPRJ.EQ.11) THEN
+ OLAT=90.
+ ELSE
+ OLAT=GRID*FLOOR(89.9999/GRID)
+ END IF
+C
+C DRAW THE MERIDIANS.
+C
+ RLON=RLON-GRID
+ 101 RLON=RLON+GRID
+ XLAT=OLAT
+ IF (AMOD(RLON,90.).EQ.0.) XLAT=90.
+ RLAT=AMAX1(SLAT,-XLAT)
+ XLAT=AMIN1(BLAT,XLAT)
+ IF (IMF) THEN
+ DLAT=.5*(XLAT-RLAT)
+ ELSE
+ DLAT=(XLAT-RLAT)/CLING((XLAT-RLAT)/GRDR)
+ END IF
+ CALL MAPIT (RLAT,RLON,0)
+ 102 RLAT=RLAT+DLAT
+ CALL MAPIT (RLAT,RLON,1)
+ IF (RLAT.LT.XLAT-.9999) GO TO 102
+ IF (RLON.LT.XLON-.9999) GO TO 101
+C
+C ROUND THE LATITUDE LIMITS TO APPROPRIATE MULTIPLES OF GRID.
+C
+ SLAT=GRID*FLOOR(SLAT/GRID)
+ IF (SLAT.LE.-90.) SLAT=SLAT+GRID
+ BLAT=GRID*CLING(BLAT/GRID)
+ IF (BLAT.GE.90.) BLAT=BLAT-GRID
+C
+C IF A FAST-PATH CYLINDRICAL EQUIDISTANT PROJECTION IS IN USE AND EITHER
+C OR BOTH OF THE POLES IS WITHIN THE (RECTANGULAR) PERIMETER, ARRANGE
+C FOR THE PARALLELS AT -90 AND/OR +90 TO BE DRAWN.
+C
+ IF (IPRJ.EQ.10) THEN
+ CALL MAPTRN (-90.,PHIO,U,V)
+ IF (U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN.AND.V.LE.VMAX)
+ + SLAT=SLAT-GRID
+ CALL MAPTRN (90.,PHIO,U,V)
+ IF (U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN.AND.V.LE.VMAX)
+ + BLAT=BLAT+GRID
+ END IF
+C
+C DRAW THE PARALLELS.
+C
+ XLAT=SLAT-GRID
+ 103 XLAT=XLAT+GRID
+ RLAT=AMAX1(-90.,AMIN1(90.,XLAT))
+ RLON=FLOOR(SLON)
+ XLON=AMIN1(CLING(BLON),RLON+360.)
+ IF (IPF) THEN
+ DLON=.5*(XLON-RLON)
+ ELSE
+ DLON=(XLON-RLON)/CLING((XLON-RLON)/GRDR)
+ END IF
+ CALL MAPIT (RLAT,RLON,0)
+ 104 RLON=RLON+DLON
+ CALL MAPIT (RLAT,RLON,1)
+ IF (RLON.LT.XLON-.9999) GO TO 104
+ IF (XLAT.LT.BLAT-.9999) GO TO 103
+C
+C RESTORE THE ORIGINAL INTENSITY, DOTTING, AND DASH PATTERN.
+C
+ CALL MAPCHI (-2,0,0)
+C
+C DRAW THE LIMB LINES.
+C
+ CALL MAPLMB
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPGTC (WHCH,CVAL)
+C
+ CHARACTER*(*) WHCH,CVAL
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM3/ ITPN,NOUT,NPTS,IGID,BLAG,SLAG,BLOG,SLOG,PNTS(200)
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCM5/ DDCT(5),LDCT(5),PDCT(10)
+ CHARACTER*2 DDCT,LDCT,PDCT
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPGTC','VERSION 1')
+C
+ IF (WHCH(1:2).EQ.'AR') THEN
+ CVAL=LDCT(ILTS)
+ ELSE IF (WHCH(1:2).EQ.'OU') THEN
+ CVAL=DDCT(NOUT+1)
+ ELSE IF (WHCH(1:2).EQ.'PR') THEN
+ CVAL=PDCT(JPRJ)
+ IF (JPRJ.EQ.3.AND.ABS(SALT).GT.1.) CVAL=PDCT(10)
+ ELSE
+ GO TO 901
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=1
+ CALL MAPCEM (' MAPGTC - UNKNOWN PARAMETER NAME ',WHCH,IIER,1)
+ CVAL=' '
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPGTI (WHCH,IVAL)
+C
+ CHARACTER*(*) WHCH
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPNTS/ INTS(7)
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPGTI','VERSION 1')
+C
+ IF (WHCH(1:2).EQ.'DA') THEN
+ IVAL=IDSH
+ ELSE IF (WHCH(1:2).EQ.'DD') THEN
+ IVAL=DDTS
+ ELSE IF (WHCH(1:2).EQ.'DL') THEN
+ IVAL=IDTL
+ ELSE IF (WHCH(1:2).EQ.'DO') THEN
+ IVAL=IDOT
+ ELSE IF (WHCH(1:2).EQ.'EL') THEN
+ IVAL=0
+ IF (ELPF) IVAL=1
+ ELSE IF (WHCH(1:2).EQ.'ER') THEN
+ IVAL=IIER
+ ELSE IF (WHCH(1:2).EQ.'GR') THEN
+ IVAL=GRID
+ ELSE IF (WHCH(1:2).EQ.'IN') THEN
+ IVAL=0
+ IF (INTF) IVAL=1
+ ELSE IF (WHCH(1:2).EQ.'I1') THEN
+ IVAL=INTS(1)
+ ELSE IF (WHCH(1:2).EQ.'I2') THEN
+ IVAL=INTS(2)
+ ELSE IF (WHCH(1:2).EQ.'I3') THEN
+ IVAL=INTS(3)
+ ELSE IF (WHCH(1:2).EQ.'I4') THEN
+ IVAL=INTS(4)
+ ELSE IF (WHCH(1:2).EQ.'I5') THEN
+ IVAL=INTS(5)
+ ELSE IF (WHCH(1:2).EQ.'I6') THEN
+ IVAL=INTS(6)
+ ELSE IF (WHCH(1:2).EQ.'I7') THEN
+ IVAL=INTS(7)
+ ELSE IF (WHCH(1:2).EQ.'LA') THEN
+ IVAL=0
+ IF (LBLF) IVAL=1
+ ELSE IF (WHCH(1:2).EQ.'LS') THEN
+ IVAL=ILCW
+ ELSE IF (WHCH(1:2).EQ.'MV') THEN
+ IVAL=DPLT
+ ELSE IF (WHCH(1:2).EQ.'PE') THEN
+ IVAL=0
+ IF (PRMF) IVAL=1
+ ELSE IF (WHCH(1:2).EQ.'PN') THEN
+ IVAL=PHIO
+ ELSE IF (WHCH(1:2).EQ.'PT') THEN
+ IVAL=PHIA
+ ELSE IF (WHCH(1:2).EQ.'P1') THEN
+ IVAL=PLA1
+ ELSE IF (WHCH(1:2).EQ.'P2') THEN
+ IVAL=PLA2
+ ELSE IF (WHCH(1:2).EQ.'P3') THEN
+ IVAL=PLA3
+ ELSE IF (WHCH(1:2).EQ.'P4') THEN
+ IVAL=PLA4
+ ELSE IF (WHCH(1:2).EQ.'P5') THEN
+ IVAL=PLB1
+ ELSE IF (WHCH(1:2).EQ.'P6') THEN
+ IVAL=PLB2
+ ELSE IF (WHCH(1:2).EQ.'P7') THEN
+ IVAL=PLB3
+ ELSE IF (WHCH(1:2).EQ.'P8') THEN
+ IVAL=PLB4
+ ELSE IF (WHCH(1:2).EQ.'RE') THEN
+ IVAL=PLTR
+ ELSE IF (WHCH(1:2).EQ.'RO') THEN
+ IVAL=ROTA
+ ELSE IF (WHCH(1:2).EQ.'SA') THEN
+ IVAL=SALT
+ ELSE IF (WHCH(1:2).EQ.'S1') THEN
+ IVAL=ALFA
+ ELSE IF (WHCH(1:2).EQ.'S2') THEN
+ IVAL=BETA
+ ELSE
+ GO TO 901
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=2
+ CALL MAPCEM (' MAPGTI - UNKNOWN PARAMETER NAME ',WHCH,IIER,1)
+ IVAL=0
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPGTL (WHCH,LVAL)
+C
+ CHARACTER*(*) WHCH
+ LOGICAL LVAL
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMB/ IIER
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPGTL','VERSION 1')
+C
+ IF (WHCH(1:2).EQ.'DL') THEN
+ LVAL=IDTL.NE.0
+ ELSE IF (WHCH(1:2).EQ.'DO') THEN
+ LVAL=IDOT.NE.0
+ ELSE IF (WHCH(1:2).EQ.'EL') THEN
+ LVAL=ELPF
+ ELSE IF (WHCH(1:2).EQ.'IN') THEN
+ LVAL=INTF
+ ELSE IF (WHCH(1:2).EQ.'LA') THEN
+ LVAL=LBLF
+ ELSE IF (WHCH(1:2).EQ.'PE') THEN
+ LVAL=PRMF
+ ELSE
+ GO TO 901
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=3
+ CALL MAPCEM (' MAPGTL - UNKNOWN PARAMETER NAME ',WHCH,IIER,1)
+ LVAL=.FALSE.
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPGTR (WHCH,RVAL)
+C
+ CHARACTER*(*) WHCH
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPGTR','VERSION 1')
+C
+ IF (WHCH(1:2).EQ.'DD') THEN
+ RVAL=DDTS
+ ELSE IF (WHCH(1:2).EQ.'GD') THEN
+ RVAL=GRDR
+ ELSE IF (WHCH(1:2).EQ.'GR') THEN
+ RVAL=GRID
+ ELSE IF (WHCH(1:2).EQ.'MV') THEN
+ RVAL=DPLT
+ ELSE IF (WHCH(1:2).EQ.'PN') THEN
+ RVAL=PHIO
+ ELSE IF (WHCH(1:2).EQ.'PT') THEN
+ RVAL=PHIA
+ ELSE IF (WHCH(1:2).EQ.'P1') THEN
+ RVAL=PLA1
+ ELSE IF (WHCH(1:2).EQ.'P2') THEN
+ RVAL=PLA2
+ ELSE IF (WHCH(1:2).EQ.'P3') THEN
+ RVAL=PLA3
+ ELSE IF (WHCH(1:2).EQ.'P4') THEN
+ RVAL=PLA4
+ ELSE IF (WHCH(1:2).EQ.'P5') THEN
+ RVAL=PLB1
+ ELSE IF (WHCH(1:2).EQ.'P6') THEN
+ RVAL=PLB2
+ ELSE IF (WHCH(1:2).EQ.'P7') THEN
+ RVAL=PLB3
+ ELSE IF (WHCH(1:2).EQ.'P8') THEN
+ RVAL=PLB4
+ ELSE IF (WHCH(1:2).EQ.'RE') THEN
+ RVAL=PLTR
+ ELSE IF (WHCH(1:2).EQ.'RO') THEN
+ RVAL=ROTA
+ ELSE IF (WHCH(1:2).EQ.'SA') THEN
+ RVAL=SALT
+ ELSE IF (WHCH(1:2).EQ.'S1') THEN
+ RVAL=ALFA
+ ELSE IF (WHCH(1:2).EQ.'S2') THEN
+ RVAL=BETA
+ ELSE IF (WHCH(1:2).EQ.'SR') THEN
+ RVAL=SRCH
+ ELSE IF (WHCH(1:2).EQ.'XL') THEN
+ RVAL=XLOW
+ ELSE IF (WHCH(1:2).EQ.'XR') THEN
+ RVAL=XROW
+ ELSE IF (WHCH(1:2).EQ.'YB') THEN
+ RVAL=YBOW
+ ELSE IF (WHCH(1:2).EQ.'YT') THEN
+ RVAL=YTOW
+ ELSE
+ GO TO 901
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=4
+ CALL MAPCEM (' MAPGTR - UNKNOWN PARAMETER NAME ',WHCH,IIER,1)
+ RVAL=0.
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPINT
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM1/ IPRJ,SINO,COSO,SINR,COSR,PHOC
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM3/ ITPN,NOUT,NPTS,IGID,BLAG,SLAG,BLOG,SLOG,PNTS(200)
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCM7/ ULOW,UROW,VBOW,VTOW
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C SET UP ALTERNATE NAMES FOR SOME OF THE VARIABLES IN COMMON.
+C
+ EQUIVALENCE (PHIA,FLT1),(ROTA,FLT2)
+C
+ EQUIVALENCE (PLA1,AUMN),(PLA2,AUMX),
+ + (PLA3,AVMN),(PLA4,AVMX)
+C
+C ENSURE THAT THE BLOCK DATA ROUTINE WILL LOAD, SO THAT VARIABLES WILL
+C HAVE THE PROPER DEFAULT VALUES.
+C
+ EXTERNAL MAPBD
+C
+C DEFINE THE NECESSARY CONSTANTS.
+C
+ DATA RESL / 10. /
+ DATA DTOR / .017453292519943 /
+ DATA OV90 / .011111111111111 /
+ DATA PI / 3.14159265358979 /
+ DATA RTOD / 57.2957795130823 /
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPINT','VERSION 1')
+C
+C CHECK FOR AN ERROR IN THE PROJECTION SPECIFIER.
+C
+ IF (JPRJ.LE.0.OR.JPRJ.GE.10) GO TO 901
+C
+C IPRJ EQUALS JPRJ UNTIL WE FIND OUT IF FAST-PATH PROJECTIONS ARE TO BE
+C USED. PHOC IS JUST A COPY OF PHIO.
+C
+ IPRJ=JPRJ
+ PHOC=PHIO
+C
+ IF (IPRJ.EQ.1) THEN
+C
+C COMPUTE CONSTANTS FOR THE LAMBERT CONFORMAL CONIC.
+C
+ SINO=SIGN(1.,.5*(FLT1+FLT2))
+ CHI1=(90.-SINO*FLT1)*DTOR
+ IF (FLT1.EQ.FLT2) THEN
+ COSO=COS(CHI1)
+ ELSE
+ CHI2=(90.-SINO*FLT2)*DTOR
+ COSO=ALOG(SIN(CHI1)/SIN(CHI2))/ALOG(TAN(.5*CHI1)/TAN(.5*CHI2))
+ END IF
+C
+ ELSE
+C
+C COMPUTE CONSTANTS REQUIRED FOR ALL THE OTHER PROJECTIONS.
+C
+ TMP1=ROTA*DTOR
+ TMP2=PHIA*DTOR
+ SINR=SIN(TMP1)
+ COSR=COS(TMP1)
+ SINO=SIN(TMP2)
+ COSO=COS(TMP2)
+C
+C COMPUTE CONSTANTS REQUIRED ONLY BY THE CYLINDRICAL PROJECTIONS.
+C
+ IF (IPRJ.GE.7) THEN
+C
+C SEE IF FAST-PATH TRANSFORMATIONS CAN BE USED. (PLAT = 0 AND ROTA = 0
+C OR 180.)
+C
+ IF (ABS(PHIA).GE..0001.OR.(ABS(ROTA).GE..0001.AND.
+ + ABS(ROTA).LE.179.9999)) THEN
+C
+C NO. COMPUTE CONSTANTS FOR THE ORDINARY CYLINDRICAL PROJECTIONS.
+C
+ SINT=COSO*COSR
+ COST=SQRT(1.-(SINT)**2)
+ TMP1=SINR/COST
+ TMP2=SINO/COST
+ PHIO=PHIO-ATAN2(TMP1,-COSR*TMP2)*RTOD
+ PHOC=PHIO
+ SINR=TMP1*COSO
+ COSR=-TMP2
+ SINO=SINT
+ COSO=COST
+C
+ ELSE
+C
+C YES. THE FAST PATHS ARE IMPLEMENTED AS THREE ADDITIONAL PROJECTIONS.
+C
+ IPRJ=IPRJ+3
+C
+ IF (ABS(ROTA).LT..0001) THEN
+ SINO=1.
+ ELSE
+ SINO=-1.
+ PHIO=PHIO+180.
+ PHOC=PHIO
+ END IF
+C
+ COSO=0.
+ SINR=0.
+ COSR=1.
+C
+ END IF
+C
+ END IF
+C
+ END IF
+C
+C NOW, SET UMIN, UMAX, VMIN, AND VMAX TO CORRESPOND TO THE MAXIMUM
+C USEFUL AREA PRODUCED BY THE PROJECTION.
+C
+ GO TO (101,102,101,102,102,103,104,103,105,104,103,105) , IPRJ
+C
+C LAMBERT CONFORMAL CONIC AND ORTHOGRAPHIC.
+C
+ 101 IF (IPRJ.NE.3.OR.ABS(SALT).LE.1..OR.ALFA.EQ.0.) THEN
+ UMIN=-1.
+ UMAX=1.
+ VMIN=-1.
+ VMAX=1.
+ ELSE
+ TMP1=SALT*SALT*CALF*CALF-1.
+ TMP2=CALF*SQRT(SALT*SALT*(1.-SALF*SALF*SBET*SBET)-1.)
+ UMIN=SRSS*(-SALF*CBET-TMP2)/TMP1
+ UMAX=SRSS*(-SALF*CBET+TMP2)/TMP1
+ TMP2=CALF*SQRT(SALT*SALT*(1.-SALF*SALF*CBET*CBET)-1.)
+ VMIN=SRSS*(-SALF*SBET-TMP2)/TMP1
+ VMAX=SRSS*(-SALF*SBET+TMP2)/TMP1
+ END IF
+C
+ GO TO 106
+C
+C STEREOGRAPHIC, LAMBERT EQUAL AREA, AND GNOMONIC.
+C
+ 102 UMIN=-2.
+ UMAX=2.
+ VMIN=-2.
+ VMAX=2.
+ GO TO 106
+C
+C AZIMUTHAL EQUIDISTANT AND MERCATOR.
+C
+ 103 UMIN=-PI
+ UMAX=PI
+ VMIN=-PI
+ VMAX=PI
+ GO TO 106
+C
+C CYLINDRICAL EQUIDISTANT.
+C
+ 104 UMIN=-180.
+ UMAX=180.
+ VMIN=-90.
+ VMAX=90.
+ GO TO 106
+C
+C MOLLWEIDE.
+C
+ 105 UMIN=-2.
+ UMAX=2.
+ VMIN=-1.
+ VMAX=1.
+C
+C COMPUTE THE QUANTITIES USED BY MAPIT IN CHECKING FOR CROSS-OVER.
+C
+ 106 UEPS=.75*(UMAX-UMIN)
+ VEPS=.75*(VMAX-VMIN)
+C
+C AS ALWAYS, THE CONICAL PROJECTION IS THE ODDBALL. CROSS-OVER IS NOT
+C DETECTED IN U AND V, BUT IN LONGITUDE, SO THE VALUE HAS TO BE SET
+C DIFFERENTLY.
+C
+ IF (IPRJ.EQ.1) UEPS=180.
+C
+C NOW, JUMP TO THE APPROPRIATE LIMIT-SETTING CODE.
+C
+ GO TO (600,200,300,400,500) , ILTS
+C
+C ILTS=2 POINTS (PL1,PL2) AND (PL3,PL4) ARE ON OPPOSITE CORNERS
+C ------ OF THE PLOT.
+C
+ 200 E=0.
+ 201 CALL MAPTRN (PLA1,PLA2+E,TMP1,TMP3)
+ CALL MAPTRN (PLA3,PLA4-E,TMP2,TMP4)
+ IF (IPRJ.GE.7.AND.TMP1.GE.TMP2.AND.E.EQ.0.) THEN
+ E=.0001
+ GO TO 201
+ END IF
+ UMIN=AMIN1(TMP1,TMP2)
+ UMAX=AMAX1(TMP1,TMP2)
+ VMIN=AMIN1(TMP3,TMP4)
+ VMAX=AMAX1(TMP3,TMP4)
+ IF (UMAX.GE.1.E12) GO TO 904
+ GO TO 600
+C
+C ILTS=3 FOUR EDGE POINTS ARE GIVEN.
+C ------
+C
+ 300 E=0.
+ 301 CALL MAPTRN (PLA1,PLB1+E,TMP1,TMP5)
+ CALL MAPTRN (PLA2,PLB2-E,TMP2,TMP6)
+ IF (IPRJ.GE.7.AND.TMP1.GE.TMP2.AND.E.EQ.0.) THEN
+ E=.0001
+ GO TO 301
+ END IF
+ CALL MAPTRN (PLA3,PLB3,TMP3,TMP7)
+ CALL MAPTRN (PLA4,PLB4,TMP4,TMP8)
+ UMIN=AMIN1(TMP1,TMP2,TMP3,TMP4)
+ UMAX=AMAX1(TMP1,TMP2,TMP3,TMP4)
+ VMIN=AMIN1(TMP5,TMP6,TMP7,TMP8)
+ VMAX=AMAX1(TMP5,TMP6,TMP7,TMP8)
+ IF (UMAX.GE.1.E12) GO TO 904
+ GO TO 600
+C
+C ILTS=4 ANGULAR DISTANCES ARE GIVEN.
+C ------
+C
+ 400 CUMI=COS(AUMN*DTOR)
+ SUMI=SIN(AUMN*DTOR)
+ CUMA=COS(AUMX*DTOR)
+ SUMA=SIN(AUMX*DTOR)
+ CVMI=COS(AVMN*DTOR)
+ SVMI=SIN(AVMN*DTOR)
+ CVMA=COS(AVMX*DTOR)
+ SVMA=SIN(AVMX*DTOR)
+C
+ GO TO (904,401,402,403,404,405,406,407,408,406,407,408) , IPRJ
+C
+C STEREOGRAPHIC.
+C
+ 401 IF (SUMI.LT..0001) THEN
+ IF (CUMI.GT.0.) UMIN=0.
+ ELSE
+ UMIN=-(1.-CUMI)/SUMI
+ END IF
+ IF (SUMA.LT..0001) THEN
+ IF (CUMA.GT.0.) UMAX=0.
+ ELSE
+ UMAX=(1.-CUMA)/SUMA
+ END IF
+ IF (SVMI.LT..0001) THEN
+ IF (CVMI.GT.0.) VMIN=0.
+ ELSE
+ VMIN=-(1.-CVMI)/SVMI
+ END IF
+ IF (SVMA.LT..0001) THEN
+ IF (CVMA.GT.0.) VMAX=0.
+ ELSE
+ VMAX=(1.-CVMA)/SVMA
+ END IF
+ GO TO 600
+C
+C ORTHOGRAPHIC.
+C
+ 402 IF (ABS(SALT).LE.1.) THEN
+ IF (AMAX1(AUMN,AUMX,AVMN,AVMX).GT.90.) GO TO 902
+ UMIN=-SUMI
+ UMAX=SUMA
+ VMIN=-SVMI
+ VMAX=SVMA
+ ELSE
+ IF (AMAX1(AUMN,AUMX,AVMN,AVMX).GE.90.) GO TO 902
+ UTMP=SRSS*SALF/CALF
+ VTMP=0.
+ UCEN=UTMP*CBET-VTMP*SBET
+ VCEN=VTMP*CBET+UTMP*SBET
+ UMIN=UCEN-SRSS*CALF*SUMI/CUMI
+ UMAX=UCEN+SRSS*CALF*SUMA/CUMA
+ VMIN=VCEN-SRSS*CALF*SVMI/CVMI
+ VMAX=VCEN+SRSS*CALF*SVMA/CVMA
+ END IF
+ GO TO 600
+C
+C LAMBERT EQUAL AREA.
+C
+ 403 IF (SUMI.LT..0001) THEN
+ IF (CUMI.GT.0.) UMIN=0.
+ ELSE
+ UMIN=-2./SQRT(1.+((1.+CUMI)/SUMI)**2)
+ END IF
+ IF (SUMA.LT..0001) THEN
+ IF (CUMA.GT.0.) UMAX=0.
+ ELSE
+ UMAX=2./SQRT(1.+((1.+CUMA)/SUMA)**2)
+ END IF
+ IF (SVMI.LT..0001) THEN
+ IF (CVMI.GT.0.) VMIN=0.
+ ELSE
+ VMIN=-2./SQRT(1.+((1.+CVMI)/SVMI)**2)
+ END IF
+ IF (SVMA.LT..0001) THEN
+ IF (CVMA.GT.0.) VMAX=0.
+ ELSE
+ VMAX=2./SQRT(1.+((1.+CVMA)/SVMA)**2)
+ END IF
+ GO TO 600
+C
+C GNOMONIC.
+C
+ 404 IF (AMAX1(AUMN,AUMX,AVMN,AVMX).GE.89.9999) GO TO 902
+ UMIN=-SUMI/CUMI
+ UMAX=SUMA/CUMA
+ VMIN=-SVMI/CVMI
+ VMAX=SVMA/CVMA
+ GO TO 600
+C
+C AZIMUTHAL EQUIDISTANT.
+C
+ 405 UMIN=-AUMN*DTOR
+ UMAX=AUMX*DTOR
+ VMIN=-AVMN*DTOR
+ VMAX=AVMX*DTOR
+ GO TO 600
+C
+C CYLINDRICAL EQUIDISTANT.
+C
+ 406 UMIN=-AUMN
+ UMAX=AUMX
+ VMIN=-AVMN
+ VMAX=AVMX
+ GO TO 600
+C
+C MERCATOR.
+C
+ 407 IF (AMAX1(AVMN,AVMX).GE.89.9999) GO TO 902
+ UMIN=-AUMN*DTOR
+ UMAX=AUMX*DTOR
+ VMIN=-ALOG((1.+SVMI)/CVMI)
+ VMAX=ALOG((1.+SVMA)/CVMA)
+ GO TO 600
+C
+C MOLLWEIDE.
+C
+ 408 UMIN=-AUMN*OV90
+ UMAX=AUMX*OV90
+ VMIN=-SVMI
+ VMAX=SVMA
+ GO TO 600
+C
+C ILTS=5 VALUES IN THE U/V PLANE ARE GIVEN.
+C ------
+C
+ 500 UMIN=PLA1
+ UMAX=PLA2
+ VMIN=PLA3
+ VMAX=PLA4
+C
+C COMPUTE THE WIDTH AND HEIGHT OF THE PLOT.
+C
+ 600 DU=UMAX-UMIN
+ DV=VMAX-VMIN
+C
+C ERROR IF MAP HAS ZERO AREA.
+C
+ IF (DU.LE.0..OR.DV.LE.0.) GO TO 903
+C
+C POSITION THE MAP ON THE PLOTTER FRAME.
+C
+ IF (DU/DV.LT.(XROW-XLOW)/(YTOW-YBOW)) THEN
+ ULOW=.5*(XLOW+XROW)-.5*(DU/DV)*(YTOW-YBOW)
+ UROW=.5*(XLOW+XROW)+.5*(DU/DV)*(YTOW-YBOW)
+ VBOW=YBOW
+ VTOW=YTOW
+ ELSE
+ ULOW=XLOW
+ UROW=XROW
+ VBOW=.5*(YBOW+YTOW)-.5*(DV/DU)*(XROW-XLOW)
+ VTOW=.5*(YBOW+YTOW)+.5*(DV/DU)*(XROW-XLOW)
+ END IF
+C
+C ERROR IF MAP HAS ESSENTIALLY ZERO AREA.
+C
+ IF (AMIN1(UROW-ULOW,VTOW-VBOW)*PLTR.LT.RESL) GO TO 903
+C
+C DO THE REQUIRED SET CALL.
+C
+ CALL SET (ULOW,UROW,VBOW,VTOW,UMIN,UMAX,VMIN,VMAX,1)
+C
+C COMPUTE THE QUANTITIES USED BY MAPIT TO SEE IF POINTS ARE FAR ENOUGH
+C APART TO DRAW THE LINE BETWEEN THEM AND THE QUANTITIES USED BY MAPVP
+C TO DETERMINE THE NUMBER OF DOTS TO INTERPOLATE BETWEEN TWO POINTS.
+C
+ DSCA=(UROW-ULOW)*PLTR/DU
+ DPSQ=DPLT*DPLT
+ DSSQ=DSCA*DSCA
+ DBTD=DDTS/DSCA
+C
+C SET PARAMETERS REQUIRED IF AN ELLIPTICAL PERIMETER IS BEING USED. THE
+C ELLIPSE IS MADE TO BE JUST A LITTLE BIGGER THAN AN INSCRIBED ELLIPSE
+C SO AS TO AVOID ROUND-OFF PROBLEMS WHEN DRAWING THE LIMB OF CERTAIN
+C PROJECTIONS.
+C
+ UCEN=.5*(UMIN+UMAX)
+ VCEN=.5*(VMIN+VMAX)
+ URNG=.50005*(UMAX-UMIN)
+ VRNG=.50005*(VMAX-VMIN)
+C
+C NOW, COMPUTE THE LATITUDE/LONGITUDE LIMITS WHICH WILL BE REQUIRED BY
+C MAPGRD AND MAPLOT, IF ANY.
+C
+ IF (GRID.GT.0..OR.NOUT.NE.0) THEN
+C
+C AT FIRST, ASSUME THE WHOLE GLOBE WILL BE PROJECTED.
+C
+ SLAM=-90.
+ BLAM=+90.
+ SLOM=PHIO-180.
+ BLOM=PHIO+180.
+C
+C JUMP IF IT'S OBVIOUS THAT REALLY IS THE CASE.
+C
+ IF (ILTS.EQ.1.AND.(JPRJ.EQ.4.OR.JPRJ.EQ.6.OR.JPRJ.EQ.7.OR.
+ + JPRJ.EQ.9)) GO TO 700
+C
+C OTHERWISE, THE WHOLE GLOBE IS NOT BEING PROJECTED. THE FIRST THING
+C TO DO IS TO FIND A POINT (CLAT,CLON) WHOSE PROJECTION IS KNOWN TO BE
+C ON THE MAP. FIRST, TRY THE POLE OF THE PROJECTION.
+C
+ CLAT=PHIA
+ CLON=PHIO
+ CALL MAPTRN (CLAT,CLON,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX).OR.
+ + (ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.))
+ + GO TO 611
+C
+C IF THAT DIDN'T WORK, TRY A POINT BASED ON THE LIMITS SPECIFIER.
+C
+ IF (ILTS.EQ.2) THEN
+ CLAT=.5*(PLA1+PLA3)
+ CLON=.5*(PLA2+PLA4)
+ ELSE IF (ILTS.EQ.3) THEN
+ TMP1=AMIN1(PLA1,PLA2,PLA3,PLA4)
+ TMP2=AMAX1(PLA1,PLA2,PLA3,PLA4)
+ TMP3=AMIN1(PLB1,PLB2,PLB3,PLB4)
+ TMP4=AMAX1(PLB1,PLB2,PLB3,PLB4)
+ CLAT=.5*(TMP1+TMP2)
+ CLON=.5*(TMP3+TMP4)
+ ELSE
+ GO TO 700
+ END IF
+ CALL MAPTRN (CLAT,CLON,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX).OR.
+ + (ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.))
+ + GO TO 611
+ GO TO 700
+C
+C ONCE WE HAVE THE LATITUDES AND LONGITUDES OF A POINT ON THE MAP, WE
+C FIND THE MINIMUM AND MAXIMUM LATITUDE AND THE MINIMUM AND MAXIMUM
+C LONGITUDE BY RUNNING A SEARCH POINT ABOUT ON A FINE LAT/LON GRID.
+C
+C FIND THE MINIMUM LATITUDE.
+C
+ 611 RLAT=CLAT
+ RLON=CLON
+ DLON=SRCH
+ 612 RLAT=RLAT-SRCH
+ IF (RLAT.LE.-90.) GO TO 621
+ 613 CALL MAPTRN (RLAT,RLON,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX).OR.
+ + (ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.)) THEN
+ DLON=SRCH
+ GO TO 612
+ END IF
+ RLON=RLON+DLON
+ DLON=SIGN(ABS(DLON)+SRCH,-DLON)
+ IF (RLON.GT.CLON-180..AND.RLON.LT.CLON+180.) GO TO 613
+ RLON=RLON+DLON
+ DLON=SIGN(ABS(DLON)+SRCH,-DLON)
+ IF (RLON.GT.CLON-180..AND.RLON.LT.CLON+180.) GO TO 613
+ SLAM=RLAT
+C
+C FIND THE MAXIMUM LATITUDE.
+C
+ 621 RLAT=CLAT
+ RLON=CLON
+ DLON=SRCH
+ 622 RLAT=RLAT+SRCH
+ IF (RLAT.GT.90.) GO TO 631
+ 623 CALL MAPTRN (RLAT,RLON,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX).OR.
+ + (ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.)) THEN
+ DLON=SRCH
+ GO TO 622
+ END IF
+ RLON=RLON+DLON
+ DLON=SIGN(ABS(DLON)+SRCH,-DLON)
+ IF (RLON.GT.CLON-180..AND.RLON.LT.CLON+180.) GO TO 623
+ RLON=RLON+DLON
+ DLON=SIGN(ABS(DLON)+SRCH,-DLON)
+ IF (RLON.GT.CLON-180..AND.RLON.LT.CLON+180.) GO TO 623
+ BLAM=RLAT
+C
+C FIND THE MINIMUM LONGITUDE.
+C
+ 631 RLAT=CLAT
+ RLON=CLON
+ DLAT=SRCH
+ 632 RLON=RLON-SRCH
+ IF (RLON.LE.CLON-360.) GO TO 651
+ 633 CALL MAPTRN (RLAT,RLON,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX).OR.
+ + (ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.)) THEN
+ DLAT=SRCH
+ GO TO 632
+ END IF
+ RLAT=RLAT+DLAT
+ DLAT=SIGN(ABS(DLAT)+SRCH,-DLAT)
+ IF (RLAT.GT.-90..AND.RLAT.LT.90.) GO TO 633
+ RLAT=RLAT+DLAT
+ DLAT=SIGN(ABS(DLAT)+SRCH,-DLAT)
+ IF (RLAT.GT.-90..AND.RLAT.LT.90.) GO TO 633
+ SLOM=RLON-SIGN(180.,RLON+180.)+SIGN(180.,180.-RLON)
+C
+C FIND THE MAXIMUM LONGITUDE.
+C
+ 641 RLAT=CLAT
+ RLON=CLON
+ DLAT=SRCH
+ 642 RLON=RLON+SRCH
+ IF (RLON.GE.CLON+360.) GO TO 651
+ 643 CALL MAPTRN (RLAT,RLON,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX).OR.
+ + (ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.)) THEN
+ DLAT=SRCH
+ GO TO 642
+ END IF
+ RLAT=RLAT+DLAT
+ DLAT=SIGN(ABS(DLAT)+SRCH,-DLAT)
+ IF (RLAT.GT.-90..AND.RLAT.LT.90.) GO TO 643
+ RLAT=RLAT+DLAT
+ DLAT=SIGN(ABS(DLAT)+SRCH,-DLAT)
+ IF (RLAT.GT.-90..AND.RLAT.LT.90.) GO TO 643
+ BLOM=RLON-SIGN(180.,RLON+180.)+SIGN(180.,180.-RLON)
+ IF (BLOM.LE.SLOM) BLOM=BLOM+360.
+ GO TO 700
+C
+ 651 SLOM=PHIO-180.
+ BLOM=PHIO+180.
+C
+ END IF
+C
+C ZERO THE ERROR FLAG AND TURN OFF THE INITIALIZATION-REQUIRED FLAG.
+C
+ 700 IIER=0
+ INTF=.FALSE.
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR RETURNS.
+C
+ 901 IIER=5
+ CALL SETER (' MAPINT - ATTEMPT TO USE NON-EXISTENT PROJECTION',
+ 1 IIER,1)
+ RETURN
+C
+ 902 IIER=6
+ CALL SETER (' MAPINT - ANGULAR LIMITS TOO GREAT',IIER,1)
+ RETURN
+C
+ 903 IIER=7
+ CALL SETER (' MAPINT - MAP HAS ZERO AREA',IIER,1)
+ RETURN
+C
+ 904 IIER=8
+ CALL SETER (' MAPINT - MAP LIMITS INAPPROPIATE',IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPIT (RLAT,RLON,IFST)
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM1/ IPRJ,SINO,COSO,SINR,COSR,PHOC
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCM8/ P,Q,R
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+C
+ DIMENSION CPRJ(3)
+C
+ SAVE IVSO,POLD,QOLD,UOLD,VOLD
+C
+ DATA CPRJ / 360.,6.28318530717959,4. /
+C
+ DATA IVSO,POLD,QOLD,UOLD,VOLD / 0,0.,0.,0.,0. /
+C
+C PROJECT THE POINT (RLAT,RLON) TO (U,V).
+C
+ CALL MAPTRN (RLAT,RLON,U,V)
+C
+C FOR THE SAKE OF EFFICIENCY, EXECUTE ONE OF TWO PARALLEL ALGORITHMS,
+C DEPENDING ON WHETHER AN ELLIPTICAL OR A RECTANGULAR PERIMETER IS IN
+C USE. (THAT WAY, WE TEST ELPF ONLY ONCE.)
+C
+ IF (ELPF) THEN
+C
+C ELLIPTICAL - ASSUME THE NEW POINT IS VISIBLE UNTIL WE FIND OTHERWISE.
+C
+ IVIS=1
+C
+C SEE IF THE NEW POINT IS INVISIBLE.
+C
+ IF (((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.GT.1.) THEN
+C
+C THE NEW POINT IS INVISIBLE. RESET THE VISIBILITY FLAG.
+C
+ IVIS=0
+C
+C IF THE NEW POINT IS A "FIRST POINT" OR IF THE LAST POINT WAS NOT
+C VISIBLE OR IF THE NEW POINT IS INVISIBLE BECAUSE ITS PROJECTION IS
+C UNDEFINED, DRAW NOTHING. THE POSSIBLE EXISTENCE OF A VISIBLE SEGMENT
+C ALONG THE LINE JOINING TWO INVISIBLE POINTS IS INTENTIONALLY IGNORED,
+C FOR REASONS OF EFFICIENCY. FOR THIS REASON, OBJECTS SHOULD NOT BE
+C DRAWN USING LONG LINE SEGMENTS.
+C
+ IF (IFST.EQ.0.OR.IVSO.EQ.0.OR.U.GE.1.E12) GO TO 108
+C
+C OTHERWISE, THE NEW POINT IS NOT A "FIRST POINT", THE LAST POINT WAS
+C VISIBLE, AND THE PROJECTION OF THE NEW POINT IS DEFINED, SO WE NEED
+C TO CONTINUE THE LINE. FIRST, IF THERE'S A CROSS-OVER PROBLEM, MOVE
+C THE NEW POINT TO ITS ALTERNATE POSITION. THIS MAY MAKE IT VISIBLE.
+C
+ IF (ABS(P-POLD).GT.UEPS.OR.ABS(Q-QOLD).GT.VEPS) THEN
+C
+ IF (JPRJ.GE.7) THEN
+ P=P-SIGN(CPRJ(JPRJ-6),P)
+ U=P
+ IF (JPRJ.EQ.9) U=U*SQRT(1.-V*V)
+ ELSE
+ GO TO 108
+ END IF
+C
+ IF (((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.) THEN
+ IVIS=1
+ GO TO 107
+ END IF
+C
+ END IF
+C
+C IF IT'S STILL INVISIBLE, INTERPOLATE TO THE EDGE OF THE FRAME, EXTEND
+C THE LINE TO THAT POINT, AND QUIT.
+C
+ CALL MAPTRE (UOLD,VOLD,U,V,UINT,VINT)
+ CALL MAPVP (UOLD,VOLD,UINT,VINT)
+ GO TO 108
+C
+ END IF
+C
+C THE NEW POINT IS VISIBLE. IF IT'S THE FIRST POINT OF A LINE, GO START
+C A NEW LINE.
+C
+ IF (IFST.EQ.0.OR.UOLD.GE.1.E12) GO TO 106
+C
+C THE NEW POINT IS VISIBLE, BUT IT'S NOT THE FIRST POINT OF A LINE.
+C CHECK FOR CROSS-OVER PROBLEMS.
+C
+ IF (ABS(P-POLD).GT.UEPS.OR.ABS(Q-QOLD).GT.VEPS) GO TO 101
+C
+C THE NEW POINT IS VISIBLE, IT'S NOT THE FIRST POINT OF A LINE, AND
+C THERE ARE NO CROSS-OVER PROBLEMS. IF THE OLD POINT WAS INVISIBLE,
+C JUMP TO DRAW THE VISIBLE PORTION OF THE LINE FROM THE OLD POINT TO
+C THE NEW ONE.
+C
+ IF (IVSO.EQ.0) GO TO 102
+C
+C THE NEW POINT IS VISIBLE, IT'S NOT THE FIRST POINT OF A LINE, THERE
+C ARE NO CROSS-OVER PROBLEMS, AND THE LAST POINT WAS VISIBLE. JUMP TO
+C JUST CONTINUE THE LINE.
+C
+ GO TO 107
+C
+C WE HAVE THE MOST DIFFICULT CASE. THE NEW POINT IS VISIBLE, IT'S NOT
+C THE FIRST POINT OF A LINE, AND THERE IS A CROSS-OVER PROBLEM. NONE,
+C ONE, OR TWO SEGMENTS MAY NEED TO BE DRAWN.
+C
+ 101 IF (JPRJ.LT.7) GO TO 106
+C
+C IF THE OLD POINT WAS VISIBLE, GENERATE THE ALTERNATE PROJECTION OF THE
+C NEW POINT AND DRAW THE VISIBLE PORTION OF THE LINE SEGMENT JOINING THE
+C OLD POINT TO THE ALTERNATE PROJECTION POINT.
+C
+ IF (IVSO.NE.0) THEN
+C
+ UTMP=P-SIGN(CPRJ(JPRJ-6),P)
+ VTMP=Q
+ IF (JPRJ.EQ.9) UTMP=UTMP*SQRT(1.-VTMP*VTMP)
+C
+ IF (((UTMP-UCEN)/URNG)**2+((VTMP-VCEN)/VRNG)**2.GT.1.) THEN
+ CALL MAPTRE (UOLD,VOLD,UTMP,VTMP,UTMP,VTMP)
+ END IF
+C
+ CALL MAPVP (UOLD,VOLD,UTMP,VTMP)
+C
+ END IF
+C
+C NOW GENERATE AN ALTERNATE PROJECTION OF THE OLD POINT CLOSE TO THE NEW
+C ONE AND DRAW THE VISIBLE PORTION OF THE LINE SEGMENT JOINING IT TO THE
+C NEW POINT.
+C
+ UOLD=POLD-SIGN(CPRJ(JPRJ-6),POLD)
+ IF (JPRJ.EQ.9) UOLD=UOLD*SQRT(1.-VOLD*VOLD)
+C
+ IF (((UOLD-UCEN)/URNG)**2+((VOLD-VCEN)/VRNG)**2.LE.1.) GO TO 105
+C
+C MOVE (UOLD,VOLD) BY INTERPOLATING TO THE EDGE OF THE FRAME.
+C
+ 102 CALL MAPTRE (U,V,UOLD,VOLD,UOLD,VOLD)
+C
+ ELSE
+C
+C RECTANGULAR - REPEAT THE ABOVE CODE, CHANGING THE TESTS FOR A POINT'S
+C BEING INSIDE/OUTSIDE THE PERIMETER. COMMENTING WILL BE ABBREVIATED.
+C
+ IVIS=1
+C
+ IF (U.LT.UMIN.OR.U.GT.UMAX.OR.V.LT.VMIN.OR.V.GT.VMAX) THEN
+C
+ IVIS=0
+C
+ IF (IFST.EQ.0.OR.IVSO.EQ.0.OR.U.GE.1.E12) GO TO 108
+C
+ IF (ABS(P-POLD).GT.UEPS.OR.ABS(Q-QOLD).GT.VEPS) THEN
+C
+ IF (JPRJ.GE.7) THEN
+ P=P-SIGN(CPRJ(JPRJ-6),P)
+ U=P
+ IF (JPRJ.EQ.9) U=U*SQRT(1.-V*V)
+ ELSE
+ GO TO 108
+ END IF
+C
+ IF (U.GE.UMIN.AND.U.LE.UMAX.AND.
+ + V.GE.VMIN.AND.V.LE.VMAX) THEN
+ IVIS=1
+ GO TO 107
+ END IF
+ END IF
+C
+ CALL MAPTRP (UOLD,VOLD,U,V,UINT,VINT)
+ CALL MAPVP (UOLD,VOLD,UINT,VINT)
+ GO TO 108
+C
+ END IF
+C
+ IF (IFST.EQ.0.OR.UOLD.GE.1.E12) GO TO 106
+C
+ IF (ABS(P-POLD).GT.UEPS.OR.ABS(Q-QOLD).GT.VEPS) GO TO 103
+C
+ IF (IVSO.EQ.0) GO TO 104
+C
+ GO TO 107
+C
+ 103 IF (JPRJ.LT.7) GO TO 106
+C
+ IF (IVSO.NE.0) THEN
+C
+ UTMP=P-SIGN(CPRJ(JPRJ-6),P)
+ VTMP=Q
+ IF (JPRJ.EQ.9) UTMP=UTMP*SQRT(1.-VTMP*VTMP)
+C
+ IF (UTMP.LT.UMIN.OR.UTMP.GT.UMAX.OR.
+ + VTMP.LT.VMIN.OR.VTMP.GT.VMAX) THEN
+ CALL MAPTRP (UOLD,VOLD,UTMP,VTMP,UTMP,VTMP)
+ END IF
+C
+ CALL MAPVP (UOLD,VOLD,UTMP,VTMP)
+ END IF
+C
+ UOLD=POLD-SIGN(CPRJ(JPRJ-6),POLD)
+ IF (JPRJ.EQ.9) UOLD=UOLD*SQRT(1.-VOLD*VOLD)
+C
+ IF (UOLD.GE.UMIN.AND.UOLD.LE.UMAX.AND.
+ + VOLD.GE.VMIN.AND.VOLD.LE.VMAX) GO TO 105
+C
+ 104 CALL MAPTRP (U,V,UOLD,VOLD,UOLD,VOLD)
+C
+ END IF
+C
+C DRAW THE VISIBLE PORTION OF THE LINE JOINING THE OLD POINT TO THE NEW.
+C
+ 105 IF (IDTL.EQ.0) THEN
+ CALL FRSTD (UOLD,VOLD)
+ DATL=0.
+ END IF
+C
+ CALL MAPVP (UOLD,VOLD,U,V)
+C
+ GO TO 108
+C
+C START A NEW LINE.
+C
+ 106 IF (IDTL.EQ.0) THEN
+ CALL FRSTD (U,V)
+ DATL=0.
+ END IF
+C
+ GO TO 108
+C
+C CONTINUE THE LINE.
+C
+ 107 IF (IFST.LT.2.AND.((U-UOLD)**2+(V-VOLD)**2)*DSSQ.LE.DPSQ) RETURN
+ CALL MAPVP (UOLD,VOLD,U,V)
+C
+C SAVE INFORMATION ABOUT THE CURRENT POINT FOR THE NEXT CALL AND QUIT.
+C
+ 108 IVSO=IVIS
+ POLD=P
+ QOLD=Q
+ UOLD=U
+ VOLD=V
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPIQ
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCMP/ NPTB,XPTB(50),YPTB(50)
+C
+C FLUSH THE POINTS BUFFER.
+C
+ IF (NPTB.GT.0) THEN
+ CALL POINTS (XPTB,YPTB,NPTB,0,0)
+ NPTB=0
+ END IF
+C
+C FLUSH PLOTIT'S BUFFER, TOO.
+C
+ CALL PLOTIT (0,0,0)
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPLBL
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMB/ IIER
+C
+C DEFINE REQUIRED CONSTANTS. SIN1 AND COS1 ARE RESPECTIVELY THE SINE
+C AND COSINE OF ONE DEGREE.
+C
+ DATA SIN1 / .017452406437283 /
+ DATA COS1 / .999847695156390 /
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPLBL','VERSION 1')
+C
+C IF EZMAP NEEDS INITIALIZATION OR IF AN ERROR HAS OCCURRED SINCE THE
+C LAST INITIALIZATION, DO NOTHING.
+C
+ IF (INTF) RETURN
+ IF (IIER.NE.0) RETURN
+C
+C IF REQUESTED, LETTER KEY MERIDIANS AND POLES.
+C
+ IF (LBLF) THEN
+C
+C RESET THE INTENSITY, DOTTING, AND DASH PATTERN FOR LABELLING.
+C
+ CALL MAPCHI (3,1,0)
+C
+C FIRST, THE NORTH POLE.
+C
+ CALL MAPTRN (90.,0.,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX)
+ + .OR.(ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.))
+ + CALL WTSTR (U,V,'NP',ILCW,0,0)
+C
+C THEN, THE SOUTH POLE.
+C
+ CALL MAPTRN (-90.,0.,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX)
+ + .OR.(ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.))
+ + CALL WTSTR (U,V,'SP',ILCW,0,0)
+C
+C THE EQUATOR.
+C
+ RLON=PHIO-10.
+ DO 101 I=1,36
+ RLON=RLON+10.
+ CALL MAPTRN (0.,RLON,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX)
+ + .OR.(ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.))
+ + GO TO 102
+ 101 CONTINUE
+ GO TO 103
+ 102 CALL WTSTR (U,V,'EQ',ILCW,0,0)
+C
+C THE GREENWICH MERIDIAN.
+C
+ 103 RLAT=85.
+ DO 104 I=1,16
+ RLAT=RLAT-10.
+ CALL MAPTRN (RLAT,0.,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX)
+ + .OR.(ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.))
+ + GO TO 105
+ 104 CONTINUE
+ GO TO 106
+ 105 CALL WTSTR (U,V,'GM',ILCW,0,0)
+C
+C INTERNATIONAL DATE LINE.
+C
+ 106 RLAT=85.
+ DO 107 I=1,16
+ RLAT=RLAT-10.
+ CALL MAPTRN (RLAT,180.,U,V)
+ IF ((.NOT.ELPF.AND.U.GE.UMIN.AND.U.LE.UMAX.AND.V.GE.VMIN
+ + .AND.V.LE.VMAX)
+ + .OR.(ELPF.AND.((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.LE.1.))
+ + GO TO 108
+ 107 CONTINUE
+ GO TO 109
+ 108 CALL WTSTR (U,V,'ID',ILCW,0,0)
+C
+C RESTORE THE ORIGINAL INTENSITY, DOTTING, AND DASH PATTERN.
+C
+ 109 CALL MAPCHI (-3,0,0)
+C
+ END IF
+C
+C DRAW PERIMETER, IF REQUESTED.
+C
+ IF (PRMF) THEN
+C
+C RESET THE LINE INTENSITY, DOTTING, AND DASH PATTERN FOR THE PERIMETER.
+C
+ CALL MAPCHI (1,0,IOR(ISHIFT(32767,1),1))
+C
+C THE PERIMETER IS EITHER AN ELLIPSE OR A RECTANGLE, DEPENDING ON ELPF.
+C
+ IF (ELPF) THEN
+ U=.9999*URNG
+ V=0.
+ DATL=0.
+ CALL FRSTD (UCEN+U,VCEN)
+ DO 110 I=1,360
+ UOLD=U
+ VOLD=V
+ U=COS1*UOLD-SIN1*VOLD
+ V=SIN1*UOLD+COS1*VOLD
+ CALL MAPVP (UCEN+UOLD,VCEN+VOLD*VRNG/URNG,
+ + UCEN+U ,VCEN+V *VRNG/URNG)
+ 110 CONTINUE
+ ELSE
+ DATL=0.
+ UMINX=UMIN+.9999*(UMAX-UMIN)
+ UMAXX=UMAX-.9999*(UMAX-UMIN)
+ VMINX=VMIN+.9999*(VMAX-VMIN)
+ VMAXX=VMAX-.9999*(VMAX-VMIN)
+ CALL FRSTD (UMINX,VMINX)
+ CALL MAPVP (UMINX,VMINX,UMAXX,VMINX)
+ CALL MAPVP (UMAXX,VMINX,UMAXX,VMAXX)
+ CALL MAPVP (UMAXX,VMAXX,UMINX,VMAXX)
+ CALL MAPVP (UMINX,VMAXX,UMINX,VMINX)
+ END IF
+C
+C RESTORE THE ORIGINAL INTENSITY, DOTTING, AND DASH PATTERN.
+C
+ CALL MAPCHI (-1,0,0)
+C
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPLOT
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM3/ ITPN,NOUT,NPTS,IGID,BLAG,SLAG,BLOG,SLOG,PNTS(200)
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMB/ IIER
+C
+C DEFINE REQUIRED CONSTANTS.
+C
+ DATA PI / 3.14159265358979 /
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPLOT','VERSION 1')
+C
+C IF EZMAP NEEDS INITIALIZATION OR IF AN ERROR HAS OCCURRED SINCE THE
+C LAST INITIALIZATION, DO NOTHING.
+C
+ IF (INTF) RETURN
+ IF (IIER.NE.0) RETURN
+C
+C IF THE SELECTED OUTLINE TYPE IS "NONE", DO NOTHING.
+C
+ IF (NOUT.LE.0) RETURN
+C
+C SET THE FLAG IWGF TO SAY WHETHER OR NOT THE WHOLE GLOBE IS SHOWN BY
+C THE CURRENT PROJECTION. IF SO (IWGF=1), THERE'S NO NEED TO WASTE THE
+C TIME REQUIRED TO CHECK EACH OUTLINE POINT GROUP FOR INTERSECTION WITH
+C THE WINDOW.
+C
+ IWGF=0
+ IF (BLAM-SLAM.GT.179.9999.AND.BLOM-SLOM.GT.359.9999) IWGF=1
+C
+C IGIS KEEPS TRACK OF CHANGES IN THE GROUP IDENTIFIER, SO THAT THE
+C INTENSITY CAN BE CHANGED WHEN NECESSARY.
+C
+ IGIS=0
+C
+C POSITION TO THE USER-SELECTED PORTION OF THE OUTLINE DATASET.
+C
+ CALL MAPIO (1)
+ NSEG=0
+C
+C READ THE NEXT RECORD (GROUP OF POINTS).
+C
+ 101 CALL MAPIO (2)
+ NSEG=NSEG+1
+C
+C CHECK FOR THE END OF THE DESIRED DATA.
+C
+ IF (NPTS.EQ.0) GO TO 103
+C
+C IF LESS THAN THE WHOLE GLOBE IS SHOWN BY THE PROJECTION, DO A QUICK
+C CHECK FOR INTERSECTION OF THE BOX SURROUNDING THE POINT GROUP WITH
+C THE AREA SHOWN.
+C
+ IF (IWGF.EQ.0) THEN
+ IF (SLAG.GT.BLAM.OR.BLAG.LT.SLAM) GO TO 101
+ IF ((SLOG .GT.BLOM.OR.BLOG .LT.SLOM).AND.
+ + (SLOG-360..GT.BLOM.OR.BLOG-360..LT.SLOM).AND.
+ + (SLOG+360..GT.BLOM.OR.BLOG+360..LT.SLOM)) GO TO 101
+ END IF
+C
+C SEE IF THE USER WANTS TO OMIT THIS POINT GROUP.
+C
+ CALL MAPEOS (NOUT,NSEG,IGID,NPTS,PNTS)
+ IF (NPTS.LE.1) GO TO 101
+C
+C IF WE'VE SWITCHED TO A NEW GROUP, SET THE INTENSITY, DOTTING, AND
+C DASH PATTERN FOR THE GROUP.
+C
+ IF (IGID.NE.IGIS) THEN
+ IF (IGIS.NE.0) CALL MAPCHI (-4-IGIS,0,0)
+ CALL MAPCHI (4+IGID,IDOT,IOR(ISHIFT(32767,1),1))
+ IGIS=IGID
+ END IF
+C
+C PLOT THE GROUP.
+C
+ CALL MAPIT (PNTS(1),PNTS(2),0)
+C
+ DO 102 K=2,NPTS-1
+ CALL MAPIT (PNTS(2*K-1),PNTS(2*K),1)
+ 102 CONTINUE
+C
+ CALL MAPIT (PNTS(2*NPTS-1),PNTS(2*NPTS),2)
+C
+C GO GET ANOTHER GROUP.
+C
+ GO TO 101
+C
+C RESET THE INTENSITY, DOTTING, AND DASH PATTERN, IF NECESSARY.
+C
+ 103 IF (IGIS.NE.0) CALL MAPCHI (-4-IGIS,0,0)
+C
+C IF THE LIMB LINES HAVE NOT ALREADY BEEN DRAWN, DO IT NOW.
+C
+ IF (GRID.LE.0.) CALL MAPLMB
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPPOS (ARG1,ARG2,ARG3,ARG4)
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMB/ IIER
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPPOS','VERSION 1')
+C
+C CHECK THE ARGUMENTS FOR ERRORS.
+C
+ IF (ARG1.LT.0..OR.ARG1.GE.ARG2.OR.ARG2.GT.1.) GO TO 901
+ IF (ARG3.LT.0..OR.ARG3.GE.ARG4.OR.ARG4.GT.1.) GO TO 901
+C
+C TRANSFER IN THE VALUES.
+C
+ XLOW=ARG1
+ XROW=ARG2
+ YBOW=ARG3
+ YTOW=ARG4
+C
+C SET THE FLAG TO INDICATE THAT INITIALIZATION IS NOW REQUIRED.
+C
+ INTF=.TRUE.
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXIT.
+C
+ 901 IIER=19
+ CALL SETER (' MAPPOS - ARGUMENTS ARE INCORRECT',IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPROJ (ARG1,ARG2,ARG3,ARG4)
+C
+ CHARACTER*(*) ARG1
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCM5/ DDCT(5),LDCT(5),PDCT(10)
+ CHARACTER*2 DDCT,LDCT,PDCT
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPROJ','VERSION 1')
+C
+C TRANSFER THE PARAMETERS DEFINING THE PROJECTION.
+C
+ I=IDICTL(ARG1,PDCT,10)
+ IF (I.EQ.0) GO TO 901
+C
+ JPRJ=I
+C
+ IF (JPRJ.EQ.3) THEN
+ CALL MAPSTR ('SA',0.)
+ ELSE IF (JPRJ.EQ.10) THEN
+ JPRJ=3
+ IF (ABS(SALT).LE.1.) CALL MAPSTR ('SA',6.631)
+ END IF
+C
+ PHIA=ARG2
+ PHIO=ARG3
+ ROTA=ARG4
+C
+C SET THE FLAG TO INDICATE THAT INITIALIZATION IS NOW REQUIRED.
+C
+ INTF=.TRUE.
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXIT.
+C
+ 901 IIER=9
+ CALL MAPCEM (' MAPROJ - UNKNOWN PROJECTION NAME ',ARG1,IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPRS
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM7/ ULOW,UROW,VBOW,VTOW
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPRS','VERSION 1')
+C
+C RESTORE THE SET CALL.
+C
+ CALL SET (ULOW,UROW,VBOW,VTOW,UMIN,UMAX,VMIN,VMAX,1)
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPRST (IFNO)
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM3/ ITPN,NOUT,NPTS,IGID,BLAG,SLAG,BLOG,SLOG,PNTS(200)
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPNTS/ INTS(7)
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPRST','VERSION 1')
+C
+C READ A RECORD OF SAVED PARAMETERS.
+C
+ READ (IFNO,ERR=901,END=902) NOUT,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,
+ + PLA2,PLA3,PLA4,PLB1,PLB2,PLB3,PLB4,
+ + PLTR,GRID,IDSH,IDOT,LBLF,PRMF,ELPF,
+ + XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,
+ + ILCW,DPLT,DDTS,SALT,SSMO,SRSS,ALFA,
+ + BETA,SALF,CALF,SBET,CBET,
+ + (INTS(I),I=1,7)
+C
+C RE-INITIALIZE EZMAP.
+C
+ CALL MAPINT
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=20
+ CALL SETER ('MAPRST - ERROR ON READ',IIER,1)
+ RETURN
+C
+ 902 IIER=21
+ CALL SETER ('MAPRST - EOF ON READ',IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPSAV (IFNO)
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM3/ ITPN,NOUT,NPTS,IGID,BLAG,SLAG,BLOG,SLOG,PNTS(200)
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPNTS/ INTS(7)
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPSAV','VERSION 1')
+C
+C WRITE A RECORD CONTAINING ALL THE USER-SETTABLE PARAMETERS.
+C
+ WRITE (IFNO,ERR=901) NOUT,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,
+ + PLA2,PLA3,PLA4,PLB1,PLB2,PLB3,PLB4,
+ + PLTR,GRID,IDSH,IDOT,LBLF,PRMF,ELPF,
+ + XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,
+ + ILCW,DPLT,DDTS,SALT,SSMO,SRSS,ALFA,
+ + BETA,SALF,CALF,SBET,CBET,
+ + (INTS(I),I=1,7)
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=22
+ CALL SETER ('MAPSAV - ERROR ON WRITE',IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPSET (ARG1,ARG2,ARG3,ARG4,ARG5)
+C
+ CHARACTER*(*) ARG1
+ DIMENSION ARG2(2),ARG3(2),ARG4(2),ARG5(2)
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCM5/ DDCT(5),LDCT(5),PDCT(10)
+ CHARACTER*2 DDCT,LDCT,PDCT
+ COMMON /MAPCMB/ IIER
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPSET','VERSION 1')
+C
+C TRANSFER THE PARAMETERS DEFINING THE MAP LIMITS.
+C
+ I=IDICTL(ARG1,LDCT,5)
+ IF (I.EQ.0) GO TO 901
+ ILTS=I
+C
+ PLA1=ARG2(1)
+ PLA2=ARG3(1)
+ PLA3=ARG4(1)
+ PLA4=ARG5(1)
+C
+ IF (I.EQ.3) THEN
+ PLB1=ARG2(2)
+ PLB2=ARG3(2)
+ PLB3=ARG4(2)
+ PLB4=ARG5(2)
+ END IF
+C
+C SET THE FLAG TO INDICATE THAT INITIALIZATION IS NOW REQUIRED.
+C
+ INTF=.TRUE.
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXIT.
+C
+ 901 IIER=10
+ CALL MAPCEM (' MAPSET - UNKNOWN MAP AREA SPECIFIER ',ARG1,IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPSTC (WHCH,CVAL)
+C
+ CHARACTER*(*) WHCH,CVAL
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM3/ ITPN,NOUT,NPTS,IGID,BLAG,SLAG,BLOG,SLOG,PNTS(200)
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCM5/ DDCT(5),LDCT(5),PDCT(10)
+ CHARACTER*2 DDCT,LDCT,PDCT
+ COMMON /MAPCMB/ IIER
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPSTC','VERSION 1')
+C
+ IF (WHCH(1:2).EQ.'OU') THEN
+ I=IDICTL(CVAL,DDCT,5)
+ IF (I.EQ.0) GO TO 901
+ NOUT=I-1
+ ELSE
+ GO TO 902
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=11
+ CALL MAPCEM (' MAPSTC - UNKNOWN OUTLINE NAME ',CVAL,IIER,1)
+ RETURN
+C
+ 902 IIER=12
+ CALL MAPCEM (' MAPSTC - UNKNOWN PARAMETER NAME ',WHCH,IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPSTI (WHCH,IVAL)
+C
+ CHARACTER*(*) WHCH
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCM7/ ULOW,UROW,VBOW,VTOW
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPNTS/ INTS(7)
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPSTI','VERSION 1')
+C
+ IF (WHCH(1:2).EQ.'DA') THEN
+ IDSH=IVAL
+ ELSE IF (WHCH(1:2).EQ.'DD') THEN
+ DDTS=IVAL
+ DBTD=DDTS/DSCA
+ ELSE IF (WHCH(1:2).EQ.'DL') THEN
+ IDTL=IVAL
+ ELSE IF (WHCH(1:2).EQ.'DO') THEN
+ IDOT=IVAL
+ ELSE IF (WHCH(1:2).EQ.'EL') THEN
+ ELPF=IVAL.NE.0
+ ELSE IF (WHCH(1:2).EQ.'GR') THEN
+ GRID=IVAL
+ ELSE IF (WHCH(1:2).EQ.'I1') THEN
+ INTS(1)=IVAL
+ ELSE IF (WHCH(1:2).EQ.'I2') THEN
+ INTS(2)=IVAL
+ ELSE IF (WHCH(1:2).EQ.'I3') THEN
+ INTS(3)=IVAL
+ ELSE IF (WHCH(1:2).EQ.'I4') THEN
+ INTS(4)=IVAL
+ ELSE IF (WHCH(1:2).EQ.'I5') THEN
+ INTS(5)=IVAL
+ ELSE IF (WHCH(1:2).EQ.'I6') THEN
+ INTS(6)=IVAL
+ ELSE IF (WHCH(1:2).EQ.'I7') THEN
+ INTS(7)=IVAL
+ ELSE IF (WHCH(1:2).EQ.'LA') THEN
+ LBLF=IVAL.NE.0
+ ELSE IF (WHCH(1:2).EQ.'LS') THEN
+ ILCW=IVAL
+ ELSE IF (WHCH(1:2).EQ.'MV') THEN
+ DPLT=IVAL
+ DPSQ=DPLT*DPLT
+ ELSE IF (WHCH(1:2).EQ.'PE') THEN
+ PRMF=IVAL.NE.0
+ ELSE IF (WHCH(1:2).EQ.'RE') THEN
+ PLTR=IVAL
+ DSCA=(UROW-ULOW)*PLTR/(UMAX-UMIN)
+ DSSQ=DSCA*DSCA
+ DBTD=DDTS/DSCA
+ ELSE IF (WHCH(1:2).EQ.'SA') THEN
+ SALT=IVAL
+ IF (ABS(SALT).GT.1.) THEN
+ SSMO=SALT*SALT-1.
+ SRSS=SQRT(SSMO)
+ END IF
+ ELSE IF (WHCH(1:2).EQ.'S1') THEN
+ ALFA=IVAL
+ SALF=SIN(.017453292519943*ALFA)
+ CALF=COS(.017453292519943*ALFA)
+ ELSE IF (WHCH(1:2).EQ.'S2') THEN
+ BETA=IVAL
+ SBET=SIN(.017453292519943*BETA)
+ CBET=COS(.017453292519943*BETA)
+ ELSE
+ GO TO 901
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=13
+ CALL MAPCEM (' MAPSTI - UNKNOWN PARAMETER NAME ',WHCH,IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPSTL (WHCH,LVAL)
+C
+ CHARACTER*(*) WHCH
+ LOGICAL LVAL
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMB/ IIER
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPSTL','VERSION 1')
+C
+ IF (WHCH(1:2).EQ.'DL') THEN
+ IDTL=0
+ IF (LVAL) IDTL=1
+ ELSE IF (WHCH(1:2).EQ.'DO') THEN
+ IDOT=0
+ IF (LVAL) IDOT=1
+ ELSE IF (WHCH(1:2).EQ.'EL') THEN
+ ELPF=LVAL
+ ELSE IF (WHCH(1:2).EQ.'LA') THEN
+ LBLF=LVAL
+ ELSE IF (WHCH(1:2).EQ.'PE') THEN
+ PRMF=LVAL
+ ELSE
+ GO TO 901
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=14
+ CALL MAPCEM (' MAPSTL - UNKNOWN PARAMETER NAME ',WHCH,IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPSTR (WHCH,RVAL)
+C
+ CHARACTER*(*) WHCH
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCM7/ ULOW,UROW,VBOW,VTOW
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','MAPSTR','VERSION 1')
+C
+ IF (WHCH(1:2).EQ.'DD') THEN
+ DDTS=RVAL
+ DBTD=DDTS/DSCA
+ ELSE IF (WHCH(1:2).EQ.'GD') THEN
+ GRDR=AMAX1(.001,AMIN1(10.,RVAL))
+ ELSE IF (WHCH(1:2).EQ.'GR') THEN
+ GRID=RVAL
+ ELSE IF (WHCH(1:2).EQ.'MV') THEN
+ DPLT=RVAL
+ DPSQ=DPLT*DPLT
+ ELSE IF (WHCH(1:2).EQ.'RE') THEN
+ PLTR=RVAL
+ DSCA=(UROW-ULOW)*PLTR/(UMAX-UMIN)
+ DSSQ=DSCA*DSCA
+ DBTD=DDTS/DSCA
+ ELSE IF (WHCH(1:2).EQ.'SA') THEN
+ SALT=RVAL
+ IF (ABS(SALT).GT.1.) THEN
+ SSMO=SALT*SALT-1.
+ SRSS=SQRT(SSMO)
+ END IF
+ ELSE IF (WHCH(1:2).EQ.'S1') THEN
+ ALFA=RVAL
+ SALF=SIN(.017453292519943*ALFA)
+ CALF=COS(.017453292519943*ALFA)
+ ELSE IF (WHCH(1:2).EQ.'S2') THEN
+ BETA=RVAL
+ SBET=SIN(.017453292519943*BETA)
+ CBET=COS(.017453292519943*BETA)
+ ELSE IF (WHCH(1:2).EQ.'SR') THEN
+ SRCH=AMAX1(.001,AMIN1(10.,RVAL))
+ ELSE
+ GO TO 901
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=15
+ CALL MAPCEM (' MAPSTR - UNKNOWN PARAMETER NAME ',WHCH,IIER,1)
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPTRN (RLAT,RLON,U,V)
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM1/ IPRJ,SINO,COSO,SINR,COSR,PHOC
+ COMMON /MAPCM8/ P,Q,R
+ COMMON /MAPCMB/ IIER
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C DEFINE REQUIRED CONSTANTS. DTOR IS PI OVER 180, DTRH IS HALF OF DTOR
+C OR PI OVER 360, AND TOPI IS 2 OVER PI.
+C
+ DATA DTOR / .017453292519943 /
+ DATA DTRH / .008726646259971 /
+ DATA RTOD / 57.2957795130823 /
+ DATA TOPI / .636619772367581 /
+C
+C SET UP U AND V FOR THE FAST PATHS. U IS A LONGITUDE, IN DEGREES,
+C BETWEEN -180. AND +180., INCLUSIVE, AND V IS A LATITUDE, IN DEGREES.
+C
+ TMP1=RLON-PHOC
+ U=TMP1-SIGN(180.,TMP1+180.)+SIGN(180.,180.-TMP1)
+ V=RLAT
+C
+C TAKE FAST PATHS FOR SIMPLE CYLINDRICAL PROJECTIONS.
+C
+ IF (IPRJ-10) 101,116,112
+C
+C NO FAST PATH. SORT OUT THE LAMBERT CONFORMAL CONIC FROM THE REST.
+C
+ 101 IF (IPRJ-1) 901,102,103
+C
+C LAMBERT CONFORMAL CONIC.
+C
+ 102 P=U
+ CHI=90.-SINO*RLAT
+ IF (CHI.GE.179.9999) GO TO 118
+ R=TAN(DTRH*CHI)**COSO
+ U=U*COSO*DTOR
+ V=-R*SINO*COS(U)
+ U=R*SIN(U)
+ GO TO 117
+C
+C NOT LAMBERT CONFORMAL CONIC. CALCULATE CONSTANTS COMMON TO MOST OF
+C THE OTHER PROJECTIONS.
+C
+ 103 TMP1=U*DTOR
+ TMP2=V*DTOR
+ SINPH=SIN(TMP1)
+ SINLA=SIN(TMP2)
+ COSPH=COS(TMP1)
+ COSLA=COS(TMP2)
+ TCOS=COSLA*COSPH
+ COSA=AMAX1(-1.,AMIN1(+1.,SINLA*SINO+TCOS*COSO))
+ SINA=SQRT(1.-COSA*COSA)
+ IF (SINA.LT..0001) THEN
+ SINA=0.
+ IF (IPRJ.GE.7.OR.COSA.LT.0.) GO TO 118
+ U=0.
+ V=0.
+ GO TO 116
+ END IF
+ SINB=COSLA*SINPH/SINA
+ COSB=(SINLA*COSO-TCOS*SINO)/SINA
+C
+C JUMP TO CODE APPROPRIATE FOR THE CHOSEN PROJECTION.
+C
+ GO TO (104,105,106,107,108,109,110,111) , IPRJ-1
+C
+C STEREOGRAPHIC.
+C
+ 104 IF (ABS(SINA).LT..0001) THEN
+ R=SINA/2.
+ ELSE
+ R=(1.-COSA)/SINA
+ END IF
+ GO TO 115
+C
+C ORTHOGRAPHIC OR SATELLITE-VIEW, DEPENDING ON THE VALUE OF SALT.
+C
+ 105 IF (ABS(SALT).LE.1.) THEN
+ IF (COSA.GT.0.) THEN
+ R=SINA
+ ELSE
+ IF (SALT.GE.0.) GO TO 118
+ R=2.-SINA
+ END IF
+ GO TO 115
+ ELSE
+ IF (COSA.GT.1./ABS(SALT)) THEN
+ R=SRSS*SINA/(ABS(SALT)-COSA)
+ ELSE
+ IF (SALT.GE.0.) GO TO 118
+ R=2.-SRSS*SINA/(ABS(SALT)-COSA)
+ END IF
+ IF (ALFA.EQ.0.) GO TO 115
+ UTM1=R*(SINB*COSR+COSB*SINR)
+ VTM1=R*(COSB*COSR-SINB*SINR)
+ UTM2=UTM1*CBET+VTM1*SBET
+ VTM2=VTM1*CBET-UTM1*SBET
+ UTM3=SRSS*UTM2/(UTM2*SALF+SRSS*CALF)
+ VTM3=SRSS*VTM2*CALF/(UTM2*SALF+SRSS*CALF)
+ U=UTM3*CBET-VTM3*SBET
+ V=VTM3*CBET+UTM3*SBET
+ GO TO 116
+ END IF
+C
+C LAMBERT EQUAL AREA.
+C
+ 106 IF (ABS(COSA+1.).LT.1.E-6) GO TO 118
+ R=(1.+COSA)/SINA
+ R=2./SQRT(1.+R*R)
+ GO TO 115
+C
+C GNOMONIC.
+C
+ 107 IF (COSA.LE..0001) GO TO 118
+ R=SINA/COSA
+ GO TO 115
+C
+C AZIMUTHAL EQUIDISTANT.
+C
+ 108 IF (ABS(COSA+1.).LT.1.E-6) GO TO 118
+ R=ACOS(COSA)
+ GO TO 115
+C
+C CYLINDRICAL EQUIDISTANT, ARBITRARY POLE AND ORIENTATION.
+C
+ 109 U=ATAN2(SINB*COSR+COSB*SINR,SINB*SINR-COSB*COSR)*RTOD
+ V=90.-ACOS(COSA)*RTOD
+ GO TO 116
+C
+C MERCATOR, ARBITRARY POLE AND ORIENTATION.
+C
+ 110 U=ATAN2(SINB*COSR+COSB*SINR,SINB*SINR-COSB*COSR)
+ V=ALOG((1.+COSA)/SINA)
+ GO TO 116
+C
+C MOLLWEIDE, ARBITRARY POLE AND ORIENTATION.
+C
+ 111 U=ATAN2(SINB*COSR+COSB*SINR,SINB*SINR-COSB*COSR)*TOPI
+ P=U
+ V=COSA
+ U=U*SINA
+ GO TO 117
+C
+C FAST-PATH CYLINDRICAL PROJECTIONS (WITH PLAT=ROTA=0).
+C
+ 112 IF (IPRJ-12) 113,114,901
+C
+C FAST-PATH MERCATOR.
+C
+ 113 IF (ABS(RLAT).GT.89.9999) GO TO 118
+ U=U*DTOR
+ V=ALOG(TAN((RLAT+90.)*DTRH))
+ GO TO 116
+C
+C FAST-PATH MOLLWEIDE.
+C
+ 114 U=U/90.
+ V=SIN(RLAT*DTOR)
+ P=U
+ U=U*SQRT(1.-V*V)
+ GO TO 117
+C
+C COMMON TERMINAL CODE FOR CERTAIN PROJECTIONS.
+C
+ 115 U=R*(SINB*COSR+COSB*SINR)
+ V=R*(COSB*COSR-SINB*SINR)
+C
+ 116 P=U
+C
+ 117 Q=V
+C
+C NORMAL EXIT.
+C
+ RETURN
+C
+C PROJECTION OF POINT IS INVISIBLE OR UNDEFINED.
+C
+ 118 U=1.E12
+ P=U
+ RETURN
+C
+C ERROR EXIT.
+C
+ 901 IF (IIER.NE.0) GO TO 118
+ IIER=16
+ CALL SETER (' MAPTRN - ATTEMPT TO USE NON-EXISTENT PROJECTION',
+ + IIER,1)
+ GO TO 118
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPUSR (IPRT)
+ RETURN
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPVEC (XLAT,XLON)
+ CALL MAPIT (XLAT,XLON,1)
+ RETURN
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE SUPCON (RLAT,RLON,UVAL,VVAL)
+ CALL MAPTRN (RLAT,RLON,UVAL,VVAL)
+ RETURN
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE SUPMAP (JPRJ,PLAT,PLON,ROTA,PLM1,PLM2,PLM3,PLM4,JLTS,
+ + JGRD,IOUT,IDOT,IERR)
+C
+ DIMENSION PLM1(2),PLM2(2),PLM3(2),PLM4(2)
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM5/ DDCT(5),LDCT(5),PDCT(10)
+ CHARACTER*2 DDCT,LDCT,PDCT
+ COMMON /MAPCMB/ IIER
+C
+ DIMENSION LPRJ(10),LLTS(5)
+C
+ DATA LPRJ / 2,3,1,4,5,6,10,7,8,9 /
+ DATA LLTS / 1,2,5,4,3 /
+C
+C THE FOLLOWING CALL GATHERS STATISTICS ON LIBRARY USAGE AT NCAR.
+C
+ CALL Q8QST4 ('GRAPHX','EZMAP','SUPMAP','VERSION 1')
+C
+C SET EZMAP'S GRID-SPACING PARAMETER.
+C
+ CALL MAPSTI ('GR',MOD(IABS(JGRD),1000))
+C
+C SET EZMAP'S OUTLINE-SELECTION PARAMETER.
+C
+ IF (IABS(IOUT).EQ.0.OR.IABS(IOUT).EQ.1) THEN
+ I=1+2*IABS(IOUT)+(1+ISIGN(1,JPRJ))/2
+ ELSE
+ I=MAX0(1,MIN0(5,IOUT))
+ END IF
+C
+ CALL MAPSTC ('OU',DDCT(I))
+C
+C SET EZMAP'S PERIMETER-DRAWING FLAG.
+C
+ CALL MAPSTL ('PE',JGRD.GE.0)
+C
+C SET EZMAP'S GRID-LINE-LABELLING FLAG.
+C
+ CALL MAPSTL ('LA',MOD(IABS(JGRD),1000).NE.0)
+C
+C SET EZMAP'S DOTTED-OUTLINE FLAG.
+C
+ CALL MAPSTI ('DO',MAX0(0,MIN0(1,IDOT)))
+C
+C SET EZMAP'S PROJECTION-SELECTION PARAMETERS.
+C
+ I=MAX0(1,MIN0(10,IABS(JPRJ)))
+ CALL MAPROJ (PDCT(LPRJ(I)),PLAT,PLON,ROTA)
+C
+C SET EZMAP'S RECTANGULAR-LIMITS-SELECTION PARAMETERS.
+C
+ I=LLTS(MAX0(1,MIN0(5,IABS(JLTS))))
+ CALL MAPSET (LDCT(I),PLM1,PLM2,PLM3,PLM4)
+C
+C DRAW THE MAP.
+C
+ CALL MAPDRW
+C
+C RETURN THE ERROR FLAG TO THE USER.
+C
+ IERR=IIER
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C***********************************************************************
+C T H E C O D E - I N T E R N A L R O U T I N E S
+C***********************************************************************
+C
+ SUBROUTINE MAPCEM (IEM1,IEM2,IIER,IFLG)
+C
+ CHARACTER*(*) IEM1,IEM2
+C
+C MAPCEM IS CALLED TO DO A CALL TO SETER WHEN THE ERROR MESSAGE TO BE
+C PRINTED IS IN TWO PARTS WHICH NEED TO BE CONCATENATED. FORTRAN-77
+C RULES MAKE IT NECESSARY TO CONCATENATE THE TWO PARTS OF THE MESSAGE
+C INTO A LOCAL CHARACTER VARIABLE.
+C
+ CHARACTER*100 IEMC
+C
+ IEMC=IEM1//IEM2
+ CALL SETER (IEMC,IIER,IFLG)
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPCHI (IPRT,IDTG,IDPT)
+C
+C MAPCHI IS CALLED BY VARIOUS EZMAP ROUTINES TO RESET THE INTENSITY,
+C DOTTING, AND DASH PATTERN BEFORE AND AFTER DRAWING PARTS OF A MAP.
+C
+C THE ARGUMENT IPRT, IF POSITIVE, SAYS WHICH PART OF THE MAP IS ABOUT
+C TO BE DRAWN, AS FOLLOWS:
+C
+C IPRT PART OF MAP.
+C ---- ------------
+C 1 PERIMETER.
+C 2 GRID.
+C 3 LABELLING.
+C 4 LIMB LINES.
+C 5 OUTLINE POINT GROUP, CONTINENTAL.
+C 6 OUTLINE POINT GROUP, U.S.
+C 7 OUTLINE POINT GROUP, COUNTRY.
+C
+C A CALL WITH IPRT EQUAL TO THE NEGATIVE OF ONE OF THESE VALUES ASKS
+C THAT THE INTENSITY SAVED BY THE LAST CALL, WITH IPRT POSITIVE, BE
+C RESTORED.
+C
+C WHEN IPRT IS POSITIVE, IDTG IS ZERO IF SOLID LINES ARE TO BE USED, 1
+C IF DOTTED LINES ARE TO BE USED. IF IPRT IS NEGATIVE, IDTG IS IGNORED.
+C
+C WHEN IPRT IS POSITIVE AND IDTG IS ZERO, IDPT IS THE DASH PATTERN TO BE
+C USED. IF IPRT IS NEGATIVE OR IDTG IS NON-ZERO, IDPT IS IGNORED.
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPNTS/ INTS(7)
+C
+C DECLARE ONE OF THE DASH-PACKAGE COMMON BLOCKS, TOO.
+C
+ COMMON /SMFLAG/ ISMO
+C
+C THE VARIABLES INTO, IDTS, AND ISMS NEED TO BE SAVED BETWEEN CALLS.
+C
+ SAVE INTO,IDTS,ISMS
+C
+C FLUSH ALL BUFFERS BEFORE CHANGING ANYTHING.
+C
+ CALL MAPIQ
+C
+C SET/RESET INTENSITY, DOTTING, AND DASH PATTERN. THE USER HAS THE
+C LAST WORD.
+C
+ IF (IPRT.GT.0) THEN
+ ISMS=ISMO
+ ISMO=1
+ IDTS=IDTL
+ IDTL=IDTG
+ IF (IDTL.EQ.0) CALL DASHDB (IDPT)
+C
+C THE FOLLOWING LINES HAVE BEEN COMMENTED OUT BECAUSE THE INTENSITY
+C SETTING CAUSES SOME STRANGE BEHAVIOUR ON CERTAIN TERMINALS AND
+C WORKSTATIONS.
+C
+C CALL GETUSV ('IN',INTO)
+C CALL SETUSV ('IN',IFIX(10000.*FLOAT(INTS(IPRT))/255.))
+ CALL MAPUSR (IPRT)
+ ELSE
+ CALL MAPUSR (IPRT)
+C
+C THE FOLLOWING LINE HAVE BEEN COMMENTED OUT BECAUSE THE INTENSITY
+C SETTING CAUSES SOME STRANGE BEHAVIOUR ON CERTAIN TERMINALS AND
+C WORKSTATIONS.
+C
+C CALL SETUSV ('IN',INTO)
+ IF (IDTL.EQ.0) CALL DASHDB (IOR(ISHIFT(32767,1),1))
+ IDTL=IDTS
+ ISMO=ISMS
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ INTEGER FUNCTION IDICTL (ISTR,IDCT,NDCT)
+C
+ CHARACTER*(*) ISTR
+ CHARACTER*2 IDCT(NDCT)
+C
+C THE VALUE OF THIS FUNCTION IS THE INDEX IN THE NDCT-ELEMENT DICTIONARY
+C IDCT OF THE STRING ISTR. ONLY THE FIRST TWO CHARACTERS OF ISTR AND
+C IDCT(I) ARE COMPARED. IF ISTR IS NOT FOUND IN THE DICTIONARY, THE
+C FUNCTION VALUE IS ZERO.
+C
+ DO 101 I=1,NDCT
+ IF (ISTR(1:2).EQ.IDCT(I)) THEN
+ IDICTL=I
+ RETURN
+ END IF
+ 101 CONTINUE
+C
+C NOT FOUND. RETURN A ZERO.
+C
+ IDICTL=0
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPIO (IACT)
+C
+C THIS ROUTINE PERFORMS ALL POSITIONING AND INPUT OF THE OUTLINE DATASET
+C FOR MAPLOT. THE ARGUMENT IACT SPECIFIES WHAT IS TO BE DONE: 1 ASKS
+C THAT THE DATASET BE POSITIONED AT THE BEGINNING OF THE DESIRED "FILE",
+C 2 THAT THE NEXT RECORD BE READ.
+C
+C FIVE LINES OF THE CODE BELOW HAVE BEEN INSERTED TO MAKE THIS ROUTINE
+C RUN EFFICIENTLY ON NCAR'S CRAYS; THESE LINES SHOULD BE REMOVED BY
+C ANYONE IMPLEMENTING EZMAP ON ANOTHER SYSTEM (EXCEPT PERHAPS ANOTHER
+C CRAY).
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM3/ ITPN,NOUT,NPTS,IGID,BLAG,SLAG,BLOG,SLOG,PNTS(200)
+ COMMON /MAPCMB/ IERR
+C
+ IF (IACT.EQ.1) THEN
+C
+C POSITION TO THE DESIRED "FILE" WITHIN THE DATASET.
+C
+C THE FOLLOWING FIVE LINES ARE FOR NCAR'S CRAYS.
+C
+C ITPN=6LEZMPDT
+C IF (IFDNT(ITPN).EQ.0) THEN
+C CALL SDACCESS (IERR,ITPN)
+C IF (IERR.NE.0) GO TO 901
+C END IF
+C
+ REWIND ITPN
+C
+ IF (NOUT.NE.1) THEN
+ ITMP=NOUT
+ 101 READ (ITPN,END=902) NPTS,IGID,BLAG,SLAG,BLOG,SLOG,
+ + (PNTS(I),I=1,NPTS)
+ IF (NPTS.GT.1) GO TO 101
+ ITMP=ITMP-1
+ IF (ITMP.GT.1) GO TO 101
+ END IF
+C
+ ELSE
+C
+C READ THE NEXT RECORD.
+C
+ READ (ITPN) NPTS,IGID,BLAG,SLAG,BLOG,SLOG,(PNTS(I),I=1,NPTS)
+ NPTS=NPTS/2
+C
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+C ERROR EXITS.
+C
+ 901 IIER=17
+ CALL SETER (' MAPIO - OUTLINE DATASET IS UNREADABLE',IIER,1)
+ NOUT=0
+ RETURN
+C
+ 902 IIER=18
+ CALL SETER (' MAPIO - EOF ENCOUNTERED IN OUTLINE DATASET',IIER,1)
+ NOUT=0
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPLMB
+C
+C THE ROUTINE MAPLMB IS CALLED BY MAPGRD AND/OR MAPLOT TO DRAW THE LIMB
+C LINES.
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM1/ IPRJ,SINO,COSO,SINR,COSR,PHOC
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C DEFINE REQUIRED CONSTANTS. SIN1 AND COS1 ARE RESPECTIVELY THE SINE
+C AND COSINE OF ONE DEGREE.
+C
+ DATA SIN1 / .017452406437283 /
+ DATA COS1 / .999847695156390 /
+ DATA PI / 3.14159265358979 /
+C
+C THE ARITHMETIC STATEMENT FUNCTIONS FLOOR AND CLING GIVE, RESPECTIVELY,
+C THE "FLOOR" OF X - THE LARGEST INTEGER LESS THAN OR EQUAL TO X - AND
+C THE "CEILING" OF X - THE SMALLEST INTEGER GREATER THAN OR EQUAL TO X.
+C
+ FLOOR(X)=AINT(X+1.E4)-1.E4
+ CLING(X)=-FLOOR(-X)
+C
+C RESET THE INTENSITY, DOTTING, AND DASH PATTERN FOR LIMB LINES.
+C
+ CALL MAPCHI (4,0,IOR(ISHIFT(32767,1),1))
+C
+C DRAW LIMB LINES, THE NATURE OF WHICH DEPENDS ON THE PROJECTION.
+C
+ GO TO (101,110,104,105,110,106,110,110,107,110,110,107) , IPRJ
+C
+C LAMBERT CONFORMAL CONIC WITH TWO STANDARD PARALLELS.
+C
+ 101 DLAT=GRDR
+ RLON=PHIO+179.9999
+ K=CLING(180./DLAT)
+ DO 103 I=1,2
+ RLAT=-90.
+ CALL MAPIT (RLAT,RLON,0)
+ DO 102 J=1,K-1
+ RLAT=RLAT+DLAT
+ CALL MAPIT (RLAT,RLON,1)
+ 102 CONTINUE
+ RLAT=RLAT+DLAT
+ CALL MAPIT (RLAT,RLON,2)
+ RLON=PHIO-179.9999
+ 103 CONTINUE
+ GO TO 110
+C
+C ORTHOGRAPHIC (OR SATELLITE-VIEW).
+C
+ 104 IF (ABS(SALT).LE.1..OR.ALFA.EQ.0.) THEN
+ URAD=1.
+ RVTU=1.
+ ELSE
+ DNOM=SALT*SALT*CALF*CALF-1.
+ URAD=SSMO*CALF/DNOM
+ RVTU=SQRT(DNOM)/SRSS
+ END IF
+ GO TO 108
+C
+C LAMBERT EQUAL AREA.
+C
+ 105 URAD=2.
+ RVTU=1.
+ GO TO 108
+C
+C AZIMUTHAL EQUIDISTANT.
+C
+ 106 URAD=PI
+ RVTU=1.
+ GO TO 108
+C
+C MOLLWEIDE.
+C
+ 107 URAD=2.
+ RVTU=0.5
+C
+ 108 UCIR=URAD
+ VCIR=0.
+ IVIS=-1
+ DO 109 I=1,361
+ IF (IPRJ.NE.3.OR.ABS(SALT).LE.1..OR.ALFA.EQ.0.) THEN
+ U=UCIR
+ V=RVTU*VCIR
+ ELSE
+ UTMP=UCIR-SRSS*SALF/DNOM
+ VTMP=RVTU*VCIR
+ U=UTMP*CBET-VTMP*SBET
+ V=VTMP*CBET+UTMP*SBET
+ END IF
+ IF (.NOT.ELPF.AND.
+ + (U.LT.UMIN.OR.U.GT.UMAX.OR.V.LT.VMIN.OR.V.GT.VMAX)) THEN
+ IF (IVIS.EQ.1) THEN
+ CALL MAPTRP (UOLD,VOLD,U,V,UEDG,VEDG)
+ CALL MAPVP (UOLD,VOLD,UEDG,VEDG)
+ END IF
+ IVIS=0
+ ELSE IF (ELPF.AND.
+ + (((U-UCEN)/URNG)**2+((V-VCEN)/VRNG)**2.GT.1.)) THEN
+ IF (IVIS.EQ.1) THEN
+ CALL MAPTRE (UOLD,VOLD,U,V,UEDG,VEDG)
+ CALL MAPVP (UOLD,VOLD,UEDG,VEDG)
+ END IF
+ IVIS=0
+ ELSE
+ IF (IVIS.LT.0) THEN
+ DATL=0.
+ CALL FRSTD (U,V)
+ IVIS=1
+ ELSE
+ IF (IVIS.EQ.0) THEN
+ IF (.NOT.ELPF) CALL MAPTRP (U,V,UOLD,VOLD,UOLD,VOLD)
+ IF ( ELPF) CALL MAPTRE (U,V,UOLD,VOLD,UOLD,VOLD)
+ DATL=0.
+ CALL FRSTD (UOLD,VOLD)
+ IVIS=1
+ END IF
+ CALL MAPVP (UOLD,VOLD,U,V)
+ END IF
+ END IF
+ UOLD=U
+ VOLD=V
+ UTMP=UCIR
+ VTMP=VCIR
+ UCIR=UTMP*COS1-VTMP*SIN1
+ VCIR=UTMP*SIN1+VTMP*COS1
+ 109 CONTINUE
+C
+C RESTORE THE ORIGINAL INTENSITY, DOTTING, AND DASH PATTERN.
+C
+ 110 CALL MAPCHI (-4,0,0)
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPTRE (UINS,VINS,UOUT,VOUT,UINT,VINT)
+C
+C THIS ROUTINE FINDS THE POINT OF INTERSECTION (UINT,VINT) OF THE LINE
+C FROM (UINS,VINS) TO (UOUT,VOUT) WITH THE EDGE OF AN ELLIPTICAL FRAME.
+C THE FIRST POINT IS INSIDE THE FRAME AND THE SECOND OUTSIDE THE FRAME.
+C
+C BECAUSE MAPTRE CAN BE CALLED WITH THE SAME ACTUAL ARGUMENTS FOR UINT
+C AND VINT AS FOR UOUT AND VOUT, RESPECTIVELY, UINT AND VINT MUST NOT
+C BE RESET UNTIL ALL USE OF UOUT AND VOUT IS COMPLETE.
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+C
+C WHAT'S INVOLVED IS JUST A LOT OF ALGEBRA.
+C
+ IF (ABS(UOUT-UINS).GT.ABS(VOUT-VINS)) THEN
+ P=(VOUT-VINS)/(UOUT-UINS)
+ Q=(UOUT*VINS-UINS*VOUT)/(UOUT-UINS)
+ A=VRNG*VRNG+P*P*URNG*URNG
+ B=2.*(P*Q*URNG*URNG-UCEN*VRNG*VRNG-P*URNG*URNG*VCEN)
+ C=UCEN*UCEN*VRNG*VRNG+Q*Q*URNG*URNG-2.*Q*URNG*URNG*VCEN+
+ + URNG*URNG*VCEN*VCEN-URNG*URNG*VRNG*VRNG
+ UTM1=SQRT(AMAX1(B*B-4.*A*C,0.))
+ UTM2=.5*(-B-UTM1)/A
+ IF ((UTM2-UOUT)*(UTM2-UINS).GT.0.) UTM2=.5*(-B+UTM1)/A
+ UINT=UTM2
+ VINT=P*UINT+Q
+ ELSE
+ P=(UOUT-UINS)/(VOUT-VINS)
+ Q=(UINS*VOUT-UOUT*VINS)/(VOUT-VINS)
+ A=URNG*URNG+P*P*VRNG*VRNG
+ B=2.*(P*Q*VRNG*VRNG-URNG*URNG*VCEN-P*UCEN*VRNG*VRNG)
+ C=URNG*URNG*VCEN*VCEN+Q*Q*VRNG*VRNG-2.*Q*UCEN*VRNG*VRNG+
+ + UCEN*UCEN*VRNG*VRNG-URNG*URNG*VRNG*VRNG
+ VTM1=SQRT(AMAX1(B*B-4.*A*C,0.))
+ VTM2=.5*(-B-VTM1)/A
+ IF ((VTM2-VOUT)*(VTM2-VINS).GT.0.) VTM2=.5*(-B+VTM1)/A
+ VINT=VTM2
+ UINT=P*VINT+Q
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPTRP (UINS,VINS,UOUT,VOUT,UINT,VINT)
+C
+C THIS ROUTINE FINDS THE POINT OF INTERSECTION (UINT,VINT) OF THE LINE
+C FROM (UINS,VINS) TO (UOUT,VOUT) WITH THE EDGE OF A RECTANGULAR FRAME.
+C THE FIRST POINT IS INSIDE THE FRAME AND THE SECOND OUTSIDE THE FRAME.
+C
+C BECAUSE MAPTRP CAN BE CALLED WITH THE SAME ACTUAL ARGUMENTS FOR UINT
+C AND VINT AS FOR UOUT AND VOUT, RESPECTIVELY, UINT AND VINT MUST NOT
+C BE RESET UNTIL ALL USE OF UOUT AND VOUT IS COMPLETE.
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+C
+C GIVEN ONE COORDINATE OF A POINT ON THE LINE JOINING (UINS,VINS) AND
+C (UOUT,VOUT), THE OTHER CAN BE OBTAINED BY USING ONE OF THE FOLLOWING
+C ARITHMETIC STATEMENT FUNCTIONS:
+C
+ UFUN(V)=UINS+(V-VINS)*DU/DV
+ VFUN(U)=VINS+(U-UINS)*DV/DU
+C
+C I I
+C 5 I 4 I 6
+C I I
+C -----------------
+C FIRST, DETERMINE IN WHICH I I
+C OF THE AREAS SHOWN THE 2 I 1 I 3
+C POINT (UOUT,VOUT) LIES. I I
+C -----------------
+C I I
+C 8 I 7 I 9
+C I I
+C
+ IREA=1
+ IF (UOUT-UMIN) 101,104,102
+ 101 IREA=IREA+1
+ GO TO 104
+ 102 IF (UOUT-UMAX) 104,104,103
+ 103 IREA=IREA+2
+ 104 IF (VOUT-VMIN) 105,108,106
+ 105 IREA=IREA+6
+ GO TO 108
+ 106 IF (VOUT-VMAX) 108,108,107
+ 107 IREA=IREA+3
+C
+C NEXT, COMPUTE THE QUANTITIES REQUIRED BY UFUN AND VFUN AND JUMP TO THE
+C APPROPRIATE PIECE OF CODE FOR THE GIVEN AREA.
+C
+ 108 DU=UOUT-UINS
+ DV=VOUT-VINS
+C
+ GO TO (119,113,114,115,109,110,116,111,112) , IREA
+C
+ 109 IF (UFUN(VMAX)-UMIN) 113,115,115
+ 110 IF (UFUN(VMAX)-UMAX) 115,115,114
+ 111 IF (UFUN(VMIN)-UMIN) 113,116,116
+ 112 IF (UFUN(VMIN)-UMAX) 116,116,114
+C
+ 113 UINT=UMIN
+ GO TO 117
+ 114 UINT=UMAX
+ GO TO 117
+ 115 VINT=VMAX
+ GO TO 118
+ 116 VINT=VMIN
+ GO TO 118
+C
+ 117 VINT=VFUN(UINT)
+ RETURN
+C
+ 118 UINT=UFUN(VINT)
+ RETURN
+C
+ 119 UINT=UOUT
+ VINT=VOUT
+ RETURN
+C
+ END
+C
+C-----------------------------------------------------------------------
+C
+ SUBROUTINE MAPVP (UOLD,VOLD,U,V)
+C
+C PLOT THE LINE SEGMENT FROM (UOLD,VOLD) TO (U,V), USING EITHER A SOLID
+C LINE OR A DOTTED LINE (DEPENDING ON THE VALUE OF THE COMMON VARIABLE
+C IDTL).
+C
+C DECLARE REQUIRED COMMON BLOCKS. SEE MAPBD FOR DESCRIPTIONS OF THESE
+C COMMON BLOCKS AND THE VARIABLES IN THEM.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+ LOGICAL INTF,LBLF,PRMF,ELPF
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+ COMMON /MAPCMP/ NPTB,XPTB(50),YPTB(50)
+C
+C SELECT VECTOR OR DOT MODE.
+C
+ IF (IDTL.EQ.0) THEN
+C
+C USE A SINGLE VECTOR.
+C
+ CALL VECTD (U,V)
+C
+ ELSE
+C
+C USE DOTS. DELU AND DELV ARE THE U AND V COMPONENTS OF THE VECTOR
+C JOINING (UOLD,VOLD) TO (U,V) AND VLEN IS THE LENGTH OF THE VECTOR.
+C
+ DELU=U-UOLD
+ DELV=V-VOLD
+C
+ VLEN=SQRT(DELU*DELU+DELV*DELV)
+C
+C NOW DISTRIBUTE DOTS ALONG THE VECTOR. THE FIRST ONE IS SPACED JUST
+C FAR ENOUGH ALONG IT (DATL UNITS) TO BE DBTD UNITS AWAY FROM THE LAST
+C DOT ON THE PREVIOUS VECTOR AND THE REST ARE DBTD UNITS APART.
+C
+ 101 IF (DATL.LT.VLEN) THEN
+ IF (NPTB.GE.50) THEN
+ CALL POINTS (XPTB,YPTB,NPTB,0,0)
+ NPTB=0
+ END IF
+ NPTB=NPTB+1
+ XPTB(NPTB)=UOLD+(DATL/VLEN)*DELU
+ YPTB(NPTB)=VOLD+(DATL/VLEN)*DELV
+ DATL=DATL+DBTD
+ GO TO 101
+ END IF
+C
+C SET DATL FOR THE NEXT CALL.
+C
+ DATL=DATL-VLEN
+C
+ END IF
+C
+C DONE.
+C
+ RETURN
+C
+ END
+C
+C***********************************************************************
+C T H E B L O C K D A T A " R O U T I N E " - D E F A U L T S
+C***********************************************************************
+C
+ BLOCK DATA MAPBD
+C
+C THE COMMON BLOCK MAPCM1 CONTAINS TRANSFORMATION CONSTANTS.
+C
+ COMMON /MAPCM1/ IPRJ,SINO,COSO,SINR,COSR,PHOC
+C
+C THE COMMON BLOCK MAPCM2 CONTAINS AREA-SPECIFICATION VARIABLES.
+C
+ COMMON /MAPCM2/ UMIN,UMAX,VMIN,VMAX,UEPS,VEPS,UCEN,VCEN,URNG,VRNG,
+ + BLAM,SLAM,BLOM,SLOM
+C
+C THE COMMON BLOCK MAPCM3 CONTAINS PARAMETERS HAVING TO DO WITH READING
+C THE DATA FOR OUTLINES.
+C
+ COMMON /MAPCM3/ ITPN,NOUT,NPTS,IGID,BLAG,SLAG,BLOG,SLOG,PNTS(200)
+C
+C THE COMMON BLOCK MAPCM4 CONTAINS MOST OF THE INPUT PARAMETERS.
+C
+ COMMON /MAPCM4/ INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,
+ + PLB1,PLB2,PLB3,PLB4,PLTR,GRID,IDSH,IDOT,LBLF,PRMF,
+ + ELPF,XLOW,XROW,YBOW,YTOW,IDTL,GRDR,SRCH,ILCW
+C
+ LOGICAL INTF,LBLF,PRMF,ELPF
+C
+C THE COMMON BLOCK MAPCM5 CONTAINS VARIOUS LISTS ("DICTIONARIES") OF
+C TWO-CHARACTER CODES REQUIRED BY EZMAP FOR PARAMETER-SETTING.
+C
+ COMMON /MAPCM5/ DDCT(5),LDCT(5),PDCT(10)
+C
+ CHARACTER*2 DDCT,LDCT,PDCT
+C
+C THE COMMON BLOCK MAPCM7 CONTAINS PARAMETERS DESCRIBING THE PORTION OF
+C THE PLOTTER FRAME BEING USED.
+C
+ COMMON /MAPCM7/ ULOW,UROW,VBOW,VTOW
+C
+C THE COMMON BLOCK MAPCM8 CONTAINS PARAMETERS SET BY MAPTRN AND USED BY
+C MAPIT IN HANDLING "CROSS-OVER" PROBLEMS.
+C
+ COMMON /MAPCM8/ P,Q,R
+C
+C THE COMMON BLOCK MAPCMA CONTAINS VALUES WHICH ARE USED TO POSITION
+C DOTS ALONG DOTTED OUTLINES AND TO AVOID DRAWING VECTORS WHICH ARE
+C TOO SHORT.
+C
+ COMMON /MAPCMA/ DPLT,DDTS,DSCA,DPSQ,DSSQ,DBTD,DATL
+C
+C THE COMMON BLOCK MAPCMB CONTAINS THE EZMAP ERROR FLAG.
+C
+ COMMON /MAPCMB/ IIER
+C
+C THE COMMON BLOCK MAPCMP CONTAINS THE BUFFERS IN WHICH THE X AND Y
+C COORDINATES OF POINTS ARE COLLECTED FOR AN EVENTUAL CALL TO POINTS.
+C
+ COMMON /MAPCMP/ NPTB,XPTB(50),YPTB(50)
+C
+C THE COMMON BLOCK MAPNTS CONTAINS QUANTITIES SPECIFYING THE INTENSITIES
+C TO BE USED FOR VARIOUS PORTIONS OF THE PLOT.
+C
+ COMMON /MAPNTS/ INTS(7)
+C
+C THE COMMON BLOCK MAPSAT CONTAINS PARAMETERS FOR THE SATELLITE-VIEW
+C PROJECTION.
+C
+ COMMON /MAPSAT/ SALT,SSMO,SRSS,ALFA,BETA,SALF,CALF,SBET,CBET
+C
+C
+C BELOW ARE DESCRIPTIONS OF THE VARIABLES IN EACH OF THE COMMON BLOCKS,
+C TOGETHER WITH DATA STATEMENTS GIVING DEFAULT VALUES TO THOSE VARIABLES
+C WHICH NEED DEFAULT VARIABLES.
+C
+C
+C VARIABLES IN MAPCM1:
+C
+C IPRJ IS AN INTEGER BETWEEN 1 AND 12, SPECIFYING WHAT PROJECTION IS
+C CURRENTLY IN USE. THE VALUES 10, 11, AND 12 SPECIFY FAST-PATH
+C VERSIONS OF THE VALUES 7, 8, AND 9, RESPECTIVELY. SINO, COSO, SINR,
+C COSR, AND PHOC ARE PROJECTION VARIABLES COMPUTED BY MAPINT FOR USE BY
+C MAPTRN. PHOC, AS IT HAPPENS, IS JUST A COPY OF PHIO, FROM THE COMMON
+C BLOCK MAPCM4.
+C
+C
+C VARIABLES IN MAPCM2:
+C
+C UMIN, UMAX, VMIN, AND VMAX SPECIFY THE LIMITS OF THE RECTANGLE TO BE
+C DRAWN, IN PROJECTION SPACE. UEPS AND VEPS ARE SET BY MAPINT FOR USE
+C IN MAPIT IN TESTING FOR CROSS-OVER PROBLEMS. UCEN, VCEN, URNG, AND
+C VRNG ARE COMPUTED BY MAPINT FOR USE WHEN THE MAP PERIMETER IS MADE
+C ELLIPTICAL (BY SETTING THE FLAG ELPF). BLAM, SLAM, BLOM, AND SLOM
+C ARE RESPECTIVELY THE BIGGEST LATITUDE, THE SMALLEST LATITUDE, THE
+C BIGGEST LONGITUDE, AND THE SMALLEST LONGITUDE ON THE MAP. THEY ARE
+C USED IN MAPGRD AND IN MAPLOT TO MAKE THE DRAWING OF GRIDS AND OUTLINES
+C MORE EFFICIENT. UMIN AND UMAX ARE GIVEN DEFAULT VALUES TO PREVENT
+C IN MAPSTI AND MAPSTR FROM BLOWING UP WHEN PLTR IS SET PRIOR TO THE
+C FIRST CALL TO MAPINT.
+C
+ DATA UMIN,UMAX / 0.,1. /
+C
+C
+C VARIABLES IN MAPCM3:
+C
+C ITPN IS THE UNIT NUMBER OF THE "TAPE" FROM WHICH OUTLINE DATA IS TO
+C BE READ. NOUT IS THE NUMBER OF THE OUTLINE TO BE USED; THE VALUES 0
+C THROUGH 5 IMPLY 'NO', 'CO', 'US', 'PS', AND 'PO', RESPECTIVELY; THUS,
+C IF NOUT IS ZERO, NO OUTLINES ARE TO BE USED, AND, IF IT IS NON-ZERO,
+C IT IS THE NUMBER OF THE "FILE" TO BE READ FROM UNIT ITPN. NPTS, JUST
+C AFTER A READ, IS THE NUMBER OF ELEMENTS READ INTO PNTS; IT IS THEN
+C DIVIDED BY 2 TO BECOME THE NUMBER OF POINTS DEFINED BY THE GROUP JUST
+C READ. IGID IS AN IDENTIFIER FOR THE GROUP, SO THAT, FOR EXAMPLE, ONE
+C CAN DISTINGUISH A GROUP BELONGING TO A INTERNATIONAL BOUNDARY FROM
+C ONE BELONGING TO A U.S. STATE BOUNDARY. BLAG, SLAG, BLOG, AND SLOG
+C SPECIFY THE BIGGEST AND SMALLEST LATITUDE AND THE BIGGEST AND SMALLEST
+C LONGITUDE OF THE POINTS IN THE GROUP, SO THAT, IN SOME CASES AT LEAST,
+C ONE CAN DECIDE QUICKLY NOT TO BOTHER WITH THE GROUP. PNTS CONTAINS
+C NPTS COORDINATE PAIRS, EACH CONSISTING OF A LATITUDE AND A LONGITUDE,
+C IN DEGREES.
+C
+ DATA ITPN,NOUT / 1,1 /
+C
+C
+C VARIABLES IN MAPCM4:
+C
+C INTF IS A FLAG WHOSE VALUE AT ANY GIVEN TIME INDICATES WHETHER THE
+C PACKAGE EZMAP IS IN NEED OF INITIALIZATION (.TRUE.) OR NOT (.FALSE).
+C JPRJ IS AN INTEGER BETWEEN 1 AND 9 INDICATING THE TYPE OF PROJECTION
+C CURRENTLY IN USE. PHIA, PHIO, AND ROTA ARE THE POLE LATITUDE AND
+C LONGITUDE AND THE ROTATION ANGLE SPECIFIED BY THE LAST USER CALL TO
+C MAPROJ. ILTS IS AN INTEGER BETWEEN 1 AND 5, SPECIFYING HOW THE LIMITS
+C OF THE MAP ARE TO BE CHOSEN. PLA1-4 AND PLB1-4 ARE THE VALUES GIVEN
+C BY THE USER FOR PLM1(1), PLM2(1), ..., PLM1(2), PLM2(2), ..., IN THE
+C LAST CALL TO MAPSET. PLTR IS THE PLOTTER RESOLUTION - EFFECTIVELY,
+C THE NUMBER OF ADDRESSABLE POINTS IN THE X DIRECTION. GRID IS THE
+C DESIRED SPACING BETWEEN GRID LINES, IN DEGREES OF LATITUDE/LONGITUDE.
+C IDSH IS THE DESIRED DASH PATTERN (16-BIT BINARY) FOR GRID LINES. IDOT
+C IS A FLAG SELECTING SOLID OUTLINES (0) OR DOTTED OUTLINES (1). LBLF
+C IS A LOGICAL FLAG INDICATING WHETHER THE INTERNATIONAL DATE LINE, THE
+C EQUATOR, THE GREENWICH MERIDIAN, AND THE POLES ARE TO BE LABELLED OR
+C NOT. PRMF IS A LOGICAL FLAG INDICATING WHETHER OR NOT A PERIMETER
+C IS TO BE DRAWN. ELPF IS A LOGICAL FLAG INDICATING WHETHER THE MAP
+C PERIMETER IS TO BE RECTANGULAR (.FALSE.) OR ELLIPTICAL (.TRUE.).
+C XLOW, XROW, YBOW, AND YTOW ARE FRACTIONS BETWEEN 0. AND 1. SPECIFYING
+C THE POSITION OF AREA OF THE PLOTTER FRAME IN WHICH THE MAP IS TO BE
+C PUT; THE MAP IS CENTERED IN THIS AREA AND MADE AS LARGE AS POSSIBLE.
+C IDTL IS A FLAG SPECIFYING THAT MAPIT SHOULD DRAW SOLID OUTLINES (0)
+C OR DOTTEN OUTLINES (1). GRDR AND SRCH ARE MEASURED IN DEGREES AND
+C LIE IN THE RANGE FROM .001 TO 10. GRDR SPECIFIES THE RESOLUTION WITH
+C WHICH THE GRID IS TO BE DRAWN AND SRCH THE ACCURACY WITH WHICH THE
+C LATITUDE/LONGITUDE LIMITS OF THE MAP ARE TO BE FOUND. ILCW IS THE
+C CHARACTER WIDTH FOR CHARACTERS IN THE LABEL, AS REQUIRED FOR USE IN A
+C CALL TO PWRIT.
+C
+ DATA INTF,JPRJ,PHIA,PHIO,ROTA,ILTS,PLA1,PLA2,PLA3,PLA4,PLB1,PLB2 /
+ 1 .TRUE., 7, 0., 0., 0., 1, 0., 0., 0., 0., 0., 0. /
+C
+ DATA PLB3,PLB4, PLTR,GRID, IDSH,IDOT, LBLF , PRMF , ELPF ,IDTL /
+ 1 0., 0.,4096., 10.,21845, 0,.TRUE.,.TRUE.,.FALSE., 0 /
+C
+ DATA XLOW,XROW,YBOW,YTOW / .05,.95,.05,.95 /
+C
+ DATA GRDR,SRCH / 1.,1. /
+C
+ DATA ILCW / 1 /
+C
+C
+C VARIABLES IN MAPCM5:
+C
+C DDCT IS THE DICTIONARY OF AVAILABLE DATASETS, LDCT THE DICTIONARY OF
+C MAP LIMIT DEFINITION TYPES, AND PDCT THE DICTIONARY OF MAP PROJECTION
+C NAMES.
+C
+ DATA DDCT / 'NO','CO','US','PS','PO' /
+C
+ DATA LDCT / 'MA','CO','PO','AN','LI' /
+C
+ DATA PDCT / 'LC','ST','OR','LE','GN','AE','CE','ME','MO','SV' /
+C
+C
+C VARIABLES IN MAPCM7:
+C
+C ULOW, UROW, VBOW, AND VTOW DEFINE THE FRACTION OF THE PLOTTER FRAME
+C TO BE OCCUPIED BY THE MAP - THEY MAY BE THOUGHT OF AS THE FIRST FOUR
+C ARGUMENTS OF THE SET CALL OR, IN THE GKS SCHEME, AS THE VIEWPORT.
+C THEY ARE COMPUTED BY MAPINT. ULOW AND UROW ARE GIVEN DEFAULT VALUES
+C TO PREVENT CODE IN MAPSTI AND MAPSTR FROM BLOWING UP WHEN PLTR IS
+C SET PRIOR TO THE FIRST CALL TO MAPINT.
+C
+ DATA ULOW,UROW / 0.,1. /
+C
+C
+C VARIABLES IN MAPCM8:
+C
+C P, Q, AND R ARE SET BY MAPTRN EACH TIME IT MAPS (RLAT,RLON) TO (U,V).
+C Q IS ALWAYS EQUAL TO V, BUT P IS NOT ALWAYS EQUAL TO U. INSTEAD, IT
+C IS A VALUE OF U FROM AN INTERMEDIATE STEP IN THE PROJECTION PROCESS.
+C FOR THE LAMBERT CONFORMAL CONIC, P IS THE DISTANCE, IN LONGITUDE, FROM
+C THE CENTRAL MERIDIAN. FOR THE CYLINDRICAL PROJECTIONS, P IS A VALUE
+C OF U PRIOR TO MULTIPLICATION BY A FUNCTION OF V SHRINKING THE MAP
+C TOWARD A VERTICAL BISECTOR. THEY ARE ALL USED BY MAPIT, WHILE DRAWING
+C LINES FROM POINT TO POINT, TO DETECT "CROSS-OVER" (A JUMP FROM ONE
+C SIDE OF THE MAP TO THE OTHER, CAUSED BY THE PROJECTION'S HAVING SLIT
+C THE GLOBE ALONG SOME HALF OF A GREAT CIRCLE AND LAID IT OPEN WITH THE
+C TWO SIDES OF THE SLIT AT OPPOSITE ENDS OF THE MAP).
+C
+C
+C VARIABLES IN MAPCMA:
+C
+C DPLT IS THE MIMIMUM VECTOR LENGTH; MAPIT REQUIRES TWO POINTS TO BE AT
+C LEAST DPLT PLOTTER UNITS APART BEFORE IT WILL JOIN THEM WITH A VECTOR.
+C DDTS IS THE DESIRED DISTANCE IN PLOTTER UNITS BETWEEN DOTS IN A DOTTED
+C OUTLINE. THESE VALUES ARE RELATIVE TO THE "PLOTTER RESOLUTION" PLTR;
+C DPLT/PLTR IS A FRACTION OF THE PLOTTER FRAME. DSCA IS THE RATIO OF
+C THE LENGTH OF A VECTOR, MEASURED IN PLOTTER UNITS, TO THE LENGTH OF
+C THE SAME VECTOR, MEASURED IN THE U/V PLANE. THUS, GIVEN A VECTOR OF
+C LENGTH D IN THE U/V PLANE, D*DSCA IS ITS LENGTH IN PLOTTER UNITS.
+C DPSQ AND DSSQ ARE THE SQUARES OF DPLT AND DSCA, RESPECTIVELY. DBTD
+C IS THE DISTANCE, IN THE U/V PLANE, BETWEEN TWO DOTS DDTS PLOTTER
+C UNITS APART. DPLT AND DDTS HAVE THE VALUES GIVEN BELOW AND ARE NOT
+C RESET BY THE CODE; DSCA, DPSQ, DSSQ, AND DBTD ARE COMPUTED BY MAPINT.
+C DSCA IS GIVEN A DEFAULT VALUE ONLY TO KEEP THE ROUTINES MAPSTI AND
+C MAPSTR FROM BLOWING UP WHEN DDTS IS SET PRIOR TO ANY CALL TO MAPINT.
+C DATL IS USED BY MAPIT AND MAPVP TO KEEP TRACK OF WHERE THE NEXT POINT
+C ALONG A CURVE SHOULD GO.
+C
+ DATA DPLT,DDTS,DSCA / 4.,12.,1. /
+C
+C
+C VARIABLES IN MAPCMB:
+C
+C IIER IS AN ERROR FLAG, SET WHENEVER AN ERROR OCCURS DURING A CALL TO
+C ONE OF THE EZMAP ROUTINES. ITS VALUE MAY BE RETRIEVED BY A CALL TO
+C MAPGTI.
+C
+ DATA IIER / 0 /
+C
+C
+C VARIABLES IN MAPCMP:
+C
+C NPTB IS THE NUMBER OF POINTS WHOSE COORDINATES HAVE BEEN COLLECTED IN
+C THE ARRAYS XPTB AND YPTB FOR EVENTUAL OUTPUT BY A CALL TO POINTS.
+C
+ DATA NPTB / 0 /
+C
+C VARIABLES IN MAPNTS:
+C
+C THE ARRAY INTS SPECIFIES INTENSITIES TO BE USED FOR THE PERIMETER, FOR
+C THE GRID, FOR LABELLING, FOR LIMBS, FOR THE CONTINENTAL OUTLINES, FOR
+C THE U.S. STATE OUTLINES, AND FOR INTERNATIONAL POLITICAL OUTLINES.
+C SEE THE ROUTINE MAPCHI. EACH ELEMENT IS AN INTEGER IN THE RANGE 0 TO
+C 255, INCLUSIVE.
+C
+ DATA INTS / 240,150,210,240,240,180,210 /
+C
+C
+C VARIABLES IN MAPSAT:
+C
+C THE ABSOLUTE VALUE OF SALT, IF GREATER THAN 1, SERVES AS A FLAG THAT
+C A SATELLITE-VIEW PROJECTION IS TO BE USED IN PLACE OF AN ORTHOGRAPHIC
+C PROJECTION; ITS VALUE IS THE DISTANCE OF THE SATELLITE FROM THE CENTER
+C OF THE EARTH, IN UNITS OF EARTH RADII. IN THIS CASE, SSMO IS THE
+C SQUARE OF SALT MINUS 1 AND SRSS IS THE SQUARE ROOT OF SSMO. IF ALFA
+C IS ZERO, THE PROJECTION SHOWS THE VIEW SEEN BY A SATELLITE LOOKING
+C STRAIGHT AT THE CENTER OF THE EARTH; CALL THIS THE BASIC SATELLITE
+C VIEW. IF ALFA IS NON-ZERO, IT AND BETA ARE ANGLES, IN DEGREES,
+C DETERMINING WHERE THE LINE OF SIGHT OF THE PROJECTION IS. IF E IS
+C AT THE CENTER OF THE EARTH, S IS AT THE SATELLITE, AND P IS A POINT
+C ALONG THE LINE OF SIGHT, THEN ALFA MEASURES THE ANGLE ESP. IF O IS
+C THE POINT AT THE ORIGIN OF THE BASIC SATELLITE VIEW AND P IS THE
+C PROJECTION OF THE LINE OF SIGHT, THEN BETA MEASURES THE ANGULAR
+C DISTANCE FROM THE POSITIVE U AXIS TO THE LINE OP, POSITIVE IF
+C MEASURED COUNTER-CLOCKWISE. SALF, CALF, SBET, AND CBET ARE SINES
+C AND COSINES OF ALFA AND BETA. THE SIGN OF SALT INDICATES WHETHER A
+C NORMAL PROJECTION (POSITIVE) OR AN EXTENDED PROJECTION (NEGATIVE)
+C IS TO BE USED. THE LATTER MAKES IT EASIER TO OVERLAY CONREC OUTPUT
+C ON ONE OF THESE PROJECTIONS, BY PROJECTING POINTS OUT OF SIGHT AROUND
+C THE LIMB TO POINT JUST OUTSIDE THE LIMB ON THE PROJECTED VIEW.
+C
+ DATA SALT,ALFA,BETA,SALF,CALF,SBET,CBET / 0.,0.,0.,0.,1.,0.,1. /
+C
+C REVISION HISTORY:
+C
+C FEBRUARY, 1982 ADDED MODIFICATIONS SO THAT POINTS GENERATED BY THE
+C DRAWING OF DOTTED CONTINENTAL OUTLINES ARE BUFFERED
+C AND THEN PUT OUT WITH A CALL TO POINTS, INSTEAD OF
+C BEING PUT OUT ONE AT A TIME WITH A CALL TO POINT AS
+C BEFORE. THE LATTER RESULTED IN HUGE OVERHEAD IN THE
+C PLOT FILE. ROUTINES MAPLOT AND MAPVP WERE MODIFIED,
+C AND A NEW COMMON BLOCK MAPCMP WAS ADDED.
+C
+C AUGUST, 1984 CONVERTED TO FORTRAN-77 AND GKS. DELETED THE EZMAP
+C ENTRY POINT.
+C
+C MARCH, 1985 COMPLETELY OVERHAULED THE CODE TO SIMPLIFY IT AND TO
+C REMOVE KNOWN ERRORS. UPDATED THE OUTLINE DATASET
+C TO REMOVE ERRORS AND TO INCLUDE INTERNATIONAL
+C BOUNDARIES. IMPLEMENTED MANY CONTROLS AIMED AT
+C OBVIATING THE NEED FOR SOURCE MODIFICATION BY USERS.
+C
+C MAY, 1985 ADDED CODE TO PREVENT PROBLEMS WHEN A SMOOTHING
+C VERSION OF THE DASH PACKAGE IS LOADED. ADDED CODE
+C IN MAPIT TO GET AROUND A CFT COMPILER PROBLEM.
+C ADDED CODE TO DO EXTENDED ORTHOGRAPHIC AND SATELLITE-
+C VIEW PROJECTIONS.
+C
+C JULY, 1985 FIXED A MISSING DECLARATION IN THE SUBROUTINE MAPSET
+C AND LIMITED "CALL PLOTIT (0,0,0)" TO THE GKS VERSION.
+C
+C AUGUST, 1985 FIXED A PROBLEM IN MAPGRD WHICH CAUSED MERIDIANS ON
+C MERCATOR MAPS WITH VERTICAL LIMITS TOO CLOSE TO THE
+C POLES TO BE DRAWN IMPROPERLY. (THE TEST FOR CROSS-
+C OVER, IN MAPIT, WAS BEING PASSED BECAUSE THE POINTS
+C USED TO DRAW THE MERIDIANS WERE TOO FAR APART.) ALSO
+C FIXED AN ERROR IN THE GKS CODE IN MAPCHI AND BEEFED
+C UP THE IMPLEMENTORS' INSTRUCTIONS TO SAY WHAT TO DO
+C WITH THAT ROUTINE WHEN COLOR IS AVAILABLE.
+C
+C NOVEMBER, 1985 ADDED CODE TO PREVENT GKS CLIPPING FROM DESTROYING
+C PART OF THE PERIMETER.
+C
+ END