⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ffile.h

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 H
字号:
/* -*-C++-*-    "$Id: FFile.H,v 1.1.1.1 2003/08/07 21:18:37 jasonk Exp $"      Copyright 1999-2000 by the Flek development team.      This library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public   License as published by the Free Software Foundation; either   version 2 of the License, or (at your option) any later version.      This library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.      You should have received a copy of the GNU Library General Public   License along with this library; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307   USA.     Please report all bugs and problems to "flek-devel@sourceforge.net".   */#ifndef _FFILE_H_#define _FFILE_H_#include <stdio.h>typedef unsigned long ulong;typedef unsigned long * ulongPtr;typedef unsigned short ushort;typedef unsigned short * ushortPtr;typedef unsigned char uchar;typedef unsigned char * ucharPtr;enum FFileMode {  FFileNull = 0,  FFileRead = 1,  FFileReadPlus,  FFileWrite,  FFileWritePlus,  FFileAppend,  FFileAppendPlus};/** @package libflek_core * fFile provides efficient file io routines in a c++ encapsulation.   * On most systems it should perform better than c++ io streams. * Ultimately, this class should be similar to Ruby's * <a href="http://www.ruby-lang.org/en/man-1.4/File.html">File Class</a>. */class FFile { public:  /**   * The Constructor.   *   * @param filename The name of the file to open.   * @param mode The mode the file should be opened in:   * <ul>   * <li><b>FFileRead</b> - Open  text  file  for reading.  The stream is    *     positioned at the beginning of the file.</li>   * <li><b>FFileReadPlus</b> - Open for reading and writing.  The stream is    *     positioned at the beginning of the file.</li>   * <li><b>FFileWrite</b> - Truncate file to zero length or create text file   *     for writing.   The stream is positioned at the   *     beginning of the file.</li>   * <li><b>FFileWritePlus</b> - Open  for reading and writing.  The file is created   *     if it does not exist, otherwise  it  is  truncated.   *     The  stream  is  positioned at the beginning of the file.</li>   * <li><b>FFileAppend</b> - Open for writing.  The file is created if  it  does   * not  exist.  The stream is positioned at the end of the file.</li>   * <li><b>FFileAppendPlus</b> - Open for reading and writing.  The file is  created   * if  it does not exist.  The stream is positioned at   * the end of the file.</li>   *</ul>   */  FFile (char *filename=0, FFileMode mode=FFileRead) {    Fd = 0;    Error = 0;        if (filename)      open (filename, mode);  }  /**   * The destructor closes the file if it is still open.   */  ~FFile () {    if (Fd)      fclose (Fd);  }  /**   * Open a file with the given filename, and a mode.  The mode should be    * one of the standard fopen modes (see the constructor for a listing).   */  void open (char *filename, FFileMode mode);  /**   * Put a single character into the file stream using Hi (MSB) byte order.   */  inline void put_hi (char c) {    fputc (c, Fd);  }  /**   * Put a single unsigned character into the file stream using Hi (MSB) byte order.   */  inline void put_hi (uchar c) {    fputc (c, Fd);  }  /**   * Put a single unsigned short into the file stream using Hi (MSB) byte order.   */  inline void put_hi (unsigned short c) {    unsigned char t[2];    t[0] = ((c >> 8) & 0xff);    t[1] = (c & 0xff);    int size = fwrite (t, 2, 1, Fd);    if (size != 1) Error = 1;  }  /**   * Put a single unsigned short into the file stream using Hi (MSB) byte order.   */  inline void put_hi (short c) {    put_hi ((unsigned short) c);  }    /**   * Put a single unsigned long into the file stream using Hi (MSB) byte order.   */  inline void put_hi (unsigned long c) {    unsigned char t[4];    t[0] = (unsigned char)((c >> 24) & 0xff);    t[1] = (unsigned char)((c >> 16) & 0xff);    t[2] = (unsigned char)((c >> 8) & 0xff);    t[3] = (unsigned char)(c & 0xff);    int size = fwrite (t, 1, 4, Fd);    if (size != 4) Error = 1;  }  /**   * Put a single long into the file stream using Hi (MSB) byte order.   */  inline void put_hi (long c) {    unsigned char t[4];    t[0] = (unsigned char)((c >> 24) & 0xff);    t[1] = (unsigned char)((c >> 16) & 0xff);    t[2] = (unsigned char)((c >> 8) & 0xff);    t[3] = (unsigned char)(c & 0xff);    int size = fwrite (t, 1, 4, Fd);    if (size != 4) Error = 1;  }  /**   * Write an array of characters into the file stream.   */  inline void write (char *c, int len) {    int size = fwrite ((void *)c, 1, len, Fd);    if (size != len) Error = 1;  }  /**   * Get a single unsigned character from the file stream using Hi (MSB) byte order.   */  void get_hi (uchar& r) {     fread (&r, 1, 1, Fd);  }   /**   * Get a single short int from the file stream using Hi (MSB) byte order.   */  void get_hi (short& r) {     uchar b[2];    fread (b, 2, 1, Fd);    r = ((b[0] << 8) | b[1]);   }   /**   * Get a single unsigned short int from the file stream using Hi (MSB) byte order.   */  void get_hi (ushort& r) {     uchar b[2];    fread (b, 2, 1, Fd);    r = ((b[0] << 8) | b[1]);   }   /**   * Get a single unsigned long int from the file stream using Hi (MSB) byte order.   */  void get_hi (ulong& r) {     uchar b[4];    fread (b, 4, 1, Fd);    r = ((b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]);   }   /**   * Read an array of characters into the file stream.   */  inline void read (char *c, int len) {    int size = fread ((void *)c, 1, len, Fd);    if (size != len) Error = 1;  }    /**   * Read an array of unsigned characters into the file stream.   */  inline void read (uchar *c, int len) {    int size = fread ((void *)c, 1, len, Fd);    if (size != len) Error = 1;  }  /**   * Set the file postion indicator to pos.  Seek can set pos relative to   * the beginning (mode=SEEK_SET), the end (mode=SEEK_END), or the current   * position (mode=SEEK_CUR).   */  inline void seek (long pos, int mode = SEEK_SET) {    Error = fseek (Fd, pos, mode);  }  /**   * Report the current file position.   */  long tell () {    long rval = ftell (Fd);    if (rval == -1) Error = -1;    return rval;  }  /**    * Report if there has been any errors.   */  bool bad () {    if (Error == 0) return false;    return true;  }    /**   * Close the file stream.   */  void close () {    fclose (Fd);    Fd = 0;  }    /**   * Return the C file handle.   */  FILE *fd () {    return Fd;  }  char* expand (char* name);  protected:  FILE *Fd;  char *filename;  int Error;};/** * Convert an array of MSB longs to an array of LSB longs. */void lo_to_hi (ulong *buffer, int len);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -