crt-dod do 10 programowanie modularne, INFORMATYKA, PROGRAMOWANIE, wykłady


Moduł ”CRT”

Moduł CRT zawiera funkcje i procedury, które pozwalają sterować trybami ekranu, posługiwać się kodami znaków rozszerzonej klawiatury, kolorami i dźwiękiem. Zastosowanie tych funkcji i procedur w programie lub module wymaga deklaracji modułu CRT za pomocą konstrukcji uses.

Zainicjowanie modułu CRT (poprzez jego deklarację) powoduje skojarzenie standardowych plików tekstowych INPUT i OUTPUT z urządzeniem tekstowym CRT (implementowanych przez moduł CRT) .Jego główną funkcją, podobnie jak DOS-owskiego urządzenia CON (konsola), jest łączenie operacji klawiaturowych i ekranowych. W porównaniu jednak z konsolą, urządzenie CRT jest dużo szybsze, a ponadto zapewnia możliwość operowania kolorami i oknami. Zainicjowanie modułu CRT równoważne jest wykonaniu na plikach INPUT i OUTPUT instrukcji:

AssignCrt (INPUT, `');

Reset (INPUT);

AssignCrt (OUTPUT,'');

Reset (OUTPUT);

w celu przywrócenia plikowi INPUT i OUTPUT ich standardowych skojarzeń należy w sposób jawny dokonać skojarzenia i otwarcia, tj. zastosować instrukcje: AssignCrt (INPUT, `');

Reset (INPUT);

AssignCrt (OUTPUT,'');

Reset (OUTPUT);

Jak już wcześniej wspomniałem, zastosowanie modułu CRT daje możliwość tworzenia okien. Oknem nazywamy wydzieloną część ekranu, działającą identycznie jak ekran i pozostawiającą pozostałą część ekranu nienaruszoną. Można powiedzieć, że okno jest to ekran na ekranie. Do utworzenia okna służy procedura Window. Oknem domyślnie przyjmowanym przez system jest cały ekran.

Podczas zapisu do pliku OUTPUT (przy deklaracji modułu CRT ) lub innego pliku tekstowego skojarzonego z CRT, specjalne znaczenie posiadają cztery znaki sterujące. Są to: #7, #8, #10, #13. Znak:

#7 - powoduje wygenerowanie dźwięku brzęczka (ang. beep) z wewnętrznego głośnika;

#8 - powoduje przesunięcie kursora o jeden znak w lewo (ang. backspace ), przy czym jeżeli kursor znajduje się przy lewej krawędzi bieżącego okna, to znak ten nie spowoduje żadnego działania;

#10 - powoduje przesunięcie kursora o jeden wiersz w dół, przy czym jeżeli kursor znajduje się w wierszu przy dolnej krawędzi bieżącego okna, to nastąpi przesunięcie całej zawartości okna do góry;

#13 - powoduje przesunięcie kursora do lewej krawędzi bieżącego okna.

Podczas odczytu z pliku INPUT lub innego pliku tekstowego skojarzonego z CRT tekst wprowadzony jest wierszami. Podczas tego wprowadzenia dozwolone jest stosowanie następujących klawiszy edytorskich:

← (backspace) lub Ctrl-S - usuwa ostatnio wprowadzony znak;

Esc lub Ctrl-A - usuwa cały wiersz;

Enter - wprowadza wiersz do bufora wraz ze znakiem jego

końca (CR/LF);

Ctrl-D - powoduje powtórzenie ostatniego napisanego znaku;

Crtl-F - powoduje powtórzenie ostatniego wprowadzonego

wiersza;

Ctrl-Z - kończy wprowadzony wiersz i generuje znak końca

zbioru.

PREDEFINIOWANE IDENTYFIKATORY MODUŁU CRT

W module CRT zdefiniowane są stałe i zmienne, wykorzystywane przez stan­dardowe funkcje i procedury tego modułu, które określają m.in. tryb ekranu, kolory, a także spełniają funkcje kontrolne, przechowują atrybuty zbiorów i współrzędne okna. Oczywiście, jak wszystkie predefiniowane stałe, typy i zmienne, mogą one być wykorzystane przez programistę w inny sposób.

Stałe trybów CRT

Stałe te wykorzystywane są przez procedurę TextMode do określenia trybu pracy ekranu i zdefiniowane są następująco:

const BW4O = 0; C040 = 1; BW8O = 2; C080 = 3; Mono = 7; Font8x8 = 256; C40 = C040; C80 = C080;

Pierwsze cztery i ostatnie dwie stałe służą do oznaczenia trybów tekstowych dostępnych na karcie CGA (IBM PC Co1or/Graphics Adapter):

BW4O - tryb czarno-biały, 40 kolumn i 25 wierszy,

C040 (C40) - tryb kolorowy, 40 kolumn i 25 wierszy,

BW80 - tryb czarno-biały, 80 kolumn i 25 wierszy,

C080 (C80) - tryb kolorowy, 80 kolumn i 25 wierszy.

Stała Mono oznacza tryb czarno-biały o 80 kolumnach i 25 wierszach, dostępny na karcie IBM PC Monochrome Adapter, a stała Font8x8 służy do oznaczania try­bu kolorowego o 43 (50) wierszach dla karty EGA (VGA).

Stałe kolorów tekstu

Stałe kolorów tekstu wykorzystywane do oznaczania kolorów w procedurach TextColor i TextBackground. Ich definicja jest następująca (z prawej strony podaję polskie nazwy kolorów):

const Black = 0; - czarny

Blue = 1; - niebieski

Green = 2; - zielony

Cyan = 3; - turkusowy

Red = 4; - czerwony

Magenta = 5; - karmazynowy

Brown = 6; - brązowy

LightGray = 7; - jasnoszary

DarkGray = 8; - ciemnoszary

LightBlue = 9; - jasnoniebieski

LightGreen = 10; - jasnozielony

LightCyan = 11; - jasnoturkusowy

LightRed = 12; - jasnoczerwony

LightMagenta = 13; - jasnokarmazynowy

Yellow = 14; - ¿ó³ty

White = 15; - bia³y

Blink = 128;

Kolory posiadają wartości od 0 do 15. W tekstowych trybach kolorowych kolor pierwszoplanowy (tusz znaków) może być jednym z podanych 16 kolorów, a ko1or tła - jednym z pierwszych ośmiu kolorów. Ponadto każdy znak w danym kolorze może migotać, co można osiągnąć przez zastosowanie wyrażenia Blink + dowolny kolor.

Zmienna CheckBreak

Wartość tej zmiennej, zdefiniowanej następująco:

var CheckBreak : Boolean;

określa włączenie lub wyłączenie kontroli naciśnięcia klawiszy Ctrl-Break. Jeśli wartością zmiennej CheckBreak jest True, to naciśnięcie klawiszy Ctrl­Break spowoduje przerwanie wykonywania programu z chwilą następnego wyprowadzania tekstu na ekran monitora. Gdy wartością zmiennej jest False, to na­ciśnięcie klawiszy Ctrl-Break nie powoduje żadnego działania. Standardowo dla zmiennej CheckBreak jest przyjmowana wartość True.

Zmienna CheckEOF

Zmienna ta służy do włączania lub wyłączania opcji generowania znaku końca zbioru po naciśnięciu klawiszy Ctrl-Z i zdefiniowana jest następująco:

var CheckEOF : Boolean;

Jeśli wartością zmiennej jest True to po naciśnięciu klawiszy Ctrl-Z podczas czytania z pliku skojarzonego z CRT zostanie wygenerowany znak końca zbioru. Gdy wartością zmiennej jest False, co przyjmowane jest standardowo, naciśnięcie wspomnianych klawiszy nie powoduje żadnego działania.

Zmienna CheckSnow

Zmienna CheckSnow służy do włączenia lub wyłączenia kontroli "śnieżenia" (interferencji) podczas zapamiętywania znaków bezpośrednio w pamięci ekranu. Zjawisko "śnieżenia" dotyczy tylko karty CGA.

Definicja zmiennej CheckSnow jest następująca:

var CheckSnow : Boolean;

Po każdym wyborze trybu kolorowego zmiennej tej przypisywana jest wartość True, oznaczająca kontrolę zjawiska "śnieżenia". Wartość zmiennej CheckSnow nie ma żadnego znaczenia, gdy wartością zmiennej DirectVideo jest False.

Zmienna DirectVideo

Definicja tej zmiennej jest następująca:

var DirectVideo : Boolean;

Gdy wartością zmiennej jest True, co przyjmowane jest standardowo, to zapisywanie do zbiorów skojarzonych z CRT będzie powodowało umieszczanie kolejnych znaków bezpośrednio w pamięci ekranu. Jeśli natomiast wartością zmiennej DirectVideo jest False, to wypisywanie wszystkich znaków na ekranie odbywa się poprzez odwołania do BIOS (skr. ang. Basic Input/Output System - Podsta­wowy System Wejścia/Wyjścia), co jest procesem znacznie wolniejszym.

Zmienna LastMode

Zmienna ta służy do zapamiętania bieżącego trybu CRT podczas każdej zmiany tego trybu za pomocą procedury TextMode i zdefiniowana jest następująco:

var LastMode : Word;

Zmienna LastMode jest inicjowana po uruchomieniu każdego programu.

Zmienna TextAttr

W zmiennej tej przechowywane są bieżące atrybuty wyświetlanego tekstu. De­finicja zmiennej jest następująca:

var TextAttr : Byte;

Zwykle wartość tej zmiennej, tj. atrybuty tekstu, ustalane są za pomocą wywołań procedur TextCoior- i TextBackground. Możliwe jest jednak także bezpośrednie przypisanie zmiennej TextAttr odpowiedniej wartoś­ci.

Zmienne WindMin i WindMax

Zmienne te służą do przechowywania współrzędnych bieżącego okna i zdefini­owane są następująco:

var WindMin,WindMax : Word;

Wartością zmiennej WindMin są współrzędne lewego górnego narożnika okna, a zmiennej WindMax - dolnego prawego narożnika, przy czym współrzędna x (odcięta) pamiętana jest w drugim bajcie, a współrzędna y (rzędna) - w pierwszym bajcie (zmiena typu Word zajmuje dwa bajty pamięci). Wartości obu zmiennych mogą być ustalone poprzez bezpośrednie przypisanie lub wywołanie procedury Window.

FUNKCJE I PROCEDURY MODUŁU CRT

Do kojarzenia plików tekstowych z urządzeniem CRT, implementowanym przez moduł CRT, służy procedura AssignCrt, której wywołanie ma postać:

AssignCrt (zmienna-plikowa-tekstowa).

Wyboru trybu pracy ekranu dokonuje się poprzez wywołanie procedury TextMode postaci:

TextMode (tryb),

gdzie tryb oznacza wielkość typu Integer (w ogólności może to być wyrażenie). Najczęściej stosuje się tu stałe trybów CRT. Podanie wartoś­ci innej niż wartości tych stałych powoduje automatyczne przyjęcie stałej CO80, a więc przyjęcie trybu kolorowego o 80 kolumnach i 25 wierszach.

Wywołanie procedury TextMode powoduje automatycznie przyjęcie za okno całego ekranu, przypisanie predefiniowanym zmiennym DirectVideo i CheckSnow wartości True (w przypadku drugiej zmiennej przy założeniu, że wybrano tryb kolorowy pracy ekranu) oraz ustalenie atrybutu bieżącego tekstu na "normalny", co oznacza normalną jaskrawość znaków pojawiających się na ekranie (ten sam efekt można uzyskać za pomocą wywołania procedury NormVideo).

Ustalenie poprzedniego trybu pracy ekranu (po jego zmianie) otrzymuje się przez wywołanie procedury TextMode dla zmiennej LastMode. Tego typu postępowanie zwykle stosuje się po powrocie do trybu tekstowego z trybu graficznego .

Przykład:

1) Wywołanie:

