1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1985-2011 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 <gsf@research.att.com>                  *
18 *                  David Korn <dgk@research.att.com>                   *
19 *                   Phong Vo <kpv@research.att.com>                    *
20 *                                                                      *
21 ***********************************************************************/
22 #pragma prototyped
23 /*
24  * Glenn Fowler
25  * AT&T Research
26  *
27  * record format interface
28  */
29 
30 #ifndef _RECFMT_H
31 #define _RECFMT_H		1
32 
33 #include <ast.h>
34 
35 typedef uint32_t Recfmt_t;
36 
37 #define REC_delimited		0
38 #define REC_fixed		1
39 #define REC_variable		2
40 #define REC_method		14
41 #define REC_none		15
42 
43 #define REC_M_path		0
44 #define REC_M_data		1
45 
46 #define RECTYPE(f)		(((f)>>28)&((1<<4)-1))
47 
48 #define REC_D_TYPE(d)		((REC_delimited<<28)|((d)&((1<<8)-1)))
49 #define REC_D_DELIMITER(f)	((f)&((1<<8)-1))
50 
51 #define REC_F_TYPE(s)		((REC_fixed<<28)|((s)&((1<<28)-1)))
52 #define REC_F_SIZE(f)		((f)&((1<<28)-1))
53 
54 #define REC_U_TYPE(t,a)		(((t)<<28)|((a)&((1<<28)-1)))
55 #define REC_U_ATTRIBUTES(f)	((f)&~((1<<28)-1))
56 
57 #define REC_V_TYPE(h,o,z,l,i)	((REC_variable<<28)|((h)<<23)|((o)<<19)|(((z)-1)<<18)|((l)<<17)|((i)<<16))
58 #define REC_V_RECORD(f,s)	(((f)&(((1<<16)-1)<<16))|(s))
59 #define REC_V_HEADER(f)		(((f)>>23)&((1<<5)-1))
60 #define REC_V_OFFSET(f)		(((f)>>19)&((1<<4)-1))
61 #define REC_V_LENGTH(f)		((((f)>>18)&1)+1)
62 #define REC_V_LITTLE(f)		(((f)>>17)&1)
63 #define REC_V_INCLUSIVE(f)	(((f)>>16)&1)
64 #define REC_V_SIZE(f)		((f)&((1<<16)-1))
65 #define REC_V_ATTRIBUTES(f)	((f)&~((1<<16)-1))
66 
67 #define REC_M_TYPE(i)		((REC_method<<28)|(i))
68 #define REC_M_INDEX(f)		((f)&((1<<28)-1))
69 
70 #define REC_N_TYPE()		0xffffffff
71 
72 #if _BLD_ast && defined(__EXPORT__)
73 #define extern		__EXPORT__
74 #endif
75 
76 extern char*		fmtrec(Recfmt_t, int);
77 extern Recfmt_t		recfmt(const void*, size_t, off_t);
78 extern Recfmt_t		recstr(const char*, char**);
79 extern ssize_t		reclen(Recfmt_t, const void*, size_t);
80 
81 #undef	extern
82 
83 #endif
84