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 35 extern "C" { 36 #endif 37 38 typedef 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 47 typedef 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 60 typedef 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 */ 81 enum { 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 103 extern xlator_keyword_t *keywordlist; 104 extern char **filelist; 105 extern int verbosity; 106 107 extern int frontend(const Translator_info *); 108 extern int do_extends(const Meta_info, const Translator_info *, char *); 109 extern void split(const char *, char *, char *); 110 extern void remcomment(char const *); 111 extern void getlinecont(char *, char *, int, FILE *, Meta_info *); 112 extern char *line_to_buf(char *, const char *); 113 extern int non_empty(const char *); 114 extern int check4extends(const char *, const char *, int, FILE *); 115 extern int interesting_keyword(xlator_keyword_t *, const char *); 116 extern int arch_strtoi(const char *); 117 extern int readline(char **, FILE *); 118 extern int arch_match(FILE *, int); 119 120 /* xlator_ functions */ 121 extern xlator_keyword_t *xlator_init(const Translator_info *); 122 extern int xlator_startlib(char const *libname); 123 extern int xlator_startfile(char const *filename); 124 extern int xlator_start_if(const Meta_info meta_info, const int token, 125 char *value); 126 extern int xlator_take_kvpair(const Meta_info, const int token, char *value); 127 extern int xlator_end_if(const Meta_info, const char *value); 128 extern int xlator_endfile(void); 129 extern int xlator_endlib(void); 130 extern int xlator_end(void); 131 132 #ifdef __cplusplus 133 } 134 #endif 135 136 #endif /* _PARSER_H */ 137