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)
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