l. WSTĘP
Praktyczne wykorzystanie pakietu Turbo Pascal zmusza użytkownika do tworzenia pakietów procedur użytecznych w różnych programach aplikacyjnych. Stworzenie takich pakietów jest bardzo czasochłonne i wymaga dużej wiedzy informatycznej
i specjalistycznej. W tej książce przedstawiono kilka bibliotek procedur użytecznych dla Turbo Pascala. Wspomagają one pisanie programów, znacznie skracając ten proces. Przedstawiono siedem modułów procedur bibliotecznych (moduł WIN jest produktem Borland Inc. i jest tylko opisany), zawierających ok. 145 procedur i funkcji.
Książka ta jest przeznaczona dla osób praktycznie zajmujących się pisaniem programów w języku Pascal i stosujących kompilator Turbo Pascal firmy Borland w wersji 5.0 i 5.5. Zawarto w niej szereg procedur obsługujących ekrany tekstowe i graficzne, pozwalających na łatwe tworzenie rozwijanych menu, używanie myszy we własnych programach, obsługujących procedury dyskowe oraz szereg procedur o różnorodnych zastosowaniach. Wszystkie przykłady i biblioteki procedur zostały napisane przy użyciu kompilatora Turbo Pascal w wersji 5.5. Większość z nich można także wykorzystać w programach napisanych dla kompilatora Turbo Pascal w wersji 5.0.
2. Moduł WIN
Moduł WIN jest pakietem dostarczanym przez firmę Borland w zestawie instalacyjnym Turbo Pascal v.5.5. Poniżej przedstawiono opis funkcji i procedur tego modułu. Służy on do obsługi okien w trybie tekstowym.
Opis stałych, typów zmiennych modułu WIN.
W module zdefiniowane następujące typy zmiennych:
Type
FrameChars = array[1..8] of Char;
WinState = record
WindMin, WindMax: Word;
WhereX, WhereY: Byte;
TextAttr: Byte;
end;
Typ FrameChars określa zmienne i stałe służące do definiowania ramek okna.
Typ WinState określa zmienne, w których pamiętane są parametry okna.
W module zdefiniowane następujące stałe:
const
{ Standard frame character sets }
SingleFrame: FrameChars = 'u-om-.';
DoubleFrame: FrameChars = 'Q+EZ+C';
Stałe te definiują standardowe rodzaje ramek stosowane do obramowania okien tekstowych.
W module zdefiniowano następujące procedury i funkcje:
Procedure WriteStr(X, Y: Ryte; S: String; Attr: Byte);
Opis:
Bezpośredni zapis ciągu znaków do ekranu tekstowego.
Parametry:
X - współrzędna pozioma umieszczanego tekstu;
Y - współrzędna pionowa umieszczanego tekstu;
S - ciąg znaków do wyświetlenia;
Attr - atrybut wyprowadzanego tekstu.
Procedure WriteChar(X, Y, Count: Byte; Ch: Char; Attr: Byle);
Opis:
Bezpośredni zapis ciągu jednakowych znaków do ekranu tekstowego.
Parametry:
X - współrzędna pozioma umieszczanego tekstu;
Y - współrzędna pionowa umieszczanego tekstu;
Count - liczba wyświetlonych znaków;
Ch - znak wyświetlany;
Attr - atrybut wyprowadzanego tekstu.
Procedure FillWin(Ch: Char; Attr: Byte);
Opis:
Procedura ta wypełnia bieżące okno tekstowe znakami określonymi przez parametry.
Parametry:
Ch - znak, którym będzie wypełnione okno;
Attr - atrybut znaku wypełnienia.
Procedure WriteWin(var Buf);
Opis:
Procedura przepisuje zawartość bufora do ekranu tekstowego. Zmienna buforowa określa obszar pamięci,
w którym zapamiętana została zawartość okna tekstowego.
Parametry:
Buf - określa obszar pamięci, z którego zawartość będzie przepisana do ekranu tekstowego.
Procedure ReadWin(var Buf);
Opis:
Procedura przepisuje zawartość aktualnego okna do pamięci określonej przez zmienna Buf.
Parametry:
Buf - określa obszar pamięci, do którego zawartość będzie przepisana okna tekstowego.
Function WinSize: Word;
Opis:
Funkcja zwraca wielkość aktualnego okna tekstowego.
Wyjście:
Parametrem wyjściowym jest wielkość pamięci zajmowanej przez aktualne okno w bajtach
Procedure SaveWin(var W: WinState);
Opis:
Procedura zapisuje parametry aktualnego okna do zmiennej typu WinState.
Parametry:
W - zmienna typu WinState, w której maja być zapamiętane parametry aktualnego okna.
Procedure Restore\Vin(var W: WinState);
Opis:
Odtwarza okno tekstowe na podstawie parametrów zapamiętanych w zmiennej typu WinState.
Parametry:
W - zmienna typu WinState, w której są zapamiętane parametry odtwarzanego okna.
Procedure FrameWin(Title: TilleStr; var Frame: FrameChars;
TitleAttr, FrameAttr: Byte);
Opis:
Procedura rysuje ramkę aktualnego okna tekstowego, wpisuje tytuł okna.
Parametry:
Title - ciąg znaków określający tytuł okna tekstowego;
Frame - rodzaj ramki;
TitleAttr - atrybut tytułu;
FrameAttr - atrybut ramki.
Procedure UnFrameWin;
Opis:
Procedura kasuje, ramkę.
Przedstawione powyżej procedury są bardzo użyteczne w różnych zastosowaniach, w programach używających ekranu tekstowego. Jednak bezpośrednie wykorzystanie ich może /ostać ułatwione poprzez zastosowanie procedur wyższego poziomu zawartych w module TUTIL.PAS, które zostaną opisane w następnym rozdziale.
3. Moduł TUTIL
Moduł TUTIL zawiera szereg procedur i funkcji przydatnych do obsługi ekranów tekstowych, okien
i rozwijanych menu. Moduł korzysta z funkcji i procedur zawartych w modułach standardowych oraz BIOS, WIN i UTIL.
W module zdefiniowano następujące stałe, zmienne i typy
const BkBlue=16; ( niebieskie tło )
BkGreen=32; ( zielone tło )
BkCyan=48; ( cyjanowe tło )
BkRed=64; ( czerwone tło )
BkMagenta=80; ( różowe tło )
BkBrown=96; ( brązowe tło )
BkLightGray=112; ( jasno-szare tło )
MonoNormal=7; ( normalny tekst )
MonoHigh=15; ( podświetlony tekst )
MonoUnderLineNorm= 1; ( podkreślony tekst )
MonoUnderLineHigh=9; ( podświetlony i podkreślony tekst )
MonoReverseNormal=112; ( tekst w inwersji )
MonoReverseHigh= 120; ( tekst w inwersji rozjaśniony )
Blink=128; ( tekst błyskania )
ScreenCols=80; ( liczba kolumn )
ScreenRows=50; ( liczba wierszy )
MinScreenRowa=25; ( minimalna ilość wierszy )
type
TitleStrPtr = ^TitleStr; ( zmienna pomocnicza )
WinRecPtr = ^WinRec; ( zmienna pomocnicza )
WinRec = record ( zmienna listy kolejnych okien tekstowych )
Next: WinRecPtr;
State: WinState;
Title: TitleStrPtr;
TitleAttr, FrameAttr: Byte;
Buffer: Pointer
End;
MenuColor = record ( zestaw kolorów dla menu tekstowego )
FirstLeterColor,
NormalColor,
InwertMask,
Field1,
Field2,
Field3: Byte;
End;
ScreenColRange = 1..ScreenCols; ( zakres kolumn )
ScreenRowRange= 1.. ScreenRows ( zakres wierszy )
const MonoMenu: MenuColor= ( zestaw kolorów dla kart monochromatycznych )
(FirstLeterColor: MonoHigh;
NormalColor: MonoNormal;
Invertmask: 119;
Field1: 112;
Field2: 15;
Field3: 7);
ColorMenu: MenuColor= ( zestaw kolorów dla kart kolorowych )
FirstLeterColor: White+BkRed;
NormalColor: Yelow+BkRed;
Invertmask: 119;
Field1: LightRed;
Field2: LightBlue;
Field3: LightGray);
var
TopWindows: WinRecPtr; ( zmienna określająca aktualne okno )
WindowCount: Integer; ( licznik okien )
Done: Boolean; ( zmienna robocza )
Procedury i funkcje zdefiniowane w module.
Procedure ActiveWindow(Active: Boolean);
Opis:
Procedura uaktywnia lub dezaktywuje aktualne okno tekstowe.
Parametry:
Active - Wartość TRUE uaktywnia okno, wartość FALSE dezaktywuje je.
Procedure OpenWindow( X1, Y1, X2, Y2: Byte; T: TitleStr;
TAttr, FAttr: Byle);
Opis:
Procedura otwiera nowe okno tekstowe. Uwaga procedura nie czyści zawartości okna.
Parametry:
X1 - lewa krawędź okna;
Y1 - górna krawędź okna;
X2 - prawa krawędź okna;
Y2 - dolna krawędź okna;
T - tytuł okna;
TAttr - atrybut tytułu;
FAttr - atrybut ramki.
Procedure CloseWindow;
Opis:
Zamknięcie aktywnego okna, uaktywnia się okno poprzednie.
Przykład:
Poniższy przykład ilustruje zastosowanie procedur OpenWindow i CloseWindow,
Program Window_Test;
uses Crt, WIN, UTIL, TUTIL;
var i:Byte;
Z:Word;
const WinWidth=40;
WinHeight=4;
begin
CIrScr;
for i:=l to 20 do
Writeln('Up close previous window and Down open next window');
i:=0;
repeat
CIrScr;
Z:=GetKey;
case Z of
DownKey:if i<20 then
begin
Inc(i);
OpenWindow(1+i,1+i,1+i+WinWidth,1+i+WinHeight,
'Okno nr: '+NumToStr(i),MonoHigh,MonoNormal);
CIrScr;
GoToXY(1,1);
Writeln('Up close previous window and Down open next
window');
end;
UpKey :if i>0 then
begin
Dec(i);
CloseWindow;
end;
end;
until Z=ESC;
end.
Procedure PrintInst( X,Y:Byte; T:string; TAttrFAttr:Byte);
Opis:
Wydruk tekstu na wyznaczonych współrzędnych. Atrybuty pierwszej litery i reszty tekstu mogą być różne. Procedura znajduje zastosowanie w tworzeniu rozwijanych menu z wyborem opcji przy pomocy klawiszy kursora lub pierwszej litery nazwy opcji.
Parametry:
X,Y - współrzędne wyprowadzanego tekstu;
T - tekst do wyprowadzenia;
TAttr - atrybut tekstu;
FAttr - atrybut pierwszego znaku.
Procedure PrintCapsInst( X,Y:Byte; T:String; TAttr,FAttr.Byte);
Opis:
Wydruk tekstu na wyznaczonych współrzędnych. Atrybuty wielkich liter i reszty tekstu mogą być różne. Procedura znajduje zastosowanie w tworzeniu rozwijanych menu z wyborem opcji przy pomocy klawiszy kursora lub wielkiej litery w nazwie opcji.
Parametry:
X,Y - współrzędne wyprowadzanego tekstu;
T - tekst do wyprowadzenia;
TAttr - atrybut tekstu;
FAttr - atrybut wielkich liter.
Procedure PrintAt( X, Y:Byte; T:String );
Opis:
Wyprowadza tekst na zadanej pozycji. Atrybut Tekstu jest pobierany ze zmiennej systemowej TextAttr.
Parametry:
X,Y - współrzędne wyprowadzanego tekstu;
T - tekst do wyprowadzenia.
Procedure ClearTextLine( X, Y, Length: Byte );
Opis:
Kasuje linie tekstu o określonej długości.
Parametry:
X, Y - pozycja kasowanej linii;
Length - długość kasowanej linii.
Procedure ClearText( X1, Y1,X2,Y2:Byte );
Opis:
Procedura kasuje obszar ekranu ograniczony zadanymi współrzędnymi.
Parametry:
X1 - lewa krawędź kasowanego obszaru;
Y1 - górna krawędź kasowanego obszaru;
X2 - prawa krawędź kasowanego obszaru;
Y2 - dolna krawędź kasowanego obszaru.
Function GetName( X,Y,Length:Byte; T:String ):String;
Opis:
Funkcja pozwala uzyskać ciąg znaków z klawiatury,
Parametry:
X, Y - współrzędne pola wprowadzanego tekstu;
Length - maksymalna długość wprowadzanego tekstu;
T - wstępna zawartość pola wprowadzanego tekstu.
Wyjście:
Wprowadzony z klawiatury ciąg znaków.
Function GetFileName( X,Y,Length:Byte; T:String): String;
Opis:
Funkcja pozwala uzyskać ciąg znaków z klawiatury. Zakres znaków jest ograniczony do dopuszczonych
w nazwach zbiorów dyskowych.
Parametry:
X, Y - współrzędne pola wprowadzanego tekstu;
Length - maksymalna długość wprowadzanego tekstu;
T - wstępna zawartość pola wprowadzanego tekstu.
Wyjście:
Wprowadzony z klawiatury ciąg znaków.
Function GetReal( X, Y: Byte; Var Length:Byte ): Real;
Opis:
Funkcja pozwala uzyskać liczbę rzeczywistą z klawiatury. Jeżeli liczba została podana prawidłowo zmienna Length przyjmuje wartość równa długości wprowadzanego tekstu, a wartość zero w przypadku przeciwnym.
Parametry:
X, Y - współrzędne pola wprowadzanego tekstu;
Length - zmienna określająca długość wprowadzanej liczby.
Wyjście:
Length - długość wprowadzonego łańcucha znaków;
Wartością wyjściowa jest wprowadzona liczba typu REAL.
Procedure OpenWin(X1, Y1,X2,Y2:Byte; Title:TitleStr;
Var Frame:FrameChars; Var State:WinState;
Var Buff:Pointer);
Opis:
Procedura otwiera nowe okno tekstowe, zapamiętuje zawartość tła, na którym otwarte zostało okno i przesyła
je do zmiennej dynamicznej określonej przez Buff.
Parametry:
X1 - lewa krawędź okna;
Y1 - górna krawędź okna;
X2 - prawa krawędź okna;
Y2 - dolna krawędź okna;
Title - tytuł okna;
Frame - rodzaj ramki.
Wyjście:
State - zmienna, w której zapamiętany jest stan poprzedniego okna;
Buff - zmienna, w której zapamiętana jest zawartość okna.
Procedure CloseWin( State:WinState; var Buff:Pointer);
Opis:
Procedura zamyka poprzednio otwarte przy pomocy OpenWin okno tekstowe.
Procedura zwalnia zajętą poprzednio pamięć na stercie.
Parametry:
State - zmienna określająca stan poprzedniego okna (wymiary, atrybuty itp.);
Buff - adres w pamięci sterty, w której zapamiętano zawartość odtwarzanego okna.
Function TextMenu(X1, Y1,X2, Y2,Last,Attr:Byte;Keys:String):ShortInt;
Opis:
Funkcja powoduje zorganizowanie wyboru z menu przy pomocy podświetlanej linii lub podania określonej litery.
Na ekranie w wybranym miejscu powinna znajdować się zawartość menu.
Parametry:
X1 - lewa krawędź menu;
Y1 - górna krawędź menu;
X2 - prawa krawędź menu;
Y2 - dolna krawędź menu;
Last - maksymalna wartość wybrana w menu;
Attr - atrybut, na który zmieniany jest tekst podświetlony;
Keys - zestaw znaków dla wyboru poszczególnych opcji menu;
Wyjście:
Wynikiem funkcji jest liczba typu Shortlnt określająca która opcja została wybrana (0..Last). Wyboru dokonuje się naciśnięciem klawisza ENTER lub jednej z liter określonej w łańcuchu "Keys". Jeżeli został muśnięty klawisz ESC, wynikiem funkcji jest liczba ujemna.
Function TextMenuH(X1, Y1, X2, Y2, Last: Shortlnt; Attr:Byte;
Keys: String; HelpText:String; HeIpKey: Word): Shortlnt;
Opis:
Funkcja powoduje zorganizowanie wyboru z menu przy pomocy podświetlanej linii lub podania określonej litery.
Na ekranie w wybranym miejscu powinna znajdować się zawartość menu. Przy naciśnięciu klawisza określonego
w parametrze HelpKey (rozszerzony kod znaku podawany przez (funkcję GetKey) następuje wyświetlenie na ekranie treści pomocniczej zawartej w zbiorze o nazwie HelpText. Poszczególne pozycje tego zbioru tekstowego nie mogą zawierać więcej niż 23 wiersze po 78 znaków. Znakiem rozdzielającym pozycje jest znak "~" umieszczony w pierwszej kolumnie tekstu. Następne wiersze będą traktowane jako treść tekstu pomocy. Wyświetlana jest ta pozycja tekstu pomocy, która jest aktualnie podświetlona w menu. Wyjście z pomocy następuje przy pomocy klawisza ESC.
Parametry:
X1 - lewa krawędź menu;
Y1 - górna krawędź menu;
X2 - prawa krawędź menu;
Y2 - dół 11,1 krawędź menu;
Last - maksymalna wartość wybrana w menu;
Attr - atrybut, na który zmieniany jest tekst podświetlony;
Keys - zestaw znaków dla wyboru poszczególnych opcji menu;
HelpText - nazwa zbioru tekstowego z tekstem pomocy;
HelpKey - rozszerzony kod klawisza wywołującego pomoc.
Wyjście:
Wynikiem funkcji jest liczba typu Shortint określająca która opcja została wybrana (0..last). Wyboru dokonuje się naciśnięciem klawisza ENTER lub jednej z liter określonej w łańcuchu "Keys". Jeżeli został naciśnięty klawisz ESC, wynikiem funkcji jest liczba ujemna.
Procedure Inscription( X, Y, Width : ByBe; T: String);
Opis:
Procedura ta wyprowadza na ekran napis w określonej pozycji. Napis jest centrowany według podanej szerokości.
Parametry:
X - współrzędna pozioma wyprowadzanego napisu;
Y - współrzędna pionowa wyprowadzanego napisu;
Width - szerokość obszaru, w którym napis będzie centrowany;
T - tekst do wyprowadzenia.
Procedure PrintError( Message: String);
Opis:
Procedura produkuje na ekranie okno tekstowe z tytułem "ERROR" i napisem określonym przez użytkownika. Następnie procedura czeka na naciśnięcie klawisza ESC.
Parametry:
Message - komunikat do wyprowadzenia w oknie ERROR.
Procedure PrintEerrorPL( Message: String);
Opis:
Procedura produkuje na ekranie okno tekstowe z tytułem "BŁĄD" i napisem określonym przez użytkownika. Następnie procedura czeka na naciśnięcie klawisza ESC.
Parametry:
Message - komunikat do wyprowadzenia w oknie ERROR.
Procedure PrintText( Message: String; Attr:Byte );
Opis:
Procedura produkuje na ekranie okno tekstowe z tytułem "Message" i wyprowadza w nim tekst określony przez użytkownika. Można określić atrybuty wyprowadzanego tekstu. Następnie procedura czeka na naciśnięcie
dowolnego klawisza.
Parametry:
Message - tekst do wyprowadzenia;
Attr - atrybut tekstu.
Function PrintMessage(Message: String): Char;
Opis:
Procedura produkuje na ekranie okno tekstowe z tytułem "Message" i wyprowadza w nim tekst określony przez użytkownika. Następnie funkcja czeka na naciśnięcie dowolnego klawisza i zwraca jego kod znakowy.
Parametry:
Message - tekst do wyprowadzenia.
Wyjście:
Funkcja zwraca zmienną typu CHAR określająca jaki klawisz został naciśnięty.
Function GetNumKeys( T:String; X:Char ): Byte;
Opis:
Funkcja zwraca pozycje znaku X w łańcuchu T.
Parametry:
T - wzorcowy łańcuch znaków;
X - znak sprawdzany.
Wyjście:
Funkcja zwraca zmienna typu Byte określającą pozycję znaku X w ciągu znaków wzorcowych T.
Procedure ChangeAttrStr( X, Y, Width, Attr: Byte );
Opis:
Procedura zmienia atrybuty tekstu na ekranie tekstowym w zadanej pozycji i określonej długości.
Parametry:
X - pozycja pozioma zmienianego łańcucha atrybutów;
Y - pozycja pionowa zmienianego łańcucha atrybutów;
Width - długość zmienianego łańcucha;
Attr - nowy atrubut.
Procedure InvAttrStr( X, Y, Width, Attr: Byte );
Opis:
Procedura zmienia atrybuty tekstu na ekranie tekstowym w zadanej pozycji i określonej długości. Przy zmianie realizowana jest funkcja XOR. Nowy atrybut obliczany jest według wzoru: NewAttr = OldAttr XOR Attr.
Parametry:
X - pozycja pozioma zmienianego łańcucha atrybutów;
Y - pozycja pionowa zmienianego łańcucha atrybutów;
Width - długość zmienianego łańcucha;
Attr - maska atrybutów.
Procedure SetAttrStr( X, Y, Width, Attr: Byte );
Opis:
Procedura zmienia atrybuty tekstu na ekranie tekstowym w zadanej pozycji i określonej długości. Przy zmianie realizowana jest funkcja OR. Nowy atrybut obliczany jest według wzoru: NewAttr = OldAttr OR Attr.
Parametry:
X - pozycja pozioma zmienianego łańcucha atrybutów;
Y - pozycja pionowa zmienianego łańcucha atrybutów;
Width - długość zmienianego łańcucha;
Attr - maska atrybutów.
Function TheEnd( X, Y: Byte ): Boolean;
Opis:
Funkcja otwiera na ekranie okno tekstowe z pytaniem You are sure (Y/N) ? i oczekuje na naciśnięcie klawisza.
Po naciśnięciu klawisza Y zwracana jest wartość True, przy każdym innym - wartość False.
Parametry:
X - pozycja pozioma okna;
Y - pozycja pionowa okna;
Wyjście:
Wyjściem jest wartość typu Boolean.
Function Koniec( X, Y: Byte ): Boolean;
Opis:
Funkcja otwiera na ekranie okno tekstowe z pytaniem Koniec pracy (T/N) ? i oczekuje na naciśnięcie klawisza.
Po naciśnięciu klawisza T zwracana jest wartość True, przy każdym innym - wartość False.
Parametry:
X - pozycja pozioma okna;
Y - pozycja pionowa okna;
Wyjście:
Wyjściem jest wartość typu Boolean.
Procedure DrawFrame( X1, Y1, X2, Y2: Byte; Title: String; Frame:
FrameChars; TitleAttr, FrameAttr: Byte);
Opis:
Procedura rysuje w trybie tekstowym ramkę o wymiarach, tytule, rodzaju ramki i atrybutów określonych przez parametry procedury.
Parametry:
X1 - współrzędna pozioma górnego lewego rogu ramki;
Y1 - współrzędna pionowa górnego lewego rogu ramki;
X2 - współrzędna pozioma dolnego prawego rogu ramki;
Y2 - współrzędna pionowa dolnego prawego rogu ramki;
Title - tytuł wpisany w ramkę;
Frame - określenie rodzaju znaków, którymi realizowana jest ramka;
TitleAttr - atrybut tytułu ramki;
FrameAttr - atrybut ramki.
Procedure ViewDir( Mask: String; TitleAttr, FrameAttr: Byte);
Opis:
Procedura ta otwiera na ekranie okno tekstowe, w którym wyświetla katalog dysku z uwzględnieniem wzoru podanego
w parametrze Mask. Stosowane są wszystkie zasady dotyczące katalogów w systemie DOS.
Parametry:
Mask - maska katalogu;
TitleAttr - atrybut tytułu okna;
FrameAttr - atrybut ramki okna.
4. Moduł BIOS
Moduł BIOS został napisany w celu stworzenia możliwości wykorzystania funkcji, umieszczonych przez twórców programu BIOS zapisanego w pamięci ROM komputera. Moduł ten pozwala na wykorzystanie kilku funkcji dyskowych, obsługę ekranu tekstowego i sprawdzenie konfiguracji systemu.
Opis stałych, typów zmiennych i funkcji modułu BIOS
W module zdefiniowano następujące stałe:
SmallCursor=$0B0C;
LargeCursor=$010C;
HalfCursor =$070C;
NoCursor =$0F01;
Stałe SmallCursor, LargeCursor, HalfCursor, NoCursor określają podstawowe typy kursora możliwe
do stosowania przy pomocy funkcji modułu BIOS.
W module zdefiniowano następujące typy zmiennych:
Type
SystemConfig=record
Floppy:Byte;
Coprocessor:Boolean;
RamSize:Word;
VideoMode:Byte;
Serial:Byte;
Paddle:Boolean;
SerialPrinter:Boolean;
Printer:Byte;
end;
Powyższy typ definiuje zmienna określającą konfigurację systemu. Pole "Floppy" określa liczbę napędów dysków elastycznych zamontowanych w systemie, "Coprocessor" określa istnienie koprocesora, "RamSize" określa rozmiar pamięci operacyjnej w kilobajtach, "VideoMode" określa podstawowy tryb karty wyświetlacza (0-nic używany, l - 40x25 kolorowy, 2 - 80x25 kolorowy, 3 - 80x25 czarno-biały), "Serial" określa liczbę zainstalowanych portów szeregowych, "Paddle" określa istnienie portu manipulatora, "SerialPrinter" określa istnienie wyjścia dla szeregowej drukarki, "Printer" określa liczbę zainstalowanych portów równoległych dla drukarek.
Type
SectBuff=array[0..511] of Byte
Ten typ określa zmienna buforowe dla funkcji odczytu i zapisu sektorów.
W module zdefiniowano następujące funkcje i procedury:
Function VerifySect( Sect:Word; Drive: Byte ): Byte;
Opis:
Funkcja pozwala na zweryfikowanie dowolnego sektora na dysku poprzez odczytanie danego sektora.
Parametry:
Sect - numer sektora (dla dysku 360kB - 0..720);
Drive - numer stacji dysków (0-A:, 1-B: itd.);
Wyjście:
Parametrem wyjściowym jest kod błędu operacji:
0 - operacja prawidłowa,
1 - błędny rozkaz,
2 - brak znaku adresu,
3 - próba zapisu na zabezpieczoną dyskietkę,
4 - nie znaleziono sektora,
6 - dyskietka została wyjęła,
8 - błąd sprzętowy kanału DMA,
9 - przekroczenie granicy adresowej obszaru DMA,
10 - błąd sumy kontrolnej,
20 - błąd sterownika dysku,
40 - błąd pozycjonowania głowicy,
80 - przekroczony czas operacji.
Function ReadSect ( Sect:Word; Drive: Byte; var Buff:SectBuff):Byte;
Opis:
Odczyt sektora dyskowego.
Parametry:
Sect - numer sektora (dla dysku 360kB - 0..720);
Drive - numer stacji dysków (0-A:, l-B: itd.);
Buff - zmienna, do której zostanie przeniesiona zawartość sektora.
Wyjście:
Parametrem wyjściowym jest kod błędu operacji (patrz funkcja VerifySect)
Function WriteSect ( Sect:Word; Drive: Byle; var Buff:SectBufff):Byte;
Opis:
Zapis sektora dyskowego.
Parametry:
Sect - numer sektora (dla dysku 360kB - 0..720);
Drive - numer stacji dysków (0-A:, 1-B: itd.);
buff - zmienna, której zawartość zostanie przeniesiona do sektora.
Wyjście:
Parametrem wyjściowym jest kod błędu operacji (patrz funkcja VerifySect)
Procedure GetSystemConfig( Var Cfg: SystemConfig );
Opis:
Odczyt konfiguracji systemu komputerowego.
Parametry:
Cfg - po wykonaniu procedury zmienna ta zawiera w poszczególnych polach informacje konfiguracji systemu.
Procedure SetCursor( X: Word );
Opis:
Procedura pozwala na zmianę wielkości kursora tekstowego.
Parametry:
X - określenie wielkości kursora, starszy bajt określa górny rząd, młodszy określa dolny rząd kursora. Można stosować stałe określające wielkość kursora, które są opisane powyżej.
Functione GetCursor: Word;
Opis:
Funkcja zwraca aktualne wielkość kursora.
Wyjście:
Starszy bajt określa początek, a młodszy koniec kursora.
Procedure ScrollUp( X1, Y1, X2, Y2, Count, Attr: Byte );
Opis:
Procedura powoduje przesuwanie wybranego fragmentu ekranu tekstowego w górę.
Parametry:
X1 - lewa kolumna obszaru przesuwanego,
Y1 - górny wiersz obszaru przesuwanego,
X2 - prawa kolumna obszaru przesuwanego,
Y2 - dolny wiersz obszaru przesuwanego,
Count - liczba wierszy przesuwanych,
Attr - atrybut dla obszaru przesuwanego.
Procedure ScrollDown( X1, Y1, X2, Y2, Count, Attr: Byte );
Opis:
Procedura powoduje przesuwanie wybranego fragmentu ekranu tekstowego w górę.
Parametry:
X1 - lewa kolumna obszaru przesuwanego,
Y1 - górny wiersz obszaru przesuwanego,
X2 - prawa kolumna obszaru przesuwanego,
Y2 - dolny wiersz obszaru przesuwanego,
Count - liczba wierszy przesuwanych,
Attr - atrybut dla obszaru przesuwanego.
Function GetChar: Char;
Opis:
Funkcja zwraca znak wyświetlony na aktualnej pozycji kursora.
Wyjście:
Znak na pozycji kursora tekstowego.
Function GetAttr: Byte;
Opis:
Funkcja zwraca atrybut znaku wyświetlonego na aktualnej pozycji kursora.
Wyjście:
Atrybut znaku na pozycji kursora tekstowego.
Procedure SetTextPage( PageNumber: Byte );
Opis:
Ustawia aktualnie dostępna stronę ekranu tekstowego.
Parametry:
PageNumber - określa wybrana stronę tekstowe.
Function GetTextPage: Byte;
Opis:
Podaje aktualne stronę ekranu tekstowego.
Wyjście:
Bajt zawiera aktualnie ustawiona stronę ekranu tekstowego.
Funclion GetCharAttr: Word;
Opis:
Funkcja zwraca znak i atrybut z aktualnej pozycji kursora w postaci typu Word.
Wyjście:
Starszy bajt zawiera znak, a młodszy atrybut.
Procedure ChangeAttrChar( X, Y, Attr:Byte );
Opis:
Procedura zmienia atrybut znaku na aktualnej pozycji kursora
Parametry:
X - kolumna,
Y - wiersz,
Attr - nowy atrybut znaku
Procedure InvAttrChar( X, Y, Attr:Byte );
Opis:
Procedura realizuje funkcję XOR atrybutu znaku na aktualnej pozycji kursora.
Parametry:
X - kolumna,
Y - wiersz,
Attr - argument dla atrybutu.
Opis:
Funkcja sprawdza fakt instalacji karty EGA.
Wyjście:
Wartość True, gdy jest zainstalowana karla EGA, False - gdy tak nic jest.
Function PS2Inslalled: Boolean;
Opis:
Funkcja określa fakt instalacji karty systemu PS2; (VGA lub MCGA).
Wyjście:
Wartość True, gdy jest zainstalowana karta systemu PS2; False - gdy tak nie jest.
Procedure InitRS( No:Byte; Mod: Byte );
Opis:
Procedura ustawia parametry początkowe układu transmisji szeregowej o podanym numerze w trybie podanym drugim parametrem.
Parametry:
No - numer interfejsu szeregowego;
Mode - tryb pracy interfejsu;
pola parametru Mode:
bity opis
0..1 długość słowa 10=7 bitów, 11=8 bitów;
2 bity stopu 0=1 bil, 1=2 bitów;
3..4 kontrola parzystości
00=brak, 01=nieparzystość, ll=parzystość
5..7 szybkość transmisji
000=110 bodów,
001=150.
010=300.
011=600,
100=1200,
101=2400,
110=4800,
111=9600.
Function GetRS( No:Byte ): Byte;
Opis:
Funkcja zwraca znak odebrany przez wybrany interfejs szeregowy;
Parametry:
No - numer interfejsu szeregowego;
Wyjście:
Znak odebrany przez interfejs szeregowy.
Procedure PutRS( No, Data: Byte );
Opis:
Procedura przekazuje do wybranego interfejsu szeregowego dana, która należy wysłać;
Parametry:
No - numer interfejsu szeregowego;
Data - dana przeznaczona do wysłania.
Powyższe procedury nic wyczerpują wszystkich możliwości ROM-BIOS, lecz realizują te funkcje, które nie są zaimplementowane w Turbo Pascal'u 5.5.
5. Moduł UTIL
W wielu programach potrzebne są różnorodne funkcje i procedury obsługujące klawiaturę, realizujące pomocnicze funkcje obsługi łańcuchów znakowych i inne. Poniżej przedstawiono moduł, który został opracowany w ciągu ostatnich kilku lat przy okazji pisania programów. Przedstawiono opis stałych i zmiennych oraz procedur i funkcji realizujących takie funkcje.
W module zdefiniowano następujące stałe:
Znaki literowe
Letters : set of Char = ['A'..'Z'. 'a'..'z'];
Znaki cyfrowe
Numbers : set of Char = ['0'...'9']
NULL = 0;
BS =8;
FF = 12;
Klawisze funkcyjne Klawisze fur ikcyjne
|
|||
Fl
|
= 15104;
|
AltFl =
|
26624;
|
F2
|
= 15360;
|
AltF2=
|
26880;
|
F3
|
= 15616;
|
AltF3 =
|
27136;
|
F4
|
= 15872;
|
AltF4 =
|
27392;
|
F5
|
= 16128;
|
AltF5 =
|
27648;
|
F6
|
= 16384;
|
AltF6 =
|
27904;
|
F7
|
= 16640;
|
AltF7=
|
28160;
|
F8
|
= 16896;
|
AltF8 =
|
28416;
|
F9
|
= 17152;
|
AltF9 =
|
28672;
|
F10
|
= 17408;
|
AltF10=
|
28928;
|
Klawisze kierunkowe
HomeKey |
= |
18176 |
UpKey |
= |
18432 |
PgUpKey |
= |
18688 |
LeftKey |
= |
19200 |
RightKey |
= |
19712 |
CtrlLeftKey |
= |
29440 |
CtrlRightKey |
= |
29696 |
EndKey |
= |
20224 |
DownKey |
= |
20480 |
PgDnKey |
= |
20736 |
InsKey |
= |
20992 |
DelKey |
= |
21248 |
AltX |
= |
11520 |
Stałe pomocnicze dla konwersji czasu i daty
MinS = 60; DayS = 86400;
HourS = 3600; YcarsS = 3153600;
MonthS:array [l..12] of Longint =(2678400,2592000,2678400.2592000,2678400,2592000,2592000,
2678400,2592000,2678400);
Zdefiniowano następujące typy zmiennych:
type
ProcPtr = procedure; ( adres pomocniczy )
StringPtr = ^String; ( zmienna pomocnicza )
WordPtr = ^Word; ( zmienna pomocnicza )
CharSet = set of Char; ( zbiór znaków )
Function GetKey :Word;
Opis:
Funkcja zwraca rozszerzony kod wciśniętego klawisza. Jeżeli wciśnięty jest klawisz z kodem początkowym 0 (np. funkcyjny), kod znaku jest przesunięty o osiem bitów w lewo. Funkcja ta może być szeroko wykorzystana dla tworzenia funkcji wyboru jednej opcji w podanych, przy wykorzystaniu klawiszy kursora i funkcyjnych.
Wyjście:
Rozszerzony kod znaku.
Function GetKeyUpCase :Word;
Opis:
Funkcja zwraca rozszerzony kod wciśniętego klawisza z zamianę małych liter na duże
Wyjście:
Rozszerzony kod znaku po przekształceniu małych liter na duże.
Function GetKeyChar(Legal : CharSet) : Char;
Opis:
Funkcja zwraca wciśnięty znak, jeżeli znajduje się on w podanym zestawie.
Wyjście:
Rozszerzony kod znaku.
Procedure Beep;
Opis:
Procedura generuje krótki dźwięk.
Function Min(N1, N2 : Longint) : Longint;
Opis:
Funkcja wybiera mniejsze z podanych dwóch liczb typu BYTE, SHORTINT,INTEGER, WORD lub LONGINT.
Parametry:
N1 - pierwsza liczba;
N2 - druga liczba;
Wyjście:
Zwraca mniejsze z dwóch liczb.
Function Max(N1, N2 : Longint) : Longint;
Opis:
Funkcja wybiera większe z podanych dwóch liczb typu BYTE, SHORTINT,INTEGER, WORD lub LONGINT.
Parametry:
N1 - pierwsza liczba;
N2 - druga liczba;
Wyjście:
Zwraca większe z dwóch liczb.
Function UpperCase(S : String) : String;
Opis:
Funkcja zamienia w ciągu znaków małe litery na duże.
Parametry:
S - łańcuch znakowy stanowiący podstawę konwersji.
Wyjście:
Łańcuch znakowy z dokonane konwersji
Function FillString(Len : Byte; Ch : Char) : String;
Opis:
Funkcja zwraca łańcuch znaków wypełniony jednakowymi znakami.
Parametry:
Len - długość łańcucha;
Ch - znak, którym będzie wypełniony łańcuch.
Wyjście:
Odpowiedni łańcuch jednakowych znaków o zadanej długości.
Function TruncStr(TString : String; Len : Byte) : String;
Opis:
Funkcja zwraca łańcuch znaków do podanej długości, który jest częścią podanego łańcucha znaków.
Parametry:
TString - łańcuch wejściowy;
Len - zadana długość łańcucha.
Wyjście:
Skrócony łańcuch znaków.
Function PadChar(PString : String; Ch : Char; Len : Byte) : String;
Opis:
Funkcja zwraca łańcuch składający się z podanego łańcuchu wydłużonego do zadanej długości poprzez dopełnienie zadanymi znakami.
Parametry:
PString - łańcuch wejściowy;
Ch - znak. którymi będzie uzupełniony łańcuch;
Len - długość łańcucha wyjściowego.
Wyjście:
Wydłużony łańcuch znaków.
Function CenterStr(S : String; Width : Byte) : String;
Opis:
Funkcja uzupełnia łańcuch wejściowy spacjami, tak aby ten łańcuch znajdował się w środku łańcucha wyjściowego.
Parametry:
S - łańcuch wejściowy;
Width - szerokość łańcucha wyjściowego.
Wyjście:
Uzupełniony ciąg znaków.
Function LeftJustStr(S : String; Width : Byte) : String;
Opis:
Funkcja zwraca ciąg z dodanymi spacjami dla lewostronnej justyfikacji.
Parametry:
S - łańcuch wejściowy;
Width - szerokość łańcucha wyjściowego.
Wyjście:
Uzupełniony ciąg znaków.
Function RightJustStr(S : String; Wulth : Byle) : String;
Opis:
Funkcja zwraca ciąg z dodanymi spacjami dla prawostronnej justyfikacji.
Parametry:
S - łańcuch wejściowy;
Width - szerokość łańcucha wyjściowego,
Wyjście:
Uzupełniony ciąg znaków.
Procedure ClearInputBuffer;
Opis:
Procedura czyści bufor klawiatury;
Function RealToStr( X:Real; D,P:Byte ): String;
Opis:
Funkcja zwraca reprezentację znakowe liczby dowolnego typu przy zadanej długości i liczbie miejsc po przecinku.
Parametry:
X - liczba do zamiany;
D - długość łańcucha reprezentacji znakowej (łącznie z kropką dziesiętną);
P - liczba pozycji po kropce dziesiętnej.
Wyjście:
Łańcuch stanowiący reprezentację znakowe liczby.
Przykład:
Poniższy fragment ukazuje sposób zastosowania tej funkcji szczególnie w trybie graficznym.
uses Crt, Graph, Util;
{ system jest w trybie graficznym }
Procedure Test_RealToStr;
var a:Real;
begin
a:=Pi; { a = 3.1415 }
OutTextXY(l,l,RealToStr(a,10,8));
OutTextXY(l,10,RealToStr(a,6.4));
end; {of Test_RealToStr}
Function WithZero( X:LongInt; D:Byte ): String;
Opis:
Funkcja zwraca reprezentację znakowe liczby z dodaniem zer na początku, tak aby osiągnąć zadane długość.
Parametry:
X - liczba do zamiany;
D - długość reprezentacji znakowej.
Wyjście:
Łańcuch stanowiący reprezentację znakowe liczby,
Przykład:
uses Crt, Utii;
var i:Word;
begin
i :=l;
Writeln(WithZero(i,3));
i:=333
Writeln(WithZero(i,8));
repeat untll KeyPressed;
end.
Function WithOutSpace( S: String): String;
Opis:
Funkcja zwraca łańcuch powstały z podanego po usunięciu spacji.
Parametry:
S - wyjściowy łańcuch znaków.
Wyjście:
Łańcuch powstały z podanego po usunięciu spacji.
Przykład:
uses Crt, Util;
var t:string;
begin
t:='Jerzy K. Kowalski';
Writeln(t); { Jerzy K. Kowalski }
t:=WithOutSpace(t);
Writeln(t); { JerzyK.Kowalski }
repeat untii KeyPressed;
end.
Function GetNumKeys( T:string; X:Char): Byte;
Opis:
Funkcja zwraca pozycję zadanego znaku w podanym łańcuchu. Podstawowym wykorzystaniem lej funkcji jest wybór opcji z menu poprzez wciśnięcie klawisza odpowiadającego danej opcji (np. pierwszej litery).
Parametry:
T - wejściowy łańcuch znaków;
X - poszukiwany znak.
Function GetStrDate:String;
Opis:
Funkcja zwraca łańcuch znakowy reprezentujący aktualne datę.
Wyjście:
Łańcuch reprezentujący datę w postaci RR-MM-DD WWW gdzie
RR - rok,
MM - miesiąc,
DD - dzień,
WWW - dzień tygodnia.
Przykład:
uses Crt, Util;
begin
Wnteln('Dzisiejsza data: ' ,GetStrDate);
repeat unil KeyPressed;
end.
Function GetStrTime:String;
Opis:
Funkcja zwraca łańcuch znakowy reprezentujący aktualny czas.
Wyjście:
Łańcuch reprezentujący czas w postaci GG:MM:SS, gdzie
GG - godzina,
MM - minuta,
SS - sekunda,
Przykład:
uses Crt, Utii;
begin
Writeln('Aktualny czas: ' ,GetStrTime) ;
repeat untii KeyPressed;
end.
Function DatetoStr(Year,Month,Day:Word):String;
Opis:
Funkcja zwraca łańcuch znaków reprezentujący podana datę.
Parametry:
Year - rok;
Month - miesiąc;
Day - dzień.
Wyjście:
Łańcuch reprezentujący datę w postaci RR-MM-DD gdzie
RR - rok,
MM - miesiąc,
DD - dzień.
Function TimeToSfr(Hour,Min,Sec:Word):String;
Opis:
Funkcja zwraca łańcuch znaków reprezentujący podany czas.
Parametry:
Hour - godzina;
Min - minuta;
Sec - sekunda.
Wyjście:
Łańcuch reprezentujący podany czas w postaci GG:MM:SS, gdzie
GG - godzina,
MM - minuta,
SS - sekunda.
Procedure StrToTime(T:String; var Hour,Min,Sec:Word; var Error:Byte);
Opis:
Procedura zamienia czas podany w postaci GG:MM:SS na wartość liczbowe składników czasu. Jeżeli konwersja przebiegła prawidłowo, zmienna Error jest równa zero, w przeciwnym przypadku Error jest większe od zera.
Parametry:
T - wyjściowy łańcuch znaków;
Wyjście:
Hour - godzina;
Min - minuta;
Sec - sekunda;
Error - zmienna określająca poprawność operacji.
Procedure StrToDale(T:Slring; var Year,Month,Day:Word; var Error:Byte);
Opis:
Procedura zamienia czas podany w postaci RR-MM-DD na wartość liczbowa składników daty. Jeżeli konwersja
przebiegła prawidłowo, zmienna Error jest równa zero, w przeciwnym przypadku Error jest większe od zera.
Parametry:
T - łańcuch wejściowy;
Wyjście:
Year - rok;
Month - miesiąc;
Day - dzień;
Error - zmienna określająca poprawność operacji.
Opis:
Funkcja zwraca liczbę sekund odpowiadającą podanej dacie i czasowi. Czas jest liczony od 1-01-1990
godzina 00:00:00.
Parametry:
D - określenie daty i czasu według typu podanego w module DOS.
Wyjście:
Zwracana jest liczba typu LONGINT reprezentująca obliczona liczbę sekund.
Function SecToTime( Sec: Longint): String;
Opis:
Funkcja zwraca łańcuch znaków reprezentujący zadane liczbę sekund w postaci GG-MM-SS.
Parametry:
Sec - liczba sekund podlegająca przeliczeniu.
Wyjście:
Łańcuch znakowy przedstawiający przeliczony czas.
Procedure PackTime( DT-.DateTime; var T:LongInt );
Opis:
Procedura zamienia datę i czas na wartość upakowane w zmiennej typu Longint. Zamiana nie powoduje utraty pełnej informacji o sekundach. Standardowe procedury z modułu DOS powodują stratę informacji o parzystości lub nieparzystości sekund. Składnia jest identyczna jak standardowej procedury. Czas jest liczony od 1990-01-01 00:00:00.
Parametry:
DT - data i czas w postaci określonej typem DateTime.
Wyjście:
T - zmienna wyjściowa zawierająca przeliczony czas i datę.
Procedure UnpackTime( T:LongInt; var DT:DateTime);
Opis:
Procedura zamienia upakowany przez poprzednią Procedure czas i datę na wartości odpowiednich składników umieszczone następnie w zmiennej typu DateTime.
Parametry:
T - upakowana wartość czasu;
Wyjście:
DT - rozpakowana wartość czasu i daty
Procedure TimeDelay( T:LongInt);
Opis:
Procedura realizująca opóźnienie czasowe określone przez dana wejściowa typu Longint. Realizowane jest opóźnienie o wartości T 1 k, gdzie k jest stała zależne od typu komputera i częstotliwości jego zegara.
Na przykład dla PC-XT z zegarem 10 MHz stała ta wynosi 0, 89 mikrosekundy.
Parametry:
T - liczba jednostek opóźnienia czasu.
Function FileExists( F:String ): Boolean;
Opis:
Funkcja przybiera wartość True Jeżeli zbiór o podanej nazwie istnieje na dysku, lub wartość False w przypadku przeciwnym Jeżeli nie jest podana ścieżka dostępu w nazwie, zbiór jest poszukiwany w katalogu bieżącym
Parametry:
F - nazwa zbioru, który jest poszukiwany.
Wyjście:
Wartość True, jeżeli zbiór został znaleziony, lub False w przypadku przeciwnym.
6.Moduł GUTIL
Pisanie programów obsługujących grafikę jest zawsze związane z wieloma procedurami zarządzającymi ekranem
w trybie graficznym. Dodatkowo wprowadzenie okien w "tym trybie powoduje dodatkowe komplikacje. Poniższy moduł zawiera procedury i funkcje ułatwiające te prace. Moduł ten używa modułów Graph, Crt, UtiI, DOS.
W module zdefiniowano następujące zmienne:
GraphDriver - zmienna określająca typ karty graficznej;
GraphMode - zmienna określająca mód pracy karty graficznej.
W module zdefiniowano następujące procedury i funkcje:
Procedure ReTypeInv( NoOfChar: Byte );
Opis:
Procedura ta odwraca kolory w obszarze rozpoczynającym się od aktualnego położenia kursora graficznego,
o wysokości 10 punktów i długości 8*NoOfChar punktów. Używana do realizacji menu w trybie graficznym.
Parametry:
NoOfChar - liczba znaków do zamiany kolorów.
Function JustRight( T: String; Width: Byte ): String;
Opis:
Funkcja zwraca zadana liczbę znaków łańcucha T od prawej strony.
Parametry:
T - łańcuch znaków;
Width - szerokość łańcucha wyjściowego.
Wyjście:
Zwraca skorygowany łańcuch znaków.
Procedure EraseText( NoOfChar: Byte );
Opis:
Procedura kasuje ekran graficzny w obszarze rozpoczynającym się od aktualnego położenia kursora graficznego,
o wysokości 10 punktów i długości 8*NoOfChar punktów. Używana do realizacji menu w trybie graficznym.
Parametry:
NoOfChar - liczba znaków do zamiany kolorów.
Procedure Clearlmage( X1, Y1, X2, Y2: Integer );
Opis:
Procedura kasuje ekran graficzny w obszarze określonym przez podane współrzędne.
Parametry:
X1 - współrzędna pozioma lewego górnego rogu obszaru;
Y1 - współrzędna pionowa lewego górnego rogu obszaru;
X2 - współrzędna pozioma prawego dolnego rogu obszaru;
Y2 - współrzędna pionowa prawego dolnego rogu obszaru.
Procedure Graphlnscription( X, Y, Width: Integer; T: String );
Opis:
Procedura ta wyprowadza na ekran napis w określonej pozycji. Napis jest centrowany według podanej szerokości.
Parametry:
X - współrzędna pozioma wyprowadzanego napisu;
Y - współrzędna pionowa wyprowadzanego napisu;
Width - szerokość obszaru w którym napis będzie centrowany;
T - tekst do wyprowadzenia.
Function OpenGraphWin( X1, Y1, X2, Y2: Integer; Var P:Pointer ): Word;
Opis:
Procedura otwiera okno graficzne o współrzędnych podanych w parametrach, zawartość obszaru pod oknem jest zapamiętywana w pamięci sterty określonej przez zmienne typu Pointer P. Funkcja zwraca wielkość pamięci zajętej na stercie przez okno.
Parametry:
X1 - współrzędna pozioma lewego górnego rogu okna;
Y1 - współrzędna pionowa lewego górnego rogu okna;
X2 - współrzędna pozioma prawego dolnego rogu okna;
Y2 - współrzędna pionowa prawego dolnego rogu okna;
P - zmienna pomocnicza.
Wyjście:
Funkcja zwraca wielkość pamięci zajętej przez okno.
Procedure CloseGraphWin( X, Y: Integer; Var P:Pointer; Size: Word);
Opis:
Procedura zamyka okno na ekranie graficznym, przywracając poprzednie zawartość ekranu. Zapamiętana zawartość
tła jest ładowana na ekran na pozycji X, Y; zwalniana jest pamięć sterty zajęta przez otwarcie okna.
Parametry:
X - współrzędna pozioma lewego górnego rogu okna;
Y - współrzędna pionowa lewego górnego rogu okna;
P - zmienna pomocnicza;
Size - wielkość pamięci zajęta przez okno.
Function GraphMenu( X, Y: Integer; Width: Byte; Max, No:Byte ): Byte;
Opis:
Funkcja obsługuje rozwijane menu na ekranie graficznym.
Parametry:
X - współrzędna pozioma lewego górnego rogu menu;
Y - współrzędna pionowa lewego górnego rogu menu;
Width - szerokość menu w znakach (8 punktów);
Max - wysokość menu w pozycjach;
No - wyjściowa pozycja podświetlania menu.
Wyjście:
Funkcja zwraca liczbę typu BYTE określającą wybrane pozycję menu poprzez naciśnięcie klawisza ENTER.
Jeżeli naciśnięto ESC, funkcja zwraca liczbę 0.
Function GetReal( X, Y: Integer; var Width: Byte): Real;
Opis:
Funkcja wprowadza z klawiatury liczbę. Wprowadzanie odbywa się na pozycji X, Y ekranu graficznego. Parametr Width określa graniczna długość wprowadzanej liczby. W przypadku niepomyślnego wykonania funkcji parametr
ten zwraca wartość 0, w pozostałych przypadkach rzeczywiste długość wprowadzonej liczby.
Parametry:
X - współrzędna pozioma wprowadzania;
Y - współrzędna pionowa wprowadzania;
Width - deklarowana długość wprowadzanej liczby,
Wyjście:
Width - wyjściowa długość wprowadzonej liczby.Wyjściem jest uzyskana z klawiatury liczba typu REAL.
Function GetName( X, Y: Integer; Var Width: Byte): String;
Opis:
Funkcja wprowadza z klawiatury dowolny tekst o długości nie większej od Width. Wprowadzanie odbywa się na pozycji X, Y ekranu graficznego. Parametr Width określa graniczne długość wprowadzanej liczby.
W przypadku niepomyślnego wykonania funkcji parametr ten zwraca wartość 0, w pozostałych przypadkach rzeczywista długość wprowadzonej liczby.
Parametry:
X - współrzędna pozioma wprowadzania;
Y - współrzędna pionowa wprowadzania;
Width - deklarowana długość wprowadzanego łańcucha.
Wyjście:
Width - wyjściowa długość wprowadzonego łańcucha; Wyjściem jest uzyskany z klawiatury łańcuch znaków.
Function GraphTheEnd( X, Y: Integer): Boolean;
Opis:
Funkcja otwiera na ekranie okno tekstowe z pytaniem You arę sure (Y/N)? i oczekuje na naciśnięcie klawisza.
Po naciśnięciu klawisza Y zwracana jest wartość True, przy każdym innym - wartość False.
Parametry:
X - pozycja pozioma okna;
Y - pozycja pionowa okna;
Wyjście:
Wyjściem jest wartość typu Boolean.
Function GraphKoniec: Boolean;
Opis:
Funkcja otwiera na ekranie okno tekstowe z pytaniem Koniec pracy (T/N)? i oczekuje na naciśnięcie klawisza.
Po naciśnięciu klawisza T zwracana jest wartość Tnie, przy ka/dym innym - wartość False.
Parametry:
X - pozycja pozioma okna;
Y - pozycja pionowa okna;
Wyjście:
Wyjściem jest wartość typu Boolean.
Procedure PLChar( a:Char);
Opis:
Procedura rysuje na ekranie graficznym w pozycji kursora graficznego literę unikalna dla polskiego alfabetu. Procedura pracuje prawidłowo tylko dla DefaultFont (8 x 8). Dla pozostałych liter realizacja jest taka sama jak procedury OutText.
Parametry:
a - znak do rysowania.
Procedure Print( T: String);
Parametry:
Procedura rysuje na ekranie graficznym w pozycji kursora graficznego tekst z uwzględnieniem polskich znaków
i "Superscript", "Suhscript". Polska litera jest poprzedzona znakiem ", dla superscript ( litera podniesiona o 3 punkty
do góry)”^”, dla subscript ( litera opuszczona o 3 punkty w dół ) "|". Znaki sterujące nie mogę być tą procedurą rysowane. Tło pod tekstem jest kasowane.
Parametry:
T - tekst do rysowania.
Procedure PrintXY( X, Y: Integer; T: String);
Opis:
Procedura rysuje na ekranie graficznym w pozycji X, Y tekst z uwzględnieniem polskich znaków
i "Superscript", "Subscript". Polska litera jest poprzedzona znakiem ", dla superscript ( litera podniesiona
o 3 punkty do góry) "^", dla subscript ( litera opuszczona o 3 punkty w dół) "|". Znaki sterujące nie mogę być tą procedurą rysowane. Tło pod tekstem jest kasowane.
Parametry:
X - pozycja pozioma rysowania;
Y - pozycja pionowa rysowania;
T - tekst do rysowania.
Procedure PrintGr( T: String );
Opis:
Procedura rysuje zadany tekst na pozycji kursora graficznego, kasując jednocześnie tło pod tekstem.
Nie uwzględnia polskich liter.
Parametry:
T - tekst do rysowania.
Procedure PrintGrXY( X, Y: Integer; T: String );
Opis:
Procedura rysuje zadany tekst na pozycji X, Y, kasując jednocześnie tło pod tekstem. Nic uwzględnia polskich liter.
Parametry:
X - współrzędna pozioma rysowanego tekstu;
Y - współrzędna pionowa rysowanego tekstu;
T - tekst do rysowania.
Function PlLength( T: String ): Byte;
Opis:
Funkcja oblicza długość tekstu z uwzględnieniem polskich znaków.
Parametry:
T - tekst, którego długość jest obliczana.
Wyjście:
Funkcja zwraca długość łańcucha znaków.
Procedure GraphMessage(T: String; Ch: Char);
Opis:
Procedura otwiera okno, w którym rysuje zadany tekst, a następnie oczekuje na wprowadzenie
z klawiatury znaku określonego przez Ch.
Parametry:
T - tekst do rysowania;
Ch - znak, na który będzie czekała procedura.
Function ViewGraphMessage( Width: Integer; T: String ): Char;
Opis:
Funkcja otwiera okno graficzne, centrując je do szerokości określonej przez Width, w którym ukaże się tekst komunikatu T. Następnie funkcja czeka na wciśnięcie znaku z klawiatury i wyprowadza go.
Parametry:
Width - szerokość centrowania,
T - tekst do wyprowadzenia.
Wyjście:
Funkcja zwraca wciśnięty znak.
Procedure GraphViewDir( Mask:String );
Opis:
Procedura ta otwiera na ekranie okno graficzne, w którym wyświetla katalog dysku z uwzględnieniem wzoru podanego
w parametrze Mask. Stosowane są wszystkie zasady dotyczące katalogów w systemie DOS.
Parametry:
Mask - maska katalogu; .
Procedure OpenGraphMessage( T: String; Var Size: Word; Var Buffer: Poiner; Var XPos: Integer);
Opis:
Procedura otwiera na ekranie graficznym okno, w którym wyświetla komunikat. Poprzednia zawartość ekranu w tym miejscu zostanie zapamiętana w pamięci sterty określonej przez zmienne Buffer. Procedura nie zamyka tego okna.
Parametry:
T - tekst komunikatu;
Wyjście:
Size - wielkość pamięci zajętej przez okno;
Buffer - zmienna określająca położenie zawartości okna w pamięci;
XPos - współrzędna pozioma okna komunikatu.
Procedure CloseGraphMessage( Var Size: Word; Var Buffer: Pointer; XPos: Integer);
Opis:
Procedura zamyka okno otwarte poprzednia procedurę przywracając poprzednie zawartość ekranu tekstowego. Procedura zwalnia uprzednio zajęta pamięć sterty.
Parametry:
Size - wielkość pamięci zajętej przez okno;
Buffer - zmienna określająca położenie zawartości okna w pamięci;
XPos - współrzędna pozioma okna komunikatu.
Procedure LoadHercImage( FileName: String; Side: Byte );
Opis:
Procedura ładuje do pamięci ekranu graficznego zbiór dyskowy zawierający zawartość ekranu graficznego
(np. graficzna winietę programu). Można wybrać stronę graficzna pamięci karty Hercules.
Parametry:
FileName - nazwa zbioru dyskowego;
Side - strona ekranu graficznego karty Hercules (0..1).
7. Moduł U82C8167
W wielu programach istnieje potrzeba wykorzystania aktualnego czasu astronomicznego. Istniejące w Turbo Pascalu procedury GetTime i GetDate podaję czas uzyskany z zegara systemowego DOS'a. Jak wiadomo licznik tego zegara jest zwiększany z częstotliwością 18.206 Hz, a procedury DOS'a interpolują ten czas dla uzyskania rozdzielczości 1/100 s.
W komputerach typu PC-XT jest zwykle stosowana karta "Multi I/O" zawierająca zegar czasu astronomicznego
z podtrzymaniem bateryjnym. Poniżej przedstawiono proste procedury pozwalające na wykorzystanie we własnych programach zegara CMOS pod warunkiem, że w komputerze zainstalowano kartę z układem scalonym UM82C8167 ew. MM58167 (np. kartę typu MT881). Tego typu układ zegara jest bardzo często stosowany w kartach Multi I/O. Zegar ten jest reprezentowany w przestrzeni wejścia - wyjścia komputera jako zestaw portów. Każda komórka reprezentuje część daty lub czasu w kodzie BCD lub komórki pamięci przeznaczone do określonych celów. Przy pisaniu modułu zastosowano programowanie obiektowe, w związku z czym można go kompilować wyłącznie kompilatorami Turbo Pascal v. 5.5 i 6.0.
W module zdefiniowano następujące typy danych:
type WeekDayType=array[1..7] of string; - typ określający zestaw nazw dni tygodnia.
W module zdefiniowane następujące stałe:
const PolishWeekDay:WeekdayType=(`Niedz.','Pon.','Wt.','Sr.','Czw.','Pt.','Sob.');
zestaw polskich nazw dni tygodnia.
EnglishWeekDay:WeekDayType=(`Sun.','Mon.','Tue.','Wed.'.'Thu.','Fri.','Sat,');
zestaw angielskich nazw dni tygodnia.
TIM1=$240;
TIM2=$340;
TIM3=$277;
TIM4=$377;
adresy początku obszaru zegara dla różnych przyporządkowań karty.
W module zdefiniowano następujący obiekt zawierający procedury i zmienne obsługi zegara.
Type Timer=object
TIMADDR:Word;
TinierArray:array[0..23] of byte;
Constnictor In it (no: Byte);
Procedure GetRTinie(var a:DateTinie);
Procedure CopyTimer;
Function GetRTinieStr:String;
Function GetRDateStnString;
Function GetRWeekDay:Byte;
Function GetRWeekI)ayStr(t:WeekI)ayType):String;
end;
Pola obiektu Timer:
TIMADDR:Word;
Opis:
Zmienna określająca adres początkowy przestrzeni zegara CMOS. Jest to zmienna, której nic należy zmieniać bezpośrednio.
TimerArray: array [ 0..23 ] of Byte;
Opis:
Tablica zawierajęca wszystkie komórki zegara CMOS. Jest to tablica, której nie należy zmieniać bezpośrednio.
Constructor Timer.Init(no: Byte);
Opis:
Jest to inicjująca procedura obiektu TIMER. Wybiera ona numer przyporządkowania adresowego układu zegara CMOS.
Parametry:
no -numer przyporządkowania.
Procedure Timer.GetRTime(var a:DateTime);
Opis:
Procedura dokonuje przepisania daty i czasu z zegara CMOS do zmiennej a. Typ DateTime jest określony
w module DOS.
Wyjście:
a -zmienna wyjściowa zawierajęca datę i czas astronomiczny.
Procedure Timer.CopyTimer;
Opis:
Procedura kopiuje zawartość komórek zegara CMOS do tablicy TimerArray.
Function Timer.GetRTimeStr:String;
Opis:
Funkcja zwraca łańcuch znaków reprezentujący aktualny czas astronomiczny.
Wyjście:
Zwraca łańcuch znaków zawierajęcy czas w postaci HH:MM:SS.
Function Timer.GetRDateStr:String;
Opis:
Funkcja zwraca łańcuch znaków reprezentujący aktualna datę astronomiczna.
Wyjście:
Zwraca łańcuch znaków zawierajęcy datę w postaci YYYY:MM:DD.
Function Timer.GetRWeekDay.Byte;
Opis:
Funkcja zwraca numer dnia tygodnia dla aktualnej daty.
Wyjście:
Dzień tygodnia l..7.
Function Timer.GetRWeekDayStr( T: WeekDayType ): String;
Opis:
Funkcja zwraca nazwę dnia tygodnia według podanego wzorca.
Parametry:
T -wzorzec z nazwami dni tygodnia;
Wyjście:
Nazwa dnia tygodnia.
8. Moduł MC146818
Komputer PC-AT ma w swojej strukturze bateryjny zegar czasu astonomicznego oraz pamięć CMOS zawierajęce dane
o konfiguracji systemu. Dla sprawnego wykorzystania funkcji oferowanych przez ten układ został napisany niniejszy moduł. Przy pisaniu modułu zastosowano programowanie obiektowe, w związku z czym można go kompilować wyłącznie kompilatorami Turbo Pascal v. 5.5 i 6.0.
W module zdefiniowano następujące typy danych:
type WeekDayType»array[l..7] of string;
typ określający zestaw nazw dni tygodnia.
W module zdefiniowane następujące stałe:
const PolishWeekDay:WeekDayType=
('Niedz.','Pon.','Wt.','Sr.','Czw.','Pt.','Sob.');
zestaw polskich nazw dni tygodnia.
EnglishWeekDay:WeekDayType=
(' Suń' , ' Mon' , ' Tue' , ' Wed' , ' Thu' , ' Fri ' , ' Sat' ) ;
zestaw angielskich nazw dni tygodnia.
W module zdefiniowano następujący obiekt zawierajęcy procedury, funkcje i zmienne:
type CMOS=object
CMOSArray:array[O..$3F] of Byte;
Procedure CopyToCMOS;
Procedure CopyFromCMOS;
Procedure GetRTime(var a:DateTime);
Procedure SetRTime(a:DateTime);
Function GetRTimeStr: String;
Function GetRDateStr: String;
Function GetRWeekDay:Byte;
Function GetRWeekDayStr(t:WeekDayType):String;
Procedure StopTimer;
Procedure StartTimer;
Procedure SetTimerInt(A:Boolean);
Function ValidBattery:Boolean;
Procedure SetCheckSuni;
Function GetError:Byte;
Function GetFDDType(num:Byte) :Byte;
Function GetHDDType:Byte;
Function GetFDDNum:Byte;
Function GetVideoType:Byte;
Function Install80X87(Boolean;
Function GetMainMemSize:Word;
Function GetExtMemSize:Word;
end;
Pola obiektu CMOS:
CMOSArray:array[0..$3F] of Byte;
Opis:
Tablica odwzorowująca wszystkie komórki pamięci CMOS komputera AT.
Procedure CMOS.CopyToCMOS;
Opis:
Procedura przepisuje zawartość CMOSArray do pamięci konfiguracyjnej CMOS komputera.
Procedure CMOS.CopyFromCMOS;
Opis:
Procedura przepisuje zawartość pamięci konfiguracyjnej komputera do CMOSArray.
Procedure CMOS.StopTimer;
Opis:
Procedura zatrzymuje pracę zegara CMOS.
Procedure CMOS.StartTimer;
Opis:
Procedura wznawia pracę zegara CMOS.
Procedure CMOS.SetTimerInt( A:Boolean );
Opis:
Procedura ustawia znacznik przerwań zegara CMOS Gdy podana jest wartość TRUE, przerwanie jest aktywne;
przy wartości FALSE, przerwanie jest zablokowane.
Parametry:
A - włączanie / wyłączanie przerwań.
ValidKattery:Boolean;
Opis:
Funkcja sprawdza, czy bateria zasilająca jest sprawna.
Wyjście:
Zwraca TRUE, gdy bateria jest sprawna i FALSE w przypadku przeciwnym.
Procedure CMOS.GetRTime(var a:DateTime);
Opis:
Procedura dokonuje przepisania daty i czasu z zegara CMOS do zmiennej a. Typ DateTime jest określony
w module DOS.
Wyjście:
a - zmienna wyjściowa zawierająca datę i czas astronomiczny.
Procedure CMOS.SetRTime(a:DateTime);
Opis:
Procedura dokonuje przepisania daty i czasu z parametru do zegara CMOS. Typ DateTime jest określony
w module DOS.
Parametry:
a - zmienna wejściowa zawierająca datę i czas.
Function CMOS.GetR TimeStr:String;
Opis:
Funkcja zwraca łańcuch znaków reprezentujący aktualny czas astronomiczny.
Wyjście:
Zwraca łańcuch znaków zawierający czas w postaci GG:MM:SS.
Function CMOS.GetRDateStr:String;
Opis:
Funkcja zwraca łańcuch znaków reprezentujący aktualna datę astronomiczne.
Wyjście:
Zwraca łańcuch znaków zawierający datę w postaci RR:MM:DD.
Function CMOS.GetRWeekDay:Byte;
Opis:
Funkcja zwraca numer dnia tygodnia dla aktualnej daty.
Wyjście: Dzień tygodnia l..7.
Function CMOS.GetRWeekDayStr( T:WeekDayType ): String;
Opis:
Funkcja zwraca nazwę dnia tygodnia według podanego wzorca.
Parametry:
T - wzorzec z nazwami dni tygodnia;
Wyjście:
Nazwa dnia tygodnia.
Procedure CMOS.SetCheckSum;
Opis:
Procedura oblicza i zapisuje sumę kontrolna pamięci CMOS.
Function CMOS.GetError: Byte;
Opis:
Funkcja zwraca kod błędu, jeżeli taki wystąpił.
Wyjście:
Zwraca kod błędu:
00H - bez błędu;
04H - błąd zegara;
08H - błąd dysków;
10H - błąd pamięci;
20H - błąd konfiguracji;
40H - błąd sumy kontrolnej;
80H - błąd zasilania. Przy wystąpieniu kilku błędów kody są sumowane.
Function CMOS.GetFDDType( no: Byte ): Byte;
Opis:
Funkcja podaje typ dysku o numerze no.
Parametry:
no - numer stacji dysków. Wyjście:
Zwraca typ dysku:
0 - brak dysku;
1 - dysk 360 kB;
2 - dysk 1.2 MB.
Function CMOS.GetHDDType:Byte;
Opis:
Funkcja zwraca numer typu twardego dysku.
Wyjście:
Zwraca numer typu dysku.
Function CMOS.GetFDDNum:Byte;
Opis:
Funkcja zwraca liczbę dysków elastycznych.
Wyjście:
Liczba dysków elastycznych.
Function CMOS.GelVideoType:Byte;
Opis:
Funkcja zwraca typ zainstalowanej karty graficznej.
Wyjście:
Typ karty gra licznej.
Function CMOS.install80X87:Boolean;
Opis:
Funkcja sprawdza zainstalowanie koprocesora arytmetycznego.
Wyjście:
TRUE gdy koprocesor jest zainstalowany; FALSE w przypadku przeciwnym
Function CMOS.GetMainMemSw:Word;
Opis:
Funkcja zwraca wielkość pamięci głównej komputera.
Wyjście:
Wielkość pamięci.
Function CMOS.GetExtMemSize:Word;
Opis:
Funkcja zwraca wielkość pamięci rozszerzenia komputera.
Wyjście:
Wielkość pamięci.
9. Modul MOUSE
Moduł MOUSE zapewnia możliwość wykorzystania we własnych programach myszy. W procedurach obsługi wykorzystuje się przerwanie programowe nr 51. Z tego względu przed użyciem procedur musi być zainstalowany odpowiedni dla danego typu myszy program obsługi.
W module zdefiniowano następujący typ danych:
type CursorMatrix=array[1..2] of array[0..15] of Word;
opis kursora graficznego.
W module zdefiniowano następujące stałe:
CONST
Arrow:CursorMatrix=(($3FFF,$0FFF,$03FF,$00FF,$003F,$000F,$007F,$00FF,
$187F,$FC3F,$FE1F,$1F0F,$FF87,$FFC3,$FFE1,$FFF9),
($0000,$4000,$7000,$7C00,$7F00,$7FC0,$7E00,$6600,
$4300,$0180,$00C0,$0060,$0030,$0018,$000C,$0000));
Opis standardowego wyglądu kursora graficznego.
W module zdefiniowano następujące funkcje i procedury:
Function Mouselnit: Boolean;
Opis:
Funkcja inicjuje działanie myszy.
Wyjście:
Wynikiem funkcji jest zmienna typu logicznego określająca istnienie myszy w systemie. Jeżeli wartością funkcji jest "FALSE", oznacza to, ze nic jest zainstalowany program obsługi myszy (np: GMOUSE.COM, MOUSE.COM) lub myszą nie została dołączona.
Function MouseStatus:Integer;
Opis:
Funkcja zwraca status myszy.
Wyjście:
Status myszy (0/1).
Function MouseButtonNum:Integer;
Opis:
Zwraca liczbę przycisków stosowanej myszy.
Wyjście:
Liczba przycisków myszy (2 lub 3);
Procedure ShowCursor;
Opis:
Uaktywnia wyświetlanie kursora myszy w trybie tekstowym lub graficznym.
Procedure HideCursor;
Opis:
Wygasza kursor myszy.
Procedure MousePos( Var X Y, Button: Integer );
Opis:
Zwraca pozycję kursora myszy i stan jej przycisków.
Wyjście:
X -zwraca współrzędna pozioma kursora myszy,
Y -zwraca współrzędna pionowa kursora myszy,
Button -zwraca stan przycisków myszy.
Function Button( No: Byte ): Boolean;
Opis:
Testuje stan przycisku o numerze "No".
Parametry:
No - numer testowanego przycisku (1..3).
Wyjście:
Zwraca wartość "TRUE", gdy wybrany przycisk jest wciśnięty. Jeżeli mysz ma trzy przyciski, to środkowy przycisk ma numer 3.
Procedure GetCounter( Var X, Y: Integer );
Opis:
Odczyt bieżących liczników myszy. Liczniki te wskazują liczbę podstawowych przesunięć zrealizowanych
od ostatniego odczytania tej funkcji.
Parametry:
X -liczba przesunięć w osi poziomej (-32768..32767),
Y -liczba przesunięć w osi pionowej (-32768..32767).
Ujemne wartości oznaczają przesunięcie w lewo lub w górę. Jeden przyrost licznika jest odpowiednikiem rozdzielczości myszy (zwykle 1/200 lub 1/400 cala).
MouseSpeed(Speed:Integer);
Opis:
Procedura ustawia graniczna prędkość kursora myszy, powyżej której następuje podwojenie czułości. Wartość Speed jest podawana w impulsach na sekundę. Podczas inicjacji ustawiana jest wartość 64 imp/sek.
Parametry:
Speed -nowa prędkość kursora myszy.
Procedure SetSensitive( dX, dY: Integer );
Opis:
Ustawienie czułości myszy. Jest to ustawienie współczynników dla przeliczenia między impulsami pochodzącymi z ruchu kulki myszy a przesunięciem kursora. Po inicjacji ustawiony jest współczynnik dla osi x równy 8/8, a dla osi y 16/8. Większe wartości zmniejszają czułość.
Parametry:
dX -współczynnik dla osi poziomej,
dY -współczynnik dla osi pionowej.
Procedure SetXBorder( Min, Max: Integer );
Opis:
Procedura ogranicza możliwość poruszania się po ekranie w zadanych granicach dla osi poziomej.
Parametry:
Min -minimalna współrzędna pozioma ograniczająca ruch kursora,
Max -maksymalna współrzędna pozioma ograniczająca ruch kursora.
Procedure SetYBorder( Min, Max: Integer );
Opis:
Procedura ogranicza możliwość poruszania się po ekranie w zadanych granicach dla osi pionowej.
Parametry:
Min -minimalna współrzędna pionowa ograniczająca ruch kursora,
Max -maksymalna współrzędna pionowa ograniczająca ruch kursora.
Procedure SetMouseTrap( MinX, MinY, MaxX, MaxY: Integer );
Opis:
Procedura definiuje prostokątny obszar pułapki po wejściu do której wykonywana jest funkcja wygaszania kursora. Ponowne ukazanie się kursora można osiągnąć przez użycie procedury ShowCursor, która jednocześnie anuluje pułapkę.
Parametry:
MinX -lewa granica pułapki,
MaxX -prawa granica pułapki,
MinY -górna granica pułapki,
MaxY -dolna granica pułapki.
Procedure SetGraphCursor( Xcenter, Ycenter: Word;MaskCursor: CursorMatrix);
Opis:
Procedura definiuje wygląd kursora graficznego. Funkcja działa poprawnie tylko w przypadku standardowych kart graficznych IBM (CGA, EGA, VGA, MCGA).
Parametry:
Xcenter -pozioma współrzędna punktu zerowego kursora;
Ycenter -pionowa współrzędna punktu zerowego kursora;
MaskCursor -wzorzec wyglądu kursora graficznego.
UWAGA: Ponieważ niektóre myszy maję inne sterowniki programowe pewne funkcje i procedury mogą działać nieco odmiennie od założeń.
33