Hex Artifact Content

Not logged in

Artifact 0fee3831c01ce648377ce800d9275b2e7667ccae:


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 5f 5f 69 6e 74 36 34 20 6b  -//....__int64 k
00b0: 69 46 69 6c 65 3a 3a 67 65 74 53 69 7a 65 36 34  iFile::getSize64
00c0: 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 66 6e  ( const char* fn
00d0: 61 6d 65 20 29 0d 0a 7b 0d 0a 09 48 41 4e 44 4c  ame )..{...HANDL
00e0: 45 20 68 20 3d 20 3a 3a 43 72 65 61 74 65 46 69  E h = ::CreateFi
00f0: 6c 65 28 20 66 6e 61 6d 65 2c 0d 0a 09 09 09 09  le( fname,......
0100: 47 45 4e 45 52 49 43 5f 52 45 41 44 2c 20 46 49  GENERIC_READ, FI
0110: 4c 45 5f 53 48 41 52 45 5f 57 52 49 54 45 7c 46  LE_SHARE_WRITE|F
0120: 49 4c 45 5f 53 48 41 52 45 5f 52 45 41 44 2c 0d  ILE_SHARE_READ,.
0130: 0a 09 09 09 09 4e 55 4c 4c 2c 20 4f 50 45 4e 5f  .....NULL, OPEN_
0140: 45 58 49 53 54 49 4e 47 2c 20 46 49 4c 45 5f 41  EXISTING, FILE_A
0150: 54 54 52 49 42 55 54 45 5f 4e 4f 52 4d 41 4c 7c  TTRIBUTE_NORMAL|
0160: 46 49 4c 45 5f 46 4c 41 47 5f 53 45 51 55 45 4e  FILE_FLAG_SEQUEN
0170: 54 49 41 4c 5f 53 43 41 4e 2c 20 4e 55 4c 4c 20  TIAL_SCAN, NULL 
0180: 29 3b 0d 0a 09 69 66 28 20 68 3d 3d 49 4e 56 41  );...if( h==INVA
0190: 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45  LID_HANDLE_VALUE
01a0: 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 30 3b 0d   )....return 0;.
01b0: 0a 0d 0a 09 44 57 4f 52 44 20 6c 6f 77 2c 20 68  ....DWORD low, h
01c0: 69 3b 0d 0a 09 6c 6f 77 20 3d 20 3a 3a 47 65 74  i;...low = ::Get
01d0: 46 69 6c 65 53 69 7a 65 28 20 68 2c 20 26 68 69  FileSize( h, &hi
01e0: 20 29 3b 0d 0a 09 3a 3a 43 6c 6f 73 65 48 61 6e   );...::CloseHan
01f0: 64 6c 65 28 20 68 20 29 3b 0d 0a 0d 0a 09 72 65  dle( h );.....re
0200: 74 75 72 6e 20 28 5f 5f 69 6e 74 36 34 28 68 69  turn (__int64(hi
0210: 29 3c 3c 33 32 29 20 7c 20 6c 6f 77 3b 0d 0a 7d  )<<32) | low;..}
0220: 0d 0a 0d 0a 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ....unsigned lon
0230: 67 20 6b 69 46 69 6c 65 3a 3a 67 65 74 53 69 7a  g kiFile::getSiz
0240: 65 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 66  e( const char* f
0250: 6e 61 6d 65 2c 20 75 6e 73 69 67 6e 65 64 20 6c  name, unsigned l
0260: 6f 6e 67 20 65 72 72 20 29 0d 0a 7b 0d 0a 09 48  ong err )..{...H
0270: 41 4e 44 4c 45 20 68 20 3d 20 3a 3a 43 72 65 61  ANDLE h = ::Crea
0280: 74 65 46 69 6c 65 28 20 66 6e 61 6d 65 2c 0d 0a  teFile( fname,..
0290: 09 09 09 09 47 45 4e 45 52 49 43 5f 52 45 41 44  ....GENERIC_READ
02a0: 2c 20 46 49 4c 45 5f 53 48 41 52 45 5f 57 52 49  , FILE_SHARE_WRI
02b0: 54 45 7c 46 49 4c 45 5f 53 48 41 52 45 5f 52 45  TE|FILE_SHARE_RE
02c0: 41 44 2c 0d 0a 09 09 09 09 4e 55 4c 4c 2c 20 4f  AD,......NULL, O
02d0: 50 45 4e 5f 45 58 49 53 54 49 4e 47 2c 20 46 49  PEN_EXISTING, FI
02e0: 4c 45 5f 41 54 54 52 49 42 55 54 45 5f 4e 4f 52  LE_ATTRIBUTE_NOR
02f0: 4d 41 4c 7c 46 49 4c 45 5f 46 4c 41 47 5f 53 45  MAL|FILE_FLAG_SE
0300: 51 55 45 4e 54 49 41 4c 5f 53 43 41 4e 2c 20 4e  QUENTIAL_SCAN, N
0310: 55 4c 4c 20 29 3b 0d 0a 09 69 66 28 20 68 3d 3d  ULL );...if( h==
0320: 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56  INVALID_HANDLE_V
0330: 41 4c 55 45 20 29 0d 0a 09 09 72 65 74 75 72 6e  ALUE )....return
0340: 20 65 72 72 3b 0d 0a 0d 0a 09 75 6e 73 69 67 6e   err;.....unsign
0350: 65 64 20 6c 6f 6e 67 20 61 6e 73 20 3d 20 3a 3a  ed long ans = ::
0360: 47 65 74 46 69 6c 65 53 69 7a 65 28 20 68 2c 20  GetFileSize( h, 
0370: 4e 55 4c 4c 20 29 3b 0d 0a 09 3a 3a 43 6c 6f 73  NULL );...::Clos
0380: 65 48 61 6e 64 6c 65 28 20 68 20 29 3b 0d 0a 0d  eHandle( h );...
0390: 0a 09 72 65 74 75 72 6e 20 61 6e 73 3d 3d 30 78  ..return ans==0x
03a0: 66 66 66 66 66 66 66 66 20 3f 20 65 72 72 20 3a  ffffffff ? err :
03b0: 20 61 6e 73 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d   ans;..}....//--
03c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 8c 8b 82 f1 82 c5  --------- ......
03e0: 8a 4a 82 a2 82 c4 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  .J.... ---------
03f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0400: 2d 2f 2f 0d 0a 0d 0a 0d 0a 62 6f 6f 6c 20 6b 69  -//......bool ki
0410: 46 69 6c 65 3a 3a 6f 70 65 6e 28 20 63 6f 6e 73  File::open( cons
0420: 74 20 63 68 61 72 2a 20 66 69 6c 65 6e 61 6d 65  t char* filename
0430: 2c 20 62 6f 6f 6c 20 72 65 61 64 2c 20 62 6f 6f  , bool read, boo
0440: 6c 20 63 72 65 61 74 65 20 29 0d 0a 7b 0d 0a 09  l create )..{...
0450: 63 6c 6f 73 65 28 29 3b 0d 0a 0d 0a 09 69 66 28  close();.....if(
0460: 20 6d 5f 62 52 65 61 64 4d 6f 64 65 20 3d 20 72   m_bReadMode = r
0470: 65 61 64 20 29 0d 0a 09 09 6d 5f 68 46 69 6c 65  ead )....m_hFile
0480: 20 3d 20 3a 3a 43 72 65 61 74 65 46 69 6c 65 28   = ::CreateFile(
0490: 20 66 69 6c 65 6e 61 6d 65 2c 0d 0a 09 09 09 09   filename,......
04a0: 47 45 4e 45 52 49 43 5f 52 45 41 44 2c 20 46 49  GENERIC_READ, FI
04b0: 4c 45 5f 53 48 41 52 45 5f 52 45 41 44 2c 20 4e  LE_SHARE_READ, N
04c0: 55 4c 4c 2c 20 4f 50 45 4e 5f 45 58 49 53 54 49  ULL, OPEN_EXISTI
04d0: 4e 47 2c 0d 0a 09 09 09 09 46 49 4c 45 5f 41 54  NG,......FILE_AT
04e0: 54 52 49 42 55 54 45 5f 4e 4f 52 4d 41 4c 20 7c  TRIBUTE_NORMAL |
04f0: 20 46 49 4c 45 5f 46 4c 41 47 5f 53 45 51 55 45   FILE_FLAG_SEQUE
0500: 4e 54 49 41 4c 5f 53 43 41 4e 2c 20 4e 55 4c 4c  NTIAL_SCAN, NULL
0510: 20 29 3b 0d 0a 09 65 6c 73 65 0d 0a 09 09 6d 5f   );...else....m_
0520: 68 46 69 6c 65 20 3d 20 3a 3a 43 72 65 61 74 65  hFile = ::Create
0530: 46 69 6c 65 28 20 66 69 6c 65 6e 61 6d 65 2c 0d  File( filename,.
0540: 0a 09 09 09 09 47 45 4e 45 52 49 43 5f 57 52 49  .....GENERIC_WRI
0550: 54 45 2c 20 46 49 4c 45 5f 53 48 41 52 45 5f 52  TE, FILE_SHARE_R
0560: 45 41 44 2c 20 4e 55 4c 4c 2c 0d 0a 09 09 09 09  EAD, NULL,......
0570: 63 72 65 61 74 65 20 3f 20 43 52 45 41 54 45 5f  create ? CREATE_
0580: 41 4c 57 41 59 53 20 3a 20 4f 50 45 4e 5f 45 58  ALWAYS : OPEN_EX
0590: 49 53 54 49 4e 47 2c 0d 0a 09 09 09 09 46 49 4c  ISTING,......FIL
05a0: 45 5f 41 54 54 52 49 42 55 54 45 5f 4e 4f 52 4d  E_ATTRIBUTE_NORM
05b0: 41 4c 20 7c 20 46 49 4c 45 5f 46 4c 41 47 5f 53  AL | FILE_FLAG_S
05c0: 45 51 55 45 4e 54 49 41 4c 5f 53 43 41 4e 2c 20  EQUENTIAL_SCAN, 
05d0: 4e 55 4c 4c 20 29 3b 0d 0a 09 69 66 28 20 6d 5f  NULL );...if( m_
05e0: 68 46 69 6c 65 20 3d 3d 20 49 4e 56 41 4c 49 44  hFile == INVALID
05f0: 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d  _HANDLE_VALUE ).
0600: 0a 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b  ...return false;
0610: 0d 0a 0d 0a 09 6d 5f 6e 42 75 66 50 6f 73 20 3d  .....m_nBufPos =
0620: 20 30 3b 0d 0a 09 69 66 28 20 6d 5f 62 52 65 61   0;...if( m_bRea
0630: 64 4d 6f 64 65 20 29 0d 0a 09 09 66 6c 75 73 68  dMode )....flush
0640: 28 29 3b 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 74  ();.....return t
0650: 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20  rue;..}....void 
0660: 6b 69 46 69 6c 65 3a 3a 63 6c 6f 73 65 28 29 0d  kiFile::close().
0670: 0a 7b 0d 0a 09 69 66 28 20 6d 5f 68 46 69 6c 65  .{...if( m_hFile
0680: 20 21 3d 20 49 4e 56 41 4c 49 44 5f 48 41 4e 44   != INVALID_HAND
0690: 4c 45 5f 56 41 4c 55 45 20 29 0d 0a 09 7b 0d 0a  LE_VALUE )...{..
06a0: 09 09 69 66 28 20 21 6d 5f 62 52 65 61 64 4d 6f  ..if( !m_bReadMo
06b0: 64 65 20 29 0d 0a 09 09 09 66 6c 75 73 68 28 29  de ).....flush()
06c0: 3b 0d 0a 0d 0a 09 09 3a 3a 43 6c 6f 73 65 48 61  ;......::CloseHa
06d0: 6e 64 6c 65 28 20 6d 5f 68 46 69 6c 65 20 29 3b  ndle( m_hFile );
06e0: 0d 0a 09 09 6d 5f 68 46 69 6c 65 20 3d 20 49 4e  ....m_hFile = IN
06f0: 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c  VALID_HANDLE_VAL
0700: 55 45 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 0d 0a  UE;...}..}......
0710: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  //--------------
0720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 93 c7 82  ------------ ...
0730: dd 8f 91 82 ab 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..... ----------
0740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0750: 2d 2d 2f 2f 0d 0a 0d 0a 0d 0a 75 6e 73 69 67 6e  --//......unsign
0760: 65 64 20 6c 6f 6e 67 20 6b 69 46 69 6c 65 3a 3a  ed long kiFile::
0770: 72 65 61 64 28 20 75 6e 73 69 67 6e 65 64 20 63  read( unsigned c
0780: 68 61 72 2a 20 62 75 66 2c 20 75 6e 73 69 67 6e  har* buf, unsign
0790: 65 64 20 6c 6f 6e 67 20 6c 65 6e 20 29 0d 0a 7b  ed long len )..{
07a0: 0d 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  ...unsigned long
07b0: 20 61 6e 73 20 3d 20 30 3b 0d 0a 09 69 66 28 20   ans = 0;...if( 
07c0: 6d 5f 6e 42 75 66 53 69 7a 65 21 3d 30 20 26 26  m_nBufSize!=0 &&
07d0: 20 6d 5f 68 46 69 6c 65 21 3d 49 4e 56 41 4c 49   m_hFile!=INVALI
07e0: 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45 20 26  D_HANDLE_VALUE &
07f0: 26 20 6d 5f 62 52 65 61 64 4d 6f 64 65 20 29 0d  & m_bReadMode ).
0800: 0a 09 7b 0d 0a 09 09 77 68 69 6c 65 28 20 28 6d  ..{....while( (m
0810: 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f 6e 42 75 66  _nBufSize-m_nBuf
0820: 50 6f 73 29 20 3c 3d 20 6c 65 6e 20 29 0d 0a 09  Pos) <= len )...
0830: 09 7b 0d 0a 09 09 09 61 6e 73 20 2b 3d 20 28 6d  .{.....ans += (m
0840: 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f 6e 42 75 66  _nBufSize-m_nBuf
0850: 50 6f 73 29 3b 0d 0a 09 09 09 6b 69 5f 6d 65 6d  Pos);.....ki_mem
0860: 63 70 79 28 20 62 75 66 2c 20 6d 5f 70 42 75 66  cpy( buf, m_pBuf
0870: 2b 6d 5f 6e 42 75 66 50 6f 73 2c 20 6d 5f 6e 42  +m_nBufPos, m_nB
0880: 75 66 53 69 7a 65 2d 6d 5f 6e 42 75 66 50 6f 73  ufSize-m_nBufPos
0890: 20 29 3b 0d 0a 09 09 09 6c 65 6e 20 2d 3d 20 28   );.....len -= (
08a0: 6d 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f 6e 42 75  m_nBufSize-m_nBu
08b0: 66 50 6f 73 29 3b 0d 0a 09 09 09 62 75 66 20 2b  fPos);.....buf +
08c0: 3d 20 28 6d 5f 6e 42 75 66 53 69 7a 65 2d 6d 5f  = (m_nBufSize-m_
08d0: 6e 42 75 66 50 6f 73 29 3b 0d 0a 0d 0a 09 09 09  nBufPos);.......
08e0: 66 6c 75 73 68 28 29 3b 0d 0a 09 09 09 69 66 28  flush();.....if(
08f0: 20 6d 5f 6e 42 75 66 53 69 7a 65 20 3d 3d 20 30   m_nBufSize == 0
0900: 20 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 61   )......return a
0910: 6e 73 3b 0d 0a 09 09 7d 0d 0a 09 09 61 6e 73 20  ns;....}....ans 
0920: 2b 3d 20 6c 65 6e 3b 0d 0a 09 09 6b 69 5f 6d 65  += len;....ki_me
0930: 6d 63 70 79 28 20 62 75 66 2c 20 6d 5f 70 42 75  mcpy( buf, m_pBu
0940: 66 2b 6d 5f 6e 42 75 66 50 6f 73 2c 20 6c 65 6e  f+m_nBufPos, len
0950: 20 29 3b 0d 0a 09 09 6d 5f 6e 42 75 66 50 6f 73   );....m_nBufPos
0960: 20 2b 3d 20 6c 65 6e 3b 0d 0a 09 7d 0d 0a 09 72   += len;...}...r
0970: 65 74 75 72 6e 20 61 6e 73 3b 0d 0a 7d 0d 0a 0d  eturn ans;..}...
0980: 0a 76 6f 69 64 20 6b 69 46 69 6c 65 3a 3a 77 72  .void kiFile::wr
0990: 69 74 65 28 20 63 6f 6e 73 74 20 76 6f 69 64 2a  ite( const void*
09a0: 20 62 75 66 2c 20 75 6e 73 69 67 6e 65 64 20 6c   buf, unsigned l
09b0: 6f 6e 67 20 6c 65 6e 20 29 0d 0a 7b 0d 0a 09 69  ong len )..{...i
09c0: 66 28 20 6d 5f 68 46 69 6c 65 3d 3d 49 4e 56 41  f( m_hFile==INVA
09d0: 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45  LID_HANDLE_VALUE
09e0: 20 7c 7c 20 6d 5f 62 52 65 61 64 4d 6f 64 65 20   || m_bReadMode 
09f0: 29 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 63  )....return;...c
0a00: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
0a10: 61 72 2a 20 75 62 75 66 20 3d 20 28 63 6f 6e 73  ar* ubuf = (cons
0a20: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
0a30: 29 62 75 66 3b 0d 0a 0d 0a 09 77 68 69 6c 65 28  )buf;.....while(
0a40: 20 28 6b 69 66 69 6c 65 5f 62 75 66 73 69 7a 65   (kifile_bufsize
0a50: 2d 6d 5f 6e 42 75 66 50 6f 73 29 20 3c 3d 20 6c  -m_nBufPos) <= l
0a60: 65 6e 20 29 0d 0a 09 7b 0d 0a 09 09 6b 69 5f 6d  en )...{....ki_m
0a70: 65 6d 63 70 79 28 20 6d 5f 70 42 75 66 2b 6d 5f  emcpy( m_pBuf+m_
0a80: 6e 42 75 66 50 6f 73 2c 20 62 75 66 2c 20 28 6b  nBufPos, buf, (k
0a90: 69 66 69 6c 65 5f 62 75 66 73 69 7a 65 2d 6d 5f  ifile_bufsize-m_
0aa0: 6e 42 75 66 50 6f 73 29 20 29 3b 0d 0a 09 09 6c  nBufPos) );....l
0ab0: 65 6e 20 2d 3d 20 28 6b 69 66 69 6c 65 5f 62 75  en -= (kifile_bu
0ac0: 66 73 69 7a 65 2d 6d 5f 6e 42 75 66 50 6f 73 29  fsize-m_nBufPos)
0ad0: 3b 0d 0a 09 09 75 62 75 66 20 2b 3d 20 28 6b 69  ;....ubuf += (ki
0ae0: 66 69 6c 65 5f 62 75 66 73 69 7a 65 2d 6d 5f 6e  file_bufsize-m_n
0af0: 42 75 66 50 6f 73 29 3b 0d 0a 09 09 6d 5f 6e 42  BufPos);....m_nB
0b00: 75 66 50 6f 73 20 3d 20 6b 69 66 69 6c 65 5f 62  ufPos = kifile_b
0b10: 75 66 73 69 7a 65 3b 0d 0a 09 09 66 6c 75 73 68  ufsize;....flush
0b20: 28 29 3b 0d 0a 09 7d 0d 0a 09 6b 69 5f 6d 65 6d  ();...}...ki_mem
0b30: 63 70 79 28 20 6d 5f 70 42 75 66 2b 6d 5f 6e 42  cpy( m_pBuf+m_nB
0b40: 75 66 50 6f 73 2c 20 75 62 75 66 2c 20 6c 65 6e  ufPos, ubuf, len
0b50: 20 29 3b 0d 0a 09 6d 5f 6e 42 75 66 50 6f 73 20   );...m_nBufPos 
0b60: 2b 3d 20 6c 65 6e 3b 0d 0a 7d 0d 0a 0d 0a 23 75  += len;..}....#u
0b70: 6e 64 65 66 20 70 75 74 63 0d 0a 76 6f 69 64 20  ndef putc..void 
0b80: 6b 69 46 69 6c 65 3a 3a 70 75 74 63 28 20 75 6e  kiFile::putc( un
0b90: 73 69 67 6e 65 64 20 63 68 61 72 20 63 20 29 0d  signed char c ).
0ba0: 0a 7b 0d 0a 09 69 66 28 20 6d 5f 68 46 69 6c 65  .{...if( m_hFile
0bb0: 3d 3d 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45  ==INVALID_HANDLE
0bc0: 5f 56 41 4c 55 45 20 7c 7c 20 6d 5f 62 52 65 61  _VALUE || m_bRea
0bd0: 64 4d 6f 64 65 20 29 0d 0a 09 09 72 65 74 75 72  dMode )....retur
0be0: 6e 3b 0d 0a 09 69 66 28 20 28 6b 69 66 69 6c 65  n;...if( (kifile
0bf0: 5f 62 75 66 73 69 7a 65 2d 6d 5f 6e 42 75 66 50  _bufsize-m_nBufP
0c00: 6f 73 29 20 3c 3d 20 31 20 29 0d 0a 09 09 66 6c  os) <= 1 )....fl
0c10: 75 73 68 28 29 3b 0d 0a 09 6d 5f 70 42 75 66 5b  ush();...m_pBuf[
0c20: 20 6d 5f 6e 42 75 66 50 6f 73 2b 2b 20 5d 20 3d   m_nBufPos++ ] =
0c30: 20 63 3b 0d 0a 7d 0d 0a 0d 0a 23 75 6e 64 65 66   c;..}....#undef
0c40: 20 67 65 74 63 0d 0a 69 6e 74 20 6b 69 46 69 6c   getc..int kiFil
0c50: 65 3a 3a 67 65 74 63 28 29 0d 0a 7b 0d 0a 09 69  e::getc()..{...i
0c60: 66 28 20 6d 5f 6e 42 75 66 53 69 7a 65 3d 3d 30  f( m_nBufSize==0
0c70: 20 7c 7c 20 6d 5f 68 46 69 6c 65 3d 3d 49 4e 56   || m_hFile==INV
0c80: 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55  ALID_HANDLE_VALU
0c90: 45 20 7c 7c 20 21 6d 5f 62 52 65 61 64 4d 6f 64  E || !m_bReadMod
0ca0: 65 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 2d 31  e )....return -1
0cb0: 3b 0d 0a 0d 0a 09 69 66 28 20 30 3d 3d 28 6d 5f  ;.....if( 0==(m_
0cc0: 6e 42 75 66 53 69 7a 65 2d 6d 5f 6e 42 75 66 50  nBufSize-m_nBufP
0cd0: 6f 73 29 20 29 0d 0a 09 7b 0d 0a 09 09 66 6c 75  os) )...{....flu
0ce0: 73 68 28 29 3b 0d 0a 09 09 69 66 28 20 6d 5f 6e  sh();....if( m_n
0cf0: 42 75 66 53 69 7a 65 3d 3d 30 20 29 0d 0a 09 09  BufSize==0 )....
0d00: 09 72 65 74 75 72 6e 20 2d 31 3b 0d 0a 09 7d 0d  .return -1;...}.
0d10: 0a 09 69 66 28 20 31 3d 3d 28 6d 5f 6e 42 75 66  ..if( 1==(m_nBuf
0d20: 53 69 7a 65 2d 6d 5f 6e 42 75 66 50 6f 73 29 20  Size-m_nBufPos) 
0d30: 29 0d 0a 09 7b 0d 0a 09 09 69 6e 74 20 61 6e 73  )...{....int ans
0d40: 20 3d 20 6d 5f 70 42 75 66 5b 20 6d 5f 6e 42 75   = m_pBuf[ m_nBu
0d50: 66 50 6f 73 2b 2b 20 5d 3b 0d 0a 09 09 66 6c 75  fPos++ ];....flu
0d60: 73 68 28 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20  sh();....return 
0d70: 61 6e 73 3b 0d 0a 09 7d 0d 0a 0d 0a 09 72 65 74  ans;...}.....ret
0d80: 75 72 6e 20 6d 5f 70 42 75 66 5b 20 6d 5f 6e 42  urn m_pBuf[ m_nB
0d90: 75 66 50 6f 73 2b 2b 20 5d 3b 0d 0a 7d 0d 0a 0d  ufPos++ ];..}...
0da0: 0a 76 6f 69 64 20 6b 69 46 69 6c 65 3a 3a 66 6c  .void kiFile::fl
0db0: 75 73 68 28 29 0d 0a 7b 0d 0a 09 69 66 28 20 6d  ush()..{...if( m
0dc0: 5f 62 52 65 61 64 4d 6f 64 65 20 29 0d 0a 09 7b  _bReadMode )...{
0dd0: 0d 0a 09 09 3a 3a 52 65 61 64 46 69 6c 65 28 20  ....::ReadFile( 
0de0: 6d 5f 68 46 69 6c 65 2c 20 6d 5f 70 42 75 66 2c  m_hFile, m_pBuf,
0df0: 20 6b 69 66 69 6c 65 5f 62 75 66 73 69 7a 65 2c   kifile_bufsize,
0e00: 20 26 6d 5f 6e 42 75 66 53 69 7a 65 2c 20 4e 55   &m_nBufSize, NU
0e10: 4c 4c 20 29 3b 0d 0a 09 09 6d 5f 6e 42 75 66 50  LL );....m_nBufP
0e20: 6f 73 20 3d 20 30 3b 0d 0a 09 7d 0d 0a 09 65 6c  os = 0;...}...el
0e30: 73 65 0d 0a 09 7b 0d 0a 09 09 3a 3a 57 72 69 74  se...{....::Writ
0e40: 65 46 69 6c 65 28 20 6d 5f 68 46 69 6c 65 2c 20  eFile( m_hFile, 
0e50: 6d 5f 70 42 75 66 2c 20 6d 5f 6e 42 75 66 50 6f  m_pBuf, m_nBufPo
0e60: 73 2c 20 26 6d 5f 6e 42 75 66 53 69 7a 65 2c 20  s, &m_nBufSize, 
0e70: 4e 55 4c 4c 20 29 3b 0d 0a 09 09 6d 5f 6e 42 75  NULL );....m_nBu
0e80: 66 53 69 7a 65 20 3d 20 6d 5f 6e 42 75 66 50 6f  fSize = m_nBufPo
0e90: 73 20 3d 20 30 3b 0d 0a 09 7d 0d 0a 7d 0d 0a     s = 0;...}..}..