/*
** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
** See ../LICENSE for license information.
**
*/

# ifndef READER_H
# define READER_H

extern /*@null@*/ char *reader_readLine (FILE *p_f, /*@returned@*/ /*@out@*/ char *p_s, int p_max) 
   /*@modifies *p_f, p_s@*/ ;

extern int reader_getInt (char **p_s) /*@modifies *p_s@*/ ;
extern char reader_loadChar (char **p_s) /*@modifies *p_s@*/ ; 
extern double reader_getDouble (char **p_s) /*@modifies *p_s@*/ ;

extern void reader_doCheckChar (char ** p_s, char p_c, const char *p_file, int p_line)
   /*@modifies *p_s;@*/;

extern bool reader_optCheckChar (char **p_s, char p_c) /*@modifies *p_s;@*/ ;
extern void reader_checkChar (char **p_s, char p_c) /*@modifies *p_s;@*/ ;
# define reader_checkChar(s,c)  (reader_doCheckChar (s, c, __FILE__, __LINE__))
extern /*@only@*/ /*@null@*/ char *reader_getWord (char **p_s) /*@modifies *p_s@*/ ;

extern cstring reader_getStringWord (char **p_s) /*@modifies *p_s@*/ ;
# define reader_getStringWord(s)     (cstring_fromChars(reader_getWord(s)))

extern cstring reader_readUntil (char **p_s, char p_x) /*@modifies *p_s@*/ ;
extern cstring reader_readUntilOne (char **p_s, const char *p_x) /*@modifies *p_s@*/ ;

extern void reader_checkUngetc (int p_c, FILE *p_f) /*@modifies *p_f@*/ ;

# else
# error "Multiple include"
# endif






