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