xref: /titanic_52/usr/src/lib/libtnf/tnf.h (revision 9512fe850e98fdd448c638ca63fdd92a8a510255)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  *	Copyright (c) 1994, by Sun Microsytems, Inc.
24  */
25 
26 #ifndef _TNF_TNF_H
27 #define	_TNF_TNF_H
28 
29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30 
31 #include <sys/types.h>
32 #include <tnf/com.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 /*
39  * Opaque TNF handle
40  */
41 
42 typedef struct TNF	TNF;
43 
44 /*
45  * Opaque data handle
46  */
47 
48 typedef	unsigned long long	tnf_datum_t;
49 
50 #define	TNF_DATUM_NULL	((tnf_datum_t)0)
51 
52 /*
53  * Reader data classification
54  */
55 
56 typedef enum {
57 	TNF_K_UNKNOWN,			/* unknown or error */
58 	TNF_K_SCALAR,			/* unclassified scalar */
59 	TNF_K_CHAR,			/* char */
60 	TNF_K_INT8,			/* int8 */
61 	TNF_K_INT16,			/* int16 */
62 	TNF_K_INT32,			/* int32 */
63 	TNF_K_UINT8,			/* uint8 */
64 	TNF_K_UINT16,			/* uint16 */
65 	TNF_K_UINT32,			/* uint32 */
66 	TNF_K_INT64,			/* int64 */
67 	TNF_K_UINT64,			/* uint64 */
68 	TNF_K_FLOAT32,			/* float32 */
69 	TNF_K_FLOAT64,			/* float64 */
70 	TNF_K_ARRAY,			/* array */
71 	TNF_K_STRING,			/* string */
72 	TNF_K_STRUCT,			/* struct */
73 	TNF_K_TYPE			/* type */
74 } tnf_kind_t;
75 
76 /*
77  * Error codes
78  */
79 
80 typedef enum {
81 	TNF_ERR_NONE = 0,
82 
83 	/* 1 through 1023 reserved for errno values */
84 #define	TNF_ERRNO_MAX 		1023
85 
86 	TNF_ERR_NOTTNF 		= 1024,	/* not TNF file */
87 	TNF_ERR_BADDATUM 	= 1025,	/* bad or NULL data handle */
88 	TNF_ERR_TYPEMISMATCH 	= 1026,	/* type mismatch */
89 	TNF_ERR_BADINDEX 	= 1027,	/* array index out of bounds */
90 	TNF_ERR_BADSLOT 	= 1028,	/* slot missing */
91 	TNF_ERR_BADREFTYPE 	= 1029,	/* invalid reference type  */
92 	TNF_ERR_ALLOCFAIL 	= 1030,	/* memory allocation failure */
93 	TNF_ERR_BADTNF 		= 1031,	/* bad TNF file */
94 	TNF_ERR_INTERNAL 	= 1032	/* internal error */
95 } tnf_errcode_t;
96 
97 typedef void 	tnf_error_handler_t(void *, TNF *, tnf_errcode_t);
98 
99 /*
100  * TNF file interface
101  */
102 
103 tnf_errcode_t	tnf_reader_begin(caddr_t, size_t, TNF **);
104 tnf_errcode_t	tnf_reader_end(TNF *);
105 
106 /*
107  * Error interface
108  */
109 
110 void		tnf_set_error_handler(tnf_error_handler_t *, void *);
111 char *		tnf_error_message(tnf_errcode_t);
112 
113 tnf_error_handler_t	tnf_default_error_handler;
114 
115 /*
116  * Data block access
117  */
118 
119 unsigned	tnf_get_block_count(TNF *);
120 tnf_datum_t	tnf_get_block_absolute(TNF *, unsigned);
121 tnf_datum_t	tnf_get_block_relative(tnf_datum_t, int);
122 int		tnf_is_block_header(tnf_datum_t);
123 
124 /*
125  * Record access
126  */
127 
128 tnf_datum_t	tnf_get_next_record(tnf_datum_t);
129 tnf_datum_t	tnf_get_block_header(tnf_datum_t);
130 tnf_datum_t	tnf_get_file_header(TNF *);
131 
132 /*
133  * Data classification predicates
134  */
135 
136 int		tnf_is_inline(tnf_datum_t);
137 int		tnf_is_scalar(tnf_datum_t);
138 int		tnf_is_record(tnf_datum_t);
139 int		tnf_is_array(tnf_datum_t);
140 int		tnf_is_string(tnf_datum_t);
141 int		tnf_is_struct(tnf_datum_t);
142 int		tnf_is_type(tnf_datum_t);
143 
144 /*
145  * Data operations
146  */
147 
148 tnf_kind_t	tnf_get_kind(tnf_datum_t);
149 size_t		tnf_get_size(tnf_datum_t);
150 tnf_datum_t	tnf_get_type(tnf_datum_t);
151 char *		tnf_get_type_name(tnf_datum_t);
152 caddr_t		tnf_get_raw(tnf_datum_t);
153 
154 /*
155  * Record operations
156  */
157 
158 tnf_datum_t	tnf_get_tag_arg(tnf_datum_t);
159 
160 /*
161  * Array operations
162  */
163 
164 unsigned	tnf_get_element_count(tnf_datum_t);
165 tnf_datum_t	tnf_get_element(tnf_datum_t, unsigned);
166 tnf_datum_t	tnf_get_element_type(tnf_datum_t);
167 caddr_t		tnf_get_elements(tnf_datum_t);
168 char *		tnf_get_chars(tnf_datum_t);
169 
170 /*
171  * Struct operations
172  */
173 
174 unsigned	tnf_get_slot_count(tnf_datum_t);
175 char *		tnf_get_slot_name(tnf_datum_t, unsigned);
176 unsigned	tnf_get_slot_index(tnf_datum_t, char *);
177 tnf_datum_t	tnf_get_slot_named(tnf_datum_t, char *);
178 tnf_datum_t	tnf_get_slot_indexed(tnf_datum_t, unsigned);
179 
180 /*
181  * Scalar data conversions
182  */
183 
184 char		tnf_get_char(tnf_datum_t);
185 tnf_int8_t	tnf_get_int8(tnf_datum_t);
186 tnf_int16_t	tnf_get_int16(tnf_datum_t);
187 tnf_int32_t	tnf_get_int32(tnf_datum_t);
188 tnf_int64_t	tnf_get_int64(tnf_datum_t);
189 tnf_float32_t	tnf_get_float32(tnf_datum_t);
190 tnf_float64_t	tnf_get_float64(tnf_datum_t);
191 
192 /*
193  * Type (tag) record operations
194  */
195 
196 tnf_kind_t	tnf_type_get_kind(tnf_datum_t);
197 char *		tnf_type_get_name(tnf_datum_t);
198 size_t		tnf_type_get_size(tnf_datum_t);
199 tnf_datum_t	tnf_type_get_property(tnf_datum_t, char *);
200 tnf_datum_t	tnf_type_get_base(tnf_datum_t);
201 
202 #ifdef __cplusplus
203 }
204 #endif
205 
206 #endif /* _TNF_TNF_H */
207