File: XADCompactProRLEHandle.m

package info (click to toggle)
unar 1.1-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 6,664 kB
  • sloc: ansic: 52,939; objc: 39,563; cpp: 4,074; makefile: 99; perl: 10
file content (66 lines) | stat: -rw-r--r-- 845 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#import "XADCompactProRLEHandle.h"

@implementation XADCompactProRLEHandle:CSByteStreamHandle

-(void)resetByteStream
{
	saved=0;
	repeat=0;
	halfescaped=NO;
}

-(uint8_t)produceByteAtOffset:(off_t)pos
{
//NSLog(@"rle %d %d",(int)pos,(int)CSInputBufferOffset(input));
	if(repeat)
	{
		repeat--;
		return saved;
	}

	int byte;
	if(halfescaped)
	{
		byte=0x81;
		halfescaped=NO;
	}
	else byte=CSInputNextByte(input);

	if(byte==0x81)
	{
		byte=CSInputNextByte(input);
		if(byte==0x82)
		{
			byte=CSInputNextByte(input);
			if(byte!=0)
			{
				repeat=byte-2; // ?
				return saved;
			}
			else
			{
				repeat=1;
				saved=0x82;
				return 0x81;
			}
		}
		else
		{
			if(byte==0x81)
			{
				halfescaped=YES;
				return saved=0x81;
			}
			else
			{
				repeat=1;
				saved=byte;
				return 0x81;
			} 
		}
	}
	else return saved=byte;
}

@end