talkfilters/common.h

116 lines
3.0 KiB
C
Raw Permalink Normal View History

2020-07-01 08:06:53 -04:00
/* 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 <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#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 */