Pascal


Kody ESC ANSI

ANSI.SYS to sterownik rozszerzający możliwości klawiatury i ekranu. Aby móc z niego korzystać należy go najpierw zainstalować umieszczając odpowiednia instrukcję w pliku CONFIG.SYS

DEVICE=C:\ANSI.SYS

lub...

DEVICEHIGH=C:\ANSI.SYS

Jeśli plik znajduje się w innym miejscu należy oczywiście podać inna ścieżkę. Po zaktualizowaniu pliku CONFIG.SYS należy zrestartować komputer...

Jak sprawdzić, czy sterownik jest zainstalowany? Można posłużyć się assemblerem:

INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
        AX = 1A00h
Return: AL = FFh if installed

W Pascalu funkcja odpowiedzialna za sprawdzanie, czy sterownik został zainstalowany może wyglądać tak:

function ANSI :boolean;
var
    status :byte;
begin
    asm
      mov ax, 1A00h
      int 2Fh
      mov status, al
    end;
ANSI := (status = $FF)
end;

Funkcja zwróci wartość TRUE jeśli sterownik jest zainstalowany, w przeciwnym razie zwróci oczywiście wartość FALSE.

Sterownik ANSI.SYS potrafi interpretować tzw. sekwencje sterujące, czyli specjalne ciągi znaków rozpoczynające się od znaków: 1Bh 5Bh, czyli klawisza ESC i znaku '['. Dalszą część sekwencji stanowią znaki określające jaka operacja ma zostać wykonana.

W jaki sposób należy przekazywać sekwencje sterujące? Wystarczy wypisać je na ekran za pomocą np. instrukcji echo (pliki BAT) lub write (Pascal). W rzeczywistości sekwencje te nie wyświetlą się na ekranie tylko zostaną odpowiednio zinterpretowane przez sterownik ANSI.SYS

A teraz przedstawiam zestaw kodów ESC ANSI:

Redefinicja klawiszy

ESC[n1;n2p

- n1 to kod ASCII klawisza (dziesiętny), któremu chcemy przypisać nowe znaczenie n2 to nowy kod ASCII dla znaku n1. Zamiast kodów ASCII można podawać znaki w cudzysłowie np. ESC["A";"B"p zamiast ESC[65;66p.

- n2 nie musi być pojedynczym znakiem, może to być łańcuch znaków (również w cudzysłowie, zobacz dołączony plik redef.bat). Jeśli chcemy podać rozszerzone kody ASCII należy je poprzedzić znakami - 0; przykładowo jeśli chcemy klawiszowi F2 przypisać ciąg znaków "Hello!" wpisujemy kod:

ESC[0;60;"Hello!"p

Wtedy naciśniecie klawisza F2 będzie równoznaczne z wprowadzeniem z klawiatury słowa "Hello!" (zobacz plik hello.bat).

Kolory

Do ustawiania kolorów znaków/tła służy jeden kod w postaci ESC[n0;...;nm gdzie n0..n to zestaw parametrów.

A oto i parametry:

Parametr Funkcja
0 Anuluje poprzednie ustawienia.
1 Zwiększenie jasności.
5 Miganie znaku.
8 Blokuje wyświetlanie znaku (znak ma kolor tła).

Parametry kolorów

Znak Tło Kolor
30 40 Czarny
31 41 Czerwony
32 42 Zielony
33 43 Żółty
34 44 Niebieski
35 45 Fioletowy
36 46 Turkusowy
37 47 Biały

Kolory w trybie pełnego ekranu mogą się trochę różnić od kolorów w oknie...

Przykład:

ESC[32;44m

Powyższa instrukcja spowoduje wyświetlanie zielonych znaków na niebieskim tle...

Pozycja kursora

Kod Opis
ESC[n1;n2H Ustawienie kursora w pozycji n1,n2.
ESC[nA Przesunięcie kursora o n linii w górę...
ESC[nB Przesunięcie kursora o n linii w dół.
ESC[nC Przesunięcie kursora o n kolumn w prawo.
ESC[nD Przesunięcie kursora o n kolumn w lewo.
ESC[s Zapamiętanie aktualnej pozycji kursora.
ESC[u Odtworzenie wcześniej zapisanej pozycji kursora; kursor od razu ustawi się w danej pozycji.
ESC[6n Zwraca pozycje kursora; odpowiedź ta jest w formacie typu ESC[n1;n2R (odpowiedź zostanie wypisana na ekranie) przykład: w pascalu wywołujemy funkcje pisząc write(chr(27)+'[6n'), a następnie czytamy dane z klawiatury - read(s), gdzie s jest zmienną typu string; jeśli kursor był w pozycji (3,10), gdzie 3 to numer kolumny (współrzędna x), 10 numer wiersza (współrzędna y) to zmienna s = chr(27)+'[10;03R'.
ESC[2J Czyszczenie ekranu.
ESC[k Wyczyszczenie linii na prawo od kursora.

Tryb pracy ekranu

Postać kodu:

ESC[=nh

lub...

ESC[?nh

albo

ESC[nh

... gdzie "n" to...

... tryb pracy ekranu

Numer Rodzaj trybu
0 Tekstowy, 40x25 znaków.
1 Tekstowy, 40x25 znaków.
2 Tekstowy, 80x25 znaków.
3 Tekstowy, 80x25 znaków.
4 Graficzny, 320x200 pikseli.
5 Graficzny, 320x200 pikseli.
6 Graficzny, 640x200 pikseli.

W trybie graficznym 320x200 mieści się tyle znaków co w trybie tekstowym 40x25, a w graficznym 640x200 tle, co w tekstowym 80x25...

Zachęcam do przeanalizowania przykładowych plików i źródeł jakie dołączyłem...

UWAGA!
Jeśli chcemy korzystać z kodów ESC ANSI w Pascalu to pisząc program nie możemy jednocześnie korzystać z modułu CRT. Jeśli załadujemy ten moduł (uses crt) to sekwencje sterujące nie będą interpretowane przez ANSI.SYS i tylko zostaną wyświetlone na ekranie.

Książki z jakich korzystałem pisząc tekst:

  • Tadeusz Orski "MS-DOS 6.0". Wyd. IKAR 1993
  • Marek Zieliński, Mariusz Kaleta "MS-DOS 5.0 bez tajemnic". Wyd. PLJ 1993
  • Opis funkcji assemblera z programu: INTERVUE 1.5

Dodał: ifrost​, www
Dział: Pascal


 

ComputerSun.pl na FaceBooku
Polecamy lekturę:

Windows 7 PL. Zaawansowana administracja systemem



X

Zapisz się na biuletyn serwisu ComputerSun.pl, aby otrzymać poradnik:

Zabezpieczanie sieci bezprzewodowych. Przydatne wskazówki jak chronić sieć domową przed intruzami

Imię:  
Email:
Tak, akceptuję Politykę Prywatności