1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 2003-2013 AT&T Intellectual Property          *
5 *                      and is licensed under the                       *
6 *                 Eclipse Public License, Version 1.0                  *
7 *                    by AT&T Intellectual Property                     *
8 *                                                                      *
9 *                A copy of the License is available at                 *
10 *          http://www.eclipse.org/org/documents/epl-v10.html           *
11 *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12 *                                                                      *
13 *              Information and Software Systems Research               *
14 *                            AT&T Research                             *
15 *                           Florham Park NJ                            *
16 *                                                                      *
17 *               Glenn Fowler <glenn.s.fowler@gmail.com>                *
18 *                                                                      *
19 ***********************************************************************/
20 #pragma prototyped
21 
22 /*
23  * codex private interface
24  * included by <codex.h>
25  */
26 
27 #ifndef _CODEXLIB_H
28 #define _CODEXLIB_H
29 
30 #include <debug.h>
31 
32 #ifndef SFDCEVENT
33 #define SFDCEVENT(a,b,n)	((((a)-'A'+1)<<11)^(((b)-'A'+1)<<6)^(n))
34 #endif
35 
36 #define CODEX_DATA		SFDCEVENT('C','X','d')	/* get data	*/
37 #define CODEX_GETPOS		SFDCEVENT('C','X','g')	/* get position	*/
38 #define CODEX_SETPOS		SFDCEVENT('C','X','s')	/* set position	*/
39 #define CODEX_SIZE		SFDCEVENT('C','X','z')	/* set size	*/
40 
41 typedef struct Codexcache_s
42 {
43 	Codex_t*	code;
44 	Codexnum_t	flags;
45 	Codexnum_t	cached;
46 	char		name[CODEX_NAME];
47 } Codexcache_t;
48 
49 typedef struct Codexstate_s
50 {
51 	const char*	id;
52 	Codexmeth_t*	first;
53 	Codexdisc_t	disc;
54 	Codex_t		error;
55 	Codex_t*	last;
56 	char*		trace;
57 	char*		verbose;
58 	Codexnum_t	index;
59 	int		serial;
60 	unsigned int	initialized;
61 	unsigned int	scanned;
62 	unsigned int	cached;
63 	Codexcache_t	cache[16];
64 } Codexstate_t;
65 
66 #define CODEXERROR		(&codexstate.error)
67 
68 #define codex_first		(&codex_vcodex)
69 #define codex_vcodex_next	(&codex_uu)
70 #define codex_uu_next		(&codex_qp)
71 #define codex_qp_next		(&codex_rot13)
72 #define codex_rot13_next	(&codex_iconv)
73 #define codex_iconv_next	0
74 
75 extern Codexmeth_t	codex_iconv;
76 extern Codexmeth_t	codex_qp;
77 extern Codexmeth_t	codex_rot13;
78 extern Codexmeth_t	codex_uu;
79 extern Codexmeth_t	codex_vcodex;
80 
81 extern Codexstate_t	codexstate;
82 
83 #endif
84