nkeynes@31: /** nkeynes@447: * $Id: util.c,v 1.10 2007-10-16 12:36:29 nkeynes Exp $ nkeynes@31: * nkeynes@31: * Miscellaneous utility functions. nkeynes@31: * nkeynes@31: * Copyright (c) 2005 Nathan Keynes. nkeynes@31: * nkeynes@31: * This program is free software; you can redistribute it and/or modify nkeynes@31: * it under the terms of the GNU General Public License as published by nkeynes@31: * the Free Software Foundation; either version 2 of the License, or nkeynes@31: * (at your option) any later version. nkeynes@31: * nkeynes@31: * This program is distributed in the hope that it will be useful, nkeynes@31: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@31: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@31: * GNU General Public License for more details. nkeynes@31: */ nkeynes@31: nkeynes@425: #include nkeynes@437: #include nkeynes@437: #include nkeynes@437: #include nkeynes@437: #include nkeynes@17: #include "dream.h" nkeynes@437: #include "sh4/sh4core.h" nkeynes@437: nkeynes@437: char *msg_levels[] = { "FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE" }; nkeynes@437: int global_msg_level = EMIT_WARN; nkeynes@17: nkeynes@422: void fwrite_string( const char *s, FILE *f ) nkeynes@17: { nkeynes@17: uint32_t len = 0; nkeynes@17: if( s == NULL ) { nkeynes@17: fwrite( &len, sizeof(len), 1, f ); nkeynes@17: } else { nkeynes@17: len = strlen(s)+1; nkeynes@17: fwrite( &len, sizeof(len), 1, f ); nkeynes@17: fwrite( s, len, 1, f ); nkeynes@17: } nkeynes@17: } nkeynes@17: nkeynes@17: int fread_string( char *s, int maxlen, FILE *f ) nkeynes@17: { nkeynes@17: uint32_t len; nkeynes@17: fread( &len, sizeof(len), 1, f ); nkeynes@17: if( len != 0 ) { nkeynes@17: fread( s, len > maxlen ? maxlen : len, 1, f ); nkeynes@17: } nkeynes@17: return len; nkeynes@17: } nkeynes@117: nkeynes@117: void fwrite_dump( unsigned char *data, unsigned int length, FILE *f ) nkeynes@117: { nkeynes@117: unsigned int i, j; nkeynes@117: for( i =0; i>2; i+=wordsPerLine ) { nkeynes@187: fprintf( f, "%08X:", i); nkeynes@220: for( j=i; j global_msg_level ) { nkeynes@437: return; // ignored nkeynes@437: } nkeynes@447: nkeynes@437: va_start(ap, msg); nkeynes@437: nkeynes@447: if( level <= EMIT_ERR ) { nkeynes@447: gchar *text = g_strdup_vprintf( msg, ap ); nkeynes@447: if( gui_error_dialog( text ) ) { nkeynes@447: g_free(text); nkeynes@447: va_end(ap); nkeynes@447: return; nkeynes@447: } nkeynes@447: g_free(text); nkeynes@447: } nkeynes@447: nkeynes@447: nkeynes@437: strftime( buf, sizeof(buf), "%H:%M:%S", localtime(&tm) ); nkeynes@437: fprintf( stderr, "%s %08X %-5s ", buf, sh4r.pc, msg_levels[level] ); nkeynes@437: vfprintf( stderr, msg, ap ); nkeynes@447: va_end(ap); nkeynes@437: fprintf( stderr, "\n" ); nkeynes@437: }