diff options
| author | bozo.kopic <bozo@kopic.xyz> | 2022-08-02 01:20:12 +0200 |
|---|---|---|
| committer | bozo.kopic <bozo@kopic.xyz> | 2022-09-25 02:40:23 +0200 |
| commit | 288727f09a1b3458c268497d111349e608c3f9fa (patch) | |
| tree | d62565249fa3c7127856c65405752572fc41aca9 /src_c/stream.h | |
Diffstat (limited to 'src_c/stream.h')
| -rw-r--r-- | src_c/stream.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src_c/stream.h b/src_c/stream.h new file mode 100644 index 0000000..268f69b --- /dev/null +++ b/src_c/stream.h @@ -0,0 +1,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 |
