1 #include <glib/gi18n.h>
2 #include <libchimara/glk.h>
3 #include "chimara-glk-private.h"
7 extern GPrivate *glk_data_key;
10 * garglk_fileref_get_name:
11 * @fref: A file reference.
13 * Gets the actual disk filename that @fref refers to, in the platform's
14 * native filename encoding. The string is owned by @fref and must not be
17 * Returns: a string in filename encoding.
20 garglk_fileref_get_name(frefid_t fref)
22 VALID_FILEREF(fref, return NULL);
23 return fref->filename;
27 * garglk_set_program_name:
28 * @name: Name of the Glk program that is running.
30 * This function is used to let the library know the name of the currently
31 * running Glk program, in case it wants to display this information somewhere
32 * — for example, in the title bar of a window. A typical use of this
34 * |[ garglk_set_program_name("SuperGlkFrotz 0.1"); ]|
37 garglk_set_program_name(const char *name)
39 ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
40 glk_data->program_name = g_strdup(name);
41 g_object_notify(G_OBJECT(glk_data->self), "program-name");
45 * garglk_set_program_info:
46 * @info: Information about the Glk program that is running.
48 * This function is used to provide the library with additional information
49 * about the currently running Glk program, in case it wants to display this
50 * information somewhere — for example, in an About box. A typical use of
51 * this function would be:
53 * garglk_set_program_info("SuperGlkFrotz, version 0.1\n"
54 * "Original Frotz by Stefan Jokisch\n"
55 * "Unix port by Jim Dunleavy and David Griffith\n"
56 * "Glk port by Tor Andersson\n"
57 * "Animation, networking, and evil AI by Sven Metcalfe");
61 garglk_set_program_info(const char *info)
63 ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
64 glk_data->program_info = g_strdup(info);
65 g_object_notify(G_OBJECT(glk_data->self), "program-info");
69 * garglk_set_story_name:
70 * @name: Name of the story that the Glk program is currently interpreting.
72 * If the Glk program running is an interactive fiction interpreter, then this
73 * function can be used to let the library know the name of the story currently
74 * loaded in the interpreter, in case it wants to display this information
75 * anywhere — for example, in the title bar of a window. A typical use of
76 * this function would be:
77 * |[ garglk_set_story_name("Lighan Ses Lion, el Zarf"); ]|
80 garglk_set_story_name(const char *name)
82 ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
83 glk_data->story_name = g_strdup(name);
84 g_object_notify(G_OBJECT(glk_data->self), "story-name");
88 * garglk_set_line_terminators:
90 * @keycodes: An array of <code>keycode_</code> constants.
91 * @numkeycodes: The length of @keycodes.
93 * Amends the current line input request of @win to include terminating key
94 * codes. Any of the specified key codes will terminate the line input request
95 * (without printing a newline).
97 * Usually, in the event structure returned from a line input request, @val2 is
98 * zero, but if garglk_set_line_terminators() has been called during that input
99 * request, @val2 will be filled in with the key code that terminated the input
102 * This function only applies to one input request; any subsequent line input
103 * requests on that window are treated normally.
105 * If @numkeycodes is zero, then any previous call to
106 * garglk_set_line_terminators() is cancelled and the input request is treated
109 * <warning><para>This function is not currently implemented.</para></warning>
112 garglk_set_line_terminators(winid_t win, const glui32 *keycodes, glui32 numkeycodes)
114 VALID_WINDOW(win, return);
115 g_return_if_fail(win->type != wintype_TextBuffer || win->type != wintype_TextGrid);
117 if(win->input_request_type != INPUT_REQUEST_LINE && win->input_request_type != INPUT_REQUEST_LINE_UNICODE) {
118 ILLEGAL(_("Tried to set the line terminators on a window without a line input request."));
122 WARNING(_("Not implemented"));
126 * garglk_unput_string:
127 * @str: a null-terminated string.
129 * Removes @str from the end of the current stream, if indeed it is there. The
130 * stream's write count is decreased accordingly, and the stream's echo stream
131 * is also modified, if it has one.
133 * <warning><para>This function is not currently implemented.</para></warning>
136 garglk_unput_string(char *str)
138 ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
139 g_return_if_fail(glk_data->current_stream != NULL);
141 WARNING(_("Not implemented"));
145 * garglk_unput_string_uni:
146 * @str: a zero-terminated array of Unicode code points.
148 * Like garglk_unput_string(), but for Unicode streams.
150 * <warning><para>This function is not currently implemented.</para></warning>
153 garglk_unput_string_uni(glui32 *str)
155 ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
156 g_return_if_fail(glk_data->current_stream != NULL);
158 WARNING(_("Not implemented"));
162 * garglk_set_zcolors:
163 * @fg: one of the <code>zcolor_</code> constants.
164 * @bg: one of the <code>zcolor_</code> constants.
166 * Glk works with styles, not specific colors. This is not quite compatible with
167 * the Z-machine, so this Glk extension implements Z-machine style colors.
169 * This function changes the foreground color of the current stream to @fg and
170 * the background color to @bg.
172 * <warning><para>This function is not currently implemented.</para></warning>
175 garglk_set_zcolors(glui32 fg, glui32 bg)
177 ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
178 g_return_if_fail(glk_data->current_stream != NULL);
179 g_return_if_fail(glk_data->current_stream->window != NULL);
181 WARNING(_("Not implemented"));
185 apply_reverse_color(GtkTextTag *tag, gpointer data)
187 g_object_set_data( G_OBJECT(tag), "reverse_color", data );
191 * garglk_set_reversevideo:
192 * @reverse: nonzero for reverse colors, zero for normal colors.
194 * If @reverse is not zero, uses the foreground color of the current stream as
195 * its background and vice versa. If @reverse is zero, changes the colors of the
196 * current stream back to normal.
199 garglk_set_reversevideo(glui32 reverse)
201 ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
202 g_return_if_fail(glk_data->current_stream != NULL);
203 g_return_if_fail(glk_data->current_stream->window != NULL);
205 GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(glk_data->current_stream->window->widget) );
206 GtkTextTagTable *tags = gtk_text_buffer_get_tag_table(buffer);
207 gtk_text_tag_table_foreach( tags, apply_reverse_color, GINT_TO_POINTER(reverse) );