Exemple #1
0
int jvs_device::handle_message(const UINT8 *send_buffer, UINT32 send_size, UINT8 *&recv_buffer)
{
	UINT32 old_reset_counter = jvs_reset_counter;
	jvs_reset_counter = 0;

	switch(send_buffer[0]) {
	case 0xf0:
		if(send_size < 2 || send_buffer[1] != 0xd9)
			return 0;

		// Reset, must be sent twice
		jvs_reset_counter = old_reset_counter+1;
		if(jvs_reset_counter == 2)
			device_reset();
		return 2;

	case 0x10: {
		const char *id = device_id();
		int len = strlen(id)+1;
		*recv_buffer++ = 0x01;
		memcpy(recv_buffer, id, len);
		recv_buffer += len;
		return 1;
	}

	case 0x11:
		*recv_buffer++ = 0x01;
		*recv_buffer++ = command_format_version();
		return 1;

	case 0x12:
		*recv_buffer++ = 0x01;
		*recv_buffer++ = jvs_standard_version();
		return 1;

	case 0x13:
		*recv_buffer++ = 0x01;
		*recv_buffer++ = comm_method_version();
		return 1;

	case 0x14:
		*recv_buffer++ = 0x01;
		function_list(recv_buffer);
		*recv_buffer++ = 0x00;
		return 1;

	case 0x20:
		if(send_size < 3)
			return 0;
		*recv_buffer++ = 0x01;
		return switches(recv_buffer, send_buffer[1], send_buffer[2]) ? 3 : 0;

	case 0x21:
		if(send_size < 2)
			return 0;
		*recv_buffer++ = 0x01;
		return coin_counters(recv_buffer, send_buffer[1]) ? 2 : 0;

	case 0x22:
		if(send_size < 2)
			return 0;
		*recv_buffer++ = 0x01;
		return analogs(recv_buffer, send_buffer[1]) ? 2 : 0;

	case 0x30:
		if(send_size < 4)
			return 0;
		*recv_buffer++ = 0x01;
		return coin_add(send_buffer[1], -((send_buffer[2] << 8) | send_buffer[3])) ? 4 : 0;

	case 0x31:
		if(send_size < 4)
			return 0;
		*recv_buffer++ = 0x01;
		return coin_add(send_buffer[1],  ((send_buffer[2] << 8) | send_buffer[3])) ? 4 : 0;

	case 0x32:
		if(send_size < 2 || send_size < 2+send_buffer[1])
			return 0;
		*recv_buffer++ = 0x01;
		return swoutputs(send_buffer[1], send_buffer+2) ? 2+send_buffer[1] : 0;

	case 0x38:
		if(send_size < 3)
			return 0;
		*recv_buffer++ = 0x01;
		return swoutputs(send_buffer[1], send_buffer[2]) ? 3 : 0;

	default:
		logerror("JVSDEV: unhandled command %02x\n", send_buffer[0]);
		return 0;
	}

	return -1;
}
Exemple #2
0
int fileop_put_by_name( char *file_name )
{
	FILE	*fp;
	char	name[ MAX_TOKEN_LENGTH ];
	char	s[80];
	char	**strp;
	char	*quoted;
	int		i;
	
	strcpy( name, file_name );

	file_handle_path( name, MAX_TOKEN_LENGTH );
	
	if ( NULL == (fp	= fopen( name, "w" )) )
	{
		cprintf( ERROR, CONT, "fail to put file \"%s\"\n", name );
		return ( ERROR );
	}

	fprintf( fp, "###\n" );
	fprintf( fp, "### CaFE file made by \"put\" command.\n" );
	fprintf( fp, "###    --- %s ---\n", version_string( s ) );

	fprintf( fp, "###\n" );
	fprintf( fp, "\n" );

	time_now( s );
	fprintf( fp, "###\n### ### saved : %s\n###\n", s );

	fprintf( fp, "\n\n### functions\n\n" );
	
	if ( !(strcmp( file_name, PREFERENCE_FILE3 )) )
		fprintf( fp, "\"\" package\n\n" );

	function_list( fp );

	fprintf( fp, "\n\n### history section\n\n" );

	if ( NULL == (strp	=( char **)malloc( sizeof( char * ) * g_cafe_mode.n_history.value )) )
	{
		fclose( fp );
		cprintf( ERROR, CONT, "fail to put file (@malloc)\"%s\"\n", name );
		return ( ERROR );
	}

	history_strings( strp, g_cafe_mode.n_history.value );
	
	for ( i = (g_cafe_mode.n_history.value - 1); i >= 0 ; --i )
	{
		if ( !strp[ i ] )
			continue;
		
		if ( strstr( strp[ i ], "qq" ) )
			continue;
		
		if ( strstr( strp[ i ], "quit" ) )
			continue;
		
		quoted	= string_quote( strp[ i ], '\"' );
		fprintf( fp, "%s\thistory\n", quoted );
		dispose_string_object( quoted );

	}
	
	free( strp );

	fclose( fp );

	return ( NO_ERROR );
}