BIBLIOTEKA: ext_console.dll
ZASTOSOWANIE: biblioteka służy do obsługi niektórych aspektów konsoli Win32. Oferuje rozwiązania dla – między innymi – zmiany wyglądu (czy obecności) kursora, zmiany wielkości okienka, kolorów tekstu oraz obsługi zdarzeń okna konsolowego, obsługi samego okna konsolowego etc. etc. etc. ;–)
WERSJA: 0.3
DOWNLOAD:
ext_console_v0.3.zip (5.0 KiB).
Prototypy:
array GetEvent ( void );
bool ResizeConsole ( int Width, int Height );
bool GotoXY ( int X, int Y );
bool TextColor ( [ int TextColor, [ int BackgroundColor ] ] );
bool ClearConsole ( int StartX, int StartY, int Length );
bool CursorInfo ( int CursorEnable, int CursorSize );
int MessageBox ( string MessageCaption, string Message,
int Flags );
bool StartProcess ( string executablePath, string Parameters,
string WorkingDirectory );
bool AllocConsole ( void );
bool FreeConsole ( void );
bool newConsole ( string ConsoleTitle );
bool SetConsoleTitle ( string ConsoleTitle );
void msleep ( float seconds_and_milliseconds );
bool beep ( int Frequency, int Milliseconds );
No, to po kolei:
array GetEvent ();
Funkcja sprawdza, czy wystąpiło wydarzenie – i jeśli tak, zwraca je w postaci tablicy. Najczęściej tablica będzie mieć podstawową postać ['TYPE'] => typ zdarzenia, ['EVT_DESC'] => dodatkowe informacje n/t zdarzenia.
TYPE: typy wydarzeń MOUSE_EVT, BUFFER_EVT, KEY_EVT, FOCUS_EVT, MENU_EVT
EVT_DESC to tablica o parametrach właściwych danemu zdarzeniu (dla myszy będą to koordynaty i ew. przyciśnięty przycisk, dla klawiatury – kod klawisza etc.).
bool ResizeConsole ( int Width, int Height );
Konsola jest liczona w/g miejsc na znaki — kolumn i rzędów. Zdaje się, że maksymalna szerokość konsoli to 80 rzędów – można tę wartość przekroczyć tylko poprzez ręczną zmianę wielkości konsoli, niestety. Wysokość – b/o. Wraz ze zmianą wielkości konsoli zmieniana jest wielkość bufora tekstowego (dlatego nie ma paska przewijania). Oczywiście, zawsze można napisać więcej tekstu niż bufor by przechował — wtedy zostanie on automatycznie zwiększony bez naszej ingerencji (system się o to zatroszczy). Jak większość funkcji z tej biblioteki, zwraca TRUE przy sukcesie i FALSE przy porażce.
bool GotoXY ( int X, int Y );
Tutaj nie ma co się rozwodzić wielce nad funkcją — robi dokładnie to samo, co jej siostra w C/Pascalu.
bool TextColor ( [ int TextColor, [ int BackgroundColor ] ] );
Z tą funkcją jest już trudniej. Oba parametry są absolutnie opcjonalne (oczywiście przy zachowaniu kolejności, wiadomo). Oba parametry mają domyślnie 0, choć dla obu znaczy to coś innego. Dobór wartości:
0 – domyślny (dla tekstu – ciemny biały, dla tła – czarny)
1 – red
2 – green
3 – blue
4 – cyan
5 – magenta
6 – yellow
7 – intensywny biały (dla obu)
8 – odwrócenie domyślnych kolorów (0 zamienione miejscami)
Wywołanie funkcji bez parametrów spowoduje przywrócenie domyślnych ustawień (czyli 0). Należy przy tym zauważyć, że nie u każdego takie kolory konsoli są domyślne. Należy brać to pod uwagę – biblioteka nie sprawdza domyślnych kolorów.
bool ClearConsole ( int StartX, int StartY, int Length );
Służy do wyczyszczenia prostego paska konsoli, a uzyskuje to poprzez nadpisanie tego miejsca znakiem spacji (' '). Podajesz miejsce zaczepienia/startu (X, Y) oraz ilość znaków/długość czyszczenia.
bool CursorInfo ( int CursorEnable, int CursorSize );
Funkcja pozwala na włączenie/wyłączenie wyświetlania kursora, oraz na określenie jego wielkości (od 1 do 100).
Następne dwie funkcje nie powinny się tu znaleźć, ale wrzuciłem tutaj, aby nie tworzyć dla nich osobnej biblioteki. Kiedy zbiorę więcej im podobnych funkcji, prawdopodobnie przeniosę je do biblioteki ext_sysio.dll.
int MessageBox ( string MessageCaption, string Message,
int Flags );
Zasadniczo jest to tylko interfejs do systemowego wywołania int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType). Dla hWnd wstawiany jest NULL. Reszta parametrów jest dokładnie identyczna, więc wypadałoby poczytać nt. wartości schowanych za MB_OK, MB_OKCANCEL etc. etc. Wszystkie ważniejsze ;P constansy dla tego wywołania (tj. MB_* oraz ID*) biblioteka definiuje w PHP–Userspace.
bool StartProcess ( string executablePath, string Parameters,
string WorkingDirectory );
Tej funkcji użyłem do dnia dzisiejszego tylko raz. Zasadniczo jest interfejsem dla Windowsowego CreateProcess(). Propaguje zezwolenia i uprawnienia do procesu potomnego. Przydatne głównie dlatego, że PHP w wersji Windows nie można pcntl_fork()'ować. :–)
bool AllocConsole ( void );
Interfejs dla BOOL WINAPI AllocConsole ( void );
bool FreeConsole ( void );
Interfejs dla BOOL WINAPI FreeConsole ( void );
bool newConsole ( string ConsoleTitle );
Połączenie FreeConsole(), AllocConsole() i SetConsoleTitle() w jedno ;–)
bool SetConsoleTitle ( string ConsoleTitle );
Interfejs dla BOOL WINAPI SetConsoleTitle ( LPCTSTR lpConsoleTitle );
void msleep ( float seconds_and_milliseconds );
Ta funkcja różni się nieco od jej VOID WINAPI SLEEP ( DWORD dwMilliseconds ) tym, że zamiast milisekund przyjmuje sekundy w postaci float, np. PHP Sleep(0.001) odpowiada WINAPI Sleep(1) (zrobiłem tak dlatego, że jednostka sekundy jest dla mnie punktem wyjścia, no i oczywiście aby zachować wsteczną kompatybilność ze swoim kodem). Funkcja przerzucona na ZEND C–space nie wycieka RAMu tak, jak wyciekała jej siostra GLOBALS['win32']–>Sleep() z __sysio.php.
bool beep ( int Frequency, int Milliseconds );
Interfejs dla BOOL WINAPI Beep( DWORD dwFreq, DWORD dwDuration );
DOWNLOAD:
ext_console_v0.3.zip (5.0 KiB).