Пример #1
0
static int read_tables20(int fd, unpack_data_t *unpack_data)
{
	unsigned char bit_length[BC20];
	unsigned char table[MC20 * 4];
	int table_size, n, i, number;
	unsigned int bit_field;
	
	rar_dbgmsg("in read_tables20\n");
	
	if (unpack_data->in_addr > unpack_data->read_top-25) {
		if (!rar_unp_read_buf(fd, unpack_data)) {
			return FALSE;
		}
	}
	bit_field = rar_getbits(unpack_data);
	unpack_data->unp_audio_block = (bit_field & 0x8000);
	
	if (!(bit_field & 0x4000)) {
		memset(unpack_data->unp_old_table20, 0, sizeof(unpack_data->unp_old_table20));
	}
	rar_addbits(unpack_data, 2);
	
	if (unpack_data->unp_audio_block) {
		unpack_data->unp_channels = ((bit_field>>12) & 3) + 1;
		if (unpack_data->unp_cur_channel >= unpack_data->unp_channels) {
			unpack_data->unp_cur_channel = 0;
		}
		rar_addbits(unpack_data, 2);
		table_size = MC20 * unpack_data->unp_channels;
	} else {
Пример #2
0
unsigned int rar_get_char(const unsigned char **fd, unpack_data_t *unpack_data)
{
	if (unpack_data->in_addr > MAX_BUF_SIZE-30) {
		if (!rar_unp_read_buf(fd, unpack_data)) {
			rar_dbgmsg("rar_get_char: rar_unp_read_buf FAILED\n");
			return -1;
		}
	}
	rar_dbgmsg("rar_get_char = %u\n", unpack_data->in_buf[unpack_data->in_addr]);
	return(unpack_data->in_buf[unpack_data->in_addr++]);
}