From 46f405e969566039cc12ac1d961c4186ba245d1c Mon Sep 17 00:00:00 2001 From: Ole Loots Date: Sun, 30 Jan 2011 22:24:07 +0000 Subject: [PATCH] Cleanup of TOS compatibility fixes. svn path=/trunk/netsurf/; revision=11550 --- atari/osspec.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ atari/osspec.h | 41 +++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 atari/osspec.c create mode 100644 atari/osspec.h diff --git a/atari/osspec.c b/atari/osspec.c new file mode 100644 index 000000000..2975ce185 --- /dev/null +++ b/atari/osspec.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "atari/osspec.h" + +NS_ATARI_SYSINFO atari_sysinfo; +/* +short appl_xgetinfo( int16_t type, int16_t *out1, int16_t *out2, + int16_t *out3, int16_t *out4 ) +{ + bool has_agi; + has_agi = ((app.aes_global[0] == 0x399 && atari_sysinfo.gdosversion == 0x1900) + || (app.aes_global[0] > 0x400) + || ( appl_find("?AGI") >= 0)); + if(has_agi){ + return( mt_appl_getinfo( type, out1, out2, out3, out4, app.aes_global) ); + } else { + return( 0 ); + } +}*/ + +void init_os_info(void) +{ + int16_t out[4]; + atari_sysinfo.gdosversion = Sversion(); + atari_sysinfo.large_sfont_pxh = 13; + atari_sysinfo.medium_sfont_pxh = 6; + atari_sysinfo.small_sfont_pxh = 4; + /* todo: detect if system font is monospaced */ + atari_sysinfo.sfont_monospaced = true; + if( appl_xgetinfo(AES_LARGEFONT, &out[0], &out[1], &out[2], &out[3] ) > 0 ){ + atari_sysinfo.large_sfont_pxh = out[0]; + } + if( appl_xgetinfo(AES_SMALLFONT, &out[0], &out[1], &out[2], &out[3] ) > 0 ){ + atari_sysinfo.small_sfont_pxh = out[0]; + } +} + +int tos_getcookie(long tag, long * value) +{ + COOKIE * cptr; + long oldsp; + + if( atari_sysinfo.gdosversion > TOS4VER ){ + return( Getcookie(tag, value) ); + } + + cptr = (COOKIE*)Setexc(0x0168, -1L); + if(cptr != NULL) { + do { + if( cptr->c == tag ){ + if(cptr->v != 0 ){ + *value = cptr->v; + return( C_FOUND ); + } + } + } while( (cptr++)->c != 0L ); + } + return( C_NOTFOUND ); +} \ No newline at end of file diff --git a/atari/osspec.h b/atari/osspec.h new file mode 100644 index 000000000..862dc9978 --- /dev/null +++ b/atari/osspec.h @@ -0,0 +1,41 @@ +/* + * Copyright 2011 Ole Loots + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NS_ATARI_OSSPEC_H +#define NS_ATARI_OSSPEC_H + +typedef struct { + long c; + long v; +} COOKIE; + +typedef struct { + unsigned short gdosversion; + unsigned short small_sfont_pxh; + unsigned short medium_sfont_pxh; + unsigned short large_sfont_pxh; + bool sfont_monospaced; +} NS_ATARI_SYSINFO; + +extern NS_ATARI_SYSINFO atari_sysinfo; + +#define TOS4VER 0x03000 /* this is assumed to be the last single tasking OS */ + +void init_os_info(void); +int tos_getcookie( long tag, long * value ); +#endif \ No newline at end of file