X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fglk.h;fp=libchimara%2Fglk.h;h=6b64f88b3347eb04bc68f7a67908b8e26ef6a15a;hb=0b85f1dd5993e2ed111ec2ba13bbbb4ebda06ada;hp=0000000000000000000000000000000000000000;hpb=08f8444e2ae5480eea1cf7e2c1e2eb57f46152db;p=rodin%2Fchimara.git diff --git a/libchimara/glk.h b/libchimara/glk.h new file mode 100644 index 0000000..6b64f88 --- /dev/null +++ b/libchimara/glk.h @@ -0,0 +1,349 @@ +#ifndef GLK_H +#define GLK_H + +/* glk.h: Header file for Glk API, version 0.7.0. + Designed by Andrew Plotkin + http://www.eblong.com/zarf/glk/index.html + + This file is copyright 1998-2004 by Andrew Plotkin. You may copy, + distribute, and incorporate it into your own programs, by any means + and under any conditions, as long as you do not modify it. You may + also modify this file, incorporate it into your own programs, + and distribute the modified version, as long as you retain a notice + in your program or documentation which mentions my name and the URL + shown above. +*/ + +/* You may have to edit the definition of glui32 to make sure it's really a + 32-bit unsigned integer type, and glsi32 to make sure it's really a + 32-bit signed integer type. If they're not, horrible things will happen. */ +#include +typedef uint32_t glui32; +typedef int32_t glsi32; + +/* These are the compile-time conditionals that reveal various Glk optional + modules. */ +#define GLK_MODULE_UNICODE +#define GLK_MODULE_IMAGE +#define GLK_MODULE_SOUND +#define GLK_MODULE_HYPERLINKS + +/* These types are opaque object identifiers. They're pointers to opaque + C structures, which are defined differently by each library. */ +typedef struct glk_window_struct *winid_t; +typedef struct glk_stream_struct *strid_t; +typedef struct glk_fileref_struct *frefid_t; +typedef struct glk_schannel_struct *schanid_t; + +#define gestalt_Version (0) +#define gestalt_CharInput (1) +#define gestalt_LineInput (2) +#define gestalt_CharOutput (3) +#define gestalt_CharOutput_CannotPrint (0) +#define gestalt_CharOutput_ApproxPrint (1) +#define gestalt_CharOutput_ExactPrint (2) +#define gestalt_MouseInput (4) +#define gestalt_Timer (5) +#define gestalt_Graphics (6) +#define gestalt_DrawImage (7) +#define gestalt_Sound (8) +#define gestalt_SoundVolume (9) +#define gestalt_SoundNotify (10) +#define gestalt_Hyperlinks (11) +#define gestalt_HyperlinkInput (12) +#define gestalt_SoundMusic (13) +#define gestalt_GraphicsTransparency (14) +#define gestalt_Unicode (15) + +#define evtype_None (0) +#define evtype_Timer (1) +#define evtype_CharInput (2) +#define evtype_LineInput (3) +#define evtype_MouseInput (4) +#define evtype_Arrange (5) +#define evtype_Redraw (6) +#define evtype_SoundNotify (7) +#define evtype_Hyperlink (8) + +typedef struct event_struct { + glui32 type; + winid_t win; + glui32 val1, val2; +} event_t; + +#define keycode_Unknown (0xffffffff) +#define keycode_Left (0xfffffffe) +#define keycode_Right (0xfffffffd) +#define keycode_Up (0xfffffffc) +#define keycode_Down (0xfffffffb) +#define keycode_Return (0xfffffffa) +#define keycode_Delete (0xfffffff9) +#define keycode_Escape (0xfffffff8) +#define keycode_Tab (0xfffffff7) +#define keycode_PageUp (0xfffffff6) +#define keycode_PageDown (0xfffffff5) +#define keycode_Home (0xfffffff4) +#define keycode_End (0xfffffff3) +#define keycode_Func1 (0xffffffef) +#define keycode_Func2 (0xffffffee) +#define keycode_Func3 (0xffffffed) +#define keycode_Func4 (0xffffffec) +#define keycode_Func5 (0xffffffeb) +#define keycode_Func6 (0xffffffea) +#define keycode_Func7 (0xffffffe9) +#define keycode_Func8 (0xffffffe8) +#define keycode_Func9 (0xffffffe7) +#define keycode_Func10 (0xffffffe6) +#define keycode_Func11 (0xffffffe5) +#define keycode_Func12 (0xffffffe4) +/* The last keycode is always (0x100000000 - keycode_MAXVAL) */ +#define keycode_MAXVAL (28) + +#define style_Normal (0) +#define style_Emphasized (1) +#define style_Preformatted (2) +#define style_Header (3) +#define style_Subheader (4) +#define style_Alert (5) +#define style_Note (6) +#define style_BlockQuote (7) +#define style_Input (8) +#define style_User1 (9) +#define style_User2 (10) +#define style_NUMSTYLES (11) + +typedef struct stream_result_struct { + glui32 readcount; + glui32 writecount; +} stream_result_t; + +#define wintype_AllTypes (0) +#define wintype_Pair (1) +#define wintype_Blank (2) +#define wintype_TextBuffer (3) +#define wintype_TextGrid (4) +#define wintype_Graphics (5) + +#define winmethod_Left (0x00) +#define winmethod_Right (0x01) +#define winmethod_Above (0x02) +#define winmethod_Below (0x03) +#define winmethod_DirMask (0x0f) + +#define winmethod_Fixed (0x10) +#define winmethod_Proportional (0x20) +#define winmethod_DivisionMask (0xf0) + +#define fileusage_Data (0x00) +#define fileusage_SavedGame (0x01) +#define fileusage_Transcript (0x02) +#define fileusage_InputRecord (0x03) +#define fileusage_TypeMask (0x0f) + +#define fileusage_TextMode (0x100) +#define fileusage_BinaryMode (0x000) + +#define filemode_Write (0x01) +#define filemode_Read (0x02) +#define filemode_ReadWrite (0x03) +#define filemode_WriteAppend (0x05) + +#define seekmode_Start (0) +#define seekmode_Current (1) +#define seekmode_End (2) + +#define stylehint_Indentation (0) +#define stylehint_ParaIndentation (1) +#define stylehint_Justification (2) +#define stylehint_Size (3) +#define stylehint_Weight (4) +#define stylehint_Oblique (5) +#define stylehint_Proportional (6) +#define stylehint_TextColor (7) +#define stylehint_BackColor (8) +#define stylehint_ReverseColor (9) +#define stylehint_NUMHINTS (10) + +#define stylehint_just_LeftFlush (0) +#define stylehint_just_LeftRight (1) +#define stylehint_just_Centered (2) +#define stylehint_just_RightFlush (3) + +/* glk_main() is the top-level function which you define. The Glk library + calls it. */ +extern void glk_main(void); + +extern void glk_exit(void); +extern void glk_set_interrupt_handler(void (*func)(void)); +extern void glk_tick(void); + +extern glui32 glk_gestalt(glui32 sel, glui32 val); +extern glui32 glk_gestalt_ext(glui32 sel, glui32 val, glui32 *arr, + glui32 arrlen); + +extern unsigned char glk_char_to_lower(unsigned char ch); +extern unsigned char glk_char_to_upper(unsigned char ch); + +extern winid_t glk_window_get_root(void); +extern winid_t glk_window_open(winid_t split, glui32 method, glui32 size, + glui32 wintype, glui32 rock); +extern void glk_window_close(winid_t win, stream_result_t *result); +extern void glk_window_get_size(winid_t win, glui32 *widthptr, + glui32 *heightptr); +extern void glk_window_set_arrangement(winid_t win, glui32 method, + glui32 size, winid_t keywin); +extern void glk_window_get_arrangement(winid_t win, glui32 *methodptr, + glui32 *sizeptr, winid_t *keywinptr); +extern winid_t glk_window_iterate(winid_t win, glui32 *rockptr); +extern glui32 glk_window_get_rock(winid_t win); +extern glui32 glk_window_get_type(winid_t win); +extern winid_t glk_window_get_parent(winid_t win); +extern winid_t glk_window_get_sibling(winid_t win); +extern void glk_window_clear(winid_t win); +extern void glk_window_move_cursor(winid_t win, glui32 xpos, glui32 ypos); + +extern strid_t glk_window_get_stream(winid_t win); +extern void glk_window_set_echo_stream(winid_t win, strid_t str); +extern strid_t glk_window_get_echo_stream(winid_t win); +extern void glk_set_window(winid_t win); + +extern strid_t glk_stream_open_file(frefid_t fileref, glui32 fmode, + glui32 rock); +extern strid_t glk_stream_open_memory(char *buf, glui32 buflen, glui32 fmode, + glui32 rock); +extern void glk_stream_close(strid_t str, stream_result_t *result); +extern strid_t glk_stream_iterate(strid_t str, glui32 *rockptr); +extern glui32 glk_stream_get_rock(strid_t str); +extern void glk_stream_set_position(strid_t str, glsi32 pos, glui32 seekmode); +extern glui32 glk_stream_get_position(strid_t str); +extern void glk_stream_set_current(strid_t str); +extern strid_t glk_stream_get_current(void); + +extern void glk_put_char(unsigned char ch); +extern void glk_put_char_stream(strid_t str, unsigned char ch); +extern void glk_put_string(char *s); +extern void glk_put_string_stream(strid_t str, char *s); +extern void glk_put_buffer(char *buf, glui32 len); +extern void glk_put_buffer_stream(strid_t str, char *buf, glui32 len); +extern void glk_set_style(glui32 styl); +extern void glk_set_style_stream(strid_t str, glui32 styl); + +extern glsi32 glk_get_char_stream(strid_t str); +extern glui32 glk_get_line_stream(strid_t str, char *buf, glui32 len); +extern glui32 glk_get_buffer_stream(strid_t str, char *buf, glui32 len); + +extern void glk_stylehint_set(glui32 wintype, glui32 styl, glui32 hint, + glsi32 val); +extern void glk_stylehint_clear(glui32 wintype, glui32 styl, glui32 hint); +extern glui32 glk_style_distinguish(winid_t win, glui32 styl1, glui32 styl2); +extern glui32 glk_style_measure(winid_t win, glui32 styl, glui32 hint, + glui32 *result); + +extern frefid_t glk_fileref_create_temp(glui32 usage, glui32 rock); +extern frefid_t glk_fileref_create_by_name(glui32 usage, char *name, + glui32 rock); +extern frefid_t glk_fileref_create_by_prompt(glui32 usage, glui32 fmode, + glui32 rock); +extern frefid_t glk_fileref_create_from_fileref(glui32 usage, frefid_t fref, + glui32 rock); +extern void glk_fileref_destroy(frefid_t fref); +extern frefid_t glk_fileref_iterate(frefid_t fref, glui32 *rockptr); +extern glui32 glk_fileref_get_rock(frefid_t fref); +extern void glk_fileref_delete_file(frefid_t fref); +extern glui32 glk_fileref_does_file_exist(frefid_t fref); + +extern void glk_select(event_t *event); +extern void glk_select_poll(event_t *event); + +extern void glk_request_timer_events(glui32 millisecs); + +extern void glk_request_line_event(winid_t win, char *buf, glui32 maxlen, + glui32 initlen); +extern void glk_request_char_event(winid_t win); +extern void glk_request_mouse_event(winid_t win); + +extern void glk_cancel_line_event(winid_t win, event_t *event); +extern void glk_cancel_char_event(winid_t win); +extern void glk_cancel_mouse_event(winid_t win); + +#ifdef GLK_MODULE_UNICODE + +extern glui32 glk_buffer_to_lower_case_uni(glui32 *buf, glui32 len, + glui32 numchars); +extern glui32 glk_buffer_to_upper_case_uni(glui32 *buf, glui32 len, + glui32 numchars); +extern glui32 glk_buffer_to_title_case_uni(glui32 *buf, glui32 len, + glui32 numchars, glui32 lowerrest); + +extern void glk_put_char_uni(glui32 ch); +extern void glk_put_string_uni(glui32 *s); +extern void glk_put_buffer_uni(glui32 *buf, glui32 len); +extern void glk_put_char_stream_uni(strid_t str, glui32 ch); +extern void glk_put_string_stream_uni(strid_t str, glui32 *s); +extern void glk_put_buffer_stream_uni(strid_t str, glui32 *buf, glui32 len); + +extern glsi32 glk_get_char_stream_uni(strid_t str); +extern glui32 glk_get_buffer_stream_uni(strid_t str, glui32 *buf, glui32 len); +extern glui32 glk_get_line_stream_uni(strid_t str, glui32 *buf, glui32 len); + +extern strid_t glk_stream_open_file_uni(frefid_t fileref, glui32 fmode, + glui32 rock); +extern strid_t glk_stream_open_memory_uni(glui32 *buf, glui32 buflen, + glui32 fmode, glui32 rock); + +extern void glk_request_char_event_uni(winid_t win); +extern void glk_request_line_event_uni(winid_t win, glui32 *buf, + glui32 maxlen, glui32 initlen); + +#endif /* GLK_MODULE_UNICODE */ + +#ifdef GLK_MODULE_IMAGE + +#define imagealign_InlineUp (0x01) +#define imagealign_InlineDown (0x02) +#define imagealign_InlineCenter (0x03) +#define imagealign_MarginLeft (0x04) +#define imagealign_MarginRight (0x05) + +extern glui32 glk_image_draw(winid_t win, glui32 image, glsi32 val1, glsi32 val2); +extern glui32 glk_image_draw_scaled(winid_t win, glui32 image, + glsi32 val1, glsi32 val2, glui32 width, glui32 height); +extern glui32 glk_image_get_info(glui32 image, glui32 *width, glui32 *height); + +extern void glk_window_flow_break(winid_t win); + +extern void glk_window_erase_rect(winid_t win, + glsi32 left, glsi32 top, glui32 width, glui32 height); +extern void glk_window_fill_rect(winid_t win, glui32 color, + glsi32 left, glsi32 top, glui32 width, glui32 height); +extern void glk_window_set_background_color(winid_t win, glui32 color); + +#endif /* GLK_MODULE_IMAGE */ + +#ifdef GLK_MODULE_SOUND + +extern schanid_t glk_schannel_create(glui32 rock); +extern void glk_schannel_destroy(schanid_t chan); +extern schanid_t glk_schannel_iterate(schanid_t chan, glui32 *rockptr); +extern glui32 glk_schannel_get_rock(schanid_t chan); + +extern glui32 glk_schannel_play(schanid_t chan, glui32 snd); +extern glui32 glk_schannel_play_ext(schanid_t chan, glui32 snd, glui32 repeats, + glui32 notify); +extern void glk_schannel_stop(schanid_t chan); +extern void glk_schannel_set_volume(schanid_t chan, glui32 vol); + +extern void glk_sound_load_hint(glui32 snd, glui32 flag); + +#endif /* GLK_MODULE_SOUND */ + +#ifdef GLK_MODULE_HYPERLINKS + +extern void glk_set_hyperlink(glui32 linkval); +extern void glk_set_hyperlink_stream(strid_t str, glui32 linkval); +extern void glk_request_hyperlink_event(winid_t win); +extern void glk_cancel_hyperlink_event(winid_t win); + +#endif /* GLK_MODULE_HYPERLINKS */ + +#endif /* GLK_H */