コード例 #1
0
ファイル: varspace.c プロジェクト: luislasonbra/bennugd-wii
void varspace_dump( VARSPACE * n, int indent )
{
    int i, t, to ;
    char buffer[128] ;

    for ( i = 0 ; i < n->count ; i++ )
    {
        if ( i < n->count - 1 )
            to = n->vars[i+1].offset - 1 ;
        else
            to = n->last_offset - 1 ;

        printf( "[%04d:%04d]\t", n->vars[i].offset, to ) ;
        for ( t = 0 ; t < indent ; t++ ) printf( " + " ) ;
        typedef_describe( buffer, n->vars[i].type ) ;
        printf( "%s %s", buffer, identifier_name( n->vars[i].code ) ) ;

        /* Describe arrays of structs */

        if ( typedef_is_array( n->vars[i].type ) )
        {
            TYPEDEF r = typedef_reduce( n->vars[i].type );
            while ( typedef_is_array( r ) )
                r = typedef_reduce( r );
            if ( typedef_is_struct( r ) )
            {
                printf( ":\n" ) ;
                varspace_dump( typedef_members( r ), indent + 1 ) ;
            }
            else
                printf( "\n" );
        }

        /* Describe structs */

        else if ( typedef_is_struct( n->vars[i].type ) )
        {
            printf( ":\n" ) ;
            varspace_dump( typedef_members( n->vars[i].type ), indent + 1 ) ;
        }

        else printf( "\n" ) ;
    }
}
コード例 #2
0
ファイル: typedef.c プロジェクト: GameMaker2k/BennuGD
void typedef_describe( char * buffer, TYPEDEF t )
{
    switch ( t.chunk[0].type )
    {
        case TYPE_INT:
            sprintf( buffer, "INT" ) ;
            return ;

        case TYPE_DWORD:
            sprintf( buffer, "DWORD" ) ;
            return ;

        case TYPE_SHORT:
            sprintf( buffer, "SHORT" ) ;
            return ;

        case TYPE_WORD:
            sprintf( buffer, "WORD" ) ;
            return ;

        case TYPE_BYTE:
            sprintf( buffer, "BYTE" ) ;
            return ;

        case TYPE_CHAR:
            sprintf( buffer, "CHAR" ) ;
            return ;

        case TYPE_SBYTE:
            sprintf( buffer, "SIGNED BYTE" ) ;
            return ;

        case TYPE_STRING:
            sprintf( buffer, "STRING" ) ;
            return ;

        case TYPE_FLOAT:
            sprintf( buffer, "FLOAT" ) ;
            return ;

        case TYPE_STRUCT:
            if ( t.chunk[0].count > 1 )
                sprintf( buffer, "STRUCT [%d]", t.chunk[0].count ) ;
            else
                sprintf( buffer, "STRUCT" ) ;
            return ;

        case TYPE_ARRAY:
            sprintf( buffer, "ARRAY [%d] OF ", t.chunk[0].count ) ;
            typedef_describe( buffer + strlen( buffer ), typedef_reduce( t ) ) ;
            return ;

        case TYPE_POINTER:
            sprintf( buffer, "POINTER TO " ) ;
            typedef_describe( buffer + strlen( buffer ), typedef_reduce( t ) ) ;
            return ;

        case TYPE_UNDEFINED:
        default:
            sprintf( buffer, "<UNDEFINED>" ) ;
            return ;
    }
}