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 2004 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef _PARSER_H
28#define	_PARSER_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#include <sys/param.h>
33
34#ifdef	__cplusplus
35extern "C" {
36#endif
37
38typedef struct metainfo {
39	char mi_filename[MAXPATHLEN];
40	int mi_line_number;
41	int mi_nlines;
42	int mi_ext_cnt;
43	int mi_flags;
44	int mi_extended;
45} Meta_info;
46
47typedef struct translator_info {
48	char	*ti_liblist;
49	char	*ti_dash_I;
50	char	*ti_output_file;
51	int	ti_nfiles;
52	int	ti_verbosity;
53	int	ti_flags;
54	char    *ti_versfile;
55	char	*ti_arch;
56	int	ti_archtoken;
57	int	ti_libtype;	/* set to FILTERLIB if processing filter lib */
58} Translator_info;
59
60typedef struct {
61	char *key;
62	int  token;
63} xlator_keyword_t;
64
65/*
66 * Translator Flags
67 * These are values for the ti_flags member of the Translator_info
68 * structure. Each bit of ti_flags represents a flag.
69 * first bit = picky flag; translator runs in picky mode
70 *             picky mode means complain about interfaces with no versions
71 */
72#define	XLATOR_PICKY_FLAG	0x01
73
74/* Return Codes from xlator_* functions */
75#define	XLATOR_FATAL	-2
76#define	XLATOR_NONFATAL	-1
77#define	XLATOR_SUCCESS	0
78#define	XLATOR_SKIP	1
79
80/* Misc Return Codes from Utility Functions */
81enum {
82	XLATOR_KW_NOTFOUND,
83	XLATOR_KW_FUNC,
84	XLATOR_KW_DATA,
85	XLATOR_KW_END
86};
87
88/* Library Type */
89#define	NORMALLIB 0
90#define	FILTERLIB 1
91
92/* Maxmimum levels of extends */
93#define	MAX_EXTENDS 16
94
95/* Architecture Bitmap */
96#define	XLATOR_SPARC	0x01
97#define	XLATOR_SPARCV9	0x02
98#define	XLATOR_I386	0x04
99#define	XLATOR_IA64	0x08
100#define	XLATOR_AMD64	0x10
101#define	XLATOR_ALLARCH	0xFF
102
103extern xlator_keyword_t *keywordlist;
104extern char **filelist;
105extern int verbosity;
106
107extern int frontend(const Translator_info *);
108extern int do_extends(const Meta_info, const Translator_info *, char *);
109extern void split(const char *, char *, char *);
110extern void remcomment(char const *);
111extern void getlinecont(char *, char *, int, FILE *, Meta_info *);
112extern char *line_to_buf(char *, const char *);
113extern int non_empty(const char *);
114extern int check4extends(const char *, const char *, int, FILE *);
115extern int interesting_keyword(xlator_keyword_t *, const char *);
116extern int arch_strtoi(const char *);
117extern int readline(char **, FILE *);
118extern int arch_match(FILE *, int);
119
120/* xlator_ functions */
121extern xlator_keyword_t *xlator_init(const Translator_info *);
122extern int xlator_startlib(char const *libname);
123extern int xlator_startfile(char const *filename);
124extern int xlator_start_if(const Meta_info meta_info, const int token,
125    char *value);
126extern int xlator_take_kvpair(const Meta_info, const int token, char *value);
127extern int xlator_end_if(const Meta_info, const char *value);
128extern int xlator_endfile(void);
129extern int xlator_endlib(void);
130extern int xlator_end(void);
131
132#ifdef	__cplusplus
133}
134#endif
135
136#endif	/* _PARSER_H */
137