cdirt/ascii/
cdirt/data/BULL/
cdirt/data/ZONES/PENDING/
cdirt/pending/
cdirt/src/utils/
cdirt/utils/
#ifndef _WRITER_H
#define _WRITER_H

typedef struct _wr_line {
  struct _wr_line *next;
  char		  *s;
} WrLine;

typedef struct {
  void		*previous;
  char		*prevprompt;
  void		(*exit_handler)(void *w, void *arg, int arglen);
  void		(*old_inp_h)(char *str);
  char		*prompt;
  void		*arg;
  int		arglen;
  int		flags;
  int		max_lines;
  int		num_lines;
  WrLine	*first, *last;
} WrHead;

void start_writer(char *h,        /* Header line */
		  char *p,        /* Prompt string */
		  void *arg,      /* Argument data to handler. */
		  int  arglen,    /* Length of argument data */
		  void handler(void *x,void *arg,int arglen), /* handler */
		  int  flags,     /* Flags */
		  int max_lines); /* Max number of lines */

int wnum_lines(void *w); /* Get number of lines left in buffer */

int wnum_chars(void *w); /* Get number of chars (no \n) in buffer */


/* These functions are used by handler to read the text */
/* Get one character from writer, all memory is released
 * when EOF is returned. including the memory area for arg.
 * if arg is to be used after reading EOF, make sure to copy it
 * to a safe place before EOF is read by wgetc.
 */
int  wgetc(void *w);     /* get one character from writer */

/* Unget one character from writer, unget EOF is legal and effectively
 * empties the buffer
 */
int  wungetc(int c, void *w);
char *wgets(char *buf,int buflen,void *w); /* Get one line of characters */

/* terminate writer terminates the writer by first doing wungetc(EOF,x);
 * followed by reading that same EOF character and thereby
 * releasing all memory used by the writer.
 */
void terminate_writer(void *w);

/* Terminates all writers used by player plx. */
void terminate_all_writers(int plx);

void write_handler(char *line);

/* flags */
#define WR_CMD    0x0100    /* Commands are permitted */
#define WR_CMDCH    0x7f    /* Mask for special character, default '*' */

#endif