demo17 Program

Uses

@(#) using the unnamed parameters as filenames For example, this should list the files in the current directory

demo17 *

Also demonstrates setting –help and –version text.

demo17 --help
demo17 --version
demo17 --usage

Define and parse command line Get argument values All done cracking the command line use the values in your program. The optional unnamed values on the command line are accumulated in the character array “UNNAMED” which was renamed to “FILENAMES” on the use statement


Contents

Source Code


Variables

Type Attributes Name Initial
type(character(len=*)), parameter :: all = '(*(g0))'
type(character(len=:)), allocatable :: fnames(:)
type(integer) :: i
type(integer) :: indx

argument values to set

type(integer) :: j
type(integer) :: k
type(logical) :: l
type(logical) :: m
type(logical) :: n
type(character(len=:)), allocatable :: title
type(real) :: x
type(real) :: y
type(real) :: z

Subroutines

subroutine parse()

Put everything to do with command parsing here

Read more…

Arguments

None

Source Code

program demo17
!!  @(#) using the unnamed parameters as filenames
!!  For example, this should list the files in the current directory
!!
!!     demo17 *
!!
!!  Also demonstrates setting --help and --version text.
!!
!!     demo17 --help
!!     demo17 --version
!!     demo17 --usage
!!
use M_CLI2,  only : get_args
use M_CLI2,  only : sget, lget, iget, rget, dget, cget
use M_CLI2,  only : sgets, lgets, igets, rgets, dgets, cgets
use M_CLI2,  only : filenames=>unnamed
implicit none
type(character(len=*)),parameter    :: all='(*(g0))'
type(integer)                       :: indx

!! argument values to set
type(integer)                       :: i,j,k
type(real)                          :: x,y,z
type(character(len=:)),allocatable  :: title
type(logical)                       :: l,m,n
type(character(len=:)),allocatable  :: fnames(:)

   print all,'demo17: using the unnamed parameters as filenames'
   print all,'example: demo17 -x 100  * '

   call parse() !! Define and parse command line
   !! Get argument values 
   call get_args('x',x,'y',y,'z',z)
   call get_args('i',i,'j',j,'k',k)
   call get_args('l',l,'m',m,'n',n)
   title=sget('title')

   !! All done cracking the command line use the values in your program.
   print all,'x=',x ,' y=',y ,' z=',z
   print all,'i=',i ,' j=',j ,' k=',k
   print all,'l=',l ,' m=',m ,' n=',n
   print all,'title=',title

   !! The optional unnamed values on the command line are
   !! accumulated in the character array "UNNAMED" which was 
   !! renamed to "FILENAMES" on the use statement
   if(allocated(filenames))then
      if(size(filenames) > 0)then
         print all,'files:'
         print '(i6.6,1x,3a)',(indx,'[',filenames(indx),']',indx=1,size(filenames))
      endif
   endif

   ! alternate method, additionally can be used when desired result is numeric
   ! by using igets(3f), rgets(3f), ... instead of sgets(3f).

   fnames=sgets() ! also gets all the unnamed arguments
   if(size(fnames) > 0)then
      print all,'files:'
      print '(i6.6,1x,3a)',(indx,'[',fnames(indx),']',indx=1,size(fnames))
   endif

contains
subroutine parse()
!! Put everything to do with command parsing here 
!!
use M_CLI2,  only : set_args, set_mode
call set_mode([character(len=20) :: 'strict','ignorecase'])
! a single call to set_args can define the options and their defaults, set help
! text and version information, and crack command line.
call set_args(&
!! DEFINE COMMAND OPTIONS AND DEFAULT VALUES
' &
 -i 1 -j 2 -k 3     &
 -l F -m F -n F     &
 -x 1 -y 2 -z 3     &
 --title "my title" &
!! ## HELP TEXT ##
', [character(len=80) :: &
!12345678901234567890123456789012345678901234567890123456789012345678901234567890
'NAME                                                                            ', &
'   myprogram(1) - make all things possible                                      ', &
'SYNOPSIS                                                                        ', &
'   myprogram [-i NNN] [-j NNN] [-k NNN] [-l] [-m] [-n] ]                        ', &
'             [-x NNN.mm] [-y NNN.mm] [-z NNN.mm] [FILENAMES]                    ', &
'DESCRIPTION                                                                     ', &
'   myprogram(1) makes all things possible given stuff.                          ', &
'OPTIONS                                                                         ', &
'   -i,-j,-k   some integer values                                               ', &
'   -l,-m,-n   some logical values                                               ', &
'   -x,-y,-z   some real values                                                  ', &
'   --title    a string argument                                                 ', &
'   FILENAMES  any additional strings                                            ', &
'EXAMPLE                                                                         ', &
'   Typical usage:                                                               ', &
'                                                                                ', &
'     demo17 *.*                                                                 ', &
'                                                                                ', &
'                                                                                ', &
!! ## VERSION TEXT (with optional @(#) prefix for what(1) command) ##
'' ], [character(len=80) :: &
'@(#)PROGRAM:     demo17           >', &
'@(#)DESCRIPTION: My demo program  >', &
'@(#)VERSION:     1.0 20200115     >', &
'@(#)AUTHOR:      me, myself, and I>', &
'@(#)LICENSE:     Public Domain    >', &
'' ])

end subroutine parse

end program demo17