X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Fgestalt.c;h=398aede093e5839e12fbeb1d6001dde22bddb706;hb=53fe9495a46d16106fa91cfa589e312e882428dd;hp=4a586ce1d192cce9b2a470e0b20c2b7b753dfaa1;hpb=2baac1a1aa285bc52da8feb92433144a1e50bcce;p=rodin%2Fchimara.git diff --git a/src/gestalt.c b/src/gestalt.c index 4a586ce..398aede 100644 --- a/src/gestalt.c +++ b/src/gestalt.c @@ -1,3 +1,4 @@ +#include /* Surprisingly, the only symbol needed is NULL */ #include "glk.h" /* Version of the Glk specification implemented by this library */ @@ -33,32 +34,31 @@ glk_gestalt(glui32 sel, glui32 val) * Calls the gestalt system to request information about the capabilities of the * API. The selector @sel tells which capability you are requesting information * about; the other three arguments are additional information, which may or may - * not be meaningful. The @arr and @arrlen arguments are always optional; you - * may always pass %NULL and 0, if you do not want whatever information they - * represent. glk_gestalt() is simply a shortcut for this; glk_gestalt(x, y) is - * exactly the same as glk_gestalt_ext(x, y, NULL, 0). + * not be meaningful. The @arr and @arrlen arguments of glk_gestalt_ext() are + * always optional; you may always pass %NULL and 0, if you do not want whatever + * information they represent. glk_gestalt() is simply a shortcut for this; + * #glk_gestalt(x, y) is exactly the same as + * #glk_gestalt_ext(x, y, %NULL, 0). * * The critical point is that if the Glk library has never heard of the selector - * sel, it will return 0. It is always safe to call glk_gestalt(x, y) (or - * glk_gestalt_ext(x, y, NULL, 0)). Even if you are using an old library, which - * was compiled before the given capability was imagined, you can test for the - * capability by calling glk_gestalt(); the library will correctly indicate that - * it does not support it, by returning 0. + * @sel, it will return 0. It is always safe to call + * #glk_gestalt(x, y) (or #glk_gestalt_ext(x, y, %NULL, + * 0)). Even if you are using an old library, which was compiled before + * the given capability was imagined, you can test for the capability by calling + * glk_gestalt(); the library will correctly indicate that it does not support + * it, by returning 0. * - * - * It is also safe to call glk_gestalt_ext(x, y, z, zlen) for an unknown - * selector x, where z is not %NULL, as long as z points at an array of at - * least zlen elements. The selector will be careful not to write beyond that - * point in the array, if it writes to the array at all. - * + * (It is also safe to call #glk_gestalt_ext(x, y, z, zlen) for an + * unknown selector x, where z is not %NULL, as long + * as z points at an array of at least zlen elements. + * The selector will be careful not to write beyond that point in the array, if + * it writes to the array at all.) * - * - * If a selector does not use the second argument, you should always pass 0; do - * not assume that the second argument is simply ignored. This is because the - * selector may be extended in the future. You will continue to get the current - * behavior if you pass 0 as the second argument, but other values may produce - * other behavior. - * + * (If a selector does not use the second argument, you should always pass 0; do + * not assume that the second argument is simply ignored. This is because the + * selector may be extended in the future. You will continue to get the current + * behavior if you pass 0 as the second argument, but other values may produce + * other behavior.) * * Returns: an integer, depending on what selector was called. */ @@ -71,17 +71,6 @@ glk_gestalt_ext(glui32 sel, glui32 val, glui32 *arr, glui32 arrlen) case gestalt_Version: return (MAJOR_VERSION << 16) + (MINOR_VERSION << 8) + SUB_VERSION; - /* Which characters can we print? */ - case gestalt_CharOutput: - /* All characters are printed as one character, in any case */ - if(arr && arrlen > 0) - *arr = 1; - /* Cannot print control chars except \n, or chars > 255 */ - if( (val < 32 && val != 10) || (val >= 127 && val <= 159) || (val > 255) ) - return gestalt_CharOutput_CannotPrint; - /* Can print all other Latin-1 characters */ - return gestalt_CharOutput_ExactPrint; - /* Which characters can the player type in line input? */ case gestalt_LineInput: /* Does not accept control chars */ @@ -95,7 +84,37 @@ glk_gestalt_ext(glui32 sel, glui32 val, glui32 *arr, glui32 arrlen) if( val < 32 || (val >= 127 && val <= 159) || val == keycode_Unknown ) return 0; return 1; + + /* Which characters can we print? */ + case gestalt_CharOutput: + /* All characters are printed as one character, in any case */ + if(arr && arrlen > 0) + *arr = 1; + /* Cannot print control chars except \n, or chars > 255 */ + if( (val < 32 && val != 10) || (val >= 127 && val <= 159) || (val > 255) ) + return gestalt_CharOutput_CannotPrint; + /* Can print all other Latin-1 characters */ + return gestalt_CharOutput_ExactPrint; + + /* Unicode capabilities present */ + case gestalt_Unicode: + return 1; + + /* Timer capabilities present */ + case gestalt_Timer: + return 1; + /* Unsupported capabilities */ + case gestalt_MouseInput: + case gestalt_Graphics: + case gestalt_DrawImage: + case gestalt_Sound: + case gestalt_SoundVolume: + case gestalt_SoundNotify: + case gestalt_Hyperlinks: + case gestalt_HyperlinkInput: + case gestalt_SoundMusic: + case gestalt_GraphicsTransparency: /* Selector not supported */ default: return 0;