TextMode (CO40);

powoduje ustalenie kolorowego trybu pracy ekranu o 40 kolumnach i 25 wierszach (CO40 jest predefiniowaną stałą). Ten sam efekt uzyska się po­ przez wywołanie:

TextMode (1);

lub

TextMode (C40);

2) Jeśli w programie zadeklarowano zmienną;

var tryb_początkowy : Word;

i pierwszą instrukcją programu będzie:

tryb_początkowy:=LastMode;

to - po jednej lub kilku zmianach trybu pracy ekranu - w dowolnym miejscu programu można zainicjować tryb początkowy przez wywołanie:

TextMode (tryb_początkowy);

Do ustalenia koloru znaków pojawiających się na ekranie służy procedura TextColor, której wywołanie ma postać:

TextColor (kolor),

gdzie kolor oznacza wielkość całkowitą typu Byte, przy czym najczęściej jest to stała koloru tekstu. Wywołanie procedury TextColor powo­duje również przypisanie drugiej połowie bajtu zmiennej TextAttr, tj. bitom 0-3, wyspecyfikowanej wartości kolor, a jeśli wartość ta jest większa od 15, to dodatkowo przypisywana jest wartość 1 bitowi migo­tania, tj. bitowi 7 (w przeciwnym przypadku bit ten ma wartość 0).

