1 // -*- mode: c++; c-set-style: "stroustrup"; tab-width: 4; -*-
2 //
3 // CFile.h
4 //
5 // Copyright (C) 2004 Koji Nakamaru
6 //
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 2, or (at your option)
10 // any later version.
11 //
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software Foundation,
19 // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 //
21 
22 #ifndef _CFile_h_
23 #define _CFile_h_
24 
25 class CFile {
26 public:
27 	CFile();
28 	virtual ~CFile();
29 	bool open(char *name);
30 	void close();
31 	bool stat(struct stat *sbuf);
32 	char *gets(char *buf, size_t len);
33 	int getc();
34 	size_t read(void *buf, size_t len);
35 	bool seek(size_t pos);
36 	size_t tell();
37 
38 protected:
39 	enum {
40 		kFileNone = 0,
41 		kFileStdIn,
42 		kFileBZ,
43 		kFileGZ,
44 		kFileXZ,
45 		kFileUZ,
46 	} _type;
47 	void *_fp;
48 	char *_stream;
49 	char _buf[4096];
50 	char _name[PATH_MAX];
51 	size_t _pos;
52 };
53 
54 #endif
55