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;...}..}..