1 /**	$MirOS: src/usr.bin/tr/extern.h,v 1.2 2007/07/15 19:10:31 tg Exp $ */
2 /*	$OpenBSD: extern.h,v 1.6 2003/06/03 02:56:20 millert Exp $	*/
3 /*	$NetBSD: extern.h,v 1.4 1995/11/01 00:45:22 pk Exp $	*/
4 
5 /*-
6  * Copyright (c) 2007
7  *	Thorsten Glaser <tg@mirbsd.de>
8  * Copyright (c) 1991, 1993
9  *	The Regents of the University of California.  All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  * 3. Neither the name of the University nor the names of its contributors
20  *    may be used to endorse or promote products derived from this software
21  *    without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33  * SUCH DAMAGE.
34  *
35  *	@(#)extern.h	8.1 (Berkeley) 6/6/93
36  */
37 
38 typedef struct {
39 	enum { STRING1, STRING2 } which;
40 	enum { EOS, INFINITE, NORMAL, RANGE, SEQUENCE, SET, WCLASS, WTRANS } state;
41 	int cnt;			/* character count */
42 	union {
43 		wchar_t *set_;		/* set of characters */
44 		wctype_t class_;	/* character class */
45 	} setext;
46 #define set	setext.set_
47 #define wclass	setext.class_
48 	wchar_t *str;			/* user's string */
49 	wchar_t equiv[2];		/* equivalence set */
50 #define cnext equiv[0]			/* next char to try with class */
51 	wctrans_t wtrans;		/* character conversion class */
52 	wchar_t lastch;			/* last character */
53 	bool use_wctrans;
54 } STR;
55 
56 #if WCHAR_MAX != 0xFFFD
57 #warning results untested, WCHAR_MAX0xFFFD
58 #endif
59 
60 #define	NCHARS	(WCHAR_MAX + 1)		/* Number of possible characters. */
61 #define	OOBCH	(WCHAR_MAX + 1)		/* Out of band character value. */
62 
63 bool next(STR *);
64