summaryrefslogtreecommitdiff
path: root/buffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'buffer.h')
-rw-r--r--buffer.h61
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
6typedef 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
18extern void buffer_init(buffer *,int (*)(),int,char *,unsigned int);
19
20extern int buffer_flush(buffer *);
21extern int buffer_put(buffer *,const char *,unsigned int);
22extern int buffer_putalign(buffer *,const char *,unsigned int);
23extern int buffer_putflush(buffer *,const char *,unsigned int);
24extern int buffer_puts(buffer *,const char *);
25extern int buffer_putsalign(buffer *,const char *);
26extern 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
34extern int buffer_get(buffer *,char *,unsigned int);
35extern int buffer_bget(buffer *,char *,unsigned int);
36extern int buffer_feed(buffer *);
37
38extern char *buffer_peek(buffer *);
39extern 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
50extern int buffer_copy(buffer *,buffer *);
51
52extern int buffer_unixread(int,char *,unsigned int);
53extern int buffer_unixwrite(int,const char *,unsigned int);
54
55extern buffer *buffer_0;
56extern buffer *buffer_0small;
57extern buffer *buffer_1;
58extern buffer *buffer_1small;
59extern buffer *buffer_2;
60
61#endif