Changeset 707


Ignore:
Timestamp:
2009/06/29 00:27:18 (3 years ago)
Author:
egtra
Message:

標準入力からの読込時、Ctrl+Zを検知して以後EOFと扱うように修正。
(#243)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/ablib/src/Classes/System/Console.ab

    r687 r707  
    691691Protected 
    692692    Override Function Underflow() As Boolean 
    693         Dim b = Buffer 
    694         Dim currentBufLength = b.Length 
    695         b.Length = currentBufLength + 256 
    696         Dim p = StrPtr(b) 
    697         Dim read As DWord 
    698         If ReadConsole(h, VarPtr(p[currentBufLength]), 256 * SizeOf (TCHAR), read, 0) = 0 Then 
    699             IO.Detail.ThrowWinLastErrorIOException() 
    700         End If 
    701         b.Length = currentBufLength + read 
    702         Underflow = read <> 0 
     693        If eofReached Then 
     694            Underflow = 0 
     695        Else 
     696            Dim b = Buffer 
     697            Dim currentBufLength = b.Length 
     698            b.Length = currentBufLength + 256 
     699            Dim p = StrPtr(b) 
     700            Dim read As DWord 
     701            If ReadConsole(h, VarPtr(p[currentBufLength]), 256 * SizeOf (TCHAR), read, 0) = 0 Then 
     702                IO.Detail.ThrowWinLastErrorIOException() 
     703            End If 
     704            Dim eofPos = ActiveBasic.Strings.ChrFind(VarPtr(p[currentBufLength]) As PCTSTR, read As SIZE_T, &h1A As TCHAR) 
     705            If eofPos <> -1 Then 
     706                eofReached = True 
     707                read = eofPos 
     708            End If 
     709            b.Length = currentBufLength + read 
     710            Underflow = read <> 0 
     711        End If 
    703712    End Function 
    704713 
    705714Private 
    706715    h As HANDLE 
     716    eofReached As Boolean 
    707717End Class 
    708718 
Note: See TracChangeset for help on using the changeset viewer.