set_mode Subroutine

public impure elemental subroutine set_mode(key, mode)

NAME

set_mode(3f) - [ARGUMENTS:M_CLI2] turn on optional modes
(LICENSE:PD)

SYNOPSIS

subroutine set_mode(key,mode)

 character(len=*),intent(in) :: key
 logical,intent(in),optional :: mode

DESCRIPTION

 Allow optional behaviors.

OPTIONS

KEY    name of option

The following values are allowed:

o  response_file - enable use of response file

o  ignorecase - ignore case in long key names. So the user
   does not have to remember if the option is --IgnoreCase
   or --ignorecase or --ignoreCase

o  underdash  - treat dash in keyword as an underscore.
   So the user should not have to remember if the option is
   --ignore_case or --ignore-case.

o  strict - allow Boolean keys to be bundled, but requires
   a single dash prefix be used for short key names and
   long names must be prefixed with two dashes.

o  lastonly  - when multiple keywords occur keep the rightmost
   value specified instead of appending the values together.

MODE   set to .true. to activate the optional mode.
       Set to .false. to deactivate the mode.
       It is .true. by default.

EXAMPLE

Sample program:

program demo_set_mode
use M_CLI2,  only : set_args, lget, set_mode
implicit none
character(len=*),parameter :: all='(*(g0))'
   !
   ! enable use of response files
   call set_mode('response_file')
   !
   ! Any dash in a keyword is treated as an underscore
   call set_mode('underdash')
   !
   ! The case of long keywords are ignored.
   ! Values and short names remain case-sensitive
   call set_mode('ignorecase')
   !
   ! short single-character boolean keys may be bundled
   ! but it is required that a single dash is used for
   ! short keys and a double dash for long keywords.
   call set_mode('strict')
   !
   call set_args(' --switch_X:X F --switch-Y:Y F --ox:O F -t F -x F -o F')
   !
   print all,'--switch_X or -X ... ',lget('switch_X')
   print all,'--switch_Y or -Y ... ',lget('switch_Y')
   print all,'--ox or -O       ... ',lget('ox')
   print all,'-o               ... ',lget('o')
   print all,'-x               ... ',lget('x')
   print all,'-t               ... ',lget('t')
end program demo_set_mode

AUTHOR

  John S. Urban, 2019

LICENSE

  Public Domain

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: key
logical, intent(in), optional :: mode

Contents

Source Code


Source Code

elemental impure subroutine set_mode(key,mode)
character(len=*),intent(in) :: key
logical,intent(in),optional :: mode
logical :: local_mode

   if(present(mode))then
      local_mode=mode
   else
      local_mode=.true.
   endif

   select case(lower(key))
   case('response_file','response file'); CLI_RESPONSE_FILE=local_mode
   case('debug');                         G_DEBUG=local_mode
   case('ignorecase');                    G_IGNORECASE=local_mode
   case('underdash');                     G_UNDERDASH=local_mode
   case('noseparator');                   G_NOSEPARATOR=local_mode
   case('strict');                        G_STRICT=local_mode
   case('lastonly');                      G_APPEND=.not.local_mode
   case default
      call journal('*set_mode* unknown key name ',key)
   end select

   if(G_DEBUG)write(*,gen)'<DEBUG>EXPAND_RESPONSE:END'

end subroutine set_mode