d0e518695adc90b82233b99af7dffbb3d3f92c00amw/*
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * CDDL HEADER START
d0e518695adc90b82233b99af7dffbb3d3f92c00amw *
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * The contents of this file are subject to the terms of the
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * Common Development and Distribution License (the "License").
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * You may not use this file except in compliance with the License.
d0e518695adc90b82233b99af7dffbb3d3f92c00amw *
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * or http://www.opensolaris.org/os/licensing.
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * See the License for the specific language governing permissions
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * and limitations under the License.
d0e518695adc90b82233b99af7dffbb3d3f92c00amw *
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * When distributing Covered Code, include this CDDL HEADER in each
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * If applicable, add the following below this CDDL HEADER, with the
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * fields enclosed by brackets "[]" replaced with your own identifying
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * information: Portions Copyright [yyyy] [name of copyright owner]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw *
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * CDDL HEADER END
d0e518695adc90b82233b99af7dffbb3d3f92c00amw */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/*
a0b6e447978c306e15941d158bf6939a42ed2726Alan Wright * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
d0e518695adc90b82233b99af7dffbb3d3f92c00amw * Use is subject to license terms.
d0e518695adc90b82233b99af7dffbb3d3f92c00amw */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#ifndef _NDRGEN_H
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define _NDRGEN_H
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#ifdef __cplusplus
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern "C" {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#endif
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#include <stdio.h>
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#include <stdlib.h>
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#include <string.h>
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#include <assert.h>
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amwtypedef struct node {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw int label;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw int line_number;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct symbol *file_name;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node *n_next; /* handy for lists */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw union {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct symbol *nu_sym;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned long nu_int;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw char *nu_str;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw void *nu_ptr;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node *nu_node[4]; /* descendents */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw void *nu_arg[4]; /* utility */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw } n_u;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_ptr n_u.nu_ptr
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_sym n_u.nu_sym
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_str n_u.nu_str
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_int n_u.nu_int
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_arg n_u.nu_arg
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_node n_u.nu_node
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_c_advice n_node[0]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_c_typename n_node[1]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_c_members n_node[2]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_m_advice n_node[0]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_m_type n_node[1]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_m_decl n_node[2]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_m_name n_node[3]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_a_arg n_node[0]
a0b6e447978c306e15941d158bf6939a42ed2726Alan Wright#define n_a_arg1 n_node[1]
a0b6e447978c306e15941d158bf6939a42ed2726Alan Wright#define n_a_arg2 n_node[2]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_d_descend n_node[0]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define n_d_dim n_node[1]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw} ndr_node_t;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amwtypedef struct keyword {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw char *name;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw int token;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw long value;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw} ndr_keyword_t;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amwtypedef struct symbol {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct symbol *next;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw char *name;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw ndr_keyword_t *kw;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node *typedefn;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node s_node;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw} ndr_symbol_t;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amwtypedef struct integer {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct integer *next;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw long value;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node s_node;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw} ndr_integer_t;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define NDLBUFSZ 100
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* This makes certain things much easier */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define N_ADVICE 18
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amwtypedef struct advice {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node *a_nodes[N_ADVICE];
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* alias for basic types */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_transmit_as a_nodes[0]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* arg used for size, union or generic purpose */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_arg_is a_nodes[1]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* operation parameter in/out stuff */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_operation a_nodes[2]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_in a_nodes[3]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_out a_nodes[4]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* size stuff */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_string a_nodes[5]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_size_is a_nodes[6]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_length_is a_nodes[7]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* union stuff */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_case a_nodes[8]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_default a_nodes[9]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_switch_is a_nodes[10]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* interface stuff */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_interface a_nodes[11]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_uuid a_nodes[12]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_no_reorder a_nodes[13]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_extern a_nodes[14]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_reference a_nodes[15]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#define a_align a_nodes[16]
d0e518695adc90b82233b99af7dffbb3d3f92c00amw} ndr_advice_t;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amwtypedef struct typeinfo {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct typeinfo *next;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int alignment : 3; /* mask */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int is_conformant : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int is_varying : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int is_string : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int max_given : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int min_given : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int complete : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int has_pointers : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int is_referenced : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int is_extern : 1;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned short type_op; /* STAR LB */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw /* STRUCT BASIC_TYPE */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node *type_dim; /* for LB */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct typeinfo *type_down; /* for STAR LB */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node *definition;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node *type_name; /* symbol */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw ndr_advice_t advice;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int size_fixed_part;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int size_variable_part;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw /* size_is(n_members) */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct member *member; /* array */
d0e518695adc90b82233b99af7dffbb3d3f92c00amw int n_member;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw} ndr_typeinfo_t;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amwtypedef struct member {
d0e518695adc90b82233b99af7dffbb3d3f92c00amw char *name;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct typeinfo *type;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw int is_conformant;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw struct node *definition;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw ndr_advice_t advice;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw unsigned int pdu_offset;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw} ndr_member_t;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern ndr_typeinfo_t *typeinfo_list;
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern struct node *construct_list;
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* ndr_anal.c */
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void analyze(void);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void show_typeinfo_list(void);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void type_extern_suffix(ndr_typeinfo_t *, char *, size_t);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void type_null_decl(ndr_typeinfo_t *, char *, size_t);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void type_name_decl(ndr_typeinfo_t *, char *, size_t, char *);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void show_advice(ndr_advice_t *, int);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void member_fixup(ndr_node_t *);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void construct_fixup(ndr_node_t *);
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* ndr_gen.c */
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void generate(void);
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* ndr_lex.c */
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern ndr_symbol_t *symbol_list;
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern int line_number;
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern int n_compile_error;
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern struct node *yylval;
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void set_lex_input(FILE *, char *);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern int yylex(void);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void * ndr_alloc(size_t nelem, size_t elsize);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void compile_error(const char *, ...);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void fatal_error(const char *, ...);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern struct node *n_cons(int, ...);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void n_splice(struct node *, struct node *);
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* ndr_print.c */
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void tdata_dump(void);
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern void print_node(ndr_node_t *);
a0b6e447978c306e15941d158bf6939a42ed2726Alan Wrightextern void print_field_attr(ndr_node_t *);
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* ndr_parse.y */
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern int yyparse(void);
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw/* ndr_main.c */
d0e518695adc90b82233b99af7dffbb3d3f92c00amwextern int yyerror(char *);
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#ifdef __cplusplus
d0e518695adc90b82233b99af7dffbb3d3f92c00amw}
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#endif
d0e518695adc90b82233b99af7dffbb3d3f92c00amw
d0e518695adc90b82233b99af7dffbb3d3f92c00amw#endif /* _NDRGEN_H */