| get_subcommand(3m_cli2) | get_subcommand(3m_cli2) | 
NAME¶
get_subcommand(3f) - [ARGUMENTS:M_CLI2] special-case routine for handling subcommands on a command line (LICENSE:PD)
SYNOPSIS¶
function get_subcommand()
character(len=:),allocatable :: get_subcommand
DESCRIPTION¶
In the special case when creating a program with subcommands it is assumed the first word on the command line is the subcommand. A routine is required to handle response file processing, therefore this routine (optionally processing response files) returns that first word as the subcommand name.
It should not be used by programs not building a more elaborate command with subcommands.
RETURNS¶
- NAME
- name of subcommand
EXAMPLE¶
Sample program:
program demo_get_subcommand
!x! SUBCOMMANDS
!x! For a command with subcommands like git(1)
!x! you can make separate namelists for each subcommand.
!x! You can call this program which has two subcommands (run, test),
!x! like this:
!x! demo_get_subcommand --help
!x! demo_get_subcommand run -x -y -z --title -l -L
!x! demo_get_subcommand test --title -l -L --testname
!x! demo_get_subcommand run --help
implicit none
!x! DEFINE VALUES TO USE AS ARGUMENTS WITH INITIAL VALUES
real :: x=-999.0,y=-999.0,z=-999.0
character(len=80) :: title="not set"
logical :: l=.false.
logical :: l_=.false.
character(len=80) :: testname="not set"
character(len=20) :: name
call parse(name) !x! DEFINE AND PARSE COMMAND LINE
!x! ALL DONE CRACKING THE COMMAND LINE.
!x! USE THE VALUES IN YOUR PROGRAM.
write(*,*)'command was ',name
write(*,*)'x,y,z .... ',x,y,z
write(*,*)'title .... ',title
write(*,*)'l,l_ ..... ',l,l_
write(*,*)'testname . ',testname
contains
subroutine parse(name)
!x! PUT EVERYTHING TO DO WITH COMMAND PARSING HERE FOR CLARITY
use M_CLI2, only : set_args, get_args, get_args_fixed_length
use M_CLI2, only : get_subcommand, set_mode
character(len=*) :: name ! the subcommand name
character(len=:),allocatable :: help_text(:), version_text(:)
call set_mode('response_file')
! define version text
version_text=[character(len=80) :: &
'@(#)PROGRAM: demo_get_subcommand >', &
'@(#)DESCRIPTION: My demo program >', &
'@(#)VERSION: 1.0 20200715 >', &
'@(#)AUTHOR: me, myself, and I>', &
'@(#)LICENSE: Public Domain >', &
'' ]
! general help for "demo_get_subcommand --help"
help_text=[character(len=80) :: &
' allowed subcommands are ', &
' * run -l -L --title -x -y -z ', &
' * test -l -L --title ', &
'' ]
! find the subcommand name by looking for first word on command
! not starting with dash
name = get_subcommand()
select case(name)
case('run')
help_text=[character(len=80) :: &
' ', &
' Help for subcommand "run" ', &
' ', &
'' ]
call set_args( &
& '-x 1 -y 2 -z 3 --title "my title" -l F -L F',&
& help_text,version_text)
call get_args('x',x)
call get_args('y',y)
call get_args('z',z)
call get_args_fixed_length('title',title)
call get_args('l',l)
call get_args('L',l_)
case('test')
help_text=[character(len=80) :: &
' ', &
' Help for subcommand "test" ', &
' ', &
'' ]
call set_args(&
& '--title "my title" -l F -L F --testname "Test"',&
& help_text,version_text)
call get_args_fixed_length('title',title)
call get_args('l',l)
call get_args('L',l_)
call get_args_fixed_length('testname',testname)
case default
! process help and version
call set_args(' ',help_text,version_text)
write(*,'(*(a))')'unknown or missing subcommand [',trim(name),']'
write(*,'(a)')[character(len=80) :: &
' allowed subcommands are ', &
' * run -l -L -title -x -y -z ', &
' * test -l -L -title ', &
'' ]
stop
end select
end subroutine parse
end program demo_get_subcommand
AUTHOR¶
John S. Urban, 2019
LICENSE¶
Public Domain
| February 10, 2023 |