'コンソール
#console
Declare Function SetConsoleTextAttribute Lib "kernel32" (hConsoleOutput As HANDLE, wAttributes As Word) As Long
Declare Function GetConsoleScreenBufferInfo Lib "kernel32" (hConsoleOutput As HANDLE, lpConsoleScreenBufferInfo As *CONSOLE_SCREEN_BUFFER_INFO) As Long
Type COORD
X As Integer
Y As Integer
End Type
Type SMALL_RECT
Left As Integer
Top As Integer
Right As Integer
Bottom As Integer
End Type
Type CONSOLE_SCREEN_BUFFER_INFO
dwSize As COORD
dwCursorPosition As COORD
wAttributes As Word
srWindow As SMALL_RECT
dwMaximumWindowSize As COORD
End Type
Class ABC_CONSOLE
Private
stdin As HANDLE
stdout As HANDLE
stderr As HANDLE
csbi As CONSOLE_SCREEN_BUFFER_INFO
r As Long
w As Long
Public
Sub ABC_CONSOLE()
stdin = GetStdHandle(STD_INPUT_HANDLE)
stdout = GetStdHandle(STD_OUTPUT_HANDLE)
stderr = GetStdHandle(STD_ERROR_HANDLE)
GetConsoleScreenBufferInfo(stdout, VarPtr(csbi))
End Sub
Sub ~ABC_CONSOLE()
SetConsoleTextAttribute(stdout, csbi.wAttributes)
End Sub
Sub Color(attr As Word)
SetConsoleTextAttribute(stdout, attr)
End Sub
Function Gets(buf As *Byte, length As Long) As Long
ReadFile(stdin, buf, length, VarPtr(r), ByVal 0)
Gets = r
End Function
Function Puts(buf As *Byte, length As Long) As Long
WriteFile(stdout, buf, length, VarPtr(w), ByVal 0)
Puts = w
End Function
Function Getc() As Long
ReadFile(stdin, VarPtr(Getc), 1, VarPtr(r), ByVal 0)
If r = 0 Then Getc = -1
End Function
Function Putc(c As Long) As Long
WriteFile(stdout, VarPtr(c), 1, VarPtr(w), ByVal 0)
Putc = c
End Function
End Class
Dim ac As ABC_CONSOLE
Dim c As Long
c = ac.Getc()
While c <> -1
ac.Putc(c)
c = ac.Getc()
Wend