void os_banner_styles_reset (void) { glk_stylehint_clear(wintype_AllTypes, style_Alert, stylehint_Proportional); glk_stylehint_clear(wintype_AllTypes, style_Subheader, stylehint_Proportional); glk_stylehint_clear(wintype_AllTypes, style_Emphasized, stylehint_Proportional); glk_stylehint_clear(wintype_AllTypes, style_Normal, stylehint_Proportional); glk_stylehint_clear(wintype_AllTypes, style_User1, stylehint_Proportional); glk_stylehint_clear(wintype_AllTypes, style_User2, stylehint_Proportional); glk_stylehint_clear(wintype_AllTypes, style_Alert, stylehint_TextColor); glk_stylehint_clear(wintype_AllTypes, style_Subheader, stylehint_TextColor); glk_stylehint_clear(wintype_AllTypes, style_Emphasized, stylehint_TextColor); glk_stylehint_clear(wintype_AllTypes, style_Normal, stylehint_TextColor); glk_stylehint_clear(wintype_AllTypes, style_User1, stylehint_TextColor); glk_stylehint_clear(wintype_AllTypes, style_User2, stylehint_TextColor); glk_stylehint_clear(wintype_AllTypes, style_Alert, stylehint_BackColor); glk_stylehint_clear(wintype_AllTypes, style_Subheader, stylehint_BackColor); glk_stylehint_clear(wintype_AllTypes, style_Emphasized, stylehint_BackColor); glk_stylehint_clear(wintype_AllTypes, style_Normal, stylehint_BackColor); glk_stylehint_clear(wintype_AllTypes, style_User1, stylehint_BackColor); glk_stylehint_clear(wintype_AllTypes, style_User2, stylehint_BackColor); #ifdef GARGLK /* reset our default colors with a superfluous hint */ glk_stylehint_set(wintype_AllTypes, style_Normal, stylehint_TextColor, mainfg); glk_stylehint_set(wintype_AllTypes, style_Normal, stylehint_BackColor, mainbg); #endif /* GARGLK */ }
void GlkInterface::initialize() { uint width, height; /* * Init glk stuff */ // monor glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Oblique, 0); // monob glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Oblique, 0); // monoi glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Oblique, 1); // monoz glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Oblique, 1); // propr glk_stylehint_set(wintype_TextBuffer, style_Normal, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Normal, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Normal, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Normal, stylehint_Oblique, 0); // propb glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Header, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Header, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Header, stylehint_Oblique, 0); // propi glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Emphasized, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Emphasized, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Emphasized, stylehint_Oblique, 1); // propi glk_stylehint_set(wintype_TextBuffer, style_Note, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Note, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Note, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Note, stylehint_Oblique, 1); /* * Get the screen size */ gos_lower = glk_window_open(0, 0, 0, wintype_TextGrid, 0); if (!gos_lower) gos_lower = glk_window_open(0, 0, 0, wintype_TextBuffer, 0); glk_window_get_size(gos_lower, &width, &height); glk_window_close(gos_lower, nullptr); gos_channel = nullptr; /* * Icky magic bit setting */ if (h_version == V3 && _tandyBit) h_config |= CONFIG_TANDY; if (h_version == V3 && gos_upper) h_config |= CONFIG_SPLITSCREEN; if (h_version == V3 && !gos_upper) h_config |= CONFIG_NOSTATUSLINE; if (h_version >= V4) h_config |= CONFIG_BOLDFACE | CONFIG_EMPHASIS | CONFIG_FIXED | CONFIG_TIMEDINPUT | CONFIG_COLOUR; if (h_version >= V5) h_flags &= ~(GRAPHICS_FLAG | MOUSE_FLAG | MENU_FLAG); if ((h_version >= 5) && (h_flags & SOUND_FLAG)) h_flags |= SOUND_FLAG; if ((h_version == 3) && (h_flags & OLD_SOUND_FLAG)) h_flags |= OLD_SOUND_FLAG; if ((h_version == 6) && (_sound != 0)) h_config |= CONFIG_SOUND; if (h_version >= V5 && (h_flags & UNDO_FLAG)) if (_undo_slots == 0) h_flags &= ~UNDO_FLAG; h_screen_cols = width; h_screen_rows = height; h_screen_height = h_screen_rows; h_screen_width = h_screen_cols; h_font_width = 1; h_font_height = 1; // Must be after screen dimensions are computed if (g_conf->_graphics) { if (_blorb) // Blorb file containers allow graphics h_flags |= GRAPHICS_FLAG; else if ((h_version == V6 || _storyId == BEYOND_ZORK) && initPictures()) // Earlier Infocom game with picture files h_flags |= GRAPHICS_FLAG; } // Use the ms-dos interpreter number for v6, because that's the // kind of graphics files we understand h_interpreter_number = h_version == 6 ? INTERP_MSDOS : INTERP_AMIGA; h_interpreter_version = 'F'; // Set these per spec 8.3.2. h_default_foreground = WHITE_COLOUR; h_default_background = BLACK_COLOUR; if (h_flags & COLOUR_FLAG) h_flags &= ~COLOUR_FLAG; /* * Open the windows */ if (_storyId == BEYOND_ZORK) showBeyondZorkTitle(); gos_lower = glk_window_open(0, 0, 0, wintype_TextBuffer, 0); gos_upper = glk_window_open(gos_lower, winmethod_Above | winmethod_Fixed, 0, wintype_TextGrid, 0); glk_set_window(gos_lower); gos_curwin = gos_lower; // Set the screen colors garglk_set_zcolors(_defaultForeground, _defaultBackground); // Add any sound folder or zip addSound(); }
void os_init_screen(void) { glui32 width, height; /* * Init glk stuff */ /* monor */ glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Oblique, 0); /* monob */ glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Oblique, 0); /* monoi */ glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Oblique, 1); /* monoz */ glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Oblique, 1); /* propr */ glk_stylehint_set(wintype_TextBuffer, style_Normal, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Normal, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Normal, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Normal, stylehint_Oblique, 0); /* propb */ glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Header, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Header, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Header, stylehint_Oblique, 0); /* propi */ glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Emphasized, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Emphasized, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Emphasized, stylehint_Oblique, 1); /* propi */ glk_stylehint_set(wintype_TextBuffer, style_Note, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Note, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Note, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Note, stylehint_Oblique, 1); gos_lower = glk_window_open(0, 0, 0, wintype_TextGrid, 0); if (!gos_lower) gos_lower = glk_window_open(0, 0, 0, wintype_TextBuffer, 0); glk_window_get_size(gos_lower, &width, &height); glk_window_close(gos_lower, NULL); gos_lower = glk_window_open(0, 0, 0, wintype_TextBuffer, 0); gos_upper = glk_window_open(gos_lower, winmethod_Above | winmethod_Fixed, 0, wintype_TextGrid, 0); gos_channel = NULL; glk_set_window(gos_lower); gos_curwin = gos_lower; /* * Icky magic bit setting */ if (h_version == V3 && user_tandy_bit) h_config |= CONFIG_TANDY; if (h_version == V3 && gos_upper) h_config |= CONFIG_SPLITSCREEN; if (h_version == V3 && !gos_upper) h_config |= CONFIG_NOSTATUSLINE; if (h_version >= V4) h_config |= CONFIG_BOLDFACE | CONFIG_EMPHASIS | CONFIG_FIXED | CONFIG_TIMEDINPUT | CONFIG_COLOUR; if (h_version >= V5) h_flags &= ~(GRAPHICS_FLAG | MOUSE_FLAG | MENU_FLAG); if ((h_version >= 5) && (h_flags & SOUND_FLAG)) h_flags |= SOUND_FLAG; if ((h_version == 3) && (h_flags & OLD_SOUND_FLAG)) h_flags |= OLD_SOUND_FLAG; if ((h_version == 6) && (option_sound != 0)) h_config |= CONFIG_SOUND; if (h_version >= V5 && (h_flags & UNDO_FLAG)) if (option_undo_slots == 0) h_flags &= ~UNDO_FLAG; h_screen_cols = width; h_screen_rows = height; h_screen_height = h_screen_rows; h_screen_width = h_screen_cols; h_font_width = 1; h_font_height = 1; /* Must be after screen dimensions are computed. */ if (h_version == V6) { h_flags &= ~GRAPHICS_FLAG; } /* Use the ms-dos interpreter number for v6, because that's the * kind of graphics files we understand. Otherwise, use DEC. */ h_interpreter_number = h_version == 6 ? INTERP_MSDOS : INTERP_DEC_20; h_interpreter_version = 'F'; { /* Set these per spec 8.3.2. */ h_default_foreground = WHITE_COLOUR; h_default_background = BLACK_COLOUR; if (h_flags & COLOUR_FLAG) h_flags &= ~COLOUR_FLAG; } }
void hugo_settextwindow(int left, int top, int right, int bottom) { static int secondwin_bottom = 0; /* Hugo's arbitrarily positioned windows don't currently mesh with what Glk has to offer, so we have to ignore any non-Glk-ish Windows and just maintain the current parameters */ if ((top!=1 || bottom>=physical_windowbottom/FIXEDLINEHEIGHT+1) /* Pre-v2.4 didn't support proper windowing */ && (game_version>=24 || !inwindow)) { in_valid_window = false; /* Glk-illegal floating window; setting currentwin to NULL will tell hugo_print() not to print in it: */ if (bottom<physical_windowbottom/FIXEDLINEHEIGHT+1) { currentwin = NULL; glk_set_window(mainwin); return; } else glk_set_window(currentwin = mainwin); } /* Otherwise this is a valid window (positioned along the top of the screen a la a status window), so... */ else { /* Arbitrary height of 4 lines for pre-v2.4 windows */ if (game_version < 24) bottom = 4; /* ...either create a new window if none exists... */ if (!secondwin) { glk_stylehint_set (wintype_TextGrid, style_Normal, stylehint_ReverseColor, 1); glk_stylehint_set (wintype_TextGrid, style_Subheader, stylehint_ReverseColor, 1); glk_stylehint_set (wintype_TextGrid, style_Emphasized, stylehint_ReverseColor, 1); winid_t p; p = glk_window_get_parent(mainwin); secondwin = glk_window_open(mainwin,//p, winmethod_Above | winmethod_Fixed, bottom, wintype_TextGrid, 0); } /* ...or resize the existing one if necessary */ else if (bottom!=secondwin_bottom) { winid_t p; p = glk_window_get_parent(secondwin); glk_window_set_arrangement(p, winmethod_Above | winmethod_Fixed, bottom, secondwin); } if (secondwin) { if (game_version < 24) glk_window_clear(secondwin); glk_set_window(currentwin = secondwin); in_valid_window = true; secondwin_bottom = bottom; } else { currentwin = NULL; glk_set_window(mainwin); secondwin_bottom = 0; return; } } physical_windowleft = (left-1)*FIXEDCHARWIDTH; physical_windowtop = (top-1)*FIXEDLINEHEIGHT; physical_windowright = right*FIXEDCHARWIDTH-1; physical_windowbottom = bottom*FIXEDLINEHEIGHT-1; physical_windowwidth = (right-left+1)*FIXEDCHARWIDTH; physical_windowheight = (bottom-top+1)*FIXEDLINEHEIGHT; }
void glk_stylehint_set(glui32 wintype, glui32 style, glui32 hint, glsi32 val) { style_t *styles; int p, b, i; if (wintype == wintype_AllTypes) { glk_stylehint_set(wintype_TextGrid, style, hint, val); glk_stylehint_set(wintype_TextBuffer, style, hint, val); return; } if (wintype == wintype_TextGrid) styles = gli_gstyles; else if (wintype == wintype_TextBuffer) styles = gli_tstyles; else return; if (!gli_conf_stylehint) return; switch (hint) { case stylehint_TextColor: styles[style].fg[0] = (val >> 16) & 0xff; styles[style].fg[1] = (val >> 8) & 0xff; styles[style].fg[2] = (val) & 0xff; break; case stylehint_BackColor: styles[style].bg[0] = (val >> 16) & 0xff; styles[style].bg[1] = (val >> 8) & 0xff; styles[style].bg[2] = (val) & 0xff; break; case stylehint_ReverseColor: styles[style].reverse = (val != 0); break; case stylehint_Proportional: if (wintype == wintype_TextBuffer) { p = val > 0; b = isbold(styles[style].font); i = isitalic(styles[style].font); styles[style].font = makefont(p, b, i); } break; case stylehint_Weight: p = isprop(styles[style].font); b = val > 0; i = isitalic(styles[style].font); styles[style].font = makefont(p, b, i); break; case stylehint_Oblique: p = isprop(styles[style].font); b = isbold(styles[style].font); i = val > 0; styles[style].font = makefont(p, b, i); break; } if (wintype == wintype_TextBuffer && style == style_Normal && hint == stylehint_BackColor) { memcpy(gli_window_color, styles[style].bg, 3); } if (wintype == wintype_TextBuffer && style == style_Normal && hint == stylehint_TextColor) { memcpy(gli_more_color, styles[style].fg, 3); memcpy(gli_caret_color, styles[style].fg, 3); } }
void gidispatch_call(glui32 funcnum, glui32 numargs, gluniversal_t *arglist) { gidispatch_function_t *gidispatch_function; char *prototype; int argument = 0; int slot = 0; gidispatch_function = gidispatch_get_function_by_id(funcnum); prototype = gidispatch_prototype(funcnum); printf("DEBUG: dispatch call name=%s, prototype=%s, numargs=%u -- ", gidispatch_function->name, prototype, (unsigned int)numargs); if (strcmp(prototype, "4IuIuIuIs") == 0) { printf("%u, %u, %u, %d\n", arglist[0].uint, arglist[1].uint, arglist[2].uint, arglist[3].sint); } else if (strcmp(prototype, "3IuIu:Iu") == 0) { printf("%u, %u, returning a glui32\n", arglist[0].uint, arglist[1].uint); } else if (strcmp(prototype, "3Qa<Iu:Qa") == 0) { printf("win at %p, outref to a glui32, returning a winid_t\n", arglist[0].opaqueref); } else if (strcmp(prototype, "3Qc<Iu:Qc") == 0) { printf("fileref at %p, outref to a glui32, returning a frefid_t\n", arglist[0].opaqueref); } else if (strcmp(prototype, "1Qa:") == 0) { printf("win at %p\n", arglist[0].opaqueref); } else if (strcmp(prototype, "6QaIuIuIuIu:Qa") == 0) { printf("win at %p, %u, %u, %u, %u, returning a winid_t\n", arglist[0].opaqueref, arglist[1].uint, arglist[2].uint, arglist[3].uint, arglist[4].uint); } else if (strcmp(prototype, "4IuIuIuIs:") == 0) { printf("%u, %u, %u, %d\n", arglist[0].uint, arglist[1].uint, arglist[2].uint, arglist[3].sint); } else if (strcmp(prototype, "1Qb:") == 0) { printf("stream at %p\n", arglist[0].opaqueref); } else if (strcmp(prototype, "1Iu:") == 0) { printf("%u\n", arglist[0].uint); } else if (strcmp(prototype, "2Qb<[2IuIu]:") == 0) { printf("stream at %p, some struct stuff here\n", arglist[0].opaqueref); } else if (strcmp(prototype, "3IuIuIu:") == 0) { printf("%u, %u, %u\n", arglist[0].uint, arglist[1].uint, arglist[2].uint); } else if (strcmp(prototype, "1:Qb") == 0) { printf("returning a strid_t\n"); } else if (strcmp(prototype, "4&+#!IuIuIu:Qb") == 0) { printf("retained, nonnull, array of glui32 at %p for length %u, %u, %u, returning a strid_t\n", arglist[1].array, arglist[2].uint, arglist[3].uint, arglist[4].uint); } else if (strcmp(prototype, "2Qc:Iu") == 0) { printf("fileref at %p, returning a glui32\n", arglist[0].opaqueref); } else if (strcmp(prototype, "1<+[4IuQaIuIu]:") == 0) { printf("some struct stuff here, nonnull\n"); } else if (strcmp(prototype, "1:Qb") == 0) { printf("returning a strid_t\n"); } else if (strcmp(prototype, "2Qb:Is") == 0) { printf("stream at %p, returning a glsi32\n", arglist[0].opaqueref); } else if (strcmp(prototype, "2Qc:Iu") == 0) { printf("fileref at %p, returning a glui32\n", arglist[0].opaqueref); } else if (strcmp(prototype, "3Qa&+#!CnIu:") == 0) { printf("win at %p, retained, nonnull, array of char at %p for length %u, %u\n", arglist[0].opaqueref, arglist[2].array, arglist[3].uint, arglist[4].uint); } else if (strcmp(prototype, "3Qb<Iu:Qb") == 0) { printf("stream at %p, outref to a glui32, returning a strid_t\n", arglist[0].opaqueref); } else if (strcmp(prototype, "4&+#!CnIuIu:Qb") == 0) { printf("retained, nonnull, array of char at %p for length %u, %u, %u, returning a strid_t\n", arglist[1].array, arglist[2].uint, arglist[3].uint, arglist[4].uint); } else if (strcmp(prototype, "4&+#!IuIuIu:Qb") == 0) { printf("retained, nonnull, array of glui32 at %p for length %u, %u, %u, returning a strid_t\n", arglist[1].array, arglist[2].uint, arglist[3].uint, arglist[4].uint); } else if (strcmp(prototype, "4IuSIu:Qc") == 0) { printf("%u, %s, %u, returning a frefid_t\n", arglist[0].uint, arglist[1].charstr, arglist[2].uint); } else if (strcmp(prototype, "4QcIuIu:Qb") == 0) { printf("fileref at %p, %u, %u, returning a strid_t\n", arglist[0].opaqueref, arglist[1].uint, arglist[2].uint); } else if (strcmp(prototype, "3Qa<Iu<Iu:") == 0) { printf("win at %p, outref to a glui32, outref to a glui32\n", arglist[0].opaqueref); } else if (strcmp(prototype, "6QaIuIsIsIuIu:") == 0) { printf("win at %p, %u, %d, %d, %u, %u\n", arglist[0].opaqueref, arglist[1].uint, arglist[2].sint, arglist[3].sint, arglist[4].uint, arglist[5].uint); } else if (strcmp(prototype, "4Iu<Iu<Iu:Iu") == 0) { printf("%u, outref to a glui32, outref to a glui32, returning a glui32\n", arglist[0].uint); } else { printf("unhandled prototype\n"); } switch (funcnum) { case 0x0004: /* gestalt */ arglist[3].uint = glk_gestalt(arglist[0].uint, arglist[1].uint); break; case 0x0005: /* gestalt_ext */ if (arglist[2].ptrflag) { arglist[6].uint = glk_gestalt_ext(arglist[0].uint, arglist[1].uint, arglist[3].array, arglist[4].uint); } else { arglist[4].uint = glk_gestalt_ext(arglist[0].uint, arglist[1].uint, NULL, 0); } break; case 0x0020: /* window_iterate */ if (arglist[1].ptrflag) arglist[4].opaqueref = glk_window_iterate(arglist[0].opaqueref, &arglist[2].uint); else arglist[3].opaqueref = glk_window_iterate(arglist[0].opaqueref, NULL); break; case 0x0023: /* window_open */ arglist[6].opaqueref = glk_window_open(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint, arglist[3].uint, arglist[4].uint); break; case 0x0025: /* window_get_size */ { int ix = 1; glui32 *ptr1, *ptr2; if (!arglist[ix].ptrflag) { ptr1 = NULL; } else { ix++; ptr1 = &(arglist[ix].uint); } ix++; if (!arglist[ix].ptrflag) { ptr2 = NULL; } else { ix++; ptr2 = &(arglist[ix].uint); } ix++; glk_window_get_size(arglist[0].opaqueref, ptr1, ptr2); } break; case 0x0028: /* window_get_type */ arglist[2].uint = glk_window_get_type(arglist[0].opaqueref); break; case 0x002A: /* window_clear */ glk_window_clear(arglist[0].opaqueref); break; case 0x002B: /* window_move_cursor */ glk_window_move_cursor(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint); break; case 0x002F: /* set_window */ glk_set_window(arglist[0].opaqueref); break; case 0x0040: /* stream_iterate */ if (arglist[1].ptrflag) arglist[4].opaqueref = glk_stream_iterate(arglist[0].opaqueref, &arglist[2].uint); else arglist[3].opaqueref = glk_stream_iterate(arglist[0].opaqueref, NULL); break; case 0x0042: /* stream_open_file */ arglist[4].opaqueref = glk_stream_open_file(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint); break; case 0x0043: /* stream_open_memory */ if (arglist[0].ptrflag) arglist[6].opaqueref = glk_stream_open_memory(arglist[1].array, arglist[2].uint, arglist[3].uint, arglist[4].uint); else arglist[4].opaqueref = glk_stream_open_memory(NULL, 0, arglist[1].uint, arglist[2].uint); break; case 0x0044: /* stream_close */ if (arglist[1].ptrflag) { stream_result_t dat; glk_stream_close(arglist[0].opaqueref, &dat); arglist[2].uint = dat.readcount; arglist[3].uint = dat.writecount; } else { glk_stream_close(arglist[0].opaqueref, NULL); } break; case 0x0047: /* stream_set_current */ glk_stream_set_current(arglist[0].opaqueref); break; case 0x0048: /* stream_get_current */ arglist[1].opaqueref = glk_stream_get_current(); break; case 0x0061: /* fileref_create_by_name */ arglist[4].opaqueref = glk_fileref_create_by_name(arglist[0].uint, arglist[1].charstr, arglist[2].uint); break; case 0x0062: /* fileref_create_by_prompt */ arglist[4].opaqueref = glk_fileref_create_by_prompt(arglist[0].uint, arglist[1].uint, arglist[2].uint); break; case 0x0067: /* fileref_does_file_exist */ arglist[2].uint = glk_fileref_does_file_exist(arglist[0].opaqueref); break; case 0x0086: /* set_style */ glk_set_style(arglist[0].uint); break; case 0x0087: /* set_style_stream */ glk_set_style_stream(arglist[0].opaqueref, arglist[1].uint); break; case 0x0090: /* get_char_stream */ arglist[2].sint = glk_get_char_stream(arglist[0].opaqueref); break; case 0x00B0: /* stylehint_set */ glk_stylehint_set(arglist[0].uint, arglist[1].uint, arglist[2].uint, arglist[3].sint); break; case 0x00C0: /* select */ if (arglist[0].ptrflag) { event_t dat; glk_select(&dat); arglist[1].uint = dat.type; arglist[2].opaqueref = dat.win; arglist[3].uint = dat.val1; arglist[4].uint = dat.val2; } else { glk_select(NULL); } break; case 0x00D0: /* request_line_event */ if (arglist[1].ptrflag) glk_request_line_event(arglist[0].opaqueref, arglist[2].array, arglist[3].uint, arglist[4].uint); else glk_request_line_event(arglist[0].opaqueref, NULL, 0, arglist[2].uint); break; case 0x00D2: /* request_char_event */ glk_request_char_event(arglist[0].opaqueref); break; case 0x00E0: /* image_get_info */ { int ix = 1; glui32 *ptr1, *ptr2; if (!arglist[ix].ptrflag) { ptr1 = NULL; } else { ix++; ptr1 = &(arglist[ix].uint); } ix++; if (!arglist[ix].ptrflag) { ptr2 = NULL; } else { ix++; ptr2 = &(arglist[ix].uint); } ix++; ix++; arglist[ix].uint = glk_image_get_info(arglist[0].uint, ptr1, ptr2); } break; case 0x00E1: /* image_draw */ arglist[5].uint = glk_image_draw(arglist[0].opaqueref, arglist[1].uint, arglist[2].sint, arglist[3].sint); break; case 0x00E2: /* image_draw_scaled */ arglist[7].uint = glk_image_draw_scaled(arglist[0].opaqueref, arglist[1].uint, arglist[2].sint, arglist[3].sint, arglist[4].uint, arglist[5].uint); break; case 0x00EA: /* window_fill_rect */ glk_window_fill_rect(arglist[0].opaqueref, arglist[1].uint, arglist[2].sint, arglist[3].sint, arglist[4].uint, arglist[5].uint); break; case 0x0128: /* put_char_uni */ glk_put_char_uni(arglist[0].uint); break; case 0x0139: /* stream_open_memory_uni */ if (arglist[0].ptrflag) arglist[6].opaqueref = glk_stream_open_memory_uni(arglist[1].array, arglist[2].uint, arglist[3].uint, arglist[4].uint); else arglist[4].opaqueref = glk_stream_open_memory_uni(NULL, 0, arglist[1].uint, arglist[2].uint); break; default: printf("Unhandled call to %s via dispatch\n", gidispatch_function->name); #if 0 case 0x0001: /* exit */ glk_exit(); break; case 0x0002: /* set_interrupt_handler */ /* cannot be invoked through dispatch layer */ break; case 0x0003: /* tick */ glk_tick(); break; case 0x0021: /* window_get_rock */ arglist[2].uint = glk_window_get_rock(arglist[0].opaqueref); break; case 0x0022: /* window_get_root */ arglist[1].opaqueref = glk_window_get_root(); break; case 0x0024: /* window_close */ if (arglist[1].ptrflag) { stream_result_t dat; glk_window_close(arglist[0].opaqueref, &dat); arglist[2].uint = dat.readcount; arglist[3].uint = dat.writecount; } else { glk_window_close(arglist[0].opaqueref, NULL); } break; case 0x0026: /* window_set_arrangement */ glk_window_set_arrangement(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint, arglist[3].opaqueref); break; case 0x0027: /* window_get_arrangement */ { int ix = 1; glui32 *ptr1, *ptr2; winid_t *ptr3; if (!arglist[ix].ptrflag) { ptr1 = NULL; } else { ix++; ptr1 = &(arglist[ix].uint); } ix++; if (!arglist[ix].ptrflag) { ptr2 = NULL; } else { ix++; ptr2 = &(arglist[ix].uint); } ix++; if (!arglist[ix].ptrflag) { ptr3 = NULL; } else { ix++; ptr3 = (winid_t *)(&(arglist[ix].opaqueref)); } ix++; glk_window_get_arrangement(arglist[0].opaqueref, ptr1, ptr2, ptr3); } break; case 0x0029: /* window_get_parent */ arglist[2].opaqueref = glk_window_get_parent(arglist[0].opaqueref); break; case 0x002C: /* window_get_stream */ arglist[2].opaqueref = glk_window_get_stream(arglist[0].opaqueref); break; case 0x002D: /* window_set_echo_stream */ glk_window_set_echo_stream(arglist[0].opaqueref, arglist[1].opaqueref); break; case 0x002E: /* window_get_echo_stream */ arglist[2].opaqueref = glk_window_get_echo_stream(arglist[0].opaqueref); break; case 0x0030: /* window_get_sibling */ arglist[2].opaqueref = glk_window_get_sibling(arglist[0].opaqueref); break; case 0x0041: /* stream_get_rock */ arglist[2].uint = glk_stream_get_rock(arglist[0].opaqueref); break; case 0x0045: /* stream_set_position */ glk_stream_set_position(arglist[0].opaqueref, arglist[1].sint, arglist[2].uint); break; case 0x0046: /* stream_get_position */ arglist[2].uint = glk_stream_get_position(arglist[0].opaqueref); break; case 0x0048: /* stream_get_current */ arglist[1].opaqueref = glk_stream_get_current(); break; case 0x0060: /* fileref_create_temp */ arglist[3].opaqueref = glk_fileref_create_temp(arglist[0].uint, arglist[1].uint); break; case 0x0063: /* fileref_destroy */ glk_fileref_destroy(arglist[0].opaqueref); break; case 0x0064: /* fileref_iterate */ if (arglist[1].ptrflag) arglist[4].opaqueref = glk_fileref_iterate(arglist[0].opaqueref, &arglist[2].uint); else arglist[3].opaqueref = glk_fileref_iterate(arglist[0].opaqueref, NULL); break; case 0x0065: /* fileref_get_rock */ arglist[2].uint = glk_fileref_get_rock(arglist[0].opaqueref); break; case 0x0066: /* fileref_delete_file */ glk_fileref_delete_file(arglist[0].opaqueref); break; case 0x0068: /* fileref_create_from_fileref */ arglist[4].opaqueref = glk_fileref_create_from_fileref(arglist[0].uint, arglist[1].opaqueref, arglist[2].uint); break; case 0x0080: /* put_char */ glk_put_char(arglist[0].uch); break; case 0x0081: /* put_char_stream */ glk_put_char_stream(arglist[0].opaqueref, arglist[1].uch); break; case 0x0082: /* put_string */ glk_put_string(arglist[0].charstr); break; case 0x0083: /* put_string_stream */ glk_put_string_stream(arglist[0].opaqueref, arglist[1].charstr); break; case 0x0084: /* put_buffer */ if (arglist[0].ptrflag) glk_put_buffer(arglist[1].array, arglist[2].uint); else glk_put_buffer(NULL, 0); break; case 0x0085: /* put_buffer_stream */ if (arglist[1].ptrflag) glk_put_buffer_stream(arglist[0].opaqueref, arglist[2].array, arglist[3].uint); else glk_put_buffer_stream(arglist[0].opaqueref, NULL, 0); break; case 0x0091: /* get_line_stream */ if (arglist[1].ptrflag) arglist[5].uint = glk_get_line_stream(arglist[0].opaqueref, arglist[2].array, arglist[3].uint); else arglist[3].uint = glk_get_line_stream(arglist[0].opaqueref, NULL, 0); break; case 0x0092: /* get_buffer_stream */ if (arglist[1].ptrflag) arglist[5].uint = glk_get_buffer_stream(arglist[0].opaqueref, arglist[2].array, arglist[3].uint); else arglist[3].uint = glk_get_buffer_stream(arglist[0].opaqueref, NULL, 0); break; case 0x00A0: /* char_to_lower */ arglist[2].uch = glk_char_to_lower(arglist[0].uch); break; case 0x00A1: /* char_to_upper */ arglist[2].uch = glk_char_to_upper(arglist[0].uch); break; case 0x00B1: /* stylehint_clear */ glk_stylehint_clear(arglist[0].uint, arglist[1].uint, arglist[2].uint); break; case 0x00B2: /* style_distinguish */ arglist[4].uint = glk_style_distinguish(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint); break; case 0x00B3: /* style_measure */ if (arglist[3].ptrflag) arglist[6].uint = glk_style_measure(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint, &(arglist[4].uint)); else arglist[5].uint = glk_style_measure(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint, NULL); break; case 0x00C1: /* select_poll */ if (arglist[0].ptrflag) { event_t dat; glk_select_poll(&dat); arglist[1].uint = dat.type; arglist[2].opaqueref = dat.win; arglist[3].uint = dat.val1; arglist[4].uint = dat.val2; } else { glk_select_poll(NULL); } break; case 0x00D1: /* cancel_line_event */ if (arglist[1].ptrflag) { event_t dat; glk_cancel_line_event(arglist[0].opaqueref, &dat); arglist[2].uint = dat.type; arglist[3].opaqueref = dat.win; arglist[4].uint = dat.val1; arglist[5].uint = dat.val2; } else { glk_cancel_line_event(arglist[0].opaqueref, NULL); } break; case 0x00D3: /* cancel_char_event */ glk_cancel_char_event(arglist[0].opaqueref); break; case 0x00D4: /* request_mouse_event */ glk_request_mouse_event(arglist[0].opaqueref); break; case 0x00D5: /* cancel_mouse_event */ glk_cancel_mouse_event(arglist[0].opaqueref); break; case 0x00D6: /* request_timer_events */ glk_request_timer_events(arglist[0].uint); break; #ifdef GLK_MODULE_IMAGE case 0x00E8: /* window_flow_break */ glk_window_flow_break(arglist[0].opaqueref); break; case 0x00E9: /* window_erase_rect */ glk_window_erase_rect(arglist[0].opaqueref, arglist[1].sint, arglist[2].sint, arglist[3].uint, arglist[4].uint); break; case 0x00EB: /* window_set_background_color */ glk_window_set_background_color(arglist[0].opaqueref, arglist[1].uint); break; #endif /* GLK_MODULE_IMAGE */ #ifdef GLK_MODULE_SOUND case 0x00F0: /* schannel_iterate */ if (arglist[1].ptrflag) arglist[4].opaqueref = glk_schannel_iterate(arglist[0].opaqueref, &arglist[2].uint); else arglist[3].opaqueref = glk_schannel_iterate(arglist[0].opaqueref, NULL); break; case 0x00F1: /* schannel_get_rock */ arglist[2].uint = glk_schannel_get_rock(arglist[0].opaqueref); break; case 0x00F2: /* schannel_create */ arglist[2].opaqueref = glk_schannel_create(arglist[0].uint); break; case 0x00F3: /* schannel_destroy */ glk_schannel_destroy(arglist[0].opaqueref); break; case 0x00F8: /* schannel_play */ arglist[3].uint = glk_schannel_play(arglist[0].opaqueref, arglist[1].uint); break; case 0x00F9: /* schannel_play_ext */ arglist[5].uint = glk_schannel_play_ext(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint, arglist[3].uint); break; case 0x00FA: /* schannel_stop */ glk_schannel_stop(arglist[0].opaqueref); break; case 0x00FB: /* schannel_set_volume */ glk_schannel_set_volume(arglist[0].opaqueref, arglist[1].uint); break; case 0x00FC: /* sound_load_hint */ glk_sound_load_hint(arglist[0].uint, arglist[1].uint); break; #endif /* GLK_MODULE_SOUND */ #ifdef GLK_MODULE_HYPERLINKS case 0x0100: /* set_hyperlink */ glk_set_hyperlink(arglist[0].uint); break; case 0x0101: /* set_hyperlink_stream */ glk_set_hyperlink_stream(arglist[0].opaqueref, arglist[1].uint); break; case 0x0102: /* request_hyperlink_event */ glk_request_hyperlink_event(arglist[0].opaqueref); break; case 0x0103: /* cancel_hyperlink_event */ glk_cancel_hyperlink_event(arglist[0].opaqueref); break; #endif /* GLK_MODULE_HYPERLINKS */ #ifdef GLK_MODULE_UNICODE case 0x0120: /* buffer_to_lower_case_uni */ if (arglist[0].ptrflag) arglist[5].uint = glk_buffer_to_lower_case_uni(arglist[1].array, arglist[2].uint, arglist[3].uint); else arglist[3].uint = glk_buffer_to_lower_case_uni(NULL, 0, arglist[1].uint); break; case 0x0121: /* buffer_to_upper_case_uni */ if (arglist[0].ptrflag) arglist[5].uint = glk_buffer_to_upper_case_uni(arglist[1].array, arglist[2].uint, arglist[3].uint); else arglist[3].uint = glk_buffer_to_upper_case_uni(NULL, 0, arglist[1].uint); break; case 0x0122: /* buffer_to_title_case_uni */ if (arglist[0].ptrflag) arglist[6].uint = glk_buffer_to_title_case_uni(arglist[1].array, arglist[2].uint, arglist[3].uint, arglist[4].uint); else arglist[4].uint = glk_buffer_to_title_case_uni(NULL, 0, arglist[1].uint, arglist[2].uint); break; case 0x0129: /* put_string_uni */ glk_put_string_uni(arglist[0].unicharstr); break; case 0x012A: /* put_buffer_uni */ if (arglist[0].ptrflag) glk_put_buffer_uni(arglist[1].array, arglist[2].uint); else glk_put_buffer_uni(NULL, 0); break; case 0x012B: /* put_char_stream_uni */ glk_put_char_stream_uni(arglist[0].opaqueref, arglist[1].uint); break; case 0x012C: /* put_string_stream_uni */ glk_put_string_stream_uni(arglist[0].opaqueref, arglist[1].unicharstr); break; case 0x012D: /* put_buffer_stream_uni */ if (arglist[1].ptrflag) glk_put_buffer_stream_uni(arglist[0].opaqueref, arglist[2].array, arglist[3].uint); else glk_put_buffer_stream_uni(arglist[0].opaqueref, NULL, 0); break; case 0x0130: /* get_char_stream_uni */ arglist[2].sint = glk_get_char_stream_uni(arglist[0].opaqueref); break; case 0x0131: /* get_buffer_stream_uni */ if (arglist[1].ptrflag) arglist[5].uint = glk_get_buffer_stream_uni(arglist[0].opaqueref, arglist[2].array, arglist[3].uint); else arglist[3].uint = glk_get_buffer_stream_uni(arglist[0].opaqueref, NULL, 0); break; case 0x0132: /* get_line_stream_uni */ if (arglist[1].ptrflag) arglist[5].uint = glk_get_line_stream_uni(arglist[0].opaqueref, arglist[2].array, arglist[3].uint); else arglist[3].uint = glk_get_line_stream_uni(arglist[0].opaqueref, NULL, 0); break; case 0x0138: /* stream_open_file_uni */ arglist[4].opaqueref = glk_stream_open_file_uni(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint); break; case 0x0140: /* request_char_event_uni */ glk_request_char_event_uni(arglist[0].opaqueref); break; case 0x0141: /* request_line_event_uni */ if (arglist[1].ptrflag) glk_request_line_event_uni(arglist[0].opaqueref, arglist[2].array, arglist[3].uint, arglist[4].uint); else glk_request_line_event_uni(arglist[0].opaqueref, NULL, 0, arglist[2].uint); break; #endif /* GLK_MODULE_UNICODE */ #endif /* 0 */ } }
void os_banner_styles_apply (osbanid_t banner) { if (!banner || !(banner->valid)) return; glui32 propval = banner->status ? 0 : (banner->type == wintype_TextGrid ? 0 : 1); glui32 bgcustom = banner->bgtrans ? banner->bgcolor : banner->bgcustom; /* font style: monospace for text grid and tab aligned buffers, else proportional */ glk_stylehint_set(banner->type, style_Alert, stylehint_Proportional, propval); glk_stylehint_set(banner->type, style_Subheader, stylehint_Proportional, propval); glk_stylehint_set(banner->type, style_Emphasized, stylehint_Proportional, propval); glk_stylehint_set(banner->type, style_Normal, stylehint_Proportional, propval); glk_stylehint_set(banner->type, style_User1, stylehint_Proportional, propval); glk_stylehint_set(banner->type, style_User2, stylehint_Proportional, propval); /* foreground color: user1 reverse, user2 custom */ glk_stylehint_set(banner->type, style_Alert, stylehint_TextColor, banner->fgcolor); glk_stylehint_set(banner->type, style_Subheader, stylehint_TextColor, banner->fgcolor); glk_stylehint_set(banner->type, style_Emphasized, stylehint_TextColor, banner->fgcolor); glk_stylehint_set(banner->type, style_Normal, stylehint_TextColor, banner->fgcolor); glk_stylehint_set(banner->type, style_User1, stylehint_TextColor, banner->bgcolor); glk_stylehint_set(banner->type, style_User2, stylehint_TextColor, banner->fgcustom); /* background color: user1 reverse, user2 custom */ glk_stylehint_set(banner->type, style_Alert, stylehint_BackColor, banner->bgcolor); glk_stylehint_set(banner->type, style_Subheader, stylehint_BackColor, banner->bgcolor); glk_stylehint_set(banner->type, style_Emphasized, stylehint_BackColor, banner->bgcolor); glk_stylehint_set(banner->type, style_Normal, stylehint_BackColor, banner->bgcolor); glk_stylehint_set(banner->type, style_User1, stylehint_BackColor, banner->fgcolor); glk_stylehint_set(banner->type, style_User2, stylehint_BackColor, bgcustom); }