blob: 268f69b5ca228863e3b12f67eeb0725fee654ca2 (
plain) (
blame)
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
|
#ifndef LISP16_STREAM_H
#define LISP16_STREAM_H
#include "mem.h"
typedef struct lsp_in_stream_t lsp_in_stream_t;
typedef struct lsp_out_stream_t lsp_out_stream_t;
typedef lsp_int16_t (*lsp_stream_getchar_t)(lsp_in_stream_t *s);
typedef lsp_int16_t (*lsp_stream_putchar_t)(lsp_out_stream_t *s, lsp_int16_t v);
struct lsp_in_stream_t {
// internal
lsp_stream_getchar_t getchar;
lsp_bool_t next_available;
lsp_uint8_t next_value;
lsp_status_t next_status;
};
struct lsp_out_stream_t {
// internal
lsp_stream_putchar_t putchar;
};
typedef struct {
lsp_in_stream_t base;
// internal
lsp_mem_t *m;
lsp_addr_t str;
lsp_uint16_t pos;
} lsp_str_stream_t;
void lsp_in_stream_init(lsp_in_stream_t *s, lsp_stream_getchar_t getchar);
lsp_status_t lsp_in_stream_read(lsp_in_stream_t *s, lsp_uint8_t *v);
lsp_status_t lsp_in_stream_peek(lsp_in_stream_t *s, lsp_uint8_t *v);
void lsp_out_stream_init(lsp_out_stream_t *s, lsp_stream_putchar_t putchar);
lsp_status_t lsp_out_stream_write(lsp_out_stream_t *s, lsp_uint8_t v);
lsp_status_t lsp_out_stream_write_str(lsp_out_stream_t *s, char *str);
lsp_status_t lsp_out_stream_write_int(lsp_out_stream_t *s, lsp_int32_t v);
void lsp_str_stream_init(lsp_str_stream_t *s, lsp_mem_t *m, lsp_addr_t str);
#endif
|