- /* Create stream and connect it to window */
- strid_t str = stream_new_common(0, filemode_Write, STREAM_TYPE_WINDOW);
- str->window = window;
- str->style = "normal";
- return str;
+ ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+
+ if(glk_data->unregister_obj)
+ {
+ (*glk_data->unregister_obj)(str, gidisp_Class_Stream, str->disprock);
+ str->disprock.ptr = NULL;
+ }
+
+ /* If the stream was one or more windows' echo streams, set those to NULL */
+ winid_t win;
+ for(win = glk_window_iterate(NULL, NULL); win;
+ win = glk_window_iterate(win, NULL))
+ if(win->echo_stream == str)
+ win->echo_stream = NULL;
+
+ /* Return the character counts */
+ if(result)
+ {
+ result->readcount = str->read_count;
+ result->writecount = str->write_count;
+ }
+
+ /* Remove the stream from the global stream list */
+ glk_data->stream_list = g_list_delete_link(glk_data->stream_list, str->stream_list);
+
+ /* If it was the current output stream, set that to NULL */
+ if(glk_data->current_stream == str)
+ glk_data->current_stream = NULL;
+
+ str->magic = MAGIC_FREE;
+ g_free(str);