/* 
  rl.h - definitions of all functions
  
  Copyright (C) 2001 Arthur de Jong
  
  This program 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 program is distributed in the hope that it will be useful,
  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 program; if not, write to the Free Software Foundation,
  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
*/


#ifndef _RL_H
#define _RL_H 1


/* from system.h: */
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# undef bindtextdomain
# define bindtextdomain(Domain, Directory)
# undef textdomain
# define textdomain(Domain)
# define _(Text) Text
#endif


/* the average length of a line */
#define AVGLINELEN 50


/* the size in which to load files */
#define BLOCKSIZE 8192


/* from rl.c */


/* flag to indicate output */
extern int quiet;


/* from alloc.c */


/* allocate memory with error-checking */
void *xmalloc(size_t size);


/* allocate size for a specific type */
#define xxmalloc(type,size) (type *)xmalloc(sizeof(type)*(size))


/* resize allocated memory */
void *xrealloc(void *ptr,size_t size);


/* realloc for a specific type */
#define xxrealloc(ptr,type,size) (type *)xrealloc(ptr,sizeof(type)*(size))


/* free the memory */
void xfree(void *ptr);


/* from random.c */


/* initialize the random number generator with a sensible value
   this calls srand() so rand() can be used */
void randomize();


/* returns a random number x where 0 <= x < max */
int random_below(int max);


/* thow the dice and return true (1)
   with a chance of x/y (false=0) */
int random_draw(int x,int y);


/* from buffer.c */


/* structure for holding a string */
struct buffer
{
  char *buf;     /* pointer to allocated memory */
  int alloc;      /* size of allocated memory */
  int len;        /* amount of memory in use */
};


/* intialize struct buffer and allocate memory for it */
void buffer_init(struct buffer *line,int alloc);


/* change the size of the line */
void buffer_grow(struct buffer *line,int alloc);


/* free allocated memory */
void buffer_free(struct buffer *line);


/* make a copy of the sc line into dst line
   optionaly growing of allocationg dst
   the orriginal content of dst is lost and a pointer
   to the result (dst or a new line if dst==NULL) */
struct buffer *buffer_copy(struct buffer *dst,struct buffer *src);


/* read a single line from the file 
   this function returns a struct buffer structure containing
   the read line with newline or NULL on EOF */
struct buffer *buffer_readline(FILE *in,struct buffer *line);


/* read a complete file into a buffer */
struct buffer *buffer_readfile(FILE *in,struct buffer *buf);


#endif
