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