ESMF_ConfigGetString Subroutine

private subroutine ESMF_ConfigGetString(config, value, keywordEnforcer, label, default, eolFlag, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_Config), intent(inout) :: config
character(len=*), intent(out) :: value
type(ESMF_KeywordEnforcer), optional :: keywordEnforcer
character(len=*), intent(in), optional :: label
character(len=*), intent(in), optional :: default
logical, intent(out), optional :: eolFlag
integer, intent(out), optional :: rc

Calls

proc~~esmf_configgetstring~~CallsGraph proc~esmf_configgetstring ESMF_ConfigGetString proc~esmf_configfindlabel ESMF_ConfigFindLabel proc~esmf_configgetstring->proc~esmf_configfindlabel proc~esmf_configgetinit ESMF_ConfigGetInit proc~esmf_configgetstring->proc~esmf_configgetinit proc~esmf_imerr ESMF_IMErr proc~esmf_configgetstring->proc~esmf_imerr proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_configgetstring->proc~esmf_logfounderror proc~index_ index_ proc~esmf_configgetstring->proc~index_ proc~esmf_configfindlabel->proc~esmf_configgetinit proc~esmf_configfindlabel->proc~esmf_imerr proc~esmf_configfindlabel->proc~esmf_logfounderror proc~esmf_configfindlabel->proc~index_ proc~esmf_imerr->proc~esmf_logfounderror proc~esmf_initcheckdeep ESMF_InitCheckDeep proc~esmf_imerr->proc~esmf_initcheckdeep esmf_breakpoint esmf_breakpoint proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite proc~esmf_logfounderror->proc~esmf_logwrite c_esmc_loggeterrormsg c_esmc_loggeterrormsg proc~esmf_logrc2msg->c_esmc_loggeterrormsg c_esmc_vmwtime c_esmc_vmwtime proc~esmf_logwrite->c_esmc_vmwtime proc~esmf_logclose ESMF_LogClose proc~esmf_logwrite->proc~esmf_logclose proc~esmf_logflush ESMF_LogFlush proc~esmf_logwrite->proc~esmf_logflush proc~esmf_logopenfile ESMF_LogOpenFile proc~esmf_logwrite->proc~esmf_logopenfile proc~esmf_utiliounitflush ESMF_UtilIOUnitFlush proc~esmf_logwrite->proc~esmf_utiliounitflush proc~esmf_utilstring2array ESMF_UtilString2Array proc~esmf_logwrite->proc~esmf_utilstring2array proc~esmf_logclose->proc~esmf_logflush proc~esmf_logflush->proc~esmf_utiliounitflush proc~esmf_utilarray2string ESMF_UtilArray2String proc~esmf_logflush->proc~esmf_utilarray2string proc~esmf_logopenfile->proc~esmf_utiliounitflush proc~esmf_utiliounitget ESMF_UtilIOUnitGet proc~esmf_logopenfile->proc~esmf_utiliounitget

Called by

proc~~esmf_configgetstring~~CalledByGraph proc~esmf_configgetstring ESMF_ConfigGetString interface~esmf_configgetattribute ESMF_ConfigGetAttribute interface~esmf_configgetattribute->proc~esmf_configgetstring proc~esmf_configgetchar ESMF_ConfigGetChar proc~esmf_configgetchar->proc~esmf_configgetstring proc~esmf_configgetfloatr4 ESMF_ConfigGetFloatR4 proc~esmf_configgetfloatr4->proc~esmf_configgetstring proc~esmf_configgetfloatr8 ESMF_ConfigGetFloatR8 proc~esmf_configgetfloatr8->proc~esmf_configgetstring proc~esmf_configgetinti4 ESMF_ConfigGetIntI4 proc~esmf_configgetinti4->proc~esmf_configgetstring proc~esmf_configgetinti8 ESMF_ConfigGetIntI8 proc~esmf_configgetinti8->proc~esmf_configgetstring proc~esmf_configgetlen ESMF_ConfigGetLen proc~esmf_configgetlen->proc~esmf_configgetstring proc~esmf_configgetlogical ESMF_ConfigGetLogical proc~esmf_configgetlogical->proc~esmf_configgetstring proc~esmf_configgetstrings ESMF_ConfigGetStrings proc~esmf_configgetstrings->proc~esmf_configgetstring proc~esmf_configsetstring ESMF_ConfigSetString proc~esmf_configsetstring->proc~esmf_configgetstring

Source Code

      subroutine ESMF_ConfigGetString(config, value, &
        keywordEnforcer, label, default, eolFlag, rc)

! !ARGUMENTS:
      type(ESMF_Config), intent(inout)       :: config
      character(len=*), intent(out)          :: value
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
      character(len=*), intent(in), optional :: label
      character(len=*), intent(in), optional :: default
      logical, intent(out), optional         :: eolFlag
      integer, intent(out), optional         :: rc
