PASCAL kurs, Turbo Pascal - moduly uzytkowe, WSTĘP


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



Wyszukiwarka

Podobne podstrony:
PASCAL kurs, KURS TURBO PASCALA, KURS TURBO PASCALA - wstęp
Kurstpv10, Kurs Turbo Pascal 7
Kurs Turbo Pascal 7.0 By Kajoj
Kurs Turbo Pascal 7 0
PEŁNY KURS TURBO PASCALA
Kurs Turbo Pascal'a
Tomasz M Sadowski Praktyczny kurs Turbo Pascala Wydanie IV helion
Praktyczny kurs Turbo Pascala Wydanie IV
Praktyczny kurs Turbo Pascala Wydanie IV 2
Praktyczny kurs Turbo Pascala Wydanie IV 2
Praktyczny kurs Turbo Pascala Wydanie IV
Praktyczny kurs Turbo Pascala Wydanie IV pktp4
Praktyczny kurs Turbo Pascala Wydanie IV pktp4
Kurs języka Turbo Pascal(1)
Turbo Pascal kurs, Technik Informatyk, Programowanie strukturalne i obiektowe Turbo Pascal
Kurs-jezyka-Turbo-Pascal, ♪ DOKUMENTY(Arkusze-matura-inne), ♥ Edukacja i Technika, Informatyka

więcej podobnych podstron