diff options
Diffstat (limited to 'buffer.h')
-rw-r--r-- | buffer.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/buffer.h b/buffer.h new file mode 100644 index 0000000..8f2e572 --- /dev/null +++ b/buffer.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /* Public domain. */ | ||
2 | |||
3 | #ifndef BUFFER_H | ||
4 | #define BUFFER_H | ||
5 | |||
6 | typedef struct buffer { | ||
7 | char *x; | ||
8 | unsigned int p; | ||
9 | unsigned int n; | ||
10 | int fd; | ||
11 | int (*op)(); | ||
12 | } buffer; | ||
13 | |||
14 | #define BUFFER_INIT(op,fd,buf,len) { (buf), 0, (len), (fd), (op) } | ||
15 | #define BUFFER_INSIZE 8192 | ||
16 | #define BUFFER_OUTSIZE 8192 | ||
17 | |||
18 | extern void buffer_init(buffer *,int (*)(),int,char *,unsigned int); | ||
19 | |||
20 | extern int buffer_flush(buffer *); | ||
21 | extern int buffer_put(buffer *,const char *,unsigned int); | ||
22 | extern int buffer_putalign(buffer *,const char *,unsigned int); | ||
23 | extern int buffer_putflush(buffer *,const char *,unsigned int); | ||
24 | extern int buffer_puts(buffer *,const char *); | ||
25 | extern int buffer_putsalign(buffer *,const char *); | ||
26 | extern int buffer_putsflush(buffer *,const char *); | ||
27 | |||
28 | #define buffer_PUTC(s,c) \ | ||
29 | ( ((s)->n != (s)->p) \ | ||
30 | ? ( (s)->x[(s)->p++] = (c), 0 ) \ | ||
31 | : buffer_put((s),&(c),1) \ | ||
32 | ) | ||
33 | |||
34 | extern int buffer_get(buffer *,char *,unsigned int); | ||
35 | extern int buffer_bget(buffer *,char *,unsigned int); | ||
36 | extern int buffer_feed(buffer *); | ||
37 | |||
38 | extern char *buffer_peek(buffer *); | ||
39 | extern void buffer_seek(buffer *,unsigned int); | ||
40 | |||
41 | #define buffer_PEEK(s) ( (s)->x + (s)->n ) | ||
42 | #define buffer_SEEK(s,len) ( ( (s)->p -= (len) ) , ( (s)->n += (len) ) ) | ||
43 | |||
44 | #define buffer_GETC(s,c) \ | ||
45 | ( ((s)->p > 0) \ | ||
46 | ? ( *(c) = (s)->x[(s)->n], buffer_SEEK((s),1), 1 ) \ | ||
47 | : buffer_get((s),(c),1) \ | ||
48 | ) | ||
49 | |||
50 | extern int buffer_copy(buffer *,buffer *); | ||
51 | |||
52 | extern int buffer_unixread(int,char *,unsigned int); | ||
53 | extern int buffer_unixwrite(int,const char *,unsigned int); | ||
54 | |||
55 | extern buffer *buffer_0; | ||
56 | extern buffer *buffer_0small; | ||
57 | extern buffer *buffer_1; | ||
58 | extern buffer *buffer_1small; | ||
59 | extern buffer *buffer_2; | ||
60 | |||
61 | #endif | ||