Przykład 1.

1) W celu wyboru koloru czerwonego dla znaków należy zastosować instrukcję:

TextColor (Red); lub TextColor (4);

  1. Żółty migający kolor znaków uzyskamy poprzez każde z wywołań:

TextColor (Yellow+Blink);

TextColor (14+Blink);

TextColor (Yellow+128);

TextColor (142);

TextColor (30);

Tło wyświetlanych znaków ustala się za pomocą procedury TextBackground o wywołaniu:

TextBackground (kolor),

przy czym kolor musi tu być wielkością całkowitą (typu Byte) o wartości z przedziału [0,7) (może to być jedna z ośmiu pierwszych stałych koloru). Wywołanie procedury TextBackground powoduje także przypi­sanie bitom 4-6 predefiniowanej zmiennej TextAttr wyspecyfikowanej wartości kolor.

Za pomocą bezparametrowej procedury NormVideo uzyskuje się z powrotem war­tość predefiniowanej zmiennej TextAttr w momencie rozpoczęcia wykonywania programu. Powoduje to ustalenie takiego koloru dalszych wyświetlanych znaków i ich tła, jaki obowiązywał na początku programu (biały kolor znaków na czar­nym tle).

Dwie kolejne bezparametrowe procedury, HighVideo i LowVideo, powodują zmianę wartości drugiej połowy bajtu (czterech ostatnich bitów) predefiniowa­nej zmiennej TextAttr. Wywołanie procedury HighVideo powodu­je zmianę wartości 0-7 na 8-15, co objawia się zwiększeniem jaskrawości kolo­ru znaku. Natomiast wywołanie procedury LowVideo zmienia wartości 8-15 na 0-7, co z kolei objawia się zmniejszeniem jaskrawości znaku.

