Hex Artifact Content

Not logged in

Artifact 7b5e9e59cf9067eee89eb035620f26342eb958e1:


0000: 2f 2f 2d 2d 2d 20 4b 2e 49 2e 4c 49 42 20 2d 2d  //--- K.I.LIB --
0010: 2d 0d 0a 2f 2f 20 6b 6c 5f 66 69 6c 65 2e 63 70  -..// kl_file.cp
0020: 70 20 3a 20 66 69 6c 65 20 6f 70 65 72 61 74 69  p : file operati
0030: 6f 6e 73 0d 0a 0d 0a 23 69 6e 63 6c 75 64 65 20  ons....#include 
0040: 22 73 74 64 61 66 78 2e 68 22 0d 0a 23 69 6e 63  "stdafx.h"..#inc
0050: 6c 75 64 65 20 22 6b 69 6c 69 62 2e 68 22 0d 0a  lude "kilib.h"..
0060: 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..//------------
0070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
0080: 73 74 61 74 69 63 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  static ---------
0090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
00a0: 2d 2f 2f 0d 0a 0d 0a 75 6e 73 69 67 6e 65 64 20  -//....unsigned 
00b0: 6c 6f 6e 67 20 6b 69 46 69 6c 65 3a 3a 67 65 74  long kiFile::get
00c0: 53 69 7a 65 28 20 63 6f 6e 73 74 20 63 68 61 72  Size( const char
00d0: 2a 20 66 6e 61 6d 65 2c 20 75 6e 73 69 67 6e 65  * fname, unsigne
00e0: 64 20 6c 6f 6e 67 20 65 72 72 20 29 0d 0a 7b 0d  d long err )..{.
00f0: 0a 09 48 41 4e 44 4c 45 20 68 20 3d 20 3a 3a 43  ..HANDLE h = ::C
0100: 72 65 61 74 65 46 69 6c 65 28 20 66 6e 61 6d 65  reateFile( fname
0110: 2c 0d 0a 09 09 09 09 47 45 4e 45 52 49 43 5f 52  ,......GENERIC_R
0120: 45 41 44 2c 20 46 49 4c 45 5f 53 48 41 52 45 5f  EAD, FILE_SHARE_
0130: 57 52 49 54 45 7c 46 49 4c 45 5f 53 48 41 52 45  WRITE|FILE_SHARE
0140: 5f 52 45 41 44 2c 0d 0a 09 09 09 09 4e 55 4c 4c  _READ,......NULL
0150: 2c 20 4f 50 45 4e 5f 45 58 49 53 54 49 4e 47 2c  , OPEN_EXISTING,
0160: 20 46 49 4c 45 5f 41 54 54 52 49 42 55 54 45 5f   FILE_ATTRIBUTE_
0170: 4e 4f 52 4d 41 4c 7c 46 49 4c 45 5f 46 4c 41 47  NORMAL|FILE_FLAG
0180: 5f 53 45 51 55 45 4e 54 49 41 4c 5f 53 43 41 4e  _SEQUENTIAL_SCAN
0190: 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 09 69 66 28 20  , NULL );...if( 
01a0: 68 3d 3d 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c  h==INVALID_HANDL
01b0: 45 5f 56 41 4c 55 45 20 29 0d 0a 09 09 72 65 74  E_VALUE )....ret
01c0: 75 72 6e 20 65 72 72 3b 0d 0a 0d 0a 09 75 6e 73  urn err;.....uns
01d0: 69 67 6e 65 64 20 6c 6f 6e 67 20 61 6e 73 20 3d  igned long ans =
01e0: 20 3a 3a 47 65 74 46 69 6c 65 53 69 7a 65 28 20   ::GetFileSize( 
01f0: 68 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 09 3a 3a 43  h, NULL );...::C
0200: 6c 6f 73 65 48 61 6e 64 6c 65 28 20 68 20 29 3b  loseHandle( h );
0210: 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 61 6e 73 3d  .....return ans=
0220: 3d 30 78 66 66 66 66 66 66 66 66 20 3f 20 65 72  =0xffffffff ? er
0230: 72 20 3a 20 61 6e 73 3b 0d 0a 7d 0d 0a 0d 0a 2f  r : ans;..}..../
0240: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /---------------
0250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 8c 8b 82  ------------ ...
0260: f1 82 c5 8a 4a 82 a2 82 c4 20 2d 2d 2d 2d 2d 2d  ....J.... ------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0280: 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 0d 0a 62 6f 6f 6c  ----//......bool
0290: 20 6b 69 46 69 6c 65 3a 3a 6f 70 65 6e 28 20 63   kiFile::open( c
02a0: 6f 6e 73 74 20 63 68 61 72 2a 20 66 69 6c 65 6e  onst char* filen
02b0: 61 6d 65 2c 20 62 6f 6f 6c 20 72 65 61 64 2c 20  ame, bool read, 
02c0: 62 6f 6f 6c 20 63 72 65 61 74 65 20 29 0d 0a 7b  bool create )..{
02d0: 0d 0a 09 63 6c 6f 73 65 28 29 3b 0d 0a 0d 0a 09  ...close();.....
02e0: 69 66 28 20 6d 5f 62 52 65 61 64 4d 6f 64 65 20  if( m_bReadMode 
02f0: 3d 20 72 65 61 64 20 29 0d 0a 09 09 6d 5f 68 46  = read )....m_hF
0300: 69 6c 65 20 3d 20 3a 3a 43 72 65 61 74 65 46 69  ile = ::CreateFi
0310: 6c 65 28 20 66 69 6c 65 6e 61 6d 65 2c 0d 0a 09  le( filename,...
0320: 09 09 09 47 45 4e 45 52 49 43 5f 52 45 41 44 2c  ...GENERIC_READ,
0330: 20 46 49 4c 45 5f 53 48 41 52 45 5f 52 45 41 44   FILE_SHARE_READ
0340: 2c 20 4e 55 4c 4c 2c 20 4f 50 45 4e 5f 45 58 49  , NULL, OPEN_EXI
0350: 53 54 49 4e 47 2c 0d 0a 09 09 09 09 46 49 4c 45  STING,......FILE
0360: 5f 41 54 54 52 49 42 55 54 45 5f 4e 4f 52 4d 41  _ATTRIBUTE_NORMA
0370: 4c 20 7c 20 46 49 4c 45 5f 46 4c 41 47 5f 53 45  L | FILE_FLAG_SE
0380: 51 55 45 4e 54 49 41 4c 5f 53 43 41 4e 2c 20 4e  QUENTIAL_SCAN, N
0390: 55 4c 4c 20 29 3b 0d 0a 09 65 6c 73 65 0d 0a 09  ULL );...else...
03a0: 09 6d 5f 68 46 69 6c 65 20 3d 20 3a 3a 43 72 65  .m_hFile = ::Cre
03b0: 61 74 65 46 69 6c 65 28 20 66 69 6c 65 6e 61 6d  ateFile( filenam
03c0: 65 2c 0d 0a 09 09 09 09 47 45 4e 45 52 49 43 5f  e,......GENERIC_
03d0: 57 52 49 54 45 2c 20 46 49 4c 45 5f 53 48 41 52  WRITE, FILE_SHAR
03e0: 45 5f 52 45 41 44 2c 20 4e 55 4c 4c 2c 0d 0a 09  E_READ, NULL,...
03f0: 09 09 09 63 72 65 61 74 65 20 3f 20 43 52 45 41  ...create ? CREA
0400: 54 45 5f 41 4c 57 41 59 53 20 3a 20 4f 50 45 4e  TE_ALWAYS : OPEN
0410: 5f 45 58 49 53 54 49 4e 47 2c 0d 0a 09 09 09 09  _EXISTING,......
0420: 46 49 4c 45 5f 41 54 54 52 49 42 55 54 45 5f 4e  FILE_ATTRIBUTE_N
0430: 4f 52 4d 41 4c 20 7c 20 46 49 4c 45 5f 46 4c 41  ORMAL | FILE_FLA
0440: 47 5f 53 45 51 55 45 4e 54 49 41 4c 5f 53 43 41  G_SEQUENTIAL_SCA
0450: 4e 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 09 69 66 28  N, NULL );...if(
0460: 20 6d 5f 68 46 69 6c 65 20 3d 3d 20 49 4e 56 41   m_hFile == INVA
0470: 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45  LID_HANDLE_VALUE
0480: 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 66 61 6c   )....return fal
0490: 73 65 3b 0d 0a 0d 0a 09 6d 5f 6e 42 75 66 50 6f  se;.....m_nBufPo
04a0: 73 20 3d 20 30 3b 0d 0a 09 69 66 28 20 6d 5f 62  s = 0;...if( m_b
04b0: 52 65 61 64 4d 6f 64 65 20 29 0d 0a 09 09 66 6c  ReadMode )....fl
04c0: 75 73 68 28 29 3b 0d 0a 0d 0a 09 72 65 74 75 72  ush();.....retur
04d0: 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 76 6f  n true;..}....vo
04e0: 69 64 20 6b 69 46 69 6c 65 3a 3a 63 6c 6f 73 65  id kiFile::close
04f0: 28 29 0d 0a 7b 0d 0a 09 69 66 28 20 6d 5f 68 46  ()..{...if( m_hF
0500: 69 6c 65 20 21 3d 20 49 4e 56 41 4c 49 44 5f 48  ile != INVALID_H
0510: 41 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d 0a 09  ANDLE_VALUE )...
0520: 7b 0d 0a 09 09 69 66 28 20 21 6d 5f 62 52 65 61  {....if( !m_bRea
0530: 64 4d 6f 64 65 20 29 0d 0a 09 09 09 66 6c 75 73  dMode ).....flus
0540: 68 28 29 3b 0d 0a 0d 0a 09 09 3a 3a 43 6c 6f 73  h();......::Clos
0550: 65 48 61 6e 64 6c 65 28 20 6d 5f 68 46 69 6c 65  eHandle( m_hFile
0560: 20 29 3b 0d 0a 09 09 6d 5f 68 46 69 6c 65 20 3d   );....m_hFile =
0570: 20 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f   INVALID_HANDLE_
0580: 56 41 4c 55 45 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d  VALUE;...}..}...
0590: 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ...//-----------
05a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
05b0: 93 c7 82 dd 8f 91 82 ab 20 2d 2d 2d 2d 2d 2d 2d  ........ -------
05c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05d0: 2d 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 0d 0a 75 6e 73  -----//......uns
05e0: 69 67 6e 65 64 20 6c 6f 6e 67 20 6b 69 46 69 6c  igned long kiFil
05f0: 65 3a 3a 72 65 61 64 28 20 75 6e 73 69 67 6e 65  e::read( unsigne
0600: 64 20 63 68 61 72 2a 20 62 75 66 2c 20 75 6e 73  d char* buf, uns
0610: 69 67 6e 65 64 20 6c 6f 6e 67 20 6c 65 6e 20 29  igned long len )
0620: 0d 0a 7b 0d 0a 09 75 6e 73 69 67 6e 65 64 20 6c  ..{...unsigned l
0630: 6f 6e 67 20 61 6e 73 20 3d 20 30 3b 0d 0a 09 69  ong ans = 0;...i
0640: 66 28 20 6d 5f 6e 42 75 66 53 69 7a 65 21 3d 30  f( m_nBufSize!=0
0650: 20 26 26 20 6d 5f 68 46 69 6c 65 21 3d 49 4e 56   && m_hFile!=INV
0660: 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55  ALID_HANDLE_VALU
0670: 45 20 26 26 20 6d 5f 62 52 65 61 64 4d 6f 64 65  E && m_bReadMode
0680: 20 29 0d 0a 09 7b 0d 0a 09 09 77 68 69 6c 65 28   )...{....while(
0690: 20 28 6d 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f 6e   (m_nBufSize-m_n
06a0: 42 75 66 50 6f 73 29 20 3c 3d 20 6c 65 6e 20 29  BufPos) <= len )
06b0: 0d 0a 09 09 7b 0d 0a 09 09 09 61 6e 73 20 2b 3d  ....{.....ans +=
06c0: 20 28 6d 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f 6e   (m_nBufSize-m_n
06d0: 42 75 66 50 6f 73 29 3b 0d 0a 09 09 09 6b 69 5f  BufPos);.....ki_
06e0: 6d 65 6d 63 70 79 28 20 62 75 66 2c 20 6d 5f 70  memcpy( buf, m_p
06f0: 42 75 66 2b 6d 5f 6e 42 75 66 50 6f 73 2c 20 6d  Buf+m_nBufPos, m
0700: 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f 6e 42 75 66  _nBufSize-m_nBuf
0710: 50 6f 73 20 29 3b 0d 0a 09 09 09 6c 65 6e 20 2d  Pos );.....len -
0720: 3d 20 28 6d 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f  = (m_nBufSize-m_
0730: 6e 42 75 66 50 6f 73 29 3b 0d 0a 09 09 09 62 75  nBufPos);.....bu
0740: 66 20 2b 3d 20 28 6d 5f 6e 42 75 66 53 69 7a 65  f += (m_nBufSize
0750: 2d 6d 5f 6e 42 75 66 50 6f 73 29 3b 0d 0a 0d 0a  -m_nBufPos);....
0760: 09 09 09 66 6c 75 73 68 28 29 3b 0d 0a 09 09 09  ...flush();.....
0770: 69 66 28 20 6d 5f 6e 42 75 66 53 69 7a 65 20 3d  if( m_nBufSize =
0780: 3d 20 30 20 29 0d 0a 09 09 09 09 72 65 74 75 72  = 0 )......retur
0790: 6e 20 61 6e 73 3b 0d 0a 09 09 7d 0d 0a 09 09 61  n ans;....}....a
07a0: 6e 73 20 2b 3d 20 6c 65 6e 3b 0d 0a 09 09 6b 69  ns += len;....ki
07b0: 5f 6d 65 6d 63 70 79 28 20 62 75 66 2c 20 6d 5f  _memcpy( buf, m_
07c0: 70 42 75 66 2b 6d 5f 6e 42 75 66 50 6f 73 2c 20  pBuf+m_nBufPos, 
07d0: 6c 65 6e 20 29 3b 0d 0a 09 09 6d 5f 6e 42 75 66  len );....m_nBuf
07e0: 50 6f 73 20 2b 3d 20 6c 65 6e 3b 0d 0a 09 7d 0d  Pos += len;...}.
07f0: 0a 09 72 65 74 75 72 6e 20 61 6e 73 3b 0d 0a 7d  ..return ans;..}
0800: 0d 0a 0d 0a 76 6f 69 64 20 6b 69 46 69 6c 65 3a  ....void kiFile:
0810: 3a 77 72 69 74 65 28 20 63 6f 6e 73 74 20 76 6f  :write( const vo
0820: 69 64 2a 20 62 75 66 2c 20 75 6e 73 69 67 6e 65  id* buf, unsigne
0830: 64 20 6c 6f 6e 67 20 6c 65 6e 20 29 0d 0a 7b 0d  d long len )..{.
0840: 0a 09 69 66 28 20 6d 5f 68 46 69 6c 65 3d 3d 49  ..if( m_hFile==I
0850: 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41  NVALID_HANDLE_VA
0860: 4c 55 45 20 7c 7c 20 6d 5f 62 52 65 61 64 4d 6f  LUE || m_bReadMo
0870: 64 65 20 29 0d 0a 09 09 72 65 74 75 72 6e 3b 0d  de )....return;.
0880: 0a 09 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  ..const unsigned
0890: 20 63 68 61 72 2a 20 75 62 75 66 20 3d 20 28 63   char* ubuf = (c
08a0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
08b0: 61 72 2a 29 62 75 66 3b 0d 0a 0d 0a 09 77 68 69  ar*)buf;.....whi
08c0: 6c 65 28 20 28 6b 69 66 69 6c 65 5f 62 75 66 73  le( (kifile_bufs
08d0: 69 7a 65 2d 6d 5f 6e 42 75 66 50 6f 73 29 20 3c  ize-m_nBufPos) <
08e0: 3d 20 6c 65 6e 20 29 0d 0a 09 7b 0d 0a 09 09 6b  = len )...{....k
08f0: 69 5f 6d 65 6d 63 70 79 28 20 6d 5f 70 42 75 66  i_memcpy( m_pBuf
0900: 2b 6d 5f 6e 42 75 66 50 6f 73 2c 20 62 75 66 2c  +m_nBufPos, buf,
0910: 20 28 6b 69 66 69 6c 65 5f 62 75 66 73 69 7a 65   (kifile_bufsize
0920: 2d 6d 5f 6e 42 75 66 50 6f 73 29 20 29 3b 0d 0a  -m_nBufPos) );..
0930: 09 09 6c 65 6e 20 2d 3d 20 28 6b 69 66 69 6c 65  ..len -= (kifile
0940: 5f 62 75 66 73 69 7a 65 2d 6d 5f 6e 42 75 66 50  _bufsize-m_nBufP
0950: 6f 73 29 3b 0d 0a 09 09 75 62 75 66 20 2b 3d 20  os);....ubuf += 
0960: 28 6b 69 66 69 6c 65 5f 62 75 66 73 69 7a 65 2d  (kifile_bufsize-
0970: 6d 5f 6e 42 75 66 50 6f 73 29 3b 0d 0a 09 09 6d  m_nBufPos);....m
0980: 5f 6e 42 75 66 50 6f 73 20 3d 20 6b 69 66 69 6c  _nBufPos = kifil
0990: 65 5f 62 75 66 73 69 7a 65 3b 0d 0a 09 09 66 6c  e_bufsize;....fl
09a0: 75 73 68 28 29 3b 0d 0a 09 7d 0d 0a 09 6b 69 5f  ush();...}...ki_
09b0: 6d 65 6d 63 70 79 28 20 6d 5f 70 42 75 66 2b 6d  memcpy( m_pBuf+m
09c0: 5f 6e 42 75 66 50 6f 73 2c 20 75 62 75 66 2c 20  _nBufPos, ubuf, 
09d0: 6c 65 6e 20 29 3b 0d 0a 09 6d 5f 6e 42 75 66 50  len );...m_nBufP
09e0: 6f 73 20 2b 3d 20 6c 65 6e 3b 0d 0a 7d 0d 0a 0d  os += len;..}...
09f0: 0a 23 75 6e 64 65 66 20 70 75 74 63 0d 0a 76 6f  .#undef putc..vo
0a00: 69 64 20 6b 69 46 69 6c 65 3a 3a 70 75 74 63 28  id kiFile::putc(
0a10: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63   unsigned char c
0a20: 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 6d 5f 68 46   )..{...if( m_hF
0a30: 69 6c 65 3d 3d 49 4e 56 41 4c 49 44 5f 48 41 4e  ile==INVALID_HAN
0a40: 44 4c 45 5f 56 41 4c 55 45 20 7c 7c 20 6d 5f 62  DLE_VALUE || m_b
0a50: 52 65 61 64 4d 6f 64 65 20 29 0d 0a 09 09 72 65  ReadMode )....re
0a60: 74 75 72 6e 3b 0d 0a 09 69 66 28 20 28 6b 69 66  turn;...if( (kif
0a70: 69 6c 65 5f 62 75 66 73 69 7a 65 2d 6d 5f 6e 42  ile_bufsize-m_nB
0a80: 75 66 50 6f 73 29 20 3c 3d 20 31 20 29 0d 0a 09  ufPos) <= 1 )...
0a90: 09 66 6c 75 73 68 28 29 3b 0d 0a 09 6d 5f 70 42  .flush();...m_pB
0aa0: 75 66 5b 20 6d 5f 6e 42 75 66 50 6f 73 2b 2b 20  uf[ m_nBufPos++ 
0ab0: 5d 20 3d 20 63 3b 0d 0a 7d 0d 0a 0d 0a 23 75 6e  ] = c;..}....#un
0ac0: 64 65 66 20 67 65 74 63 0d 0a 69 6e 74 20 6b 69  def getc..int ki
0ad0: 46 69 6c 65 3a 3a 67 65 74 63 28 29 0d 0a 7b 0d  File::getc()..{.
0ae0: 0a 09 69 66 28 20 6d 5f 6e 42 75 66 53 69 7a 65  ..if( m_nBufSize
0af0: 3d 3d 30 20 7c 7c 20 6d 5f 68 46 69 6c 65 3d 3d  ==0 || m_hFile==
0b00: 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56  INVALID_HANDLE_V
0b10: 41 4c 55 45 20 7c 7c 20 21 6d 5f 62 52 65 61 64  ALUE || !m_bRead
0b20: 4d 6f 64 65 20 29 0d 0a 09 09 72 65 74 75 72 6e  Mode )....return
0b30: 20 2d 31 3b 0d 0a 0d 0a 09 69 66 28 20 30 3d 3d   -1;.....if( 0==
0b40: 28 6d 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f 6e 42  (m_nBufSize-m_nB
0b50: 75 66 50 6f 73 29 20 29 0d 0a 09 7b 0d 0a 09 09  ufPos) )...{....
0b60: 66 6c 75 73 68 28 29 3b 0d 0a 09 09 69 66 28 20  flush();....if( 
0b70: 6d 5f 6e 42 75 66 53 69 7a 65 3d 3d 30 20 29 0d  m_nBufSize==0 ).
0b80: 0a 09 09 09 72 65 74 75 72 6e 20 2d 31 3b 0d 0a  ....return -1;..
0b90: 09 7d 0d 0a 09 69 66 28 20 31 3d 3d 28 6d 5f 6e  .}...if( 1==(m_n
0ba0: 42 75 66 53 69 7a 65 2d 6d 5f 6e 42 75 66 50 6f  BufSize-m_nBufPo
0bb0: 73 29 20 29 0d 0a 09 7b 0d 0a 09 09 69 6e 74 20  s) )...{....int 
0bc0: 61 6e 73 20 3d 20 6d 5f 70 42 75 66 5b 20 6d 5f  ans = m_pBuf[ m_
0bd0: 6e 42 75 66 50 6f 73 2b 2b 20 5d 3b 0d 0a 09 09  nBufPos++ ];....
0be0: 66 6c 75 73 68 28 29 3b 0d 0a 09 09 72 65 74 75  flush();....retu
0bf0: 72 6e 20 61 6e 73 3b 0d 0a 09 7d 0d 0a 0d 0a 09  rn ans;...}.....
0c00: 72 65 74 75 72 6e 20 6d 5f 70 42 75 66 5b 20 6d  return m_pBuf[ m
0c10: 5f 6e 42 75 66 50 6f 73 2b 2b 20 5d 3b 0d 0a 7d  _nBufPos++ ];..}
0c20: 0d 0a 0d 0a 76 6f 69 64 20 6b 69 46 69 6c 65 3a  ....void kiFile:
0c30: 3a 66 6c 75 73 68 28 29 0d 0a 7b 0d 0a 09 69 66  :flush()..{...if
0c40: 28 20 6d 5f 62 52 65 61 64 4d 6f 64 65 20 29 0d  ( m_bReadMode ).
0c50: 0a 09 7b 0d 0a 09 09 3a 3a 52 65 61 64 46 69 6c  ..{....::ReadFil
0c60: 65 28 20 6d 5f 68 46 69 6c 65 2c 20 6d 5f 70 42  e( m_hFile, m_pB
0c70: 75 66 2c 20 6b 69 66 69 6c 65 5f 62 75 66 73 69  uf, kifile_bufsi
0c80: 7a 65 2c 20 26 6d 5f 6e 42 75 66 53 69 7a 65 2c  ze, &m_nBufSize,
0c90: 20 4e 55 4c 4c 20 29 3b 0d 0a 09 09 6d 5f 6e 42   NULL );....m_nB
0ca0: 75 66 50 6f 73 20 3d 20 30 3b 0d 0a 09 7d 0d 0a  ufPos = 0;...}..
0cb0: 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09 3a 3a 57  .else...{....::W
0cc0: 72 69 74 65 46 69 6c 65 28 20 6d 5f 68 46 69 6c  riteFile( m_hFil
0cd0: 65 2c 20 6d 5f 70 42 75 66 2c 20 6d 5f 6e 42 75  e, m_pBuf, m_nBu
0ce0: 66 50 6f 73 2c 20 26 6d 5f 6e 42 75 66 53 69 7a  fPos, &m_nBufSiz
0cf0: 65 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 09 09 6d 5f  e, NULL );....m_
0d00: 6e 42 75 66 53 69 7a 65 20 3d 20 6d 5f 6e 42 75  nBufSize = m_nBu
0d10: 66 50 6f 73 20 3d 20 30 3b 0d 0a 09 7d 0d 0a 7d  fPos = 0;...}..}
0d20: 0d 0a                                            ..