#

Manual Reference Pages - get_subcommand (3m_cli2)

### NAME

> get_subcommand(3f) - [ARGUMENTS:M_CLI2] special-case routine for handling subcommands on a command line (LICENSE:PD)

### CONTENTS

> Synopsis
> Description
> Returns
> Example
> Author
> License

### 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

Nemo Release 3.1 | get_subcommand (3m_cli2) | February 10, 2023

Generated by manServer 1.08 from e848d8e7-c008-4eef-904c-048f41ac7171 using man macros.