home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / crt / src / fiopen.cpp < prev    next >
C/C++ Source or Header  |  1998-06-16  |  1KB  |  50 lines

  1. // fiopen -- [w]filebuf::_Fiopen(const char *, ios::openmode)
  2. #include <locale>
  3. #include <fstream>
  4. _STD_BEGIN
  5.  
  6. _CRTIMP2 FILE *__cdecl __Fiopen(const char *name,
  7.     ios_base::openmode mode)
  8.     {    // open a file
  9.     static const char *mods[] = {
  10.         "r", "w", "w", "a", "rb", "wb", "wb", "ab",
  11.             "r+", "w+", "a+", "r+b", "w+b", "a+b", 0};
  12.     static const int valid[] = {
  13.         ios_base::in,
  14.         ios_base::out,
  15.         ios_base::out | ios_base::trunc,
  16.         ios_base::out | ios_base::app,
  17.         ios_base::in | ios_base::binary,
  18.         ios_base::out | ios_base::binary,
  19.         ios_base::out | ios_base::trunc | ios_base::binary,
  20.         ios_base::out | ios_base::app | ios_base::binary,
  21.         ios_base::in | ios_base::out,
  22.         ios_base::in | ios_base::out | ios_base::trunc,
  23.         ios_base::in | ios_base::out | ios_base::app,
  24.         ios_base::in | ios_base::out | ios_base::binary,
  25.         ios_base::in | ios_base::out | ios_base::trunc
  26.             | ios_base::binary,
  27.         ios_base::in | ios_base::out | ios_base::app
  28.             | ios_base::binary,
  29.         0};
  30.     FILE *fp;
  31.     int n;
  32.     ios_base::openmode atefl = mode & ios_base::ate;
  33.     mode &= ~ios_base::ate;
  34.     for (n = 0; valid[n] != 0 && valid[n] != mode; ++n)
  35.         ;
  36.     if (valid[n] == 0 || (fp = fopen(name, mods[n])) == 0)
  37.         return (0);
  38.     if (!atefl || fseek(fp, 0, SEEK_END) == 0)
  39.         return (fp);
  40.     fclose(fp);    // can't position at end
  41.     return (0);
  42.     }
  43.  
  44. _STD_END
  45.  
  46. /*
  47.  * Copyright (c) 1994 by P.J. Plauger.  ALL RIGHTS RESERVED. 
  48.  * Consult your license regarding permissions and restrictions.
  49.  */
  50.