summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/iSilo.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-reader/iSilo.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/iSilo.cpp17
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
5u_int8_t *rodata = (u_int8_t *) 5u_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
8u_int16_t *rsize_min = (u_int16_t *) 8u_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
14u_int8_t *rsize_delta = (u_int8_t *) 14u_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
18u_int16_t *rpos_min = (u_int16_t *) 18u_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
24u_int8_t *rpos_delta = (u_int8_t *) 24u_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
28void iSilo::init_tables(void) 28void 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}
286u_int32_t iSilo::get_bits(int num) { 286u_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}
311u_int32_t iSilo::get_swapped(int num) { 312u_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}
314int iSilo::read_text() { 315int 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
544void iSilo::read_attr() 545void 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
593void iSilo::locate(unsigned int n) 594void iSilo::locate(unsigned int n)