void code_dim(uint8_t offset) {
unsigned long int *part = new unsigned long int;
unsigned long int *last = new unsigned long int;
int8_t i=0, k=0;
in->ReadBitField(&part, len);
if(part==NULL) return;
*last = *part;
while(1) {
i=0;
while(*part == *last && i<(SIZE-2) ) {
in->ReadBitField(&part, len);
i++;
if(part==NULL) goto exit;
}
if(i==1 && k < (SIZE-2) ) {
buf[k++] = *last;
}
else {
if(k>0) {
out->WriteBitField((unsigned long)(-k), SERIA_BITS);
for(int8_t j = 0; j<k; j++) {
out->WriteBitField((unsigned long)buf[j], len);
}
k=0;
}
out->WriteBitField((unsigned long)(i), SERIA_BITS);
out->WriteBitField((unsigned long)(*last), len);
}
*last = *part;
}
exit:
if(k>0) {
out->WriteBitField((unsigned long)(-k), SERIA_BITS);
for(int8_t j = 0; j<k; j++) {
out->WriteBitField((unsigned long)buf[j], len);
}
}
out->WriteBitField((unsigned long)(i), SERIA_BITS);
out->WriteBitField((unsigned long)(*last), len);
return;
}