/*************************************************************************
* TinyFugue - programmable mud client
* Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2004, 2005, 2006-2007 Ken Keys
*
* TinyFugue (aka "tf") is protected under the terms of the GNU
* General Public License. See the file "COPYING" for details.
************************************************************************/
/* $Id: tf.h,v 35004.59 2007/01/13 23:12:39 kkeys Exp $ */
#ifndef TF_H
#define TF_H
#ifndef NCOLORS
# define NCOLORS 16
#endif
#if SIZEOF_INT == 4
typedef unsigned int attr_t;
#elif SIZEOF_LONG == 4
typedef unsigned long attr_t;
#else
# error "no 32 bit integer?"
#endif
#if NCOLORS == 256 /* character attributes can't fit in 16 bits */
# if SIZEOF_INT == 4
typedef unsigned int cattr_t;
# elif SIZEOF_LONG == 4
typedef unsigned long cattr_t;
# else
# error "no 32 bit integer?"
# endif
#else /* character attributes can fit in 16 bits */
# if SIZEOF_SHORT == 2
typedef unsigned short cattr_t;
# elif SIZEOF_INT == 2
typedef unsigned int cattr_t;
# else
# error "no 16 bit integer?"
# endif
#endif
/* headers needed everywhere */
#include <time.h> /* may conflict with <sys/time.h> on some systems? */
#include <sys/time.h> /* for struct timeval */
#include "malloc.h"
#include "dstring.h"
#include "globals.h"
#if SOCKS
# if (SOCKS == 4)
# define connect Rconnect
# define select Rselect
# else /* (SOCKS >= 5) */
# include <socks.h>
# endif
#endif
/*
* TinyFugue global types and variables.
*/
typedef struct Program Program;
typedef struct Screen Screen;
typedef struct Pattern Pattern;
typedef struct Macro Macro;
typedef struct World World;
#define RESTRICT_SHELL 1
#define RESTRICT_FILE 2
#define RESTRICT_WORLD 3
typedef char smallstr[65]; /* Short buffer */
enum enum_attr {
/* inside the 16 low bits */
F_UNDERLINE = 0x0001,
F_REVERSE = 0x0002,
F_FLASH = 0x0000, /* zero - not implemented */
F_DIM = 0x0000, /* zero - not implemented */
F_BOLD = 0x0004,
F_HILITE = 0x0008,
F_NONE = 0x0010,
F_EXCLUSIVE = 0x0020,
#if NCOLORS == 256 /* XXX ??? */
# define FGCOLORSHIFT 8
F_FGCOLORMASK = 0x0000ff00, /* 8 bits, interpreted as an integer */
F_FGCOLOR = 0x00000040, /* flag */
# define BGCOLORSHIFT 16
F_BGCOLORMASK = 0x00ff0000, /* 8 bits, interpreted as an integer */
F_BGCOLOR = 0x00000080, /* flag */
#else
/* inside the 16 low bits */
# define FGCOLORSHIFT 8
F_FGCOLORMASK = 0x0f00, /* 4 bits, interpreted as an integer */
F_FGCOLOR = 0x0040, /* flag */
# define BGCOLORSHIFT 12
F_BGCOLORMASK = 0x7000, /* 3 bits, interpreted as an integer */
F_BGCOLOR = 0x0080, /* flag */
#endif
/* outside the 16 low bits */
F_NOACTIVITY = 0x01000000, /* does not count as activity */
F_NOLOG = 0x02000000,
F_BELL = 0x04000000,
F_GAG = 0x08000000,
F_NOHISTORY = 0x10000000,
F_TFPROMPT = 0x20000000, /* is a prompt generated by tf */
F_SERVPROMPT = 0x40000000, /* is a prompt from server */
F_FGCOLORS = (F_FGCOLOR | F_FGCOLORMASK),
F_BGCOLORS = (F_BGCOLOR | F_BGCOLORMASK),
F_COLORS = (F_FGCOLORS | F_BGCOLORS),
F_SIMPLE = (F_UNDERLINE | F_REVERSE | F_FLASH | F_DIM | F_BOLD),
F_HWRITE = (F_SIMPLE | F_HILITE | F_COLORS),
F_ENCODE = (F_SIMPLE | F_HILITE | F_FGCOLOR | F_BGCOLOR),
F_ATTR = (F_HWRITE | F_GAG | F_NOHISTORY | F_NOACTIVITY | F_NONE |
F_EXCLUSIVE)
};
#define attr2fgcolor(attr) (((attr) & F_FGCOLORMASK) >> FGCOLORSHIFT)
#define attr2bgcolor(attr) (((attr) & F_BGCOLORMASK) >> BGCOLORSHIFT)
#define fgcolor2attr(color) (F_FGCOLOR | ((color) << FGCOLORSHIFT))
#define bgcolor2attr(color) (F_BGCOLOR | ((color) << BGCOLORSHIFT))
# define attr2cattr(attr) ((cattr_t)(attr & F_HWRITE))
extern attr_t adj_attr(attr_t base, attr_t adj);
/* Macros for defining and manipulating bit vectors of arbitrary length.
* We use an array of long because select() does, and these macros will be
* used with select() on systems without the FD_* macros.
*/
#ifndef NBBY
# define NBBY 8 /* bits per byte */
#endif
#ifndef LONGBITS
# define LONGBITS (sizeof(long) * NBBY) /* bits per long */
#endif
#define VEC_TYPEDEF(type, size) \
typedef struct { \
unsigned long bits[(((size) + LONGBITS - 1) / LONGBITS)]; \
} (type)
#define VEC_SET(n,p) ((p)->bits[(n)/LONGBITS] |= (1L << ((n) % LONGBITS)))
#define VEC_CLR(n,p) ((p)->bits[(n)/LONGBITS] &= ~(1L << ((n) % LONGBITS)))
#define VEC_ISSET(n,p) ((p)->bits[(n)/LONGBITS] & (1L << ((n) % LONGBITS)))
#if HAVE_MEMCPY /* assume memcpy implies memset and bcopy implies bzero. */
# define VEC_ZERO(p) memset((char *)(p)->bits, '\0', sizeof(*(p)))
#else
# define VEC_ZERO(p) bzero((char *)(p)->bits, sizeof(*(p)))
#endif
/* Define enumerated constants */
#define ENUMEXTERN extern
#define bicode(a, b) a
#include "enumlist.h"
extern conString enum_off[];
extern conString enum_flag[];
extern conString enum_sub[];
extern conString enum_color[];
/* hook definitions */
extern int do_hook(int indx, const char *fmt, const char *argfmt, ...)
format_printf(2, 4);
enum Hooks {
#define gencode(id, type) H_##id
#include "hooklist.h"
#undef gencode
NUM_HOOKS
};
VEC_TYPEDEF(hookvec_t, NUM_HOOKS);
/* externs */
extern const char version[], sysname[], copyright[], contrib[], mods[];
extern int restriction, debug;
extern void internal_error(const char *file, int line,
const char *fmt, ...) format_printf(3, 4);
extern void internal_error2(const char *file, int line, const char *file2,
int line2, const char *fmt, ...) format_printf(5, 6);
#endif /* TF_H */
syntax highlighted by Code2HTML, v. 0.9.1