#include #include #include #include typedef enum {FALSE, TRUE} boolean; #define ST_LORES 0 #define ST_HIRES 2 boolean set_st_hires(void); boolean get_cookie(char *cookie, long *value); main() { if (set_st_hires()) puts("Resolution changed to ST-high."); else puts("Resolution not changed."); return 0; } boolean set_st_hires(void) { long _VDO; /* Change resolution to ST_HIRES */ /* First check whether we started from ST_LORES */ /* We may already be in a higer resolution */ if (Getrez() > ST_LORES) return FALSE; /* Get the _VDO (video) cookie, if it doesn't exist we have */ /* some old TOS version, no resolution change */ if (!get_cookie("_VDO", &_VDO) || _VDO < 0x200) return FALSE; /* values for _VDO are: */ /* 0x000 for normal ST, 0x100 for STe and 0x200 for TT */ /* return if we do not have TT video hardware */ /* change the resolution to ST_HIRES */ Setscreen((long *) -1,(long *) -1, 2); /* Set colors to normal monochrome*/ EsetColor(254, 0); EsetColor(255, 4095); return TRUE; } /* function get_cookie*/ /* return true if cookie found, cookie value in value */ /* adapted from Rolf Kotzian, St Computer januar 91 */ boolean get_cookie(char *cookie, long *value) { long old_stack; long *cookiejar; /* get pointer to cookiejar*/ if ((int) Super((long *) 1L)== -1) /*already in supervisor mode*/ cookiejar=*((long **) 0x5a0L); else { old_stack=Super(0L); cookiejar=*((long **) 0x5a0L); Super((void *) old_stack); } if (!cookiejar) /*No cookie jar*/ return FALSE; do { if (!strncmp((char *)cookiejar, cookie, 4)) { if (value) { *value=cookiejar[1]; return TRUE; } } else cookiejar=&cookiejar[2]; } while (cookiejar[0]); /*NULL-cookie?*/ return FALSE; }