summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/ztxt.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-reader/ztxt.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/ztxt.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/noncore/apps/opie-reader/ztxt.cpp b/noncore/apps/opie-reader/ztxt.cpp
index 35db05e..e04eaa0 100644
--- a/noncore/apps/opie-reader/ztxt.cpp
+++ b/noncore/apps/opie-reader/ztxt.cpp
@@ -46,128 +46,131 @@ int ztxt::getch()
46 zstream.next_in = compressedtextbuffer; 46 zstream.next_in = compressedtextbuffer;
47 zstream.next_out = expandedtextbuffer; 47 zstream.next_out = expandedtextbuffer;
48 zstream.avail_out = buffersize; 48 zstream.avail_out = buffersize;
49 zstream.avail_in = reclen; 49 zstream.avail_in = reclen;
50 50
51 int ret = inflate(&zstream, Z_SYNC_FLUSH); 51 int ret = inflate(&zstream, Z_SYNC_FLUSH);
52 buffercontent = buffersize - zstream.avail_out; 52 buffercontent = buffersize - zstream.avail_out;
53 bufferpos = 0; 53 bufferpos = 0;
54 54
55 } 55 }
56 currentpos++; 56 currentpos++;
57 return expandedtextbuffer[bufferpos++]; 57 return expandedtextbuffer[bufferpos++];
58} 58}
59 59
60unsigned int ztxt::locate() 60unsigned int ztxt::locate()
61{ 61{
62 return currentpos; 62 return currentpos;
63} 63}
64 64
65void ztxt::locate(unsigned int n) 65void ztxt::locate(unsigned int n)
66{ 66{
67 67
68 if (hasrandomaccess()) 68 if (hasrandomaccess())
69 { 69 {
70 unsuspend();
70 bufferrec = n / ntohs(hdr0.recordSize) + 1; 71 bufferrec = n / ntohs(hdr0.recordSize) + 1;
71 if (bufferrec == 1) 72 if (bufferrec == 1)
72 { 73 {
73 inflateEnd(&zstream); 74 inflateEnd(&zstream);
74 } 75 }
75 size_t reclen = recordlength(bufferrec); 76 size_t reclen = recordlength(bufferrec);
76 if (reclen == 0) return; 77 if (reclen == 0) return;
77 gotorecordnumber(bufferrec); 78 gotorecordnumber(bufferrec);
78 fread(compressedtextbuffer, reclen, sizeof(char), fin); 79 fread(compressedtextbuffer, reclen, sizeof(char), fin);
79 80
80 zstream.next_in = compressedtextbuffer; 81 zstream.next_in = compressedtextbuffer;
81 zstream.next_out = expandedtextbuffer; 82 zstream.next_out = expandedtextbuffer;
82 zstream.avail_out = buffersize; 83 zstream.avail_out = buffersize;
83 zstream.avail_in = reclen; 84 zstream.avail_in = reclen;
84 85
85 if (bufferrec == 1) 86 if (bufferrec == 1)
86 { 87 {
87 zstream.zalloc = Z_NULL; 88 zstream.zalloc = Z_NULL;
88 zstream.zfree = Z_NULL; 89 zstream.zfree = Z_NULL;
89 zstream.opaque = Z_NULL; 90 zstream.opaque = Z_NULL;
90 91
91 inflateInit(&zstream); 92 inflateInit(&zstream);
92 } 93 }
93 94
94 95
95 int ret = inflate(&zstream, Z_SYNC_FLUSH); 96 int ret = inflate(&zstream, Z_SYNC_FLUSH);
96 buffercontent = buffersize - zstream.avail_out; 97 buffercontent = buffersize - zstream.avail_out;
97 bufferpos = 0; 98 bufferpos = 0;
98 currentpos = n - n % ntohs(hdr0.recordSize); 99 currentpos = n - n % ntohs(hdr0.recordSize);
99 while (currentpos < n) getch(); 100 while (currentpos < n) getch();
100 } 101 }
101 else 102 else
102 { 103 {
103 home(); 104 home();
104 while (currentpos < n && getch() != EOF); 105 while (currentpos < n && getch() != EOF);
105 } 106 }
106} 107}
107 108
108void ztxt::home() 109void ztxt::home()
109{ 110{
111unsuspend();
110 if (bInit) 112 if (bInit)
111 { 113 {
112 inflateEnd(&zstream); 114 inflateEnd(&zstream);
113 } 115 }
114 bInit = true; 116 bInit = true;
115 size_t reclen = recordlength(1); 117 size_t reclen = recordlength(1);
116 gotorecordnumber(1); 118 gotorecordnumber(1);
117 fread(compressedtextbuffer, reclen, sizeof(char), fin); 119 fread(compressedtextbuffer, reclen, sizeof(char), fin);
118 120
119 zstream.next_in = compressedtextbuffer; 121 zstream.next_in = compressedtextbuffer;
120 zstream.next_out = expandedtextbuffer; 122 zstream.next_out = expandedtextbuffer;
121 zstream.avail_out = buffersize; 123 zstream.avail_out = buffersize;
122 zstream.avail_in = reclen; 124 zstream.avail_in = reclen;
123 125
124 zstream.zalloc = Z_NULL; 126 zstream.zalloc = Z_NULL;
125 zstream.zfree = Z_NULL; 127 zstream.zfree = Z_NULL;
126 zstream.opaque = Z_NULL; 128 zstream.opaque = Z_NULL;
127 129
128// printf("Initialising\n"); 130// printf("Initialising\n");
129 131
130 inflateInit(&zstream); 132 inflateInit(&zstream);
131 133
132 int ret = inflate(&zstream, Z_SYNC_FLUSH); 134 int ret = inflate(&zstream, Z_SYNC_FLUSH);
133// printf("Inflate : %d\n", ret); 135// printf("Inflate : %d\n", ret);
134 bufferpos = 0; 136 bufferpos = 0;
135 bufferrec = 1; 137 bufferrec = 1;
136 currentpos = 0; 138 currentpos = 0;
137 buffercontent = buffersize - zstream.avail_out; 139 buffercontent = buffersize - zstream.avail_out;
138 //printf("buffercontent:%u\n", buffercontent); 140 //printf("buffercontent:%u\n", buffercontent);
139} 141}
140 142
141CList<Bkmk>* ztxt::getbkmklist() 143CList<Bkmk>* ztxt::getbkmklist()
142{ 144{
143 UInt16 recno = ntohs(hdr0.bookmarkRecord); 145 UInt16 recno = ntohs(hdr0.bookmarkRecord);
144 146
145// printf("Bookmarks - record %d contains %d\n", recno, ntohs(hdr0.numBookmarks)); 147// printf("Bookmarks - record %d contains %d\n", recno, ntohs(hdr0.numBookmarks));
146 148
147 if (recno == 0) return NULL; 149 if (recno == 0) return NULL;
148 150
149 CList<Bkmk>* t = new CList<Bkmk>; 151 CList<Bkmk>* t = new CList<Bkmk>;
152 unsuspend();
150 size_t cur = ftell(fin); 153 size_t cur = ftell(fin);
151 gotorecordnumber(recno); 154 gotorecordnumber(recno);
152 for (int i = 0; i < ntohs(hdr0.numBookmarks); i++) 155 for (int i = 0; i < ntohs(hdr0.numBookmarks); i++)
153 { 156 {
154 zTXTbkmk bkmk; 157 zTXTbkmk bkmk;
155 if (fread(&bkmk, sizeof(bkmk), 1, fin) != 1) break; 158 if (fread(&bkmk, sizeof(bkmk), 1, fin) != 1) break;
156// printf("Bookmark number:%d:%.20s\n", i, bkmk.title); 159// printf("Bookmark number:%d:%.20s\n", i, bkmk.title);
157 tchar title[MAX_BMRK_LENGTH]; 160 tchar title[MAX_BMRK_LENGTH];
158 for (int j = 0; j < MAX_BMRK_LENGTH; j++) 161 for (int j = 0; j < MAX_BMRK_LENGTH; j++)
159 { 162 {
160 title[j] = bkmk.title[j]; 163 title[j] = bkmk.title[j];
161 } 164 }
162 t->push_back(Bkmk(title, NULL, ntohl(bkmk.offset))); 165 t->push_back(Bkmk(title, NULL, ntohl(bkmk.offset)));
163 } 166 }
164 fseek(fin, cur, SEEK_SET); 167 fseek(fin, cur, SEEK_SET);
165 return t; 168 return t;
166} 169}
167 170
168#ifndef __STATIC 171#ifndef __STATIC
169extern "C" 172extern "C"
170{ 173{
171 CExpander* newcodec() { return new ztxt; } 174 CExpander* newcodec() { return new ztxt; }
172} 175}
173#endif 176#endif