aboutsummaryrefslogtreecommitdiff
path: root/src_c/stream.h
diff options
context:
space:
mode:
authorbozo.kopic <bozo@kopic.xyz>2022-08-02 01:20:12 +0200
committerbozo.kopic <bozo@kopic.xyz>2022-09-25 02:40:23 +0200
commit288727f09a1b3458c268497d111349e608c3f9fa (patch)
treed62565249fa3c7127856c65405752572fc41aca9 /src_c/stream.h
Diffstat (limited to 'src_c/stream.h')
-rw-r--r--src_c/stream.h46
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