CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C                                                                      C
C                            Copyright (C)  1995                       C
C                 University Corporation for Atmospheric Research      C
C                            All Rights Reserved                       C
C                                                                      C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C      File:            mp04f.f
C
C      Author:          David Brown (converted to Fortran by Mary Haley)
C                       National Center for Atmospheric Research
C                       PO 3000, Boulder, Colorado
C
C      Date:            Tue Jan 24 10:49:54 MST 1995
C
C     Description:      Illustrates use of AnnoManager objects.    
C
      external NhlFAppClass
      external NhlFNcgmWorkstationClass
      external NhlFXWorkstationClass
      external NhlFPSWorkstationClass
      external NhlFMapPlotClass
      external NhlFtextitemClass
      external nhlfannomanagerclass
C
C Define enough frames for a fairly smooth animation.
C
      parameter(FRAME_COUNT=36,NDIM=25)

      character*50 name(NDIM)
      real lat(NDIM),lon(NDIM)
      integer num_am_ids
      data num_am_ids/NDIM/
      integer am_ids(NDIM), text_ids(NDIM)
      data am_ids/25*-1/

      integer ret
      data ret/-1/
      integer appid,wid,mapid,rlist,grlist
      integer i
      integer NCGM, X11, PS
      data name/'Los Angeles','Seattle','Toronto','New York','Miami',
     1 'Mexico City','London','Jakarta','Moscow','New Delhi',
     1 'Rio de Janeiro','Cairo','Buenos Aires','Beijing','Tokyo',
     1 'Lagos','Nairobi','Sydney','Bogota','Lima','Cape Town',
     1 'Calcutta','Shanghai','Bombay','Denver'/

      data lat/34.0,47.6,43.7,40.67,25.75,19.417,51.32,-6.13,55.75,
     1 28.37,-22.883,30.05, -34.67,39.917,35.67,6.45,-1.283,-33.9167,
     1 4.633,-12.1,-33.933,22.583,31.217,18.93,39.716/

      data lon/-118.28,-122.33,-79.4167,-73.83,-80.25,-99.167,-0.1,
     1 106.75,37.7,77.217,-43.283,31.25,-58.4167,116.4167,139.67,3.28,
     1 36.833,151.167,-74.083,-77.05,18.4667,88.35,121.4167,72.85,
     1 -105.017/
C
C Default is to create a metafile.
C
      NCGM=1
      X11=0
      PS=0
C
C Initialize the high level utility library
C
      call NhlFInitialize
C
C Create an application context. Set the app dir to the current
C directory so the application looks for a resource file in the
C working directory. The resource file sets most of the Contour
C resources that remain fixed throughout the life of the Contour
C object.
C
      call NhlFRLCreate(rlist,'SETRL')
      call NhlFRLClear(rlist)
      call NhlFRLSetstring(rlist,'appUsrDir','./',ierr)
      call NhlFRLSetstring(rlist,'appDefaultParent','True',ierr)
      call NhlFCreate(appid,'mp04',NhlFAppClass,0,rlist,ierr)
      if( NCGM.eq.1 ) then
C
C Create a meta file workstation
C
         call NhlFRLClear(rlist)
         call NhlFRLSetstring(rlist,'wkMetaName','./mp04f.ncgm',ierr)
         call NhlFCreate(wid,'mp04Work',NhlFNcgmWorkstationClass,
     1        0,rlist,ierr)
      else if (X11.eq.1) then
C
C Create an X workstation
C
         call NhlFRLClear(rlist)
         call NhlFRLSetstring(rlist,'wkPause','True',ierr)
         call NhlFCreate(wid,'mp04Work',NhlFXWorkstationClass,0,
     1        rlist,ierr)
      else if (PS.eq.1) then
C
C Create a PS object.
C
         call NhlFRLClear(rlist)
         call NhlFRLSetstring(rlist,'wkPSFileName','./mp04f.ps',ierr)
         call NhlFCreate(wid,'mp04Work',NhlFPSWorkstationClass,
     1        0,rlist,ierr)
      endif
C
C AnnoManager objects allow the PlotManager to manipulate any View class
C object as an annotation a uniform fashion. They allow
C the user to set the View object's size and location relative to
C the viewport of a Plot. They may be located relative to one
C of the viewport sides, or, as in this example, aligned with the 
C plot's data space (amTrackData is set True in the resource file).
C
C Create a TextItem for each place name to be included on the map.
C Collect the object ids into an array.
C
      do 10 i = 1,NDIM
         call NhlFRLClear(rlist)
         call NhlFRLSetstring(rlist,'txString',name(i),ierr)
         call NhlFCreate(text_ids(i),name(i),NhlFtextitemClass,wid,
     1    rlist,ierr)
 10   continue
C
C Since the MapPlot object is by default a PlotManager, you can
C make each TextItem View object into an annotation simply by setting
C the pmAnnoViews resource with the array of TextItem ids. 
C
      call NhlFRLClear(rlist)
      call NhlFRLSetintegerarray(rlist,'pmAnnoViews',text_ids,NDIM,ierr)
      call NhlFCreate(mapid,'Map0',NhlFMapPlotClass,wid,rlist,ierr)
C
C Retrieve the ids of the AnnoManager objects created by the PlotManager
C and then set their location in data coordinate space. The AnnoManager
C objects are arranged in the same order as the TextItems in the
C pmAnnoViews resource.
C
      call NhlFRLCreate(grlist,'GETRL')
      call NhlFRLClear(grlist)
      call NhlFRLGetintegerarray(grlist,'pmAnnoManagers',am_ids,
     +                           num_am_ids,ierr)
      call NhlFGetValues(mapid,grlist,ierr)

      do 20 i=1,num_am_ids
         call NhlFRLClear(rlist)
         call NhlFRLSetfloat(rlist,'amDataXF',lon(i),ierr)
         call NhlFRLSetfloat(rlist,'amDataYF',lat(i),ierr)
         call NhlFSetValues(am_ids(i),rlist,ierr)
 20   continue
C
C Create FRAME_COUNT plots, varying the center longitude by an equal
C amount each time.
C
      do 30 i = FRAME_COUNT,1,-1
         call NhlFRLClear(rlist)
         call NhlFRLSetfloat(rlist,'mpCenterLonF',i*360.0/FRAME_COUNT,
     1    ierr)
         call NhlFSetValues(mapid,rlist,ierr)
         call NhlFDraw(mapid,ierr)
         call NhlFFrame(wid,ierr)
 30   continue
C
C Destroy the objects created, close the HLU library and exit.
C
      do 40 i=1,NDIM
         call NhlFDestroy(text_ids(i),ierr)
 40   continue
      call NhlFDestroy(mapid,ierr)
      call NhlFDestroy(wid,ierr)
      call NhlFDestroy(appid,ierr)
      call NhlFClose
      stop
      end
