1/* scan.h - Utility declarations for scan-decls and fix-header programs. 2 Copyright (C) 1993, 1998, 1999 Free Software Foundation, Inc. 3 4This program is free software; you can redistribute it and/or modify it 5under the terms of the GNU General Public License as published by the 6Free Software Foundation; either version 2, or (at your option) any 7later version. 8 9This program is distributed in the hope that it will be useful, 10but WITHOUT ANY WARRANTY; without even the implied warranty of 11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12GNU General Public License for more details. 13 14You should have received a copy of the GNU General Public License 15along with this program; if not, write to the Free Software 16Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 17 18#include <stdio.h> 19 20typedef struct sstring 21{ 22 char *base; 23 char *ptr; 24 char *limit; 25} sstring; 26 27#define INIT_SSTRING(STR) ((STR)->base = 0, (STR)->ptr = 0, (STR)->limit = 0) 28#define FREE_SSTRING(STR) do { if ((STR)->base) free (STR)->base; } while(0) 29#define SSTRING_PUT(STR, C) do {\ 30 if ((STR)->limit <= (STR)->ptr) make_sstring_space (STR, 1); \ 31 *(STR)->ptr++ = (C); } while (0) 32#define SSTRING_LENGTH(STR) ((STR)->ptr - (STR)->base) 33#define MAKE_SSTRING_SPACE(STR, COUNT) \ 34 if ((STR)->limit - (STR)->ptr < (COUNT)) make_sstring_space (STR, COUNT); 35 36#ifndef _PARAMS 37#if defined(ANSI_PROTOTYPES) || defined(__cplusplus) 38#define _PARAMS(args) args 39#else 40#define _PARAMS(args) () 41#endif 42#endif 43 44struct partial_proto; 45struct fn_decl 46{ 47 const char *fname; 48 const char *rtype; 49 const char *params; 50 struct partial_proto *partial; 51}; 52 53extern int lineno; 54extern void sstring_append _PARAMS((sstring *, sstring *)); 55extern void make_sstring_space _PARAMS((sstring *, int)); 56extern int skip_spaces _PARAMS((FILE *, int)); 57extern int scan_ident _PARAMS((FILE *, sstring *, int)); 58extern int scan_string _PARAMS((FILE *, sstring *, int)); 59extern int read_upto _PARAMS((FILE *, sstring *, int)); 60extern unsigned long hash _PARAMS((const char *)); 61extern void recognized_function _PARAMS((char *, int, int, char *, int, int, char *, int)); 62extern void recognized_extern _PARAMS((char *, int, char *, int)); 63 64/* get_token is a simple C lexer. */ 65#define IDENTIFIER_TOKEN 300 66#define CHAR_TOKEN 301 67#define STRING_TOKEN 302 68#define INT_TOKEN 303 69extern int get_token _PARAMS ((FILE *, sstring *)); 70 71/* Current file and line numer, taking #-directives into account */ 72extern int source_lineno; 73extern sstring source_filename; 74/* Current physical line number */ 75extern int lineno; 76