/[pcre]/code/trunk/doc/html/pcreapi.html
ViewVC logotype

Diff of /code/trunk/doc/html/pcreapi.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1338 by ph10, Tue May 28 09:13:59 2013 UTC revision 1339 by ph10, Fri Jun 14 09:09:28 2013 UTC
# Line 46  man page, in case the conversion went wr Line 46  man page, in case the conversion went wr
46  <br><a name="SEC1" href="#TOC1">PCRE NATIVE API BASIC FUNCTIONS</a><br>  <br><a name="SEC1" href="#TOC1">PCRE NATIVE API BASIC FUNCTIONS</a><br>
47  <P>  <P>
48  <b>pcre *pcre_compile(const char *<i>pattern</i>, int <i>options</i>,</b>  <b>pcre *pcre_compile(const char *<i>pattern</i>, int <i>options</i>,</b>
49  <b>const char **<i>errptr</i>, int *<i>erroffset</i>,</b>  <b>     const char **<i>errptr</i>, int *<i>erroffset</i>,</b>
50  <b>const unsigned char *<i>tableptr</i>);</b>  <b>     const unsigned char *<i>tableptr</i>);</b>
51  </P>  <br>
52  <P>  <br>
53  <b>pcre *pcre_compile2(const char *<i>pattern</i>, int <i>options</i>,</b>  <b>pcre *pcre_compile2(const char *<i>pattern</i>, int <i>options</i>,</b>
54  <b>int *<i>errorcodeptr</i>,</b>  <b>     int *<i>errorcodeptr</i>,</b>
55  <b>const char **<i>errptr</i>, int *<i>erroffset</i>,</b>  <b>     const char **<i>errptr</i>, int *<i>erroffset</i>,</b>
56  <b>const unsigned char *<i>tableptr</i>);</b>  <b>     const unsigned char *<i>tableptr</i>);</b>
57  </P>  <br>
58  <P>  <br>
59  <b>pcre_extra *pcre_study(const pcre *<i>code</i>, int <i>options</i>,</b>  <b>pcre_extra *pcre_study(const pcre *<i>code</i>, int <i>options</i>,</b>
60  <b>const char **<i>errptr</i>);</b>  <b>     const char **<i>errptr</i>);</b>
61  </P>  <br>
62  <P>  <br>
63  <b>void pcre_free_study(pcre_extra *<i>extra</i>);</b>  <b>void pcre_free_study(pcre_extra *<i>extra</i>);</b>
64  </P>  <br>
65  <P>  <br>
66  <b>int pcre_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>  <b>int pcre_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>
67  <b>const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>  <b>     const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>
68  <b>int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>);</b>  <b>     int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>);</b>
69  </P>  <br>
70  <P>  <br>
71  <b>int pcre_dfa_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>  <b>int pcre_dfa_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>
72  <b>const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>  <b>     const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>
73  <b>int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>,</b>  <b>     int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>,</b>
74  <b>int *<i>workspace</i>, int <i>wscount</i>);</b>  <b>     int *<i>workspace</i>, int <i>wscount</i>);</b>
75  </P>  </P>
76  <br><a name="SEC2" href="#TOC1">PCRE NATIVE API STRING EXTRACTION FUNCTIONS</a><br>  <br><a name="SEC2" href="#TOC1">PCRE NATIVE API STRING EXTRACTION FUNCTIONS</a><br>
77  <P>  <P>
78  <b>int pcre_copy_named_substring(const pcre *<i>code</i>,</b>  <b>int pcre_copy_named_substring(const pcre *<i>code</i>,</b>
79  <b>const char *<i>subject</i>, int *<i>ovector</i>,</b>  <b>     const char *<i>subject</i>, int *<i>ovector</i>,</b>
80  <b>int <i>stringcount</i>, const char *<i>stringname</i>,</b>  <b>     int <i>stringcount</i>, const char *<i>stringname</i>,</b>
81  <b>char *<i>buffer</i>, int <i>buffersize</i>);</b>  <b>     char *<i>buffer</i>, int <i>buffersize</i>);</b>
82  </P>  <br>
83  <P>  <br>
84  <b>int pcre_copy_substring(const char *<i>subject</i>, int *<i>ovector</i>,</b>  <b>int pcre_copy_substring(const char *<i>subject</i>, int *<i>ovector</i>,</b>
85  <b>int <i>stringcount</i>, int <i>stringnumber</i>, char *<i>buffer</i>,</b>  <b>     int <i>stringcount</i>, int <i>stringnumber</i>, char *<i>buffer</i>,</b>
86  <b>int <i>buffersize</i>);</b>  <b>     int <i>buffersize</i>);</b>
87  </P>  <br>
88  <P>  <br>
89  <b>int pcre_get_named_substring(const pcre *<i>code</i>,</b>  <b>int pcre_get_named_substring(const pcre *<i>code</i>,</b>
90  <b>const char *<i>subject</i>, int *<i>ovector</i>,</b>  <b>     const char *<i>subject</i>, int *<i>ovector</i>,</b>
91  <b>int <i>stringcount</i>, const char *<i>stringname</i>,</b>  <b>     int <i>stringcount</i>, const char *<i>stringname</i>,</b>
92  <b>const char **<i>stringptr</i>);</b>  <b>     const char **<i>stringptr</i>);</b>
93  </P>  <br>
94  <P>  <br>
95  <b>int pcre_get_stringnumber(const pcre *<i>code</i>,</b>  <b>int pcre_get_stringnumber(const pcre *<i>code</i>,</b>
96  <b>const char *<i>name</i>);</b>  <b>     const char *<i>name</i>);</b>
97  </P>  <br>
98  <P>  <br>
99  <b>int pcre_get_stringtable_entries(const pcre *<i>code</i>,</b>  <b>int pcre_get_stringtable_entries(const pcre *<i>code</i>,</b>
100  <b>const char *<i>name</i>, char **<i>first</i>, char **<i>last</i>);</b>  <b>     const char *<i>name</i>, char **<i>first</i>, char **<i>last</i>);</b>
101  </P>  <br>
102  <P>  <br>
103  <b>int pcre_get_substring(const char *<i>subject</i>, int *<i>ovector</i>,</b>  <b>int pcre_get_substring(const char *<i>subject</i>, int *<i>ovector</i>,</b>
104  <b>int <i>stringcount</i>, int <i>stringnumber</i>,</b>  <b>     int <i>stringcount</i>, int <i>stringnumber</i>,</b>
105  <b>const char **<i>stringptr</i>);</b>  <b>     const char **<i>stringptr</i>);</b>
106  </P>  <br>
107  <P>  <br>
108  <b>int pcre_get_substring_list(const char *<i>subject</i>,</b>  <b>int pcre_get_substring_list(const char *<i>subject</i>,</b>
109  <b>int *<i>ovector</i>, int <i>stringcount</i>, const char ***<i>listptr</i>);</b>  <b>     int *<i>ovector</i>, int <i>stringcount</i>, const char ***<i>listptr</i>);</b>
110  </P>  <br>
111  <P>  <br>
112  <b>void pcre_free_substring(const char *<i>stringptr</i>);</b>  <b>void pcre_free_substring(const char *<i>stringptr</i>);</b>
113  </P>  <br>
114  <P>  <br>
115  <b>void pcre_free_substring_list(const char **<i>stringptr</i>);</b>  <b>void pcre_free_substring_list(const char **<i>stringptr</i>);</b>
116  </P>  </P>
117  <br><a name="SEC3" href="#TOC1">PCRE NATIVE API AUXILIARY FUNCTIONS</a><br>  <br><a name="SEC3" href="#TOC1">PCRE NATIVE API AUXILIARY FUNCTIONS</a><br>
118  <P>  <P>
119  <b>int pcre_jit_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>  <b>int pcre_jit_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>
120  <b>const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>  <b>     const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>
121  <b>int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>,</b>  <b>     int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>,</b>
122  <b>pcre_jit_stack *<i>jstack</i>);</b>  <b>     pcre_jit_stack *<i>jstack</i>);</b>
123  </P>  <br>
124  <P>  <br>
125  <b>pcre_jit_stack *pcre_jit_stack_alloc(int <i>startsize</i>, int <i>maxsize</i>);</b>  <b>pcre_jit_stack *pcre_jit_stack_alloc(int <i>startsize</i>, int <i>maxsize</i>);</b>
126  </P>  <br>
127  <P>  <br>
128  <b>void pcre_jit_stack_free(pcre_jit_stack *<i>stack</i>);</b>  <b>void pcre_jit_stack_free(pcre_jit_stack *<i>stack</i>);</b>
129  </P>  <br>
130  <P>  <br>
131  <b>void pcre_assign_jit_stack(pcre_extra *<i>extra</i>,</b>  <b>void pcre_assign_jit_stack(pcre_extra *<i>extra</i>,</b>
132  <b>pcre_jit_callback <i>callback</i>, void *<i>data</i>);</b>  <b>     pcre_jit_callback <i>callback</i>, void *<i>data</i>);</b>
133  </P>  <br>
134  <P>  <br>
135  <b>const unsigned char *pcre_maketables(void);</b>  <b>const unsigned char *pcre_maketables(void);</b>
136  </P>  <br>
137  <P>  <br>
138  <b>int pcre_fullinfo(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>  <b>int pcre_fullinfo(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>
139  <b>int <i>what</i>, void *<i>where</i>);</b>  <b>     int <i>what</i>, void *<i>where</i>);</b>
140  </P>  <br>
141  <P>  <br>
142  <b>int pcre_refcount(pcre *<i>code</i>, int <i>adjust</i>);</b>  <b>int pcre_refcount(pcre *<i>code</i>, int <i>adjust</i>);</b>
143  </P>  <br>
144  <P>  <br>
145  <b>int pcre_config(int <i>what</i>, void *<i>where</i>);</b>  <b>int pcre_config(int <i>what</i>, void *<i>where</i>);</b>
146  </P>  <br>
147  <P>  <br>
148  <b>const char *pcre_version(void);</b>  <b>const char *pcre_version(void);</b>
149  </P>  <br>
150  <P>  <br>
151  <b>int pcre_pattern_to_host_byte_order(pcre *<i>code</i>,</b>  <b>int pcre_pattern_to_host_byte_order(pcre *<i>code</i>,</b>
152  <b>pcre_extra *<i>extra</i>, const unsigned char *<i>tables</i>);</b>  <b>     pcre_extra *<i>extra</i>, const unsigned char *<i>tables</i>);</b>
153  </P>  </P>
154  <br><a name="SEC4" href="#TOC1">PCRE NATIVE API INDIRECTED FUNCTIONS</a><br>  <br><a name="SEC4" href="#TOC1">PCRE NATIVE API INDIRECTED FUNCTIONS</a><br>
155  <P>  <P>
156  <b>void *(*pcre_malloc)(size_t);</b>  <b>void *(*pcre_malloc)(size_t);</b>
157  </P>  <br>
158  <P>  <br>
159  <b>void (*pcre_free)(void *);</b>  <b>void (*pcre_free)(void *);</b>
160  </P>  <br>
161  <P>  <br>
162  <b>void *(*pcre_stack_malloc)(size_t);</b>  <b>void *(*pcre_stack_malloc)(size_t);</b>
163  </P>  <br>
164  <P>  <br>
165  <b>void (*pcre_stack_free)(void *);</b>  <b>void (*pcre_stack_free)(void *);</b>
166  </P>  <br>
167  <P>  <br>
168  <b>int (*pcre_callout)(pcre_callout_block *);</b>  <b>int (*pcre_callout)(pcre_callout_block *);</b>
169  </P>  </P>
170  <br><a name="SEC5" href="#TOC1">PCRE 8-BIT, 16-BIT, AND 32-BIT LIBRARIES</a><br>  <br><a name="SEC5" href="#TOC1">PCRE 8-BIT, 16-BIT, AND 32-BIT LIBRARIES</a><br>
# Line 509  avoiding the use of the stack. Line 509  avoiding the use of the stack.
509  <br><a name="SEC11" href="#TOC1">COMPILING A PATTERN</a><br>  <br><a name="SEC11" href="#TOC1">COMPILING A PATTERN</a><br>
510  <P>  <P>
511  <b>pcre *pcre_compile(const char *<i>pattern</i>, int <i>options</i>,</b>  <b>pcre *pcre_compile(const char *<i>pattern</i>, int <i>options</i>,</b>
512  <b>const char **<i>errptr</i>, int *<i>erroffset</i>,</b>  <b>     const char **<i>errptr</i>, int *<i>erroffset</i>,</b>
513  <b>const unsigned char *<i>tableptr</i>);</b>  <b>     const unsigned char *<i>tableptr</i>);</b>
514    <br>
515    <br>
516  <b>pcre *pcre_compile2(const char *<i>pattern</i>, int <i>options</i>,</b>  <b>pcre *pcre_compile2(const char *<i>pattern</i>, int <i>options</i>,</b>
517  <b>int *<i>errorcodeptr</i>,</b>  <b>     int *<i>errorcodeptr</i>,</b>
518  <b>const char **<i>errptr</i>, int *<i>erroffset</i>,</b>  <b>     const char **<i>errptr</i>, int *<i>erroffset</i>,</b>
519  <b>const unsigned char *<i>tableptr</i>);</b>  <b>     const unsigned char *<i>tableptr</i>);</b>
520  </P>  </P>
521  <P>  <P>
522  Either of the functions <b>pcre_compile()</b> or <b>pcre_compile2()</b> can be  Either of the functions <b>pcre_compile()</b> or <b>pcre_compile2()</b> can be
# Line 977  be used if the limits were changed when Line 979  be used if the limits were changed when
979  <a name="studyingapattern"></a></P>  <a name="studyingapattern"></a></P>
980  <br><a name="SEC13" href="#TOC1">STUDYING A PATTERN</a><br>  <br><a name="SEC13" href="#TOC1">STUDYING A PATTERN</a><br>
981  <P>  <P>
982  <b>pcre_extra *pcre_study(const pcre *<i>code</i>, int <i>options</i></b>  <b>pcre_extra *pcre_study(const pcre *<i>code</i>, int <i>options</i>,</b>
983  <b>const char **<i>errptr</i>);</b>  <b>     const char **<i>errptr</i>);</b>
984  </P>  </P>
985  <P>  <P>
986  If a compiled pattern is going to be used several times, it is worth spending  If a compiled pattern is going to be used several times, it is worth spending
# Line 1162  below in the section on matching a patte Line 1164  below in the section on matching a patte
1164  <br><a name="SEC15" href="#TOC1">INFORMATION ABOUT A PATTERN</a><br>  <br><a name="SEC15" href="#TOC1">INFORMATION ABOUT A PATTERN</a><br>
1165  <P>  <P>
1166  <b>int pcre_fullinfo(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>  <b>int pcre_fullinfo(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>
1167  <b>int <i>what</i>, void *<i>where</i>);</b>  <b>     int <i>what</i>, void *<i>where</i>);</b>
1168  </P>  </P>
1169  <P>  <P>
1170  The <b>pcre_fullinfo()</b> function returns information about a compiled  The <b>pcre_fullinfo()</b> function returns information about a compiled
# Line 1559  is different. (This seems a highly unlik Line 1561  is different. (This seems a highly unlik
1561  <br><a name="SEC17" href="#TOC1">MATCHING A PATTERN: THE TRADITIONAL FUNCTION</a><br>  <br><a name="SEC17" href="#TOC1">MATCHING A PATTERN: THE TRADITIONAL FUNCTION</a><br>
1562  <P>  <P>
1563  <b>int pcre_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>  <b>int pcre_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>
1564  <b>const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>  <b>     const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>
1565  <b>int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>);</b>  <b>     int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>);</b>
1566  </P>  </P>
1567  <P>  <P>
1568  The function <b>pcre_exec()</b> is called to match a subject string against a  The function <b>pcre_exec()</b> is called to match a subject string against a
# Line 2413  no longer in use and is never returned. Line 2415  no longer in use and is never returned.
2415  <br><a name="SEC18" href="#TOC1">EXTRACTING CAPTURED SUBSTRINGS BY NUMBER</a><br>  <br><a name="SEC18" href="#TOC1">EXTRACTING CAPTURED SUBSTRINGS BY NUMBER</a><br>
2416  <P>  <P>
2417  <b>int pcre_copy_substring(const char *<i>subject</i>, int *<i>ovector</i>,</b>  <b>int pcre_copy_substring(const char *<i>subject</i>, int *<i>ovector</i>,</b>
2418  <b>int <i>stringcount</i>, int <i>stringnumber</i>, char *<i>buffer</i>,</b>  <b>     int <i>stringcount</i>, int <i>stringnumber</i>, char *<i>buffer</i>,</b>
2419  <b>int <i>buffersize</i>);</b>  <b>     int <i>buffersize</i>);</b>
2420  </P>  <br>
2421  <P>  <br>
2422  <b>int pcre_get_substring(const char *<i>subject</i>, int *<i>ovector</i>,</b>  <b>int pcre_get_substring(const char *<i>subject</i>, int *<i>ovector</i>,</b>
2423  <b>int <i>stringcount</i>, int <i>stringnumber</i>,</b>  <b>     int <i>stringcount</i>, int <i>stringnumber</i>,</b>
2424  <b>const char **<i>stringptr</i>);</b>  <b>     const char **<i>stringptr</i>);</b>
2425  </P>  <br>
2426  <P>  <br>
2427  <b>int pcre_get_substring_list(const char *<i>subject</i>,</b>  <b>int pcre_get_substring_list(const char *<i>subject</i>,</b>
2428  <b>int *<i>ovector</i>, int <i>stringcount</i>, const char ***<i>listptr</i>);</b>  <b>     int *<i>ovector</i>, int <i>stringcount</i>, const char ***<i>listptr</i>);</b>
2429  </P>  </P>
2430  <P>  <P>
2431  Captured substrings can be accessed directly by using the offsets returned by  Captured substrings can be accessed directly by using the offsets returned by
# Line 2508  provided. Line 2510  provided.
2510  <br><a name="SEC19" href="#TOC1">EXTRACTING CAPTURED SUBSTRINGS BY NAME</a><br>  <br><a name="SEC19" href="#TOC1">EXTRACTING CAPTURED SUBSTRINGS BY NAME</a><br>
2511  <P>  <P>
2512  <b>int pcre_get_stringnumber(const pcre *<i>code</i>,</b>  <b>int pcre_get_stringnumber(const pcre *<i>code</i>,</b>
2513  <b>const char *<i>name</i>);</b>  <b>     const char *<i>name</i>);</b>
2514  </P>  <br>
2515  <P>  <br>
2516  <b>int pcre_copy_named_substring(const pcre *<i>code</i>,</b>  <b>int pcre_copy_named_substring(const pcre *<i>code</i>,</b>
2517  <b>const char *<i>subject</i>, int *<i>ovector</i>,</b>  <b>     const char *<i>subject</i>, int *<i>ovector</i>,</b>
2518  <b>int <i>stringcount</i>, const char *<i>stringname</i>,</b>  <b>     int <i>stringcount</i>, const char *<i>stringname</i>,</b>
2519  <b>char *<i>buffer</i>, int <i>buffersize</i>);</b>  <b>     char *<i>buffer</i>, int <i>buffersize</i>);</b>
2520  </P>  <br>
2521  <P>  <br>
2522  <b>int pcre_get_named_substring(const pcre *<i>code</i>,</b>  <b>int pcre_get_named_substring(const pcre *<i>code</i>,</b>
2523  <b>const char *<i>subject</i>, int *<i>ovector</i>,</b>  <b>     const char *<i>subject</i>, int *<i>ovector</i>,</b>
2524  <b>int <i>stringcount</i>, const char *<i>stringname</i>,</b>  <b>     int <i>stringcount</i>, const char *<i>stringname</i>,</b>
2525  <b>const char **<i>stringptr</i>);</b>  <b>     const char **<i>stringptr</i>);</b>
2526  </P>  </P>
2527  <P>  <P>
2528  To extract a substring by name, you first have to find associated number.  To extract a substring by name, you first have to find associated number.
# Line 2572  same number causes an error at compile t Line 2574  same number causes an error at compile t
2574  <br><a name="SEC20" href="#TOC1">DUPLICATE SUBPATTERN NAMES</a><br>  <br><a name="SEC20" href="#TOC1">DUPLICATE SUBPATTERN NAMES</a><br>
2575  <P>  <P>
2576  <b>int pcre_get_stringtable_entries(const pcre *<i>code</i>,</b>  <b>int pcre_get_stringtable_entries(const pcre *<i>code</i>,</b>
2577  <b>const char *<i>name</i>, char **<i>first</i>, char **<i>last</i>);</b>  <b>     const char *<i>name</i>, char **<i>first</i>, char **<i>last</i>);</b>
2578  </P>  </P>
2579  <P>  <P>
2580  When a pattern is compiled with the PCRE_DUPNAMES option, names for subpatterns  When a pattern is compiled with the PCRE_DUPNAMES option, names for subpatterns
# Line 2653  the value returned is the size of each b Line 2655  the value returned is the size of each b
2655  <br><a name="SEC23" href="#TOC1">MATCHING A PATTERN: THE ALTERNATIVE FUNCTION</a><br>  <br><a name="SEC23" href="#TOC1">MATCHING A PATTERN: THE ALTERNATIVE FUNCTION</a><br>
2656  <P>  <P>
2657  <b>int pcre_dfa_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>  <b>int pcre_dfa_exec(const pcre *<i>code</i>, const pcre_extra *<i>extra</i>,</b>
2658  <b>const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>  <b>     const char *<i>subject</i>, int <i>length</i>, int <i>startoffset</i>,</b>
2659  <b>int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>,</b>  <b>     int <i>options</i>, int *<i>ovector</i>, int <i>ovecsize</i>,</b>
2660  <b>int *<i>workspace</i>, int <i>wscount</i>);</b>  <b>     int *<i>workspace</i>, int <i>wscount</i>);</b>
2661  </P>  </P>
2662  <P>  <P>
2663  The function <b>pcre_dfa_exec()</b> is called to match a subject string against  The function <b>pcre_dfa_exec()</b> is called to match a subject string against
# Line 2850  Cambridge CB2 3QH, England. Line 2852  Cambridge CB2 3QH, England.
2852  </P>  </P>
2853  <br><a name="SEC26" href="#TOC1">REVISION</a><br>  <br><a name="SEC26" href="#TOC1">REVISION</a><br>
2854  <P>  <P>
2855  Last updated: 12 May 2013  Last updated: 12 June 2013
2856  <br>  <br>
2857  Copyright &copy; 1997-2013 University of Cambridge.  Copyright &copy; 1997-2013 University of Cambridge.
2858  <br>  <br>

Legend:
Removed from v.1338  
changed lines
  Added in v.1339

  ViewVC Help
Powered by ViewVC 1.1.5