get_subcommand(3m_cli2)
π get_subcommand π
okay bestie, welcome to the get_subcommand(3m_cli2) page β yes that's the manual name, section 3m_cli2, she's iconic, she's niche, she's exactly what you need if you're out here building a program with subcommands π
β¨ NAME β¨
get_subcommand(3f) β [ARGUMENTS:M_CLI2] special-case routine for handling subcommands on a command line (LICENSE:PD)
like literally the whole point is subcommands, no cap π
β¨ SYNOPSIS β¨
function get_subcommand()
character(len=:),allocatable :: get_subcommand
β¨ DESCRIPTION β¨
okay so here's the tea π in the special case when you're creating a program with subcommands, it is assumed that the first word on the command line is the subcommand. and a routine is required to handle response file processing β that's literally why this routine exists. it (optionally processing response files) returns that first word as the subcommand name. slay.
π¨ bestie listen β it should not be used by programs not building a more elaborate command with subcommands. it's giving "special occasion only", not "everyday wear". periodt.
β¨ 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
like LOOK at her go π the select case(name) is the main character moment fr fr, one case('run'), one case('test'), and a case default that just reads you for filth and tells you your subcommand is unknown or missing π
β¨ AUTHOR β¨
John S. Urban, 2019 β king behavior honestly π
β¨ LICENSE β¨
Public Domain π«Ά go wild, no strings, she's free
and that's the whole page bestie!! π¦ this little manual page is dated February 10, 2023, from the get_subcommand(3m_cli2) source, so if you cite her, cite her right π mwah, go build something cute with subcommands, iykyk β¨πΈ
π¦ where this page comes from
- ubuntu resolute: libfortran-cli2-dev 3.2.0-6 Β· UNLICENSE
- ubuntu stonking: libfortran-cli2-dev 3.2.0-13 Β· UNLICENSE
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms