aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/spp/rpp/rpprat/dosub.r
blob: 611bdbaf02a0fa85e80047c2484bb7c7db780272 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#-h-  dosub			  709  local   12/01/80  15:53:50
# dosub - select macro substring
   include  defs

   subroutine dosub (argstk, i, j)
   integer argstk (ARGSIZE), i, j

   include COMMON_BLOCKS

   integer ap, fc, k, nc
   integer ctoi, length

   if (j - i < 3)
      return
   if (j - i < 4)
      nc = MAXTOK
   else {
      k = argstk (i + 4)
      nc = ctoi (evalst, k)	 # number of characters
      }
   k = argstk (i + 3)	      # origin
   ap = argstk (i + 2)	       # target string
   fc = ap + ctoi (evalst, k) - 1   # first char of substring
   if (fc >= ap & fc < ap + length (evalst (ap))) {   # subarrays
      k = fc + min (nc, length (evalst (fc))) - 1
       for ( ; k >= fc; k = k - 1)
	  call putbak (evalst (k))
       }

    return
    end