Diffstat (limited to 'noncore/apps/opie-reader/iSilo.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/iSilo.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/noncore/apps/opie-reader/iSilo.cpp b/noncore/apps/opie-reader/iSilo.cpp index 5f14b96..1f727fe 100644 --- a/noncore/apps/opie-reader/iSilo.cpp +++ b/noncore/apps/opie-reader/iSilo.cpp | |||
@@ -1,28 +1,28 @@ | |||
1 | #include "iSilo.h" | 1 | #include "iSilo.h" |
2 | #ifdef _WINDOWS | 2 | #ifdef _WINDOWS |
3 | #include <winsock.h> | 3 | #include <winsock.h> |
4 | #endif | 4 | #endif |
5 | u_int8_t *rodata = (u_int8_t *) | 5 | u_int8_t *rodata = (u_int8_t *) |
6 | "\x10\x11\x12\x00\x08\x07\x09\x06\x0a\x05\x0b\x04\x0c\x03\x0d\x02\x0e\x01\x0f"; | 6 | "\x10\x11\x12\x00\x08\x07\x09\x06\x0a\x05\x0b\x04\x0c\x03\x0d\x02\x0e\x01\x0f"; |
7 | 7 | ||
8 | u_int16_t *rsize_min = (u_int16_t *) | 8 | u_int16_t *rsize_min = (u_int16_t *) |
9 | "\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0d" | 9 | "\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0d" |
10 | "\x00\x0f\x00\x11\x00\x13\x00\x17\x00\x1b\x00\x1f\x00\x23\x00\x2b\x00\x33\x00" | 10 | "\x00\x0f\x00\x11\x00\x13\x00\x17\x00\x1b\x00\x1f\x00\x23\x00\x2b\x00\x33\x00" |
11 | "\x3b\x00\x43\x00\x53\x00\x63\x00\x73\x00\x83\x00\xa3\x00\xc3\x00\xe3\x00\x02" | 11 | "\x3b\x00\x43\x00\x53\x00\x63\x00\x73\x00\x83\x00\xa3\x00\xc3\x00\xe3\x00\x02" |
12 | "\x01"; | 12 | "\x01"; |
13 | 13 | ||
14 | u_int8_t *rsize_delta = (u_int8_t *) | 14 | u_int8_t *rsize_delta = (u_int8_t *) |
15 | "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x02\x02\x02\x02\x03\x03\x03" | 15 | "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x02\x02\x02\x02\x03\x03\x03" |
16 | "\x03\x04\x04\x04\x04\x05\x05\x05\x05\x00"; | 16 | "\x03\x04\x04\x04\x04\x05\x05\x05\x05\x00"; |
17 | 17 | ||
18 | u_int16_t *rpos_min = (u_int16_t *) | 18 | u_int16_t *rpos_min = (u_int16_t *) |
19 | "\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x07\x00\x09\x00\x0d\x00\x11\x00\x19" | 19 | "\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x07\x00\x09\x00\x0d\x00\x11\x00\x19" |
20 | "\x00\x21\x00\x31\x00\x41\x00\x61\x00\x81\x00\xc1\x00\x01\x01\x81\x01\x01\x02" | 20 | "\x00\x21\x00\x31\x00\x41\x00\x61\x00\x81\x00\xc1\x00\x01\x01\x81\x01\x01\x02" |
21 | "\x01\x03\x01\x04\x01\x06\x01\x08\x01\x0c\x01\x10\x01\x18\x01\x20\x01\x30\x01" | 21 | "\x01\x03\x01\x04\x01\x06\x01\x08\x01\x0c\x01\x10\x01\x18\x01\x20\x01\x30\x01" |
22 | "\x40\x01\x60"; | 22 | "\x40\x01\x60"; |
23 | 23 | ||
24 | u_int8_t *rpos_delta = (u_int8_t *) | 24 | u_int8_t *rpos_delta = (u_int8_t *) |
25 | "\x00\x00\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07\x07" | 25 | "\x00\x00\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07\x07" |
26 | "\x08\x08\x09\x09\x0a\x0a\x0b\x0b\x0c\x0c\x0d\x0d"; | 26 | "\x08\x08\x09\x09\x0a\x0a\x0b\x0b\x0c\x0c\x0d\x0d"; |
27 | 27 | ||
28 | void iSilo::init_tables(void) | 28 | void iSilo::init_tables(void) |
@@ -273,48 +273,49 @@ bool iSilo::reset_trees() | |||
273 | code2tree(master); | 273 | code2tree(master); |
274 | 274 | ||
275 | if (read_tree(master, text) == -1) { | 275 | if (read_tree(master, text) == -1) { |
276 | qDebug("read_tree() failed (format incorrect?)"); | 276 | qDebug("read_tree() failed (format incorrect?)"); |
277 | return false; | 277 | return false; |
278 | } | 278 | } |
279 | 279 | ||
280 | if (read_tree(master, lz) == -1) { | 280 | if (read_tree(master, lz) == -1) { |
281 | qDebug("read_tree() failed (format incorrect?)"); | 281 | qDebug("read_tree() failed (format incorrect?)"); |
282 | return false;; | 282 | return false;; |
283 | } | 283 | } |
284 | return true; | 284 | return true; |
285 | } | 285 | } |
286 | u_int32_t iSilo::get_bits(int num) { | 286 | u_int32_t iSilo::get_bits(int num) { |
287 | int i, r; | 287 | int i, r; |
288 | u_int32_t result = 0; | 288 | u_int32_t result = 0; |
289 | 289 | ||
290 | if (num == 0) { | 290 | if (num == 0) { |
291 | pos = 0; | 291 | pos = 0; |
292 | return(0); | 292 | return(0); |
293 | } | 293 | } |
294 | 294 | ||
295 | for (i = 0; i < num; i++) { | 295 | for (i = 0; i < num; i++) { |
296 | if (pos == 0) { | 296 | if (pos == 0) { |
297 | unsuspend(); | ||
297 | r = fread(buf, sizeof(u_int32_t), 256, fin); | 298 | r = fread(buf, sizeof(u_int32_t), 256, fin); |
298 | if (r <= 0) { | 299 | if (r <= 0) { |
299 | qDebug("ERROR: Unexpected end of file"); | 300 | qDebug("ERROR: Unexpected end of file"); |
300 | exit(-1); /* FIXME */ | 301 | exit(-1); /* FIXME */ |
301 | } | 302 | } |
302 | pos = 32*256; | 303 | pos = 32*256; |
303 | } | 304 | } |
304 | 305 | ||
305 | pos--; | 306 | pos--; |
306 | result <<= 1; | 307 | result <<= 1; |
307 | result |= (ntohl(buf[255 - (pos/32)]) >> (31-(pos % 32))) & 1; | 308 | result |= (ntohl(buf[255 - (pos/32)]) >> (31-(pos % 32))) & 1; |
308 | } | 309 | } |
309 | return(result); | 310 | return(result); |
310 | } | 311 | } |
311 | u_int32_t iSilo::get_swapped(int num) { | 312 | u_int32_t iSilo::get_swapped(int num) { |
312 | return(swap_bits(get_bits(num),num)); | 313 | return(swap_bits(get_bits(num),num)); |
313 | } | 314 | } |
314 | int iSilo::read_text() { | 315 | int iSilo::read_text() { |
315 | u_int32_t *j; | 316 | u_int32_t *j; |
316 | u_int32_t k, l, bp, idx; | 317 | u_int32_t k, l, bp, idx; |
317 | for (bp = 0; bp < buffer_size;) { | 318 | for (bp = 0; bp < buffer_size;) { |
318 | j = huffman_get(text); | 319 | j = huffman_get(text); |
319 | if (j == NULL) | 320 | if (j == NULL) |
320 | return(-1); | 321 | return(-1); |
@@ -540,54 +541,54 @@ int iSilo::OpenFile(const char* src) | |||
540 | read_attr(); | 541 | read_attr(); |
541 | return 0; | 542 | return 0; |
542 | } | 543 | } |
543 | 544 | ||
544 | void iSilo::read_attr() | 545 | void iSilo::read_attr() |
545 | { | 546 | { |
546 | // qDebug("read_attr:<%u, %u, %u>", attr_rec, attr_start, attr_end); | 547 | // qDebug("read_attr:<%u, %u, %u>", attr_rec, attr_start, attr_end); |
547 | current_attr = 0; | 548 | current_attr = 0; |
548 | if (attr != NULL) | 549 | if (attr != NULL) |
549 | { | 550 | { |
550 | delete [] attr; | 551 | delete [] attr; |
551 | attr = NULL; | 552 | attr = NULL; |
552 | } | 553 | } |
553 | if (attr_rec >= attr_start && attr_rec < attr_end) | 554 | if (attr_rec >= attr_start && attr_rec < attr_end) |
554 | { | 555 | { |
555 | gotorecordnumber(attr_rec); | 556 | gotorecordnumber(attr_rec); |
556 | fread(buffer, 1, 4, fin); | 557 | fread(buffer, 1, 4, fin); |
557 | fread(&attr_num, sizeof(attr_num), 1, fin); | 558 | fread(&attr_num, sizeof(attr_num), 1, fin); |
558 | attr_num = ntohs(attr_num)+1; | 559 | attr_num = ntohs(attr_num)+1; |
559 | attr = new s_attrib[attr_num]; | 560 | attr = new s_attrib[attr_num]; |
560 | for (int j = 0; j < attr_num; j++) | 561 | for (int j = 0; j < attr_num; j++) |
561 | { | 562 | { |
562 | fread(&attr[j].offset, 2, 1, fin); | 563 | fread(&attr[j].offset, 2, 1, fin); |
563 | attr[j].offset = htons(attr[j].offset); | 564 | attr[j].offset = htons(attr[j].offset); |
564 | } | 565 | } |
565 | #ifdef _WINDOWS | 566 | #ifdef _WINDOWS |
566 | for (j = 0; j < attr_num; j++) | 567 | for (j = 0; j < attr_num; j++) |
567 | #else | 568 | #else |
568 | for (int j = 0; j < attr_num; j++) | 569 | for (int j = 0; j < attr_num; j++) |
569 | #endif | 570 | #endif |
570 | { | 571 | { |
571 | fread(&attr[j].value, 2, 1, fin); | 572 | fread(&attr[j].value, 2, 1, fin); |
572 | if (attr[j].offset < last_pos) | 573 | if (attr[j].offset < last_pos) |
573 | { | 574 | { |
574 | pos_hi++; | 575 | pos_hi++; |
575 | } | 576 | } |
576 | 577 | ||
577 | if ((attr[j].offset == last_pos) && (attr[j].value == last_value)) | 578 | if ((attr[j].offset == last_pos) && (attr[j].value == last_value)) |
578 | { | 579 | { |
579 | pos_hi++; | 580 | pos_hi++; |
580 | } | 581 | } |
581 | 582 | ||
582 | last_pos = attr[j].offset; | 583 | last_pos = attr[j].offset; |
583 | attr[j].offset |= ((u_int32_t)pos_hi) << 16; | 584 | attr[j].offset |= ((u_int32_t)pos_hi) << 16; |
584 | last_value = attr[j].value; | 585 | last_value = attr[j].value; |
585 | } | 586 | } |
586 | current_attr = 0; | 587 | current_attr = 0; |
587 | // last_value = attr[attr_num-1].value; | 588 | // last_value = attr[attr_num-1].value; |
588 | // qDebug("Next attr:%u (%u)", attr[current_attr].offset, filepos); | 589 | // qDebug("Next attr:%u (%u)", attr[current_attr].offset, filepos); |
589 | // qDebug("Next attr:%x (%x)", attr[current_attr].offset, filepos); | 590 | // qDebug("Next attr:%x (%x)", attr[current_attr].offset, filepos); |
590 | } | 591 | } |
591 | } | 592 | } |
592 | 593 | ||
593 | void iSilo::locate(unsigned int n) | 594 | void iSilo::locate(unsigned int n) |