summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/ppm_expander.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-reader/ppm_expander.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/ppm_expander.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/noncore/apps/opie-reader/ppm_expander.cpp b/noncore/apps/opie-reader/ppm_expander.cpp
index fe2745c..ea5b955 100644
--- a/noncore/apps/opie-reader/ppm_expander.cpp
+++ b/noncore/apps/opie-reader/ppm_expander.cpp
@@ -5,12 +5,13 @@
5 5
6#include <stdlib.h> 6#include <stdlib.h>
7//#include <unistd.h> 7//#include <unistd.h>
8#include <stdio.h> 8#include <stdio.h>
9#include <string.h> 9#include <string.h>
10#include <time.h> 10#include <time.h>
11#include "static.h"
11 12
12/*************************************************************************** 13/***************************************************************************
13 * Interface avec les routines de compression 14 * Interface avec les routines de compression
14 */ 15 */
15 16
16#define METHOD_NB 2 /* nombre total de méthodes de compression */ 17#define METHOD_NB 2 /* nombre total de méthodes de compression */
@@ -62,32 +63,32 @@ int ppm_expander::home()
62 return 1; 63 return 1;
63 } 64 }
64 if (fread(&maxnode,sizeof(maxnode),1,my_file_in) != 1) return 1; 65 if (fread(&maxnode,sizeof(maxnode),1,my_file_in) != 1) return 1;
65 if (fread(&blocksize,sizeof(blocksize),1,my_file_in) != 1) return 1; 66 if (fread(&blocksize,sizeof(blocksize),1,my_file_in) != 1) return 1;
66 if (fread(&numblocks,sizeof(numblocks),1,my_file_in) != 1) return 1; 67 if (fread(&numblocks,sizeof(numblocks),1,my_file_in) != 1) return 1;
67 //fprintf(stderr,"<%u,%u,%u>\n",maxnode,blocksize,numblocks); 68 //fprintf(stderr,"<%u,%u,%u>\n",maxnode,blocksize,numblocks);
68 int err = locate(0,0); 69 locate(0,0);
69 outbytes = 0; 70 outbytes = 0;
70 return err; 71 return 0;
71} 72}
72 73
73void ppm_expander::locate(unsigned int n) { 74void ppm_expander::locate(unsigned int n) {
74 locate(n/blocksize, n%blocksize); 75 locate(n/blocksize, n%blocksize);
75 outbytes = n; 76 outbytes = n;
76} 77}
77 78
78int ppm_expander::locate(unsigned short block, unsigned int n) 79void ppm_expander::locate(unsigned short block, unsigned int n)
79{ 80{
80 if (needppmend) 81 if (needppmend)
81 { 82 {
82 ppm.PPM_End(); 83 ppm.PPM_End();
83 needppmend = false; 84 needppmend = false;
84 } 85 }
85 size_t fpos; 86 size_t fpos;
86 fseek(my_file_in,STAT_MAGIC_SIZE+sizeof(maxnode)+sizeof(blocksize)+sizeof(numblocks)+block*sizeof(fpos),SEEK_SET); 87 fseek(my_file_in,STAT_MAGIC_SIZE+sizeof(maxnode)+sizeof(blocksize)+sizeof(numblocks)+block*sizeof(fpos),SEEK_SET);
87 if (fread(&fpos,sizeof(fpos),1,my_file_in) != 1) return 1; 88 fread(&fpos,sizeof(fpos),1,my_file_in);
88 fseek(my_file_in,fpos,SEEK_SET); 89 fseek(my_file_in,fpos,SEEK_SET);
89 90
90 ppm.arith.Arith_DecodeInit(my_read_buf,buf_in,bufsize); 91 ppm.arith.Arith_DecodeInit(my_read_buf,buf_in,bufsize);
91 int err=ppm.PPM_Init(maxnode); 92 int err=ppm.PPM_Init(maxnode);
92 needppmend = true; 93 needppmend = true;
93 curblock = block; 94 curblock = block;
@@ -103,6 +104,13 @@ int ppm_expander::getch() {
103 locate(curblock,0); 104 locate(curblock,0);
104 c = ppm.PPM_Decode(); 105 c = ppm.PPM_Decode();
105 } 106 }
106 outbytes++; 107 outbytes++;
107 return (c==SYM_EOF) ? EOF : c; 108 return (c==SYM_EOF) ? EOF : c;
108} 109}
110
111#ifndef __STATIC
112extern "C"
113{
114 CExpander* newcodec() { return new ppm_expander; }
115}
116#endif