aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/spp/rpp/ratlibr/omatch.r
blob: 598a4e24609672dfcff8dcee919b1713462d3c57 (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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
include	defs

# omatch --- try to match a single pattern at pat (j)

   integer function omatch (lin, i, pat, j)
   character lin (MAXLINE), pat (MAXPAT)
   integer i, j

   integer bump
   integer locate

   omatch = NO
   if (lin (i) == EOS)
      return
   bump = -1
   if (pat (j) == CHAR) {
      if (lin (i) == pat (j + 1))
	 bump = 1
      }
   else if (pat (j) == BOL) {
      if (i == 1)
	 bump = 0
      }
   else if (pat (j) == ANY) {
      if (lin (i) != NEWLINE)
	 bump = 1
      }
   else if (pat (j) == EOL) {
      if (lin (i) == NEWLINE)
	 bump = 0
      }
   else if (pat (j) == CCL) {
      if (locate (lin (i), pat, j + 1) == YES)
	 bump = 1
      }
   else if (pat (j) == NCCL) {
      if (lin (i) != NEWLINE & locate (lin (i), pat, j + 1) == NO)
	 bump = 1
      }
   else
      call error ("in omatch: can't happen.")
   if (bump >= 0) {
      i = i + bump
      omatch = YES
      }

   return
   end