1*9a747e4fSDavid du Colombier #include <u.h>
2*9a747e4fSDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier #include <draw.h>
4*9a747e4fSDavid du Colombier
5*9a747e4fSDavid du Colombier /*
6*9a747e4fSDavid du Colombier * compressed data are seuences of byte codes.
7*9a747e4fSDavid du Colombier * if the first byte b has the 0x80 bit set, the next (b^0x80)+1 bytes
8*9a747e4fSDavid du Colombier * are data. otherwise, it's two bytes specifying a previous string to repeat.
9*9a747e4fSDavid du Colombier */
10*9a747e4fSDavid du Colombier void
_twiddlecompressed(uchar * buf,int n)11*9a747e4fSDavid du Colombier _twiddlecompressed(uchar *buf, int n)
12*9a747e4fSDavid du Colombier {
13*9a747e4fSDavid du Colombier uchar *ebuf;
14*9a747e4fSDavid du Colombier int j, k, c;
15*9a747e4fSDavid du Colombier
16*9a747e4fSDavid du Colombier ebuf = buf+n;
17*9a747e4fSDavid du Colombier while(buf < ebuf){
18*9a747e4fSDavid du Colombier c = *buf++;
19*9a747e4fSDavid du Colombier if(c >= 128){
20*9a747e4fSDavid du Colombier k = c-128+1;
21*9a747e4fSDavid du Colombier for(j=0; j<k; j++, buf++)
22*9a747e4fSDavid du Colombier *buf ^= 0xFF;
23*9a747e4fSDavid du Colombier }else
24*9a747e4fSDavid du Colombier buf++;
25*9a747e4fSDavid du Colombier }
26*9a747e4fSDavid du Colombier }
27*9a747e4fSDavid du Colombier
28*9a747e4fSDavid du Colombier int
_compblocksize(Rectangle r,int depth)29*9a747e4fSDavid du Colombier _compblocksize(Rectangle r, int depth)
30*9a747e4fSDavid du Colombier {
31*9a747e4fSDavid du Colombier int bpl;
32*9a747e4fSDavid du Colombier
33*9a747e4fSDavid du Colombier bpl = bytesperline(r, depth);
34*9a747e4fSDavid du Colombier bpl = 2*bpl; /* add plenty extra for blocking, etc. */
35*9a747e4fSDavid du Colombier if(bpl < NCBLOCK)
36*9a747e4fSDavid du Colombier return NCBLOCK;
37*9a747e4fSDavid du Colombier return bpl;
38*9a747e4fSDavid du Colombier }
39