Eerste import.
[projects/chimara/chimara.git] / src / stream.c
1 #include "stream.h"
2
3 /* Global current stream */
4 static strid_t current_stream = NULL;
5 static GList *stream_list = NULL;
6
7 strid_t
8 window_stream_new(winid_t window)
9 {
10
11         strid_t s = g_new0(struct glk_stream_struct, 1);
12         s->file_mode = filemode_Write;
13         s->stream_type = STREAM_TYPE_WINDOW;
14         s->window = window;
15
16         stream_list = g_list_prepend(stream_list, s);
17         s->stream_list = stream_list;
18
19         return s;
20 }
21
22 void
23 glk_stream_set_current(strid_t stream)
24 {
25         if(stream->file_mode != filemode_Write)
26         {
27                 g_warning("glk_stream_set_current: Cannot set current stream to non output stream");
28                 return;
29         }
30
31         current_stream = stream;
32 }
33
34 void
35 glk_put_string(char *s)
36 {
37         GError *error = NULL;
38         gchar *utf8;
39
40         switch(current_stream->stream_type)
41         {
42                 case STREAM_TYPE_WINDOW:
43                         utf8 = g_convert(s, -1, "UTF-8", "ISO-8859-1", NULL, NULL, &error);
44
45                         if(utf8 == NULL)
46                         {
47                                 g_warning("glk_put_string: Error during latin1->utf8 conversion: %s", error->message);
48                                 g_error_free(error);
49                         }
50
51                         GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(current_stream->window->widget) );
52
53                         GtkTextIter iter;
54                         gtk_text_buffer_get_end_iter(buffer, &iter);
55
56                         gtk_text_buffer_insert(buffer, &iter, utf8, -1);
57
58                         g_free(utf8);
59                         break;
60                 default:
61                         g_warning("glk_put_string: Writing to this kind of stream unsupported.");       
62         }
63 }