44   integer, 
intent(in)             :: dimord
    45   integer, 
intent(in) , 
optional  :: start, count, stride
    46   logical, 
intent(out), 
optional  :: err
    48   integer:: iolo, iohi, uilo, uihi, lowerlim, upperlim, dimlo, dimhi
    53     & 
'var%d-dim%d start=%d count=%d stride=%d', &
    54     & i=(/var%mapid, dimord, start, count, stride/))
    57     print *, 
"dimord =", dimord, 
" < 1"    61     print *, 
"stride == 0"    66     print *, 
"ndims =", ndims, 
" <= 0"    69   if (dimord > ndims) 
then    70     print *, 
"dimrod =", dimord, 
" > ndims =", ndims
    73   if (
allocated(map)) 
then    79   lowerlim = min(start, start + (count - 1) * stride)
    80   upperlim = max(start, start + (count - 1) * stride)
    81   call dimrange(var, dimord, dimlo, dimhi)
    82   if (lowerlim < dimlo) 
then    83     print *, 
"lowerlim = ", lowerlim, 
" < dimlo =", dimlo
    86   if (upperlim > dimhi) 
then    87     print *, 
"upperlim = ", upperlim, 
" < dimhi =", dimhi
    91   call dbgmessage(
'@ lowerlim=%d upperlim=%d', i=(/lowerlim, upperlim/))
    94   uilo = map(dimord)%start
    95   iolo = 1 + map(dimord)%step * (uilo - 1) + map(dimord)%offset
    96   uihi = map(dimord)%start + (map(dimord)%count - 1) * map(dimord)%stride
    97   iohi = 1 + map(dimord)%step * (uihi - 1) + map(dimord)%offset
    99   call dbgmessage(
'@ userindex=%d %d, internal=%d %d', &
   100     & i=(/uilo, uihi, iolo, iohi/))
   101   call dbgmessage(
'@ DbgMessage offset %d -> %d step=%d', &
   102     & i=(/map(dimord)%offset, (start-1), stride/))
   105   map(dimord)%offset = start - 1
   106   map(dimord)%allcount = count
   107   map(dimord)%step = stride
   110   uilo = 1 + (iolo - 1 - map(dimord)%offset) / map(dimord)%step
   111   uihi = 1 + (iohi - 1 - map(dimord)%offset) / map(dimord)%step
   112   call dbgmessage(
'@ userindex=%d %d', i=(/uilo, uihi/))
   115   uilo = max(1, min(map(dimord)%allcount, uilo))
   116   uihi = max(1, min(map(dimord)%allcount, uihi))
   118   call dbgmessage(
'@ userindex=%d %d orig_stride=%d', &
   119     & i=(/uilo, uihi, map(dimord)%stride/))
   122   map(dimord)%stride = max(1, abs(map(dimord)%stride))
   123   map(dimord)%start = min(uilo, uihi)
   124   map(dimord)%count = 1 + abs(uihi - uilo) / map(dimord)%stride
   127   if (stat /= 0) 
call dbgmessage(
"map_set fail")
   131   call endsub(
'GTVarLimit_iiii')
   179   character(len = *), 
intent(in)   :: string
   180   logical, 
intent(out), 
optional   :: err
   183   call beginsub(
'GTVarLimit', 
'var=%d lim=<%c>', i=(/var%mapid/), c1=trim(string))
   192     if (is > len(string)) 
exit   195   if (
present(err)) err = .false.
   205     character(len = *), 
intent(in):: string
   206     integer:: equal, dimord
   207     integer:: start, count, stride, strhead
   210     if (string == 
'') 
return   213     if (len(string) < 4) 
strhead = len(string)
   221         start = 
stoi(string(equal+1: ), default=1)
   224       call limit(var, dimord, start, 1, 1, err)
   225       call del_dim(var, dimord, myerr)
   233     if (equal == 0) 
return   235     if (dimord <= 0) 
return   237     call region_spec(dimord, string(equal+1: ), start, count, stride)
   238     call limit(var, dimord, start, count, stride, err)
   244   subroutine region_spec(dimord, string, start, count, stride)
   249     integer, 
intent(in):: dimord
   250     integer, 
intent(out):: start, count, stride
   251     character(len = *), 
intent(in):: string
   252     integer:: colon, prev_colon, finish, dimlo, dimhi
   253     character(len = token):: val(3)
   262       val(1) = string(1: colon - 1)
   266         val(2) = string(prev_colon + 1: colon - 1)
   267         val(3) = string(colon + 1: )
   269         val(2) = string(prev_colon + 1: )
   273     if (val(3) == 
"") val(3) = 
"^1"   276       start = 
stoi(val(1)(2: ))
   277     else if (val(1) == val(2)) 
then   282     if (val(2) == val(1)) 
then   285       finish = 
stoi(val(2)(2: ))
   290     call dimrange(var, dimord, dimlo, dimhi)
   291     start = min(max(dimlo, start), dimhi)
   292     finish = min(max(dimlo, finish), dimhi)
   293     count = abs(finish - start) + 1
   296       stride = 
stoi(val(3)(2: ))
   298       stride = 
stoi(val(3))
   300     stride = sign(stride, finish - start)
   321     integer, 
intent(in):: dimord
   322     character(len = *), 
intent(in):: value
   324     real, 
pointer:: axisval(:) => null()
   329     call beginsub(
'value_to_index', 
'var=%d dimord=%d value=%c', &
   330       & i=(/var%mapid, dimord/), c1=trim(
value))
   332     call open(axisvar, var, dimord, count_compact=.true.)
   334     call get(axisvar, axisval)
   336     if (.not. 
associated(axisval)) 
then   339     else if (
size(axisval) < 2) 
then   349     do, i = 1, 
size(axisval) - 1
   350       if (axisval(i + 1) == axisval(i)) 
then   351         result = 
real(i) + 0.5
   354       result = i + (val - axisval(i)) / (axisval(i + 1) - axisval(i))
   355       if (result <= (i + 1)) 
goto 900
   359     call endsub(
'value_to_index', 
'(%c) = %r', &
   360       & c1=trim(
value), r=(/result/))
 
character, parameter, public gt_comma
 
subroutine gtvar_dump(var)
 
subroutine gtvarlimit_iiii(var, dimord, start, count, stride, err)
 
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ 
 
character, parameter, public gt_equal
 
subroutine limit_one(string)
 
subroutine map_set(var, map, stat)
 
subroutine, public storeerror(number, where, err, cause_c, cause_i)
 
integer, parameter, public dc_noerr
 
subroutine gtvarlimit(var, string, err)
 
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)
 
character, parameter, public gt_circumflex
 
character, parameter, public gt_colon
 
subroutine region_spec(dimord, string, start, count, stride)
 
subroutine, public map_lookup(var, vid, map, ndims)
 
real function value_to_index(dimord, value)
 
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)