!
! !DESCRIPTION: Gets a sequence of characters. It will be
!               terminated by the first white space.
!
!   The arguments are:
!   \begin{description}
!   \item [config]
!     Already created {\tt ESMF\_Config} object.
!   \item [value]
!     Returned value. 
!   \item [{[label]}]
!     Identifing label. 
!   \item [{[default]}]
!     Default value if {\tt label} is not found in {\tt config} object. 
!   \item [{[eolFlag]}]
!     Returns {\tt .true.} when end of line is encountered.
!   \item [{[rc]}]
!     Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
!   \end{description}

!EOPI ------------------------------------------------------------------
      character(len=1) :: ch
      integer :: ib, ie, nb, localrc
      logical :: found

      ! Initialize return code; assume routine not implemented
      if (present(rc)) rc = ESMF_RC_NOT_IMPL

      localrc = ESMF_SUCCESS
      !check variables
      ESMF_INIT_CHECK_DEEP(ESMF_ConfigGetInit,config,rc)


! Default setting
      if( present( default ) ) then 
        if (len (value) < len (default)) then
          if (ESMF_LogFoundError (ESMF_RC_ARG_BAD,  &
            msg='default length too long for value string',  &
            ESMF_CONTEXT, rcToReturn=rc)) return
        end if
        value = default
      else
        value = BLK
      endif

      if (present (eolFlag)) then
        eolFlag = .false.
      end if

! Processing
      if(present( label )) then
         call ESMF_ConfigFindLabel( config, label=label,  &
             isPresent=found, rc=localrc)
         if (ESMF_LogFoundError (localrc, ESMF_ERR_PASSTHRU,  &
             ESMF_CONTEXT, rcToReturn=rc)) return

         if (.not. found) then
            if (present(default)) then
               localrc = ESMF_SUCCESS
            else
               localrc = ESMF_RC_NOT_FOUND
            end if
            if ( present (rc )) then
              rc = localrc
            endif
            return
         endif
      endif

      ib = config%cptr%next_item
      ie = config%cptr%next_line-2
      if ( config%cptr%eolflag ) then
         ! reached end of line
         config%cptr%next_item = config%cptr%next_line-1
         if ( present ( default )) then
           value = default
         else
           value = BLK
         endif
         if (present (eolFlag)) then
           eolFlag = .true.
           localrc = ESMF_SUCCESS
         else
           localrc = ESMF_RC_NOT_FOUND
         end if
         if ( present (rc )) then
           rc = localrc
         endif
         return
      else
        nb = verify(config%cptr%buffer(ib:ie),BLK//TAB)
        if (nb .eq. 0) then
          ! remainder of line is blank
          value = BLK
          config%cptr%eolflag = .true.
          config%cptr%next_item = config%cptr%next_line-1
          if (present (eolFlag)) then
            eolFlag = .true.
          end if
          localrc = ESMF_SUCCESS
        else
          ! shift to first non blank
          ib = ib + nb - 1
          ch = config%cptr%buffer(ib:ib)
          if ( ch .eq. '"' .or. ch .eq. "'" ) then
            ! quotation separated list
            ib = ib + 1
            ie = index_(config%cptr%buffer(ib:ie),ch)
            if (ie .eq. 0) then
              ! missing end quotation
              ib = ib - 1
              ie = config%cptr%next_line - 2
              config%cptr%eolflag = .true.
              config%cptr%next_item = config%cptr%next_line-1
            else
              ie = ib + ie - 2
              config%cptr%next_item = ie + 2
              nb = verify(config%cptr%buffer(config%cptr%next_item:config%cptr%next_line-2),BLK//TAB)
              if (nb .eq. 0) config%cptr%eolflag = .true.
            end if
          else
            ! blank separated list
            ie = index_(config%cptr%buffer(ib:ie),BLK)
            if (ie .eq. 0) then
              ! last item
              ie = config%cptr%next_line - 2
              config%cptr%eolflag = .true.
              config%cptr%next_item = config%cptr%next_line-1
            else
              ie = ib + ie - 2
              config%cptr%next_item = ie + 2
              nb = verify(config%cptr%buffer(config%cptr%next_item:config%cptr%next_line-2),BLK//TAB)
              if (nb .eq. 0) config%cptr%eolflag = .true.
            end if
          end if
          value = config%cptr%buffer(ib:ie)
          ! error if value truncated
          if (len (value) >= ie-ib+1) then
            localrc = ESMF_SUCCESS
          else
            localrc = ESMF_RC_ARG_SIZE
          end if
        end if
      end if

      if ( present (rc)) then
        rc = localrc
      endif

    end subroutine ESMF_ConfigGetString