1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#pragma once
typedef struct io·Reader
{
int (*read)(void*, int sz, int n, void *buf);
} io·Reader;
extern io·Reader sys·Reader;
typedef struct io·Peeker
{
byte (*get)(void*);
int (*unget)(void*, byte);
} io·Peeker;
extern io·Peeker sys·Peeker;
typedef struct io·Seeker
{
int (*seek)(void *skr, long off, int whence);
long (*tell)(void *skr);
} io·Seeker;
extern io·Seeker sys·Seeker;
typedef struct io·SeekReader
{
io·Seeker;
io·Reader;
} io·SeekReader;
extern io·SeekReader sys·SeekReader;
typedef struct io·PeekReader
{
io·Reader;
io·Peeker;
} io·PeekReader;
extern io·PeekReader sys·PeekReader;
typedef struct io·Writer
{
int (*write)(void*, int sz, int n, void *buf);
} io·Writer;
extern io·Writer sys·Writer;
typedef struct io·Putter
{
int (*put) (void*, byte);
int (*puts)(void*, string);
} io·Putter;
extern io·Putter sys·Putter;
typedef struct io·PutWriter
{
io·Writer;
io·Putter;
} io·PutWriter;
extern io·PutWriter sys·PutWriter;
typedef struct io·ReadWriter
{
io·Reader;
io·Writer;
} io·ReadWriter;
extern io·ReadWriter sys·ReadWriter;
/* buffered i/o */
typedef struct io·Header io·Header;
typedef struct io·Buffer io·Buffer;
#define iota(x) (1 << (x))
enum
{
io·BufEof = -1,
io·BufErr = -2,
io·BufUngets = 8,
io·BufMagic = 0x314159,
io·BufLen = 2*4096,
/* state */
io·BufNil = iota(0),
io·BufRdr = iota(1),
io·BufWtr = iota(2),
io·BufEnd = iota(3)
};
#undef iota
struct io·Header
{
int state, fd, flag;
int ilen; /* negative number of bytes at end of buffer */
int olen; /* number of bytes at start of buffer */
int nread; /* number of bytes after last readline */
int runesz; /* number of bytes of last getrune */
int cap; /* size of buffer */
intptr pos; /* position in file */
uchar *b,*g,*e; /* start, good bytes, end of byte pointers */
};
struct io·Buffer
{
io·Header;
uchar bytes[io·BufLen+io·BufUngets];
};
int io·open(char *path, int flag, io·Buffer *io);
int io·openfd(int fd, int flag, io·Buffer *io);
int io·close(io·Header *io);
int io·init(io·Buffer *io, int fd, int mode);
int io·initcap(io·Header *io, int fd, int mode, int cap, uchar *buf);
int io·flush(io·Header *io);
intptr io·read(io·Header *io, intptr len, void *buf);
void *io·readuntil(io·Header *io, int delim);
void *io·readline(io·Header *io, int null);
intptr io·write(io·Header *io, intptr len, void *buf);
int io·getc(io·Header *io);
rune io·getr(io·Header *io);
int io·ungetc(io·Header *io);
rune io·ungetr(io·Header *io);
int io·seek(io·Header *io, intptr offset, int whence, intptr *pos);
intptr io·offset(io·Header *io);
int io·print(io·Header *io, char *fmt, ...);
int io·vprint(io·Header *io, char *fmt, va_list args);
|