Search
lxdream.org :: lxdream/src/util.c
lxdream 0.9.1
released Jun 29
Download Now
filename src/util.c
changeset 117:3b6a128ae733
prev35:21a4be098304
next187:f6ce97841afc
author nkeynes
date Thu Jun 15 10:25:45 2006 +0000 (17 years ago)
permissions -rw-r--r--
last change Add P4 I/O tracing
Add ability to set I/O trace by region address
file annotate diff log raw
nkeynes@31
     1
/**
nkeynes@117
     2
 * $Id: util.c,v 1.4 2006-03-20 11:58:37 nkeynes Exp $
nkeynes@31
     3
 *
nkeynes@31
     4
 * Miscellaneous utility functions.
nkeynes@31
     5
 *
nkeynes@31
     6
 * Copyright (c) 2005 Nathan Keynes.
nkeynes@31
     7
 *
nkeynes@31
     8
 * This program is free software; you can redistribute it and/or modify
nkeynes@31
     9
 * it under the terms of the GNU General Public License as published by
nkeynes@31
    10
 * the Free Software Foundation; either version 2 of the License, or
nkeynes@31
    11
 * (at your option) any later version.
nkeynes@31
    12
 *
nkeynes@31
    13
 * This program is distributed in the hope that it will be useful,
nkeynes@31
    14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
nkeynes@31
    15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
nkeynes@31
    16
 * GNU General Public License for more details.
nkeynes@31
    17
 */
nkeynes@31
    18
nkeynes@17
    19
#include "dream.h"
nkeynes@17
    20
nkeynes@17
    21
void fwrite_string( char *s, FILE *f )
nkeynes@17
    22
{
nkeynes@17
    23
    uint32_t len = 0;
nkeynes@17
    24
    if( s == NULL ) {
nkeynes@17
    25
	fwrite( &len, sizeof(len), 1, f );
nkeynes@17
    26
    } else {
nkeynes@17
    27
	len = strlen(s)+1;
nkeynes@17
    28
	fwrite( &len, sizeof(len), 1, f );
nkeynes@17
    29
	fwrite( s, len, 1, f );
nkeynes@17
    30
    }
nkeynes@17
    31
}
nkeynes@17
    32
nkeynes@17
    33
int fread_string( char *s, int maxlen, FILE *f ) 
nkeynes@17
    34
{
nkeynes@17
    35
    uint32_t len;
nkeynes@17
    36
    fread( &len, sizeof(len), 1, f );
nkeynes@17
    37
    if( len != 0 ) {
nkeynes@17
    38
	fread( s, len > maxlen ? maxlen : len, 1, f );
nkeynes@17
    39
    }
nkeynes@17
    40
    return len;
nkeynes@17
    41
}
nkeynes@117
    42
nkeynes@117
    43
void fwrite_dump( unsigned char *data, unsigned int length, FILE *f ) 
nkeynes@117
    44
{
nkeynes@117
    45
    unsigned int i, j;
nkeynes@117
    46
    for( i =0; i<length; i+=16 ) {
nkeynes@117
    47
	fprintf( f, "%08X:", i);
nkeynes@117
    48
	for( j=i; j<i+16; j++ ) {
nkeynes@117
    49
	    if( (j % 4) == 0 )
nkeynes@117
    50
		fprintf( f, " " );
nkeynes@117
    51
	    if( j < length )
nkeynes@117
    52
		fprintf( f, " %02X", (unsigned int)(data[j]) );
nkeynes@117
    53
	    else
nkeynes@117
    54
		fprintf( f, "   " );
nkeynes@117
    55
	}
nkeynes@117
    56
	fprintf( f, "  " );
nkeynes@117
    57
	for( j=i; j<i+16 && j<length; j++ ) {
nkeynes@117
    58
	    fprintf( f, "%c", isprint(data[j]) ? data[j] : '.' );
nkeynes@117
    59
	}
nkeynes@117
    60
	fprintf( f, "\n" );
nkeynes@117
    61
    }
nkeynes@117
    62
}
.