コード例 #1
0
ファイル: microdrive.c プロジェクト: mb-twexler/QEMU
static void md_attr_write(void *opaque, uint32_t at, uint8_t value)
{
    MicroDriveState *s = opaque;
    at -= s->attr_base;

    switch (at) {
    case 0x00:	/* Configuration Option Register */
        s->opt = value & 0xcf;
        if (value & OPT_SRESET)
            md_reset(s);
        md_interrupt_update(s);
        break;
    case 0x02:	/* Card Configuration Status Register */
        if ((s->stat ^ value) & STAT_PWRDWN)
            s->pins |= PINS_CRDY;
        s->stat &= 0x82;
        s->stat |= value & 0x74;
        md_interrupt_update(s);
        /* Word 170 in Identify Device must be equal to STAT_XE */
        break;
    case 0x04:	/* Pin Replacement Register */
        s->pins &= PINS_CRDY;
        s->pins |= value & PINS_MRDY;
        break;
    case 0x06:	/* Socket and Copy Register */
        break;
    default:
        printf("%s: Bad attribute space register %02x\n", __FUNCTION__, at);
    }
}
コード例 #2
0
    int
main( int argc, char *argv[])
{
    int				fd;
    SNET			*snet;
    char			*line;
    u_int			line_len;
    struct message_digest       md;

    if ( argc != 3 ) {
	fprintf( stderr, "Usage: %s <checksum_algorithm> <file>\n", argv[ 0 ]);
	return( 1 );
    }

    /* OpenSSL 1.1.0 added auto-init */
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
    OpenSSL_add_all_digests();
#endif /* OpenSSL < 1.1.0 */
    simta_checksum_md = EVP_get_digestbyname((const char*)(argv[ 1 ]));

    if ( simta_checksum_md == NULL ) {
	fprintf( stderr, "%s: unknown checksum algorithm\n", argv[ 1 ]);
	return( 1 );
    }

    md_init( &md );
    md_reset( &md );

    if (( fd = open( argv[ 2 ], O_RDONLY, 0 )) < 0 ) {
	perror( "open" );
	exit( 1 );
    }

    if (( snet = snet_attach( fd, 1024 * 1024 )) == NULL ) {
	perror( "snet_attach" );
	exit( 1 );
    }

    while (( line = snet_getline( snet, NULL )) != NULL ) {
	line_len = strlen( line );
        md_update( &md, line, line_len );
    }

    md_finalize( &md );
    md_cleanup( &md );

    if ( snet_close( snet ) != 0 ) {
	perror( "snet_close" );
	return( 1 );
    }

    printf( "\nChecksum: %s\n", md.md_b16 );

    return( 0 );
}