set_mode(3f) - [ARGUMENTS:M_CLI2] turn on optional modes
(LICENSE:PD)
subroutine set_mode(key,mode)
character(len=*),intent(in) :: key
logical,intent(in),optional :: mode
Allow optional behaviors.
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.
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
John S. Urban, 2019
Public Domain
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | key | |||
logical, | intent(in), | optional | :: | mode |
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