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; }
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 ); }