414 character(len = *),
intent(in):: relative
415 character(len = *),
intent(in):: base
416 character(len = STRING):: result
417 integer,
parameter:: file = 1, var = 2, attr = 3, ior = 4
418 character(len = STRING):: rel(file:ior), bas(file:ior)
419 character(3),
parameter:: pathdelim =
"/:" // achar(94)
420 integer:: idir_r, idir_b
422 call beginsub(
'urlresolve',
'rel=<%c> base=<%c>', c1=relative, c2=base)
423 call urlsplit(trim(relative), file=rel(file), var=rel(var), &
424 & attr=rel(attr), iorange=rel(ior))
425 call dbgmessage(
'rel -> file=<%c> var=<%c> attr=<%c>', &
426 & c1=trim(rel(file)), c2=trim(rel(var)), &
427 & c3=(trim(rel(attr)) //
'> ior=<' // trim(rel(ior))))
428 call urlsplit(base, file=bas(file), var=bas(var), &
429 & attr=bas(attr), iorange=bas(ior))
430 call dbgmessage(
'base -> file=<%s> var=<%s> attr=<%s> ior=<%s>', &
431 & c1=trim(bas(file)), c2=trim(bas(var)), &
432 & c3=(trim(bas(attr)) //
'> ior=<' // trim(bas(ior))))
434 if (rel(file) ==
"")
then 435 rel(file) = bas(file)
436 if (rel(var) ==
"") &
437 & rel(var) = bas(var)
438 result =
urlmerge(file=rel(file), var=rel(var), &
439 & attr=rel(attr), iorange=rel(ior))
440 call endsub(
'urlresolve',
'1 result=%c', c1=trim(result))
444 if (
strhead(rel(file),
"file:") &
445 & .OR.
strhead(rel(file),
"http:") &
446 & .OR.
strhead(rel(file),
"ftp:") &
447 & .OR.
strhead(rel(file),
"news:") &
448 & .OR.
strhead(rel(file),
"www") &
449 & .OR.
strhead(rel(file),
"/") &
450 & .OR.
strhead(rel(file), achar(94)) &
451 & .OR. rel(file)(2:2) ==
":" &
454 call endsub(
'urlresolve',
'2 result=%c', c1=trim(result))
458 idir_b = scan(bas(file), pathdelim, back=.true.)
459 if (idir_b == 0)
then 463 call endsub(
'urlresolve',
'3 result=%c', c1=trim(result))
467 idir_r = scan(rel(file), pathdelim, back=.true.)
468 if (idir_r == 0)
then 472 result = base(1: idir_b) // relative(idir_r: )
473 call endsub(
'urlresolve',
'4 result=%c', c1=trim(result))
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
Handling character types.
Provides kind type parameter values.
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
integer, parameter, public string
Character length for string.