7 INTEGER,
PARAMETER ::
kr4 = selected_real_kind(6, 37)
8 INTEGER,
PARAMETER ::
kr8 = selected_real_kind(15, 307)
12 INTEGER,
PARAMETER ::
ki4 = selected_int_kind(9)
13 INTEGER,
PARAMETER ::
ki8 = selected_int_kind(18)
70 SUBROUTINE parse(str, delims, args, nargs)
77 CHARACTER(len=*) :: str, delims
78 CHARACTER(len=LEN_TRIM(str)) :: strsav
79 CHARACTER(len=*),
DIMENSION(:) :: args
88 lenstr = len_trim(str)
89 IF (lenstr == 0)
RETURN
93 IF (len_trim(str) == 0)
EXIT
95 CALL split(str, delims, args(nargs))
109 CHARACTER(len=*) :: str
110 CHARACTER(len=1) :: ch
111 CHARACTER(len=LEN_TRIM(str)) :: outstr
114 lenstr = len_trim(str)
141 str = adjustl(outstr)
151 CHARACTER(len=*) :: str
152 CHARACTER(len=1) :: ch
153 CHARACTER(len=LEN_TRIM(str)) :: outstr
156 lenstr = len_trim(str)
172 str = adjustl(outstr)
182 CHARACTER(len=*) :: str
187 ipos = scan(str,
'Ee')
188 IF (.NOT.
is_digit(str(ilen:ilen)) .AND. ipos /= 0)
THEN
192 READ (str, *, iostat=ios) rnum
202 CHARACTER(len=*) :: str
207 IF (abs(rnumd) > huge(rnum))
THEN
211 IF (abs(rnumd) < tiny(rnum)) rnum = 0.0_kr4
212 rnum = real(rnumd, kr4)
222 CHARACTER(len=*) :: str
227 IF (abs(rnum) > huge(real(inum, kr8)))
THEN
231 inum = nint(rnum,
ki8)
241 CHARACTER(len=*) :: str
246 IF (abs(rnum) > huge(inum))
THEN
250 inum = nint(rnum,
ki4)
263 CHARACTER(len=*) :: str
267 IF (nabs >= lenstr)
THEN
268 str = repeat(
' ', lenstr)
271 IF (n < 0) str = str(nabs + 1:)//repeat(
' ', nabs)
272 IF (n > 0) str = repeat(
' ', nabs)//str(:lenstr - nabs)
286 CHARACTER(len=*) :: str, strins
287 CHARACTER(len=LEN(str)) :: tempstr
289 lenstrins = len_trim(strins)
292 tempstr(1:lenstrins) = strins(1:lenstrins)
306 CHARACTER(len=*) :: str, substr
308 lensubstr = len_trim(substr)
309 ipos = index(str, substr)
310 IF (ipos == 0)
RETURN
312 str = str(lensubstr + 1:)
314 str = str(:ipos - 1)//str(ipos + lensubstr:)
327 CHARACTER(len=*) :: str, substr
329 lensubstr = len_trim(substr)
331 ipos = index(str, substr)
334 str = str(lensubstr + 1:)
336 str = str(:ipos - 1)//str(ipos + lensubstr:)
349 CHARACTER(len=*) :: str
350 CHARACTER(len=LEN_TRIM(str)) :: ucstr
353 ioffset = iachar(
'A') - iachar(
'a')
357 iav = iachar(str(i:i))
358 IF (iquote == 0 .AND. (iav == 34 .OR. iav == 39))
THEN
363 IF (iquote == 1 .AND. iav == iqc)
THEN
367 IF (iquote == 1) cycle
368 IF (iav >= iachar(
'a') .AND. iav <= iachar(
'z'))
THEN
369 ucstr(i:i) = achar(iav + ioffset)
371 ucstr(i:i) = str(i:i)
384 CHARACTER(len=*) :: str
385 CHARACTER(len=LEN_TRIM(str)) :: lcstr
388 ioffset = iachar(
'A') - iachar(
'a')
392 iav = iachar(str(i:i))
393 IF (iquote == 0 .AND. (iav == 34 .OR. iav == 39))
THEN
398 IF (iquote == 1 .AND. iav == iqc)
THEN
402 IF (iquote == 1) cycle
403 IF (iav >= iachar(
'A') .AND. iav <= iachar(
'Z'))
THEN
404 lcstr(i:i) = achar(iav - ioffset)
406 lcstr(i:i) = str(i:i)
420 CHARACTER(len=*) :: line
423 READ (nunitr,
'(a)', iostat=ios) line
426 ipos = index(line,
'!')
428 IF (ipos /= 0) line = line(:ipos - 1)
429 IF (len_trim(line) /= 0)
EXIT
442 CHARACTER(len=*) :: str
443 CHARACTER :: delim1, delim2, ch
445 lenstr = len_trim(str)
446 delim1 = str(ipos:ipos)
449 idelim2 = iachar(delim1) + 1
454 idelim2 = iachar(delim1) - 1
459 idelim2 = iachar(delim1) + 2
464 idelim2 = iachar(delim1) - 2
469 WRITE (*, *) delim1,
' is not a valid delimiter'
472 IF (istart < 1 .OR. istart > lenstr)
THEN
473 WRITE (*, *) delim1,
' has no matching delimiter'
476 delim2 = achar(idelim2)
479 DO i = istart, iend, inc
481 IF (ch /= delim1 .AND. ch /= delim2) cycle
482 IF (ch == delim1) isum = isum + 1
483 IF (ch == delim2) isum = isum - 1
487 WRITE (*, *) delim1,
' has no matching delimiter'
503 CHARACTER(len=*) :: str, fmt
504 CHARACTER(len=80) :: formt
506 formt =
'('//trim(fmt)//
')'
507 WRITE (str, formt) rnum
519 CHARACTER(len=*) :: str, fmt
520 CHARACTER(len=80) :: formt
522 formt =
'('//trim(fmt)//
')'
523 WRITE (str, formt) rnum
535 CHARACTER(len=*) :: str, fmt
536 CHARACTER(len=80) :: formt
538 formt =
'('//trim(fmt)//
')'
539 WRITE (str, formt) inum
551 CHARACTER(len=*) :: str, fmt
552 CHARACTER(len=80) :: formt
554 formt =
'('//trim(fmt)//
')'
555 WRITE (str, formt) inum
567 CHARACTER(len=*) :: str
569 CHARACTER(len=10) :: exp
571 ipos = scan(str,
'eE')
574 str = str(1:ipos - 1)
582 IF (ipos > 0) str = trim(str)//trim(exp)
588 IF (ipos > 0) str = trim(str)//trim(exp)
600 CHARACTER(len=*) :: namestr, fmt
601 CHARACTER(len=32) :: tempstr
605 WRITE (unit, *) trim(namestr)//
' = '//trim(tempstr)
617 CHARACTER(len=*) :: namestr, fmt
618 CHARACTER(len=32) :: tempstr
622 WRITE (unit, *) trim(namestr)//
' = '//trim(tempstr)
632 INTEGER(ki8) :: ivalue
634 CHARACTER(len=*) :: namestr, fmt
635 CHARACTER(len=32) :: tempstr
638 WRITE (unit, *) trim(namestr)//
' = '//trim(tempstr)
648 INTEGER(ki4) :: ivalue
650 CHARACTER(len=*) :: namestr, fmt
651 CHARACTER(len=32) :: tempstr
654 WRITE (unit, *) trim(namestr)//
' = '//trim(tempstr)
668 CASE (
'A':
'Z',
'a':
'z')
698 SUBROUTINE split(str, delims, before, sep)
708 CHARACTER(len=*) :: str, delims, before
709 CHARACTER,
OPTIONAL :: sep
716 lenstr = len_trim(str)
717 IF (lenstr == 0)
RETURN
735 ipos = index(delims, ch)
746 cha = str(i + 1:i + 1)
747 iposa = index(delims, cha)
758 IF (i >= lenstr) str =
''
771 CHARACTER(len=*) :: str
772 CHARACTER(len=1) :: ch
773 CHARACTER(len=LEN_TRIM(str)) :: outstr
776 lenstr = len_trim(str)
797 str = adjustl(outstr)
subroutine insertstr(str, strins, loc)
subroutine split(str, delims, before, sep)
subroutine, private write_di(inum, str, fmt)
subroutine, private write_si(inum, str, fmt)
subroutine, private write_dr(rnum, str, fmt)
subroutine removebksl(str)
subroutine, private writeq_di(unit, namestr, ivalue, fmt)
subroutine, private value_dr(str, rnum, ios)
subroutine shiftstr(str, n)
logical function is_letter(ch)
subroutine delall(str, substr)
subroutine parse(str, delims, args, nargs)
subroutine readline(nunitr, line, ios)
subroutine, private writeq_sr(unit, namestr, value, fmt)
logical function is_digit(ch)
subroutine, private writeq_dr(unit, namestr, value, fmt)
character(len=len_trim(str)) function lowercase(str)
character(len=len_trim(str)) function uppercase(str)
subroutine, private value_si(str, inum, ios)
subroutine match(str, ipos, imatch)
subroutine, private write_sr(rnum, str, fmt)
subroutine, private value_di(str, inum, ios)
subroutine, private writeq_si(unit, namestr, ivalue, fmt)
subroutine delsubstr(str, substr)
subroutine, private value_sr(str, rnum, ios)