Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/tcl8.5.2/generic/regcustom.h @ 35

Last change on this file since 35 was 25, checked in by landauf, 17 years ago

added tcl to libs

File size: 4.8 KB
Line 
1/*
2 * Copyright (c) 1998, 1999 Henry Spencer.  All rights reserved.
3 *
4 * Development of this software was funded, in part, by Cray Research Inc.,
5 * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics
6 * Corporation, none of whom are responsible for the results. The author
7 * thanks all of them.
8 *
9 * Redistribution and use in source and binary forms - with or without
10 * modification - are permitted for any purpose, provided that redistributions
11 * in source form retain this entire copyright notice and indicate the origin
12 * and nature of any modifications.
13 *
14 * I'd appreciate being given credit for this package in the documentation of
15 * software which uses it, but that is not a requirement.
16 *
17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
19 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/*
30 * Headers if any.
31 */
32
33#include "tclInt.h"
34
35/*
36 * Overrides for regguts.h definitions, if any.
37 */
38
39#define FUNCPTR(name, args)     (*name)args
40#define MALLOC(n)               ckalloc(n)
41#define FREE(p)                 ckfree(VS(p))
42#define REALLOC(p,n)            ckrealloc(VS(p),n)
43
44/*
45 * Do not insert extras between the "begin" and "end" lines - this chunk is
46 * automatically extracted to be fitted into regex.h.
47 */
48
49/* --- begin --- */
50/* Ensure certain things don't sneak in from system headers. */
51#ifdef __REG_WIDE_T
52#undef __REG_WIDE_T
53#endif
54#ifdef __REG_WIDE_COMPILE
55#undef __REG_WIDE_COMPILE
56#endif
57#ifdef __REG_WIDE_EXEC
58#undef __REG_WIDE_EXEC
59#endif
60#ifdef __REG_REGOFF_T
61#undef __REG_REGOFF_T
62#endif
63#ifdef __REG_VOID_T
64#undef __REG_VOID_T
65#endif
66#ifdef __REG_CONST
67#undef __REG_CONST
68#endif
69#ifdef __REG_NOFRONT
70#undef __REG_NOFRONT
71#endif
72#ifdef __REG_NOCHAR
73#undef __REG_NOCHAR
74#endif
75/* Interface types */
76#define __REG_WIDE_T    Tcl_UniChar
77#define __REG_REGOFF_T  long    /* Not really right, but good enough... */
78#define __REG_VOID_T    void
79#define __REG_CONST     const
80/* Names and declarations */
81#define __REG_WIDE_COMPILE      TclReComp
82#define __REG_WIDE_EXEC         TclReExec
83#define __REG_NOFRONT           /* Don't want regcomp() and regexec() */
84#define __REG_NOCHAR            /* Or the char versions */
85#define regfree         TclReFree
86#define regerror        TclReError
87/* --- end --- */
88
89/*
90 * Internal character type and related.
91 */
92
93typedef Tcl_UniChar chr;        /* The type itself. */
94typedef int pchr;               /* What it promotes to. */
95typedef unsigned uchr;          /* Unsigned type that will hold a chr. */
96typedef int celt;               /* Type to hold chr, or NOCELT */
97#define NOCELT (-1)             /* Celt value which is not valid chr */
98#define CHR(c) (UCHAR(c))       /* Turn char literal into chr literal */
99#define DIGITVAL(c) ((c)-'0')   /* Turn chr digit into its value */
100#if TCL_UTF_MAX > 3
101#define CHRBITS 32              /* Bits in a chr; must not use sizeof */
102#define CHR_MIN 0x00000000      /* Smallest and largest chr; the value */
103#define CHR_MAX 0xffffffff      /* CHR_MAX-CHR_MIN+1 should fit in uchr */
104#else
105#define CHRBITS 16              /* Bits in a chr; must not use sizeof */
106#define CHR_MIN 0x0000          /* Smallest and largest chr; the value */
107#define CHR_MAX 0xffff          /* CHR_MAX-CHR_MIN+1 should fit in uchr */
108#endif
109
110/*
111 * Functions operating on chr.
112 */
113
114#define iscalnum(x)     Tcl_UniCharIsAlnum(x)
115#define iscalpha(x)     Tcl_UniCharIsAlpha(x)
116#define iscdigit(x)     Tcl_UniCharIsDigit(x)
117#define iscspace(x)     Tcl_UniCharIsSpace(x)
118
119/*
120 * Name the external functions.
121 */
122
123#define compile         TclReComp
124#define exec            TclReExec
125
126/*
127& Enable/disable debugging code (by whether REG_DEBUG is defined or not).
128*/
129
130#if 0                           /* No debug unless requested by makefile. */
131#define REG_DEBUG       /* */
132#endif
133
134/*
135 * Method of allocating a local workspace. We used a thread-specific data
136 * space to store this because the regular expression engine is never
137 * reentered from the same thread; it doesn't make any callbacks.
138 */
139
140#if 1
141#define AllocVars(vPtr) \
142    static Tcl_ThreadDataKey varsKey; \
143    register struct vars *vPtr = (struct vars *) \
144            Tcl_GetThreadData(&varsKey, sizeof(struct vars))
145#else
146/*
147 * This strategy for allocating workspace is "more proper" in some sense, but
148 * quite a bit slower. Using TSD (as above) leads to code that is quite a bit
149 * faster in practice (measured!)
150 */
151#define AllocVars(vPtr) \
152    register struct vars *vPtr = (struct vars *) MALLOC(sizeof(struct vars))
153#define FreeVars(vPtr) \
154    FREE(vPtr)
155#endif
156
157/*
158 * And pick up the standard header.
159 */
160
161#include "regex.h"
Note: See TracBrowser for help on using the repository browser.