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 standardowy
ch 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 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:s
tring;
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