Separated library source code from testing code, fixing #6
[rodin/chimara.git] / libchimara / stream.h
diff --git a/libchimara/stream.h b/libchimara/stream.h
new file mode 100644 (file)
index 0000000..0ea398e
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef STREAM_H
+#define STREAM_H
+
+#include <gtk/gtk.h>
+#include "glk.h"
+#include "window.h"
+
+enum StreamType
+{
+       STREAM_TYPE_WINDOW,
+       STREAM_TYPE_MEMORY,
+       STREAM_TYPE_FILE
+};
+
+/**
+ * glk_stream_struct:
+ *
+ * This is an opaque structure (see <link linkend="chimara-Opaque-Structures">
+ * Opaque Structures</link> and should not be accessed directly.
+ */
+struct glk_stream_struct
+{
+       /*< private >*/
+       glui32 magic, rock;
+       /* Pointer to the list node in the global stream list that contains this
+       stream */
+       GList* stream_list;
+       /* Stream parameters */
+       glui32 file_mode;
+       glui32 read_count;
+       glui32 write_count;
+       enum StreamType type;
+       /* Specific to window stream: the window this stream is connected to */
+       winid_t window;
+       /* For memory and file streams */
+       gboolean unicode;
+       /* Specific to memory streams */
+       gchar *buffer;
+       glui32 *ubuffer;
+       glui32 mark;
+       glui32 buflen;
+       /* Specific to file streams */
+       FILE *file_pointer;
+       gboolean binary;
+       gchar *filename; /* Displayable filename in UTF-8 for error handling */
+
+       gchar *style; /* Name of the current style */
+};
+
+G_GNUC_INTERNAL strid_t window_stream_new(winid_t window);
+G_GNUC_INTERNAL void stream_close_common(strid_t str, stream_result_t *result);
+#endif