File: reader.cpp

package info (click to toggle)
snes9x 1.39-7
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 3,380 kB
  • ctags: 10,759
  • sloc: cpp: 46,954; asm: 30,662; ansic: 10,178; makefile: 324
file content (99 lines) | stat: -rw-r--r-- 1,686 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Abstract the details of reading from zip files versus FILE *'s.

#include "reader.h"


// Generic constructor/destructor

Reader::Reader(void){}

Reader::~Reader(){}


// snes9x.h STREAM reader

fReader::fReader(STREAM f){
    fp=f;
}

fReader::~fReader(void){}

int fReader::get_char(){
    return GETC_STREAM(fp);
}

char *fReader::gets(char *buf, size_t len){
    return GETS_STREAM(buf, len, fp);
}

size_t fReader::read(char *buf, size_t len){
    return READ_STREAM(buf, len, fp);
}


// unzip reader
#ifdef UNZIP_SUPPORT

unzReader::unzReader(unzFile &v){
    file=v;
    head=NULL;
    numbytes=0;
}

unzReader::~unzReader(void){}

int unzReader::get_char(){
    unsigned char c;

    if(numbytes<=0){
        numbytes=unzReadCurrentFile(file, buffer, unz_BUFFSIZ);
        if(numbytes<=0) return (EOF);
        head=buffer;
    }
        
    c=*head;
    head++;
    numbytes--;
    return (int) c;
}

char *unzReader::gets(char *buf, size_t len){
    size_t i;
    int c;

    for(i=0; i<len-1; i++){
        c=get_char();
        if(c==(EOF)){
            if(i==0) return NULL;
            break;
        }

        buf[i]=(char)c;
        if(buf[i]=='\n') break;
    }
    buf[i]='\0';
    return buf;
}

size_t unzReader::read(char *buf, size_t len){
    if(len==0) return len;

    if(len<=numbytes){
        memcpy(buf, head, len);
        numbytes-=len;
        head+=len;
        return len;
    }

    size_t numread=0;
    if(numbytes>0){
        memcpy(buf, head, numbytes);
        numread+=numbytes;
        head=NULL;
        numbytes=0;
    }
    int l=unzReadCurrentFile(file, buf+numread, len-numread);
    if(l>0) numread+=l;
    return numread;
}
#endif