X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=interpreters%2Fglulxe%2Fgestalt.c;fp=interpreters%2Fglulxe%2Fgestalt.c;h=c1c933faeb025fd258dc2cb71a995b4b9a5f6032;hb=147a8cbf17f2b3379277bf7d37cda9866510f16c;hp=0000000000000000000000000000000000000000;hpb=7de488aa6a1709a4d5c59b5ff59862105c1748c5;p=rodin%2Fchimara.git diff --git a/interpreters/glulxe/gestalt.c b/interpreters/glulxe/gestalt.c new file mode 100644 index 0000000..c1c933f --- /dev/null +++ b/interpreters/glulxe/gestalt.c @@ -0,0 +1,70 @@ +/* gestalt.c: Glulxe code for gestalt selectors + Designed by Andrew Plotkin + http://eblong.com/zarf/glulx/index.html +*/ + +#include "glk.h" +#include "glulxe.h" +#include "gestalt.h" + +glui32 do_gestalt(glui32 val, glui32 val2) +{ + switch (val) { + + case gestulx_GlulxVersion: + return 0x00030101; /* Glulx spec version 3.1.1 */ + + case gestulx_TerpVersion: + return 0x00000404; /* Glulxe version 0.4.4 */ + + case gestulx_ResizeMem: +#ifdef FIXED_MEMSIZE + return 0; /* The setmemsize opcodes are compiled out. */ +#else /* FIXED_MEMSIZE */ + return 1; /* We can handle setmemsize. */ +#endif /* FIXED_MEMSIZE */ + + case gestulx_Undo: + return 1; /* We can handle saveundo and restoreundo. */ + + case gestulx_IOSystem: + switch (val2) { + case 0: + return 1; /* The "null" system always works. */ + case 1: + return 1; /* The "filter" system always works. */ + case 2: + return 1; /* A Glk library is hooked up. */ + default: + return 0; + } + + case gestulx_Unicode: + return 1; /* We can handle Unicode. */ + + case gestulx_MemCopy: + return 1; /* We can do mcopy/mzero. */ + + case gestulx_MAlloc: +#ifdef FIXED_MEMSIZE + return 0; /* The malloc opcodes are compiled out. */ +#else /* FIXED_MEMSIZE */ + return 1; /* We can handle malloc/mfree. */ +#endif /* FIXED_MEMSIZE */ + + case gestulx_MAllocHeap: + return heap_get_start(); + + case gestulx_Acceleration: + return 1; /* We can do accelfunc/accelparam. */ + + case gestulx_AccelFunc: + if (accel_find_func(val2)) + return 1; /* We know this accelerated function. */ + return 0; + + default: + return 0; + + } +}