1#ifndef _scanner_h
2#define	_scanner_h
3
4#include <stdio.h>
5#include "tools/re2c/token.h"
6
7typedef struct Scanner {
8    FILE		*in;
9    unsigned char	*bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof;
10    unsigned int	tchar, tline, cline;
11} Scanner;
12
13void Scanner_init(Scanner*, FILE *);
14static Scanner *Scanner_new(FILE *);
15
16int Scanner_echo(Scanner*, FILE *);
17int Scanner_scan(Scanner*);
18void Scanner_fatal(Scanner*, const char*);
19static SubStr Scanner_token(Scanner*);
20static unsigned int Scanner_line(Scanner*);
21
22static SubStr
23Scanner_token(Scanner *s)
24{
25    SubStr r;
26    SubStr_init_u(&r, s->tok, s->cur - s->tok);
27    return r;
28}
29
30static unsigned int
31Scanner_line(Scanner *s)
32{
33    return s->cline;
34}
35
36static Scanner *
37Scanner_new(FILE *i)
38{
39    Scanner *r = malloc(sizeof(Scanner));
40    Scanner_init(r, i);
41    return r;
42}
43
44#endif
45