|
|

楼主 |
发表于 2007-8-5 14:33:00
|
显示全部楼层
控制台库
附带,我的Afflatus语言编写的控制台库。源码如下。
define int FOREGROUND_BLUE:=&H1;
define int FOREGROUND_GREEN:=&H2;
define int FOREGROUND_RED:=&H4;
define int BACKGROUND_BLUE:=&H10;
define int BACKGROUND_GREEN:=&H20;
define int BACKGROUND_RED:=&H40;
define int BACKGROUND_INTENSITY:=&H80;
define int BACKGROUND_SEARCH:=&H20;
define int FOREGROUND_INTENSITY:=&H8;
define int FOREGROUND_SEARCH:=&H10;
define int STD_INPUT_HANDLE:=-10;
define int STD_OUTPUT_HANDLE:=-11;
define int STD_ERROR_HANDLE:=-12;
define int INVALID_HANDLE_VALUE:=-1;
define int ENABLE_LINE_INPUT:=&H2;
define int ENABLE_ECHO_INPUT:=&H4;
define int ENABLE_MOUSE_INPUT:=&H10;
define int ENABLE_PROCESSED_INPUT:=&H1;
define int ENABLE_WINDOW_INPUT:=&H8;
define int ENABLE_PROCESSED_OUTPUT:=&H1;
define int ENABLE_WRAP_AT_EOL_OUTPUT:=&H2;
int hConsoleOut,hConsoleIn,hConsoleErr;
procedure Console_Initialize;
callapi("kernel32","AllocConsole",0);
hConsoleIn:=callapi("kernel32","GetStdHandle",0,int 'STD_INPUT_HANDLE');
hConsoleOut:=callapi("kernel32","GetStdHandle",0,int 'STD_OUTPUT_HANDLE');
hConsoleErr:=callapi("kernel32","GetStdHandle",0,int 'STD_ERROR_HANDLE');
endprocedure;
procedure Console_Terminate;
callapi("kernel32","CloseHandle",0,int 'hConsoleIn');
callapi("kernel32","CloseHandle",0,int 'hConsoleOut');
callapi("kernel32","CloseHandle",0,int 'hConsoleErr');
callapi("kernel32","FreeConsole",0);
endprocedure;
procedure Console_SetTitle(string lpConsoleTitle);
callapi("kernel32","SetConsoleTitleA",1,string 'lpConsoleTitle');
endprocedure;
procedure Console_SetTextAttribute(int wAttributes);
callapi("kernel32","SetConsoleTextAttribute",0,int 'hConsoleOut',int 'wAttributes');
endprocedure;
procedure Console_Write(string lpConsoleWriteBuffer);
int nNumberOfCharsToWrite;
int lpNumberOfCharsWritten;
nNumberOfCharsToWrite:=length('lpConsoleWriteBuffer');
callapi("kernel32","WriteConsoleA",1,int 'hConsoleOut',^string 'lpConsoleWriteBuffer',int 'nNumberOfCharsToWrite',int 'lpNumberOfCharsWritten',int 0);
endprocedure;
procedure Console_ReadLine(int lpConsoleReadBufferLength);
string lpConsoleReadBuffer;
int lpNumberOfCharsRead;
lpConsoleReadBuffer:=string('lpConsoleReadBufferLength', "\u");
callapi("kernel32","ReadConsoleA",1,int 'hConsoleIn',^string 'lpConsoleReadBuffer',int 'lpConsoleReadBufferLength',^int 'lpNumberOfCharsRead',int "\u");
if('lpNumberOfCharsRead'>0);
lpConsoleReadBuffer:=left('lpConsoleReadBuffer','lpNumberOfCharsRead');
return('lpConsoleReadBuffer');
endif;
endprocedure;
|
|