tnf.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1994, by Sun Microsytems, Inc.
*/
#ifndef _TNF_TNF_H
#define _TNF_TNF_H
#pragma ident "%Z%%M% %I% %E% SMI"
#include <sys/types.h>
#include <tnf/com.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Opaque TNF handle
*/
typedef struct TNF TNF;
/*
* Opaque data handle
*/
typedef unsigned long long tnf_datum_t;
#define TNF_DATUM_NULL ((tnf_datum_t)0)
/*
* Reader data classification
*/
typedef enum {
TNF_K_UNKNOWN, /* unknown or error */
TNF_K_SCALAR, /* unclassified scalar */
TNF_K_CHAR, /* char */
TNF_K_INT8, /* int8 */
TNF_K_INT16, /* int16 */
TNF_K_INT32, /* int32 */
TNF_K_UINT8, /* uint8 */
TNF_K_UINT16, /* uint16 */
TNF_K_UINT32, /* uint32 */
TNF_K_INT64, /* int64 */
TNF_K_UINT64, /* uint64 */
TNF_K_FLOAT32, /* float32 */
TNF_K_FLOAT64, /* float64 */
TNF_K_ARRAY, /* array */
TNF_K_STRING, /* string */
TNF_K_STRUCT, /* struct */
TNF_K_TYPE /* type */
} tnf_kind_t;
/*
* Error codes
*/
typedef enum {
TNF_ERR_NONE = 0,
/* 1 through 1023 reserved for errno values */
#define TNF_ERRNO_MAX 1023
TNF_ERR_NOTTNF = 1024, /* not TNF file */
TNF_ERR_BADDATUM = 1025, /* bad or NULL data handle */
TNF_ERR_TYPEMISMATCH = 1026, /* type mismatch */
TNF_ERR_BADINDEX = 1027, /* array index out of bounds */
TNF_ERR_BADSLOT = 1028, /* slot missing */
TNF_ERR_BADREFTYPE = 1029, /* invalid reference type */
TNF_ERR_ALLOCFAIL = 1030, /* memory allocation failure */
TNF_ERR_BADTNF = 1031, /* bad TNF file */
TNF_ERR_INTERNAL = 1032 /* internal error */
} tnf_errcode_t;
typedef void tnf_error_handler_t(void *, TNF *, tnf_errcode_t);
/*
* TNF file interface
*/
tnf_errcode_t tnf_reader_begin(caddr_t, size_t, TNF **);
tnf_errcode_t tnf_reader_end(TNF *);
/*
* Error interface
*/
void tnf_set_error_handler(tnf_error_handler_t *, void *);
char * tnf_error_message(tnf_errcode_t);
tnf_error_handler_t tnf_default_error_handler;
/*
* Data block access
*/
unsigned tnf_get_block_count(TNF *);
tnf_datum_t tnf_get_block_absolute(TNF *, unsigned);
tnf_datum_t tnf_get_block_relative(tnf_datum_t, int);
int tnf_is_block_header(tnf_datum_t);
/*
* Record access
*/
tnf_datum_t tnf_get_next_record(tnf_datum_t);
tnf_datum_t tnf_get_block_header(tnf_datum_t);
tnf_datum_t tnf_get_file_header(TNF *);
/*
* Data classification predicates
*/
int tnf_is_inline(tnf_datum_t);
int tnf_is_scalar(tnf_datum_t);
int tnf_is_record(tnf_datum_t);
int tnf_is_array(tnf_datum_t);
int tnf_is_string(tnf_datum_t);
int tnf_is_struct(tnf_datum_t);
int tnf_is_type(tnf_datum_t);
/*
* Data operations
*/
tnf_kind_t tnf_get_kind(tnf_datum_t);
size_t tnf_get_size(tnf_datum_t);
tnf_datum_t tnf_get_type(tnf_datum_t);
char * tnf_get_type_name(tnf_datum_t);
caddr_t tnf_get_raw(tnf_datum_t);
/*
* Record operations
*/
tnf_datum_t tnf_get_tag_arg(tnf_datum_t);
/*
* Array operations
*/
unsigned tnf_get_element_count(tnf_datum_t);
tnf_datum_t tnf_get_element(tnf_datum_t, unsigned);
tnf_datum_t tnf_get_element_type(tnf_datum_t);
caddr_t tnf_get_elements(tnf_datum_t);
char * tnf_get_chars(tnf_datum_t);
/*
* Struct operations
*/
unsigned tnf_get_slot_count(tnf_datum_t);
char * tnf_get_slot_name(tnf_datum_t, unsigned);
unsigned tnf_get_slot_index(tnf_datum_t, char *);
tnf_datum_t tnf_get_slot_named(tnf_datum_t, char *);
tnf_datum_t tnf_get_slot_indexed(tnf_datum_t, unsigned);
/*
* Scalar data conversions
*/
char tnf_get_char(tnf_datum_t);
tnf_int8_t tnf_get_int8(tnf_datum_t);
tnf_int16_t tnf_get_int16(tnf_datum_t);
tnf_int32_t tnf_get_int32(tnf_datum_t);
tnf_int64_t tnf_get_int64(tnf_datum_t);
tnf_float32_t tnf_get_float32(tnf_datum_t);
tnf_float64_t tnf_get_float64(tnf_datum_t);
/*
* Type (tag) record operations
*/
tnf_kind_t tnf_type_get_kind(tnf_datum_t);
char * tnf_type_get_name(tnf_datum_t);
size_t tnf_type_get_size(tnf_datum_t);
tnf_datum_t tnf_type_get_property(tnf_datum_t, char *);
tnf_datum_t tnf_type_get_base(tnf_datum_t);
#ifdef __cplusplus
}
#endif
#endif /* _TNF_TNF_H */