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