int ComLib_getBit(struct ComLib_Str *s)
{
- if (s->bitBufLen == 0) {
+ //ビットを一つずつ取り出す
+ if (s->bitBufLen == 0) {
s->bitBuf = s->p[0] | s->p[1] << 8;
s->p += 2;
- s->bitBufLen |= 16;
+ s->bitBufLen = 16;
}
s->bitBufLen--;
return (s->bitBuf >> s->bitBufLen) & 1;
int ComLib_getTmpBit(struct ComLib_Str *s)
{
+ //次のビットをtmpの一番下のビットに押し込んで、その次のビットを返す
s->tmp = (s->tmp << 1 | ComLib_getBit(s)) & 0xffff;
return ComLib_getBit(s);
}
unsigned char *ComLib_main(const unsigned char *p, unsigned char *q)
{
+ //hh4デコーダー?
struct ComLib_Str s;
- int i, dis;
+ int i, dis = 0;
dis |= -1;
s.p = p;
- s.bitBufLen &= 0;
+ s.bitBufLen = 0;
goto l1;
l0:
*q++ = *s.p++;
l1:
i = ComLib_getBit(&s);
- if (i != 0) goto l0;
+ if (i != 0){
+ //4bit?
+ goto l0;
+ }
s.tmp = 1;
do {
i = ComLib_getTmpBit(&s);
- if (s.tmp == 0) goto fin;
+ if (s.tmp == 0){
+ goto fin;
+ }
} while (i == 0);
- if (s.tmp >= 3)
+ if (s.tmp >= 3){
dis = ~((s.tmp - 3) << 8 | *s.p++);
+ }
s.tmp &= 0;
i = ComLib_getTmpBit(&s);
s.tmp = s.tmp << 1 | i;
s.tmp += 2;
}
s.tmp++;
- if (dis < -0xd00) s.tmp++;
- for (i = 0; i < s.tmp; i++)
+ if (dis < -0xd00){
+ s.tmp++;
+ }
+ for (i = 0; i < s.tmp; i++){
q[i] = q[i + dis];
+ }
q += s.tmp;
goto l1;
fin: