1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin *                                                                      *
3da2e3ebdSchin *               This software is part of the ast package               *
4*b30d1939SAndy Fiddaman *          Copyright (c) 1985-2011 AT&T Intellectual Property          *
5da2e3ebdSchin *                      and is licensed under the                       *
6*b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
8da2e3ebdSchin *                                                                      *
9da2e3ebdSchin *                A copy of the License is available at                 *
10*b30d1939SAndy Fiddaman *          http://www.eclipse.org/org/documents/epl-v10.html           *
11*b30d1939SAndy Fiddaman *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12da2e3ebdSchin *                                                                      *
13da2e3ebdSchin *              Information and Software Systems Research               *
14da2e3ebdSchin *                            AT&T Research                             *
15da2e3ebdSchin *                           Florham Park NJ                            *
16da2e3ebdSchin *                                                                      *
17da2e3ebdSchin *                 Glenn Fowler <gsf@research.att.com>                  *
18da2e3ebdSchin *                  David Korn <dgk@research.att.com>                   *
19da2e3ebdSchin *                   Phong Vo <kpv@research.att.com>                    *
20da2e3ebdSchin *                                                                      *
21da2e3ebdSchin ***********************************************************************/
22da2e3ebdSchin #pragma prototyped
23da2e3ebdSchin 
24da2e3ebdSchin /*
25da2e3ebdSchin  * Glenn Fowler
26da2e3ebdSchin  * AT&T Research
27da2e3ebdSchin  *
28da2e3ebdSchin  * character code map interface
29da2e3ebdSchin  *
30da2e3ebdSchin  * NOTE: used for mapping between 8-bit character encodings
31da2e3ebdSchin  *	 ISO character sets are handled by sfio
32da2e3ebdSchin  */
33da2e3ebdSchin 
34da2e3ebdSchin #ifndef _CHARCODE_H
35da2e3ebdSchin #define _CHARCODE_H	1
36da2e3ebdSchin 
373e14f97fSRoger A. Faulkner #include <ast_common.h>
38da2e3ebdSchin #include <ast_ccode.h>
39da2e3ebdSchin 
40da2e3ebdSchin typedef struct Ccmap_s
41da2e3ebdSchin {
42da2e3ebdSchin 	const char*	name;	/* code set name		*/
43da2e3ebdSchin 	const char*	match;	/* strmatch() pattern		*/
44da2e3ebdSchin 	const char*	desc;	/* code set description		*/
45da2e3ebdSchin 	const char*	canon;	/* canonical name format	*/
46da2e3ebdSchin 	const char*	index;	/* default index		*/
47da2e3ebdSchin 	int		ccode;	/* <ccode.h> code index		*/
48da2e3ebdSchin 	void*		data;	/* map specific data		*/
49da2e3ebdSchin } Ccmap_t;
50da2e3ebdSchin 
51da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__)
52da2e3ebdSchin #define extern		__EXPORT__
53da2e3ebdSchin #endif
54da2e3ebdSchin 
55da2e3ebdSchin extern unsigned char*	_ccmap(int, int);
56da2e3ebdSchin extern void*		_ccmapcpy(unsigned char*, void*, const void*, size_t);
57da2e3ebdSchin extern void*		_ccmapstr(unsigned char*, void*, size_t);
58da2e3ebdSchin 
59da2e3ebdSchin extern int		ccmapid(const char*);
60da2e3ebdSchin extern char*		ccmapname(int);
61da2e3ebdSchin extern void*		ccnative(void*, const void*, size_t);
62da2e3ebdSchin extern Ccmap_t*		ccmaplist(Ccmap_t*);
63da2e3ebdSchin 
64da2e3ebdSchin #undef	extern
65da2e3ebdSchin 
66da2e3ebdSchin #define CCOP(i,o)		((i)==(o)?0:(((o)<<8)|(i)))
67da2e3ebdSchin #define CCIN(x)			((x)&0xFF)
68da2e3ebdSchin #define CCOUT(x)		(((x)>>8)&0xFF)
69da2e3ebdSchin #define CCCONVERT(x)		((x)&0xFF00)
70da2e3ebdSchin 
71da2e3ebdSchin #define CCCVT(x)		CCMAP(x,0)
72da2e3ebdSchin #define CCMAP(i,o)		((i)==(o)?(unsigned char*)0:_ccmap(i,o))
73da2e3ebdSchin #define CCMAPCHR(m,c)		((m)?(m)[c]:(c))
74da2e3ebdSchin #define CCMAPCPY(m,t,f,n)	((m)?_ccmapcpy(m,t,f,n):memcpy(t,f,n))
75da2e3ebdSchin #define CCMAPSTR(m,s,n)		((m)?_ccmapstr(m,s,n):(void*)(s))
76da2e3ebdSchin 
77da2e3ebdSchin #define ccmap(i,o)		CCMAP(i,o)
78da2e3ebdSchin #define ccmapchr(m,c)		CCMAPCHR(m,c)
79da2e3ebdSchin #define ccmapcpy(m,t,f,n)	CCMAPCPY(m,t,f,n)
80da2e3ebdSchin #define ccmapstr(m,s,n)		CCMAPSTR(m,s,n)
81da2e3ebdSchin 
82da2e3ebdSchin #define CCMAPC(c,i,o)		((i)==(o)?(c):CCMAP(i,o)[c])
83da2e3ebdSchin #define CCMAPM(t,f,n,i,o)	((i)==(o)?memcpy(t,f,n):_ccmapcpy(CCMAP(i,o),t,f,n))
84da2e3ebdSchin #define CCMAPS(s,n,i,o)		((i)==(o)?(void*)(s):_ccmapstr(CCMAP(i,o),s,n))
85da2e3ebdSchin 
86da2e3ebdSchin #define ccmapc(c,i,o)		CCMAPC(c,i,o)
87da2e3ebdSchin #define ccmapm(t,f,n,i,o)	CCMAPM(t,f,n,i,o)
88da2e3ebdSchin #define ccmaps(s,n,i,o)		CCMAPS(s,n,i,o)
89da2e3ebdSchin 
90da2e3ebdSchin #endif
91