/* GNU Talkfilters Copyright (C) 1998-2003 Free Software Foundation, Inc. This file is part of GNU Talkfilters GNU Talkfilters is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This software is distributed in the hope that it will be amusing, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this software; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __gtf_common_h #define __gtf_common_h #include #include #include #if (defined WIN32) && !(defined __MINGW32__) #define fileno _fileno #define strcasecmp stricmp #endif #include "config.h" typedef struct { char *buf; size_t bufsz; char *pos; size_t left; char overflow; } gtf_databuf_t; /* We NEVER want to read from stdin when called thru the library API, but flex * insists on doing so anyway, so redefine YY_INPUT to always return EOF * immediately. */ #ifdef LIBRARY_MODE #define YY_INPUT(buffer,result,max_size) YY_NULL #endif #define HELP_OPTION 0 #define VERSION_OPTION 1 extern void gtf_parse_args_basic(int argc, char **argv, const char *help, const char *version); #define gtf_parse_args() \ gtf_parse_args_basic(argc, argv, GTF_HELP, GTF_VERSION) extern void gtf_strbuf_init(gtf_databuf_t *sbuf, char *buf, size_t bufsz); extern int gtf_strbuf_vprintf(gtf_databuf_t *buf, const char *fmt, ...); extern int gtf_strbuf_puts(gtf_databuf_t *buf, const char *s); extern int gtf_strbuf_putc(gtf_databuf_t *buf, char c); #ifdef LIBRARY_MODE #define gtf_printf(...) \ gtf_strbuf_vprintf(buf, __VA_ARGS__) #define gtf_putc(S) \ gtf_strbuf_putc(buf, (S)) #define gtf_puts(S) \ gtf_strbuf_puts(buf, (S)) #else /* LIBRARY_MODE */ #define gtf_printf printf #define gtf_putc putchar #define gtf_puts(S) \ fputs((S), stdout) #endif /* LIBRARY_MODE */ #define gtf_unput_last() \ unput(*(yytext + yyleng - 1)) #define gtf_match_case(X, Y) \ isupper(X) ? toupper(Y) : tolower(Y) #define gtf_puts_case(T) \ gtf_printf("%c%s", gtf_match_case(*yytext, *(T)), (T) + 1) #define gtf_echo() \ gtf_puts(yytext) #define gtf_reset() \ { yyrestart(NULL); BEGIN(0); } extern void gtf_random_seed(void); #define gtf_random(R) \ (int)(rand() % (R)) #define GTF_HELP \ "Usage: %s [OPTIONS]\n\n\ Options:\n\ --help display this help information and exit\n\ --version output version information and exit\n\n\ This program is a filter; it reads data from standard input, processes it,\n\ and writes the results to standard output.\n" #define GTF_VERSION "GNU Talk Filters v" VERSION #endif /* __gtf_common_h */