187 lines
4.4 KiB
C
187 lines
4.4 KiB
C
|
/*
|
||
|
* Copyright (c) 1992,1993-1995 Argonaut Technologies Limited. All rights reserved.
|
||
|
*
|
||
|
* $Id: tokenmap.h 2.11 1996/10/03 11:35:33 sam Exp $
|
||
|
* $Locker: $
|
||
|
*
|
||
|
*/
|
||
|
#ifndef _TOKENMAP_H_
|
||
|
#define _TOKENMAP_H_
|
||
|
|
||
|
/*
|
||
|
* Template structure used to map token/values to a structure
|
||
|
*/
|
||
|
typedef struct br_tv_template_entry {
|
||
|
br_token token;
|
||
|
char * name;
|
||
|
br_int_32 offset;
|
||
|
br_int_16 flags;
|
||
|
br_int_16 conv;
|
||
|
br_int_32 conv_arg;
|
||
|
|
||
|
br_int_32 mask;
|
||
|
} br_tv_template_entry;
|
||
|
|
||
|
typedef struct br_tv_template {
|
||
|
int n_entries;
|
||
|
struct br_tv_template_entry *entries;
|
||
|
|
||
|
/*
|
||
|
* Cached mapping information
|
||
|
*/
|
||
|
br_int_32 map_base;
|
||
|
br_int_32 n_map_entries;
|
||
|
|
||
|
br_tv_template_entry **map_query_entry;
|
||
|
br_tv_template_entry **map_set_entry;
|
||
|
|
||
|
br_boolean names_resolved;
|
||
|
|
||
|
/*
|
||
|
* Resource to which cache info gets attached (if it was attached directly
|
||
|
* to template, then template could not be static)
|
||
|
*/
|
||
|
void *res;
|
||
|
} br_tv_template;
|
||
|
|
||
|
/*
|
||
|
* Defined operations for Query/Set conversions
|
||
|
*
|
||
|
* In two part names: token value on left, struct value on right
|
||
|
*/
|
||
|
enum {
|
||
|
BRTV_CONV_NOP,
|
||
|
|
||
|
BRTV_CONV_DIRECT,
|
||
|
|
||
|
BRTV_CONV_CUSTOM,
|
||
|
|
||
|
BRTV_CONV_COPY,
|
||
|
|
||
|
BRTV_CONV_V2_COPY,
|
||
|
BRTV_CONV_V3_COPY,
|
||
|
BRTV_CONV_V4_COPY,
|
||
|
BRTV_CONV_M23_COPY,
|
||
|
BRTV_CONV_M34_COPY,
|
||
|
BRTV_CONV_M4_COPY,
|
||
|
|
||
|
BRTV_CONV_I32_I8,
|
||
|
BRTV_CONV_I32_I16,
|
||
|
|
||
|
BRTV_CONV_I32_U8,
|
||
|
BRTV_CONV_I32_U16,
|
||
|
|
||
|
BRTV_CONV_FIXED_FLOAT,
|
||
|
BRTV_CONV_FLOAT_FIXED,
|
||
|
|
||
|
BRTV_CONV_V2_FIXED_FLOAT,
|
||
|
BRTV_CONV_V2_FLOAT_FIXED,
|
||
|
|
||
|
BRTV_CONV_V3_FIXED_FLOAT,
|
||
|
BRTV_CONV_V3_FLOAT_FIXED,
|
||
|
|
||
|
BRTV_CONV_V4_FIXED_FLOAT,
|
||
|
BRTV_CONV_V4_FLOAT_FIXED,
|
||
|
|
||
|
BRTV_CONV_M23_FIXED_FLOAT,
|
||
|
BRTV_CONV_M23_FLOAT_FIXED,
|
||
|
|
||
|
BRTV_CONV_M34_FIXED_FLOAT,
|
||
|
BRTV_CONV_M34_FLOAT_FIXED,
|
||
|
|
||
|
BRTV_CONV_M4_FIXED_FLOAT,
|
||
|
BRTV_CONV_M4_FLOAT_FIXED,
|
||
|
|
||
|
BRTV_CONV_STRING,
|
||
|
|
||
|
BRTV_CONV_LIST,
|
||
|
|
||
|
BRTV_CONV_BOOL_TOKEN,
|
||
|
|
||
|
BRTV_CONV_BIT,
|
||
|
BRTV_CONV_NOT_BIT
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* Booleans are 32 bit at the moment
|
||
|
*/
|
||
|
#define BRTV_CONV_I32_B BRTV_CONV_COPY
|
||
|
|
||
|
/*
|
||
|
* Typedef for custom conversion function
|
||
|
*/
|
||
|
typedef br_error BR_CALLBACK br_tv_custom_query_cbfn(br_uint_32 *pvalue, void **extra, br_size_t *pextra_size,
|
||
|
void *block, struct br_tv_template_entry *tep);
|
||
|
typedef br_error BR_CALLBACK br_tv_custom_set_cbfn(void *block, br_uint_32 *pvalue, struct br_tv_template_entry *tep);
|
||
|
typedef br_size_t BR_CALLBACK br_tv_custom_extra_size_cbfn(void *block, struct br_tv_template_entry *tep);
|
||
|
|
||
|
typedef struct br_tv_custom {
|
||
|
br_tv_custom_query_cbfn *query;
|
||
|
br_tv_custom_set_cbfn *set;
|
||
|
br_tv_custom_extra_size_cbfn *extra_size;
|
||
|
} br_tv_custom;
|
||
|
|
||
|
/*
|
||
|
* Define some operations in terms of the current scalar type
|
||
|
*/
|
||
|
#if BASED_FLOAT
|
||
|
#define BRTV_CONV_FIXED_SCALAR BRTV_CONV_FIXED_FLOAT
|
||
|
#define BRTV_CONV_FLOAT_SCALAR BRTV_CONV_COPY
|
||
|
|
||
|
#define BRTV_CONV_V2_FIXED_SCALAR BRTV_CONV_V2_FIXED_FLOAT
|
||
|
#define BRTV_CONV_V2_FLOAT_SCALAR BRTV_CONV_V2_COPY
|
||
|
|
||
|
#define BRTV_CONV_V3_FIXED_SCALAR BRTV_CONV_V3_FIXED_FLOAT
|
||
|
#define BRTV_CONV_V3_FLOAT_SCALAR BRTV_CONV_V3_COPY
|
||
|
|
||
|
#define BRTV_CONV_V4_FIXED_SCALAR BRTV_CONV_V4_FIXED_FLOAT
|
||
|
#define BRTV_CONV_V4_FLOAT_SCALAR BRTV_CONV_V4_COPY
|
||
|
|
||
|
#define BRTV_CONV_M23_FIXED_SCALAR BRTV_CONV_M23_FIXED_FLOAT
|
||
|
#define BRTV_CONV_M23_FLOAT_SCALAR BRTV_CONV_M23_COPY
|
||
|
|
||
|
#define BRTV_CONV_M34_FIXED_SCALAR BRTV_CONV_M34_FIXED_FLOAT
|
||
|
#define BRTV_CONV_M34_FLOAT_SCALAR BRTV_CONV_M34_COPY
|
||
|
|
||
|
#define BRTV_CONV_M4_FIXED_SCALAR BRTV_CONV_M4_FIXED_FLOAT
|
||
|
#define BRTV_CONV_M4_FLOAT_SCALAR BRTV_CONV_M4_COPY
|
||
|
#endif
|
||
|
|
||
|
#if BASED_FIXED
|
||
|
#define BRTV_CONV_FIXED_SCALAR BRTV_CONV_COPY
|
||
|
#define BRTV_CONV_FLOAT_SCALAR BRTV_CONV_FLOAT_FIXED
|
||
|
|
||
|
#define BRTV_CONV_V2_FIXED_SCALAR BRTV_CONV_V2_COPY
|
||
|
#define BRTV_CONV_V2_FLOAT_SCALAR BRTV_CONV_V2_FLOAT_FIXED
|
||
|
|
||
|
#define BRTV_CONV_V3_FIXED_SCALAR BRTV_CONV_V3_COPY
|
||
|
#define BRTV_CONV_V3_FLOAT_SCALAR BRTV_CONV_V3_FLOAT_FIXED
|
||
|
|
||
|
#define BRTV_CONV_V4_FIXED_SCALAR BRTV_CONV_V4_COPY
|
||
|
#define BRTV_CONV_V4_FLOAT_SCALAR BRTV_CONV_V4_FLOAT_FIXED
|
||
|
|
||
|
#define BRTV_CONV_M23_FIXED_SCALAR BRTV_CONV_M23_COPY
|
||
|
#define BRTV_CONV_M23_FLOAT_SCALAR BRTV_CONV_M23_FLOAT_FIXED
|
||
|
|
||
|
#define BRTV_CONV_M34_FIXED_SCALAR BRTV_CONV_M34_COPY
|
||
|
#define BRTV_CONV_M34_FLOAT_SCALAR BRTV_CONV_M34_FLOAT_FIXED
|
||
|
|
||
|
#define BRTV_CONV_M4_FIXED_SCALAR BRTV_CONV_M4_COPY
|
||
|
#define BRTV_CONV_M4_FLOAT_SCALAR BRTV_CONV_M4_FLOAT_FIXED
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* Conversion flags
|
||
|
*/
|
||
|
enum br_tv_flag {
|
||
|
BRTV_QUERY = 0x0001, /* This entry is valid for Query operations */
|
||
|
BRTV_SET = 0x0002, /* This entry is valid for Set operations */
|
||
|
BRTV_ALL = 0x0004, /* This entry is valid for QueryAll operations */
|
||
|
|
||
|
BRTV_ABS = 0x0008 /* 'offset' member of template contains value */
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|