summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/ZText.h
Unidiff
Diffstat (limited to 'noncore/apps/opie-reader/ZText.h') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-reader/ZText.h39
1 files changed, 35 insertions, 4 deletions
diff --git a/noncore/apps/opie-reader/ZText.h b/noncore/apps/opie-reader/ZText.h
index ab81a5e..06e3bf8 100644
--- a/noncore/apps/opie-reader/ZText.h
+++ b/noncore/apps/opie-reader/ZText.h
@@ -13,11 +13,14 @@ public:
13 void suspend() 13 void suspend()
14 { 14 {
15#ifdef USEQPE 15#ifdef USEQPE
16 if (!bSuspended)
17 {
16 bSuspended = true; 18 bSuspended = true;
17 suspos = gztell(file); 19 suspos = gztell(file);
18 gzclose(file); 20 gzclose(file);
19 file = NULL; 21 file = NULL;
20 sustime = time(NULL); 22 sustime = time(NULL);
23 }
21#endif 24#endif
22 } 25 }
23 void unsuspend() 26 void unsuspend()
@@ -26,8 +29,11 @@ public:
26 if (bSuspended) 29 if (bSuspended)
27 { 30 {
28 bSuspended = false; 31 bSuspended = false;
32 if (sustime != ((time_t)-1))
33 {
29 int delay = time(NULL) - sustime; 34 int delay = time(NULL) - sustime;
30 if (delay < 10) sleep(10-delay); 35 if (delay < 10) sleep(10-delay);
36 }
31 file = gzopen(fname, "rb"); 37 file = gzopen(fname, "rb");
32 for (int i = 0; file == NULL && i < 5; i++) 38 for (int i = 0; file == NULL && i < 5; i++)
33 { 39 {
@@ -46,7 +52,13 @@ public:
46 Text() : file(NULL) {}; 52 Text() : file(NULL) {};
47 virtual ~Text() 53 virtual ~Text()
48 { 54 {
49 if (file != NULL) gzclose(file); 55 if (file != NULL)
56 {
57#ifdef USEQPE
58 unsuspend();
59#endif
60 gzclose(file);
61 }
50 } 62 }
51 int OpenFile(const char *src) 63 int OpenFile(const char *src)
52 { 64 {
@@ -56,9 +68,27 @@ public:
56 fsize = _stat.st_size; 68 fsize = _stat.st_size;
57 return ((file = gzopen(src,"rb")) == NULL); 69 return ((file = gzopen(src,"rb")) == NULL);
58 } 70 }
59 int getch() { return gzgetc(file); } 71 int getch()
60 unsigned int locate() { return gztell(file); } 72 {
61 void locate(unsigned int n) { gzseek(file,n,SEEK_SET); } 73#ifdef USEQPE
74 unsuspend();
75#endif
76 return gzgetc(file);
77 }
78 unsigned int locate()
79 {
80#ifdef USEQPE
81 unsuspend();
82#endif
83 return gztell(file);
84 }
85 void locate(unsigned int n)
86 {
87#ifdef USEQPE
88 unsuspend();
89#endif
90 gzseek(file,n,SEEK_SET);
91 }
62 bool hasrandomaccess() { return true; } 92 bool hasrandomaccess() { return true; }
63 void sizes(unsigned long& _file, unsigned long& _text) 93 void sizes(unsigned long& _file, unsigned long& _text)
64 { 94 {
@@ -81,5 +111,6 @@ public:
81 { 111 {
82 return cTEXT; 112 return cTEXT;
83 } 113 }
114 QString about() { return QString("Text/gzipped text codec (c) Tim Wentford"); }
84}; 115};
85#endif 116#endif