32 CHARACTER(LEN=ARGSIZEMAX),
POINTER ::
myargs(:) => null()
40 CHARACTER(LEN=32) :: key, type
41 CHARACTER(LEN=1024) :: use
42 LOGICAL(KIND=JPLM) :: group = .false.
53 CHARACTER(LEN=*),
INTENT(IN) :: USE
65 CHARACTER(LEN=ARGSIZEMAX) FUNCTION get_env_opt( KEY )
66 CHARACTER(LEN=*),
INTENT(IN) :: KEY
67 CHARACTER(LEN=ARGSIZEMAX) :: KEY_ENV, VAL_ENV
68 INTEGER(KIND=JPIM) :: I, N
73 n = len(
trim(key_env))
93 INTEGER(KIND=JPIM),
INTENT(IN) :: I
94 CHARACTER(LEN=*),
INTENT(OUT) :: S
96 IF( i .LE. ubound(
myargs, 1 ) )
THEN 110 CHARACTER*(*),
INTENT(IN) :: KEY,
TYPE, USE
111 LOGICAL(KIND=JPLM),
INTENT(IN) :: MND
114 CHARACTER(LEN=ARGSIZEMAX) :: STR
115 INTEGER :: NN, N, N1, I1, I2, K
116 CHARACTER(LEN=ARGSIZEMAX),
POINTER :: MYARGS1(:)
120 IF(
PRESENT(
USE ) ) write( *,
'("> ",A)' )
trim(use)
121 IF(
PRESENT( mnd ) )
THEN 122 IF( mnd )
WRITE( *, * )
"[MANDATORY]" 124 WRITE( *, * )
"* OPTION: [",
TYPE,
"]",
" ", TRIM(key)
128 IF( trim(str) .NE.
"" )
THEN 129 IF(
TYPE .EQ.
'FLAG' ) then
140 ALLOCATE( myargs1(0:n1) )
141 myargs1(0:n) =
myargs(0:n)
149 IF(
TYPE .NE.
'FLAG' ) then
154 IF( i1 .GT. len(str))
EXIT loop_i1
155 IF( str(i1:i1) .NE.
' ' )
EXIT 160 IF( i2 .GT. len(str))
EXIT 161 IF( str(i2:i2) .EQ.
' ' )
EXIT 165 myargs(n+1+k) = str(i1:i2-1)
177 IF( .NOT.
ASSOCIATED(
opt_seen ) )
THEN 185 INTEGER(KIND=JPIM) :: N
186 TYPE(
xrd_opt),
POINTER :: OPT_SEEN1(:)
193 DEALLOCATE( opt_seen1 )
198 SUBROUTINE addopt( KEY, TYPE, USE )
199 CHARACTER*(*),
INTENT(IN) :: KEY,
TYPE, USE
211 IF(
PRESENT(
USE ) ) then
219 SUBROUTINE initoptions( CDMESSAGE, KOPTMIN, KOPTMAX, CDARGS )
220 CHARACTER(LEN=*),
OPTIONAL,
INTENT (IN) :: CDMESSAGE
221 INTEGER (KIND=JPIM),
OPTIONAL,
INTENT (IN) :: KOPTMIN, KOPTMAX
222 CHARACTER (LEN=*),
OPTIONAL,
INTENT (IN) :: CDARGS (0:)
223 INTEGER(KIND=JPIM) :: N, I
224 INTEGER(KIND=JPIM) :: IOPTMIN, IOPTMAX
227 IF (
PRESENT (cdargs))
THEN 228 n = ubound(cdargs, 1)
235 IF (
PRESENT (koptmin)) ioptmin = koptmin
236 IF (
PRESENT (koptmax)) ioptmax = koptmax
242 IF (
PRESENT (cdargs))
THEN 243 myargs(i) = cdargs(ioptmin+i)
249 IF(
PRESENT( cdmessage ) )
THEN 257 IF( trim( str ) .EQ.
'--help' )
THEN 260 ELSE IF( trim( str ) .EQ.
'--shell' )
THEN 275 INTEGER(KIND=JPIM) :: I, N, IS, NS, KS
276 CHARACTER(LEN=ARGSIZEMAX) :: OPT, PROG
277 LOGICAL(KIND=JPLM) :: PB
278 CHARACTER(LEN=10) :: FMT
279 CHARACTER(LEN=110) :: BUF
291 WRITE( *,
'(" ")', advance =
'NO' )
293 WRITE( *,
'(" > ")', advance =
'NO' )
295 WRITE( fmt,
'("(A",I2,")")' ) ks
296 WRITE( *, fmt ) trim(
message_opt(1+(is-1)*96:is*96))
304 IF( trim(
opt_seen(i)%USE) .NE.
"" ) &
305 WRITE( *, * )
'* '//trim(
opt_seen(i)%USE)
311 WRITE( buf,
'(A32," = ",A15)' ) &
315 IF( trim(
opt_seen(i)%USE) .NE.
'' )
THEN 318 ks = len(trim(
opt_seen(i)%USE(1+(is-1)*48:is*48)))
321 buf = trim(buf)//
" : "//trim(
opt_seen(i)%USE(1+(is-1)*48:is*48))
326 //trim(
opt_seen(i)%USE(1+(is-1)*48:is*48))
328 WRITE( *,
'(A120)' ) buf
332 WRITE( *,
'(A120)' ) buf
344 IF( opt(1:2) .EQ.
'--' )
THEN 345 print *,
'INVALID OPTION: ', trim(opt)
355 print *,
'GARBAGE IN OPTIONS:`', trim(opt),
"'" 365 OPEN( 77, file = trim(prog)//
'.sh', form =
'FORMATTED' )
366 WRITE( 77,
'("#!/bin/sh")' )
368 WRITE( 77,
'(A)', advance =
'NO' ) trim(prog)
371 IF(
myargs(i) .EQ.
'--shell' ) cycle
372 IF(
myargs(i)(1:2) .EQ.
'--' )
THEN 373 WRITE( 77,
'(" \")' )
374 WRITE( 77,
'(" ")', advance =
'NO' )
376 WRITE( 77,
'(" ",A)', advance =
'NO' ) trim(
myargs(i))
390 CHARACTER(LEN=*),
INTENT(IN) :: KEY
391 CHARACTER(LEN=*),
OPTIONAL,
INTENT(IN) :: USE
392 LOGICAL(KIND=JPLM),
OPTIONAL,
INTENT(IN) :: MND
394 CHARACTER(LEN=ARGSIZEMAX) :: PROG
396 IF(
PRESENT( mnd ) )
THEN 399 WRITE( *,
'("PROGRAM: ",(A))' ) trim( prog )
400 WRITE( *,
'("ERROR: OPTION `",(A),"'' IS MANDATORY")' ) trim( key )
401 IF(
PRESENT(
USE ) ) write( *,
'(" ",(A)," : ",(A))' ) trim( key ), trim( use )
409 CHARACTER(LEN=*),
INTENT(IN) :: KEY
410 INTEGER(KIND=JPIM),
INTENT(OUT) :: I, N
411 CHARACTER(LEN=ARGSIZEMAX) :: ARG
416 IF( trim( arg ) .EQ. trim( key ) )
RETURN 422 INTEGER(KIND=JPIM),
INTENT(IN) :: I
423 INTEGER(KIND=JPIM),
INTENT(OUT) :: J
425 CHARACTER(LEN=ARGSIZEMAX) :: ARG
426 INTEGER(KIND=JPIM) :: N
431 IF( arg(1:2) .EQ.
'--' )
EXIT 438 CHARACTER(LEN=*),
INTENT(IN) :: KEY
439 CHARACTER(LEN=*),
INTENT(INOUT) :: VAL
440 LOGICAL(KIND=JPLM),
INTENT(IN),
OPTIONAL :: MND
441 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: USE
443 INTEGER(KIND=JPIM) :: I, N
444 CHARACTER(LEN=ARGSIZEMAX) :: ARG
445 LOGICAL(KIND=JPLM) :: LSHELL1
446 LOGICAL(KIND=JPLM) :: FOUND
451 CALL addopt( key,
'STRING',
USE )
460 found = ( 0 .LT. i ) .AND. ( i .LT. n )
471 IF( found ) val = arg
483 CHARACTER(LEN=*),
INTENT(IN) :: KEY
484 INTEGER(KIND=JPIM),
INTENT(INOUT) :: VAL
485 LOGICAL(KIND=JPLM),
OPTIONAL,
INTENT(IN) :: MND
486 CHARACTER(LEN=*),
OPTIONAL,
INTENT(IN) :: USE
488 CHARACTER(LEN=ARGSIZEMAX) :: SVAL
490 LOGICAL(KIND=JPLM) :: LSHELL1
495 CALL addopt( key,
'INTEGER',
USE )
504 IF( trim( sval ) .NE.
"" )
THEN 505 READ( sval, *, iostat = err ) val
506 IF( err .NE. 0 )
THEN 507 print *,
"ERROR WHILE PARSING OPTION "//trim(key)
518 CHARACTER(LEN=*),
INTENT(IN) :: KEY
519 REAL(KIND=JPRB),
INTENT(INOUT) :: VAL
520 LOGICAL(KIND=JPLM),
OPTIONAL,
INTENT(IN) :: MND
521 CHARACTER(LEN=*),
OPTIONAL,
INTENT(IN) :: USE
523 CHARACTER(LEN=ARGSIZEMAX) :: SVAL
525 LOGICAL(KIND=JPLM) :: LSHELL1
530 CALL addopt( key,
'REAL',
USE )
539 IF( trim( sval ) .NE.
"" )
THEN 540 READ( sval, *, iostat = err ) val
541 IF( err .NE. 0 )
THEN 542 print *,
"ERROR WHILE PARSING OPTION "//trim(key)
552 CHARACTER(LEN=*),
INTENT(OUT) :: VAL(:)
553 CHARACTER(LEN=*),
INTENT(IN) :: SVAL
555 INTEGER(KIND=JPIM) :: I, J, K, N
563 IF( i .GT. n )
EXIT do1
564 IF( sval(i:i) .NE.
' ' )
EXIT 570 IF( sval(j:j) .EQ.
' ' )
EXIT 583 CHARACTER(LEN=*),
POINTER :: VAL(:)
584 CHARACTER(LEN=*),
INTENT(IN) :: SVAL
586 INTEGER(KIND=JPIM) :: N
596 CHARACTER(LEN=*),
POINTER :: VAL(:)
597 CHARACTER(LEN=*),
INTENT(IN) :: SVAL
599 INTEGER(KIND=JPIM) :: K, N
600 INTEGER(KIND=JPIM) :: IOERR
601 CHARACTER(LEN=4096) :: BUFFER
603 OPEN( 77, file = trim(sval), form =
'FORMATTED', status =
'OLD', iostat = ioerr )
604 IF( ioerr .NE. 0 )
THEN 605 print
'( "COULD NOT OPEN ",A, " FOR READING")', trim(sval)
610 READ( 77,
'(A)', end = 500 ) buffer
622 READ( 77,
'(A)', end = 600 ) buffer
637 CHARACTER(LEN=*),
INTENT(IN) :: KEY
638 CHARACTER(LEN=*),
POINTER :: VAL(:)
639 LOGICAL(KIND=JPLM),
OPTIONAL,
INTENT(IN) :: MND
640 CHARACTER(LEN=*),
OPTIONAL,
INTENT(IN) :: USE
642 INTEGER(KIND=JPIM) :: I, J, K, N
643 CHARACTER(LEN=ARGSIZEMAX) :: ARG
644 CHARACTER(LEN=ARGSIZEMAX) :: SVAL
645 LOGICAL(KIND=JPLM) :: LSHELL1
646 LOGICAL(KIND=JPLM) :: FOUND
651 CALL addopt( key,
'STRING-LIST',
USE )
666 ALLOCATE( val( j - i - 1 ) )
675 IF ((i+1.EQ.j-1) .AND. (arg(1:7).EQ.
'file://'))
THEN 702 CHARACTER(LEN=*),
INTENT(IN) :: KEY
703 INTEGER(KIND=JPIM),
POINTER :: VAL(:)
704 LOGICAL(KIND=JPLM),
OPTIONAL,
INTENT(IN) :: MND
705 CHARACTER(LEN=*),
OPTIONAL,
INTENT(IN) :: USE
707 CHARACTER(LEN=ARGSIZEMAX),
POINTER :: SVAL(:)
708 INTEGER(KIND=JPIM) :: I, N
710 LOGICAL(KIND=JPLM) :: LSHELL1
717 CALL addopt( key,
'INTEGER-LIST',
USE )
726 IF( .NOT.
ASSOCIATED( sval ) )
GOTO 999
731 READ( sval( i ), *, iostat = err ) val( i )
732 IF( err .NE. 0 )
THEN 733 print *,
"ERROR WHILE PARSING OPTION "//trim(key)
747 CHARACTER(LEN=*),
INTENT(IN) :: KEY
748 REAL(KIND=JPRB),
POINTER :: VAL(:)
749 LOGICAL(KIND=JPLM),
OPTIONAL,
INTENT(IN) :: MND
750 CHARACTER(LEN=*),
OPTIONAL,
INTENT(IN) :: USE
752 CHARACTER(LEN=ARGSIZEMAX),
POINTER :: SVAL(:)
753 INTEGER(KIND=JPIM) :: I, N
755 LOGICAL(KIND=JPLM) :: LSHELL1
762 CALL addopt( key,
'REAL-LIST',
USE )
771 IF( .NOT.
ASSOCIATED( sval ) )
GOTO 999
776 READ( sval( i ), *, iostat = err ) val( i )
777 IF( err .NE. 0 )
THEN 778 print *,
"ERROR WHILE PARSING OPTION "//trim(key)
792 CHARACTER(LEN=*),
INTENT(IN) :: KEY
793 LOGICAL(KIND=JPLM),
INTENT(INOUT) :: VAL
794 CHARACTER(LEN=*),
OPTIONAL,
INTENT(IN) :: USE
796 LOGICAL(KIND=JPLM) :: LSHELL1
797 LOGICAL(KIND=JPLM) :: FOUND
798 CHARACTER(LEN=ARGSIZEMAX) :: SVAL
799 INTEGER(KIND=JPIM) :: I, N
806 CALL addopt( key,
'FLAG',
USE )
815 IF( found .AND.
ASSOCIATED(
check_args ) )
THEN subroutine readslfromstring(VAL, SVAL)
integer(kind=jpim) function xrd_countwords(S)
static const char * trim(const char *name, int *n)
subroutine getoptioni(KEY, VAL, MND, USE)
character(len=argsizemax) function get_env_opt(KEY)
type(xrd_opt), dimension(:), pointer opt_seen
subroutine, public addgroup(USE)
logical(kind=jplm) function xrd_isalpha(C)
subroutine getoptions(KEY, VAL, MND, USE)
character(len=1056) message_opt
subroutine getoptionr(KEY, VAL, MND, USE)
integer(kind=jpim) function xrd_iargc()
logical(kind=jplm) lshell
subroutine init_opt_seen()
subroutine findargindex(KEY, I, N)
subroutine findnextargindex(I, J)
subroutine getoptionsl(KEY, VAL, MND, USE)
subroutine, public checkoptions()
subroutine xrd_exit(STATUS)
subroutine readaslfromstring(VAL, SVAL)
character *256 function xrd_basename(PATH)
integer, parameter argsizemax
subroutine, public initoptions(CDMESSAGE, KOPTMIN, KOPTMAX, CDARGS)
subroutine getoptionrl(KEY, VAL, MND, USE)
logical(kind=jplm) function xrd_isdigit(C)
subroutine addopt(KEY, TYPE, USE)
subroutine addopt_shell(KEY, TYPE, MND, USE)
subroutine grow_opt_seen()
integer function myiargc()
subroutine mygetarg(I, S)
integer(kind=jpim) nopt_seen
subroutine check_mnd(KEY, MND, USE)
character(len=argsizemax), dimension(:), pointer myargs
subroutine readslfromfile(VAL, SVAL)
subroutine xrd_getarg(KEY, VAL)
logical(kind=jplm), dimension(:), pointer check_args
subroutine getoptionil(KEY, VAL, MND, USE)
subroutine getoptionb(KEY, VAL, USE)
subroutine xrd_getenv(KEY, VAL)