Moduł CRT umożliwia zdefiniowanie na ekranie okna. Do tego celu służy pro­cedura Window, której wywołanie jest następujące:

Window (xl,yl,x2,y2),

gdzie wszystkie wielkości (w ogólności mogą to być wyrażenia) powinny być typu Byte. xl i yl określają współrzędne lewego górnego narożnika okna, a x2 i y2 - prawego dolnego narożnika (obrazuje to poniższy rysunek przedstawiający ekran). W trybie ekranu 80­-kolumnowym standardowo przyjmowanym oknem jest (1,1,80,25), a w trybie 40­-kolumnowym - (1,1,40,25). W obu zatem przypadkach standardowym oknem jest cały ekran. Najmniejszym możliwym oknem jest okno składające się z jednej kolumny i jednego wiersza, tj. określone argumentami (1,1,1,1). Jeśli argu­menty w wywołaniu procedury Window przekraczają dozwolone dla danego trybu współrzędne, tj. nie są spełnione warunki:

xl ≤ x2 , y1 ≤ y2 , x2 ≤ xmax , y2 ≤ 25 ,

gdzie xmax=40 dla trybu 40-kolumnowego i xmax=80 dla trybu 80-kolumnowego, to wywołanie jest ignorowane.

0x08 graphic
0x01 graphic

Procedura GotoXY umieszcza kursor w bieżącym oknie. Jej wywołanie ma po­stać:

GotoXY (x,y),

gdzie x i y oznaczają współrzędne w oknie (muszą to być wielkości typu Byte), przy czym współrzędne lewego górnego narożnika okna wynoszą (1,1).

Przykład 2.

Wykonanie instrukcji:

Window (10,10, 40,15);

GotoXY (1,1);

spowoduje usytuowanie kursora w lewym górnym narożniku zdefiniowanego okna, tj. w miejscu o bezwzględnych współrzędnych (10,10).

Informację o aktualnym położeniu kursora w oknie można uzyskać za pomocą bezparametrowych funkcji WhereX i WhereY o wartościach typu Byte. Wywołanie pierwszej z tych funkcji daje wartość współrzędnej x (odciętej), a wywołanie drugiej - współrzędnej y (rzędnej). Należy podkreślić, że obie te wartości podawane są względem bieżącego okna, a nie całego ekranu.

Bezparametrowa procedura ClrScr służy do wymazania zawartości bieżącego okna. Jeśli przed jej wywołaniem nie określono rozmiaru okna (za pomocą pro­cedury Window), to wyczyszczona zostanie zawartość całego ekranu (z tego po­wodu procedurę ClrScr stosuje się często na początku programów). Po zastoso­waniu procedury kolorem tła bieżącego okna będzie aktualny kolor tła.

Przykład 3.

Wykonanie instrukcji:

TextBackground (Blue); Window (10,15,30,20); ClrScr;

spowoduje wyczyszczenie na ekranie prostokąta 20x5 o współrzędnych lewego

