+ if (found) {
+ write_bits(outbuf, 0x00, 0x01, &currbit);
+ write_bits(outbuf, offset, 0x0a, &currbit);
+ write_bits(outbuf, wordlen - 1, 0x04, &currbit);
+ for (i = 0; i < wordlen; i++) {
+ window[pos] = *(inbuf + i);
+ pos = (pos + 1) & 0x3ff;
+ }
+ inbuf += wordlen;
+
+ if (fill < sizeof(window))
+ fill += wordlen;
+ } else {
+ write_bits(outbuf, 0x01, 0x01, &currbit);
+ write_bits(outbuf, *inbuf, 0x08, &currbit);
+ window[pos] = *inbuf;
+ pos = (pos + 1) & 0x3ff;
+ inbuf++;
+ if (fill < sizeof(window))
+ fill++;
+ }
+ }
+
+ write_bits(outbuf, 0x00, 0x01, &currbit);
+ write_bits(outbuf, 0x00, 0x0a, &currbit);
+
+ *outlen = (currbit / 8) + 1;
+
+ *((unsigned int*)(outbuf + 4)) = *outlen;
+
+ return outbuf;
+}
+
+/* Checksum is only used for the compressed firmware in 'firmware' */
+unsigned int crc_check(unsigned char *buf, unsigned int len, unsigned int magic)
+{
+ unsigned int file_crc;
+ unsigned int my_len;
+ unsigned int crc;
+ unsigned int my_magic;
+
+ my_len = *((unsigned int*)(buf + 0x20));
+ my_magic = *((unsigned int*)(buf + 0x24));