13 subroutine gtvarslice(var, dimord, start, count, stride)
    35   integer, 
intent(in):: dimord
    36   integer, 
intent(in), 
optional:: start
    37   integer, 
intent(in), 
optional:: count
    38   integer, 
intent(in), 
optional:: stride
    40   integer:: vid, maxindex, maxcount, nd, stat
    41   logical:: growable_dimension
    43   call beginsub(
'GTVarSlice', 
'var%%mapid=%d dimord=%d', &
    44     & i=(/var%mapid, dimord/))
    54     growable_dimension = .false.
    61   if (dimord <= 0 .or. dimord > 
size(map)) 
goto 998
    63   call dbgmessage(
'map(dimord): originally start=%d count=%d stride=%d', &
    64     & i=(/map(dimord)%start, map(dimord)%count, map(dimord)%stride/))
    65   if (.not. growable_dimension) 
then    66     maxindex = map(dimord)%allcount
    70   if (
present(start)) 
then    72       map(dimord)%start = max(1, maxindex + 1 + start)
    73     else if (growable_dimension) 
then    74       map(dimord)%start = max(1, start)
    76       map(dimord)%start = min(maxindex, max(1, start))
    78     call dbgmessage(
'start=%d (%d specified)', i=(/map(dimord)%start, start/))
    81   if (
present(stride)) 
then    82     map(dimord)%stride = stride
    83     if (stride == 0) map(dimord)%stride = 1
    85       & i=(/map(dimord)%stride, stride/))
    88   if (
present(count)) 
then    89     map(dimord)%count = abs(count)
    90     if (count == 0) map(dimord)%count = 1
    92       & i=(/map(dimord)%count, count/))
    95   if (.not. growable_dimension) 
then    96     maxcount = 1 + (maxindex - map(dimord)%start) / map(dimord)%stride
    97     map(dimord)%count = max(1, min(maxcount, map(dimord)%count))
    98     call dbgmessage(
'count=%d ', i=(/map(dimord)%count/))
   101   if (stat /= 0) 
goto 998
   110   call endsub(
'GTVarSlice', 
'err skipped')
   160   character(len = *), 
intent(in)    :: string
   161   logical,            
intent(out)   :: err
   164   call beginsub(
'GTVarSliceC', 
'var=%d lim=<%c>', &
   165     & i=(/var%mapid/), c1=trim(string))
   174     if (is > len(string)) 
exit   178   call endsub(
'GTVarSliceC')
   186     character(len = *), 
intent(in):: string
   187     integer:: equal, dimord
   188     integer:: start, count, stride
   191     if (string == 
'') 
return   193     if (
strieq(string(1:4), 
"IGN:")) 
then   199         start = 
stoi(string(equal+1: ), default=1)
   202       call slice(var, dimord, start, 1, 1)
   203       call del_dim(var, dimord, myerr)
   210     if (equal == 0) 
return   212     if (dimord <= 0) 
return   214     call region_spec(dimord, string(equal+1: ), start, count, stride)
   215     call slice(var, dimord, start, count, stride)
   221   subroutine region_spec(dimord, string, start, count, stride)
   226     integer, 
intent(in):: dimord
   227     integer, 
intent(out):: start, count, stride
   228     character(len = *), 
intent(in):: string
   229     integer:: colon, prev_colon, finish, dimlo, dimhi
   230     character(len = token):: val(3)
   239       val(1) = string(1: colon - 1)
   243         val(2) = string(prev_colon + 1: colon - 1)
   244         val(3) = string(colon + 1: )
   246         val(2) = string(prev_colon + 1: )
   250     if (val(3) == 
"") val(3) = 
"^1"   253       start = 
stoi(val(1)(2: ))
   254     else if (val(1) == val(2)) 
then   259     if (val(2) == val(1)) 
then   262       finish = 
stoi(val(2)(2: ))
   267     call dimrange(var, dimord, dimlo, dimhi)
   268     start = min(max(dimlo, start), dimhi)
   269     finish = min(max(dimlo, finish), dimhi)
   270     count = abs(finish - start) + 1
   273       stride = 
stoi(val(3)(2: ))
   275       stride = 
stoi(val(3))
   277     stride = sign(stride, finish - start)
   298     integer, 
intent(in):: dimord
   299     character(len = *), 
intent(in):: value
   301     real, 
pointer:: axisval(:)
   305     call beginsub(
'value_to_index', 
'var=%d dimord=%d value=%c', &
   306       & i=(/var%mapid, dimord/), c1=trim(
value))
   308     call open(axisvar, var, dimord, count_compact=.true.)
   309     call get(axisvar, axisval)
   311     if (.not. 
associated(axisval)) 
then   314     else if (
size(axisval) < 2) 
then   324     do, i = 1, 
size(axisval) - 1
   325       if (axisval(i + 1) == axisval(i)) 
then   326         result = 
real(i) + 0.5
   329       result = i + (val - axisval(i)) / (axisval(i + 1) - axisval(i))
   330       if (result <= (i + 1)) 
goto 900
   334     call endsub(
'value_to_index', 
'value(%c) =~ index(%r)', &
   335       & c1=trim(
value), r=(/result/))
 
character, parameter, public gt_comma
 
subroutine gtvar_dump(var)
 
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ 
 
character, parameter, public gt_equal
 
subroutine limit_one(string)
 
subroutine gtvarslicec(var, string, err)
 
subroutine map_set(var, map, stat)
 
subroutine, public storeerror(number, where, err, cause_c, cause_i)
 
subroutine gtvarslice(var, dimord, start, count, stride)
 
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)
 
subroutine, public query_growable(vid, result)