górnego narożnika (10,15), przy czym kolorem tła całego prostokąta będzie, kolor niebieski.

Do wymazania znaków od aktualnego położenia kursora do końca bieżącego wiersza służy bezparametrowa procedura CrlEol. Pozycja kursora nie ulega przy tym zmianie.

Dwie kolejne bezparametrowe procedury, DelLine i InsLine, pozwalają odpo­wiednio wymazać wiersz i wstawić pusty wiersz w miejscu aktualnego położenia kursora. Podczas operacji wymazywania wiersza wszystkie następne wiersze przesuwane są o jedną pozycję do góry a na końcu dodawany jest jeden wiersz pusty o bieżącym kolorze tła. Z podobną sytuacją mamy do czynienia podczas wstawiania pustego wiersza - jego kolorem tła będzie bieżący kolor tła.

Do sprawdzenia naciśnięcia na klawiaturze dowolnego klawisza, z wyjątkiem klawiszy przesunięcia (zmiany rejestrów), takich jak Shift, Alt, NumLock itp., służy funkcja KeyPressed o wartości logicznej (typu Boolean). Jeśli klawisz zostanie naciśnięty, to funkcja ta daje wartość True. W przeciwnym przypadku wartością funkcji jest False. Jeżeli wartością funkcji jest True, to ponowne przyjęcie przez nią wartości False uzyskuje się poprzez zastosowa­nie funkcji ReadKey

Bezparametrowa funkcja ReadKey powoduje wczytanie z klawiatury jednego znaku, przy czym znak ten nie jest wyprowadzany na ekran. Wartość funkcji jest typu Char. Jeśli przed wywołaniem funkcji ReadKey wartością funkcji KeyPressed była wartość logiczna True, to wartością funkcji ReadKey będzie znak znajdujący się w buforze klawiatury. W przeciwnym przypadku funkcja ReadKey będzie oczekiwała na naciśnięcie klawisza.

Procedura Delay, której wywołanie ma postać:

Delay (milisekundy),

gdzie milisekundy oznaczają wielkość całkowitą typu Word (może to być wyraże­nie), powoduje zatrzymanie wykonywania programu na wyspecyfikowaną liczbę milisekund. Procedura ta wykorzystywana jest głównie do chwilowego zatrzyma­nia wyświetlanego obrazu oraz do sterowania dźwiękiem w połączeniu z procedu­rami Sound i NoSound.

Procedura Sound powoduje włączenie wewnętrznego głośnika. Jej wywołanie jest następujące:

Sound (częstotliwość),

gdzie częstotliwość oznacza wielkość całkowitą typu Word (może to być wyrażenie). Emitowany jest przy tym dźwięk o częstotliwości w hercach, określonej wartością wyspecyfikowanego argumentu. Dźwięk ten będzie emitowany do chwili wykonania instrukcji wywołania bezparametrowej procedury NoSound.

Częstotliwości odpowiadające nutom naturalnym w różnych oktawach podaję w poniższej tabeli. Częstotliwości półtonów otrzymuje się poprzez obliczenie pierwiastka z iloczynu dwóch sąsiednich częstotliwości naturalnych. Ponieważ czę­stotliwość ta musi być liczbą całkowitą, przeto należy zastosować jeszcze funkcję standardową Round. Tak więc wzór na częstotliwość półtonu jest następujący:

Round (Sqrt (częstotliwość-1*częstotliwość-2))

0x08 graphic
0x08 graphic
0x01 graphic

10



Wyszukiwarka

Podobne podstrony:
Jakie liczby ukryły sie na drugiej wiśni- dod. do 10, Matematyka(1)
Tp w 10 Programowanie modularne w Turbo Pascalu, INFORMATYKA, PROGRAMOWANIE, wykłady
Programowanie strukturalne i obiektowe Podręcznik do nauki zawodu technik informatyk
tp w 4 Programowanie modularne, INFORMATYKA, PROGRAMOWANIE, wykłady
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk prstko
IT Wprowadzenie do algorytmiki i programowania wyszukiwanie i porządkowanie informacji
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk prstko 2
10 KROKOW DO PIERWSZEGO PROGRAM Nieznany (2)
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk 2
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk prstko
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk prstko
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk Wydanie II popr
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk Wydanie II popr
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk Wydanie II popr
informatyka wtyczki do wordpressa programowanie dla profesjonalistow brad williams ebook
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk prstko
Programowanie strukturalne i obiektowe Podrecznik do nauki zawodu technik informatyk prstko

więcej podobnych podstron