Branch: Tag:

2002-11-24

2002-11-24 21:06:09 by Marcus Agehall <agehall@gmail.com>

Moved from Stdio.GZipFile.

Rev: src/modules/Gz/module.pmod.in:1.1

1: + // $Id: module.pmod.in,v 1.1 2002/11/24 21:06:09 agehall Exp $ + #pike __REAL_VERSION__    -  + inherit @module@; +  +  +  + //! Allows the user to open a Gzip archive and read and write + //! it's contents in an uncompressed form, emulating the @[Stdio.File] + //! interface. + //! @note + //! An important limitation on this class is that it may only be used + //! for reading @b{or@} writing, not both at the same time. + //! Please also note that if you want to reopen a file for reading + //! after a write, you must close the file before calling open or + //! strange effects might be the result. + class File { +  inherit @module@._file; +  +  private int is_open; +  +  //! @decl void create(void|string|int file, void|string mode) +  //! @param file +  //! Filename or filedescriptor of the gzip file to open. +  //! @param mode +  //! mode for the file. Defaults to "rb". +  //! @seealso +  //! @[open] @[Stdio.File] +  void create(mixed ... args) { +  ::create(); +  +  if(sizeof(args)) +  open(@args); +  } +  +  string _sprintf() +  { +  return sprintf("GZipFile(/*%s open */)", is_open ? "" : " not"); +  } +  +  int close() +  { +  is_open = 0; +  return ::close(); +  } +  +  void destroy() { +  close(); +  } +  +  //! @param file +  //! Filename or filedescriptor of the gzip file to open. +  //! @param mode +  //! mode for the file. Defaults to "rb". +  //! May be one of the following: +  //! @dl +  //! @item rb +  //! read mode +  //! @item wb +  //! write mode +  //! @item ab +  //! append mode +  //! @enddl +  //! For the wb and ab mode, additional parameters may +  //! be specified. Please se zlib manual for more info. +  //! @returns +  //! non-zero if successful. +  int open(string|int file, void|string mode) { +  string open_mode="rb"; +  +  if (is_open) +  ::close(); +  +  if (stringp(mode)) { +  open_mode = lower_case(mode); +  } +  +  is_open = ::open(file, open_mode); +  return is_open; +  } +  +  //! Reads data from the file. +  //! If no argument is given, the whole file is read. +  int|string read(void|int length) { +  string ret = ""; +  +  if (!is_open) +  return 0; +  +  if (!zero_type(length)) +  return ::read(length); +  else +  while(!eof()) { +  ret += ::read(1024*64); +  } +  return ret; +  } + }   Newline at end of file added.