nkeynes@477: /** nkeynes@561: * $Id$ nkeynes@477: * nkeynes@477: * Common type definitions and forward declarations nkeynes@477: * nkeynes@477: * Copyright (c) 2005 Nathan Keynes. nkeynes@477: * nkeynes@477: * This program is free software; you can redistribute it and/or modify nkeynes@477: * it under the terms of the GNU General Public License as published by nkeynes@477: * the Free Software Foundation; either version 2 of the License, or nkeynes@477: * (at your option) any later version. nkeynes@477: * nkeynes@477: * This program is distributed in the hope that it will be useful, nkeynes@477: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@477: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@477: * GNU General Public License for more details. nkeynes@477: */ nkeynes@477: nkeynes@736: #ifndef lxdream_lxdream_H nkeynes@736: #define lxdream_lxdream_H 1 nkeynes@477: nkeynes@477: #include nkeynes@477: #include nkeynes@477: nkeynes@507: #include "../config.h" nkeynes@507: nkeynes@477: #ifdef __cplusplus nkeynes@477: extern "C" { nkeynes@477: #endif nkeynes@477: nkeynes@738: #define APP_NAME PACKAGE nkeynes@738: extern const char lxdream_package_name[]; nkeynes@738: extern const char lxdream_short_version[]; nkeynes@738: extern const char lxdream_full_version[]; nkeynes@738: extern const char lxdream_copyright[]; nkeynes@738: nkeynes@477: nkeynes@477: #define MB *1024*1024 nkeynes@477: #define KB *1024 nkeynes@477: nkeynes@477: #ifndef max nkeynes@477: #define max(a,b) ( (a) > (b) ? (a) : (b) ) nkeynes@477: #endif nkeynes@477: nkeynes@502: /** nkeynes@569: * A 29-bit address in SH4 external address space nkeynes@502: */ nkeynes@477: typedef uint32_t sh4addr_t; nkeynes@569: nkeynes@569: /** nkeynes@569: * A 32-bit address in SH4 virtual address space. nkeynes@569: */ nkeynes@569: typedef uint32_t sh4vma_t; nkeynes@569: nkeynes@502: /** nkeynes@502: * A direct pointer into SH4 memory nkeynes@502: */ nkeynes@502: typedef unsigned char *sh4ptr_t; nkeynes@477: nkeynes@477: /******************* Forward type declarations ******************/ nkeynes@477: nkeynes@477: typedef struct render_buffer *render_buffer_t; nkeynes@477: typedef struct frame_buffer *frame_buffer_t; nkeynes@477: nkeynes@477: /*************************** Logging ****************************/ nkeynes@477: nkeynes@477: #define EMIT_FATAL 0 nkeynes@477: #define EMIT_ERR 1 nkeynes@477: #define EMIT_WARN 2 nkeynes@477: #define EMIT_INFO 3 nkeynes@477: #define EMIT_DEBUG 4 nkeynes@477: #define EMIT_TRACE 5 nkeynes@477: nkeynes@477: #ifdef MODULE nkeynes@477: #define MODULE_NAME MODULE.name nkeynes@477: #else nkeynes@477: #define MODULE_NAME "*****" nkeynes@477: #endif nkeynes@477: nkeynes@556: gboolean set_global_log_level( const gchar *level ); nkeynes@477: void log_message( void *, int level, const char *source, const char *msg, ... ); nkeynes@477: nkeynes@477: #define FATAL( ... ) log_message( NULL, EMIT_FATAL, MODULE_NAME, __VA_ARGS__ ) nkeynes@477: #define ERROR( ... ) log_message( NULL, EMIT_ERR, MODULE_NAME, __VA_ARGS__ ) nkeynes@477: #define WARN( ... ) log_message( NULL, EMIT_WARN, MODULE_NAME, __VA_ARGS__ ) nkeynes@477: #define INFO( ... ) log_message( NULL, EMIT_INFO, MODULE_NAME, __VA_ARGS__ ) nkeynes@477: #define DEBUG( ... ) log_message( NULL, EMIT_DEBUG, MODULE_NAME, __VA_ARGS__ ) nkeynes@477: #define TRACE( ... ) log_message( NULL, EMIT_TRACE, MODULE_NAME, __VA_ARGS__ ) nkeynes@477: nkeynes@1096: /* Error reporting */ nkeynes@1096: #define MAX_ERROR_MSG_SIZE 512 nkeynes@1096: typedef struct error_struct { nkeynes@1096: unsigned int code; nkeynes@1096: char msg[MAX_ERROR_MSG_SIZE]; nkeynes@1096: } ERROR; nkeynes@1096: nkeynes@1109: #define LX_ERR_NONE 0 nkeynes@1109: #define LX_ERR_NOMEM 1 /* Out-of-memory */ nkeynes@1109: #define LX_ERR_CONFIG 2 /* Configuration problem */ nkeynes@1109: #define LX_ERR_UNHANDLED 3 /* A lower-level error occurred which we don't understand */ nkeynes@1109: #define LX_ERR_BUG 4 nkeynes@1109: #define LX_ERR_FILE_NOOPEN 9 /* File could not be opened (ENOENT or EACCESS usually) */ nkeynes@1109: #define LX_ERR_FILE_IOERROR 10 /* I/O error encountered in file */ nkeynes@1109: #define LX_ERR_FILE_INVALID 11 /* File contents are invalid for its type */ nkeynes@1109: #define LX_ERR_FILE_UNKNOWN 12 /* File type is unrecognized */ nkeynes@1109: #define LX_ERR_FILE_UNSUP 13 /* File type is unsupported */ nkeynes@1109: nkeynes@1096: #define SET_ERROR(err, n, ...) if( (err) != NULL ) { (err)->code = n; snprintf( (err)->msg, sizeof((err)->msg), __VA_ARGS__ ); } nkeynes@1109: #define CLEAR_ERROR(err) do { (err)->code = 0; (err)->msg[0] = 0; } while(0) nkeynes@1096: nkeynes@477: nkeynes@905: #ifdef HAVE_FASTCALL nkeynes@939: #define FASTCALL __attribute__((regparm(2))) nkeynes@905: #else nkeynes@905: #define FASTCALL nkeynes@905: #endif nkeynes@477: nkeynes@477: #ifdef __cplusplus nkeynes@477: } nkeynes@477: #endif nkeynes@477: nkeynes@736: #endif /* !lxdream_lxdream_H */