1 /* scanners.h -- defs for interface to scanners.c 2 Copyright (C) 1986, 1995-1996, 1999, 2007-2012 Free Software Foundation, 3 Inc. 4 Written by Greg McGary <gkm@gnu.ai.mit.edu> 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef _scanners_h_ 21 #define _scanners_h_ 22 23 #include "obstack.h" 24 25 extern size_t log_8_member_files; /* log base 8 of the # of files. 26 e.g., log_8 (32768) == 5 */ 27 28 struct token 29 { 30 unsigned short tok_count; 31 unsigned char tok_flags; 32 unsigned char tok_hits_name[1]; 33 }; 34 35 #define TOKEN_HITS(TOKEN) ((TOKEN)->tok_hits_name) 36 #define TOKEN_NAME(TOKEN) (char *)((TOKEN)->tok_hits_name + log_8_member_files) 37 #define OFFSETOF_TOKEN_NAME (offsetof (struct token, tok_hits_name) + log_8_member_files) 38 39 typedef struct token *(*get_token_func_t) (FILE *in_FILE, void const *args, int *flags); 40 typedef void *(*parse_args_func_t) (char **argv, int argc); 41 typedef void (*help_me_func_t) (void); 42 43 struct language 44 { 45 char const *lg_name; 46 parse_args_func_t lg_parse_args; 47 get_token_func_t lg_get_token; 48 help_me_func_t lg_help_me; 49 int lg_argc; 50 char *lg_argv[16]; 51 }; 52 53 struct lang_args 54 { 55 struct language const *la_language; 56 char const *la_pattern; /* fnmatch(3) pattern */ 57 char *la_args_string; /* human-readable scanner args */ 58 void const *la_args_digested; /* pre-parsed scanner args */ 59 int la_index; 60 struct lang_args *la_next; 61 }; 62 63 extern void language_help_me (void); 64 extern void language_getopt (void); 65 extern void language_save_arg (char *arg); 66 extern struct language *get_language (char const *lang_name) 67 _GL_ATTRIBUTE_PURE; 68 extern void parse_language_map (char const *file_name); 69 extern void set_default_language (char const *lang_name); 70 71 extern struct lang_args *lang_args_default; 72 extern struct lang_args *lang_args_list; 73 74 extern struct obstack tokens_obstack; 75 extern unsigned char *scanner_buffer; 76 77 #endif /* not _scanners_h_ */ 78