Grzegorz Skulimowski
STEROWNIK ANSI.SYS - SPRAWOZDANIE NR 6
Ogólne wiadomości na temat sterownika ANSI.SYS:
Sterownik ANSI.SYS umożliwia obsługę ekranu.
Możemy wykonać min.:
←[Pw;Pk h - skok kursora na pozycje Pw Pk
←[Pw;Pk f - skok kursora do górnego narożnika
←[Pn A/B - przesunięcie kursora o n wierszy w górę/dół
←[Pn C/D - przesunięcie kursora o n kolumn w prawo/lewo
←[s - zapamiętanie pozycji kursora
←[w - odczytanie pozycji kursora
←[2j - skok kursora do lewego górnego narożnika i wykasowanie zawartości ekranu
←[k - skasowanie wiersza od pozycji kursora do końca wiersza
←[Pp {;Pp}m - umożliwia ustawienie atrybutów wyświetlania ekranu:
0 - wyłączenie atrybutów
1 - pogrubienie
4 - podkreślenie
5 - migotanie
7 - inwersja kolorów
8 - wygaszenie kursora
30..37 - kolory liter
40..47 - kolory tła
←[Ps h - umożliwia ustawienie trybu pracy monitora:
0 - tekst, mono 40x25
1 - tekst, kolor 40x25
2 - tekst, mono 80x25
3 - tekst, kolor 80x25
4 - 4 kolory 320x200
5 - mono 320x200
6 - mono 640x200
7 - uaktywnienie zawijania wierszy
13 - 16 kolorów 300x200
14 - 16 kolorów 640x200
15 - mono 640x300
16 - 16 kolorów 640x350
17 - mono 640x480
18 - 16 kolorów 640x480
19 - 256 kolorów 320x200
A oto przykład programu wykorzystującego sterownik ANSI.SYS , który udało Nam się wykonać na zajęciach :
ECHO X←[244;72;"3";p
ECHO X←[244;80;"2";p
@ECHO OFF
CLS
SET pos=1
SET opcja1=To jest opcja1
SET opcja2=To jest opcja2
SET opcja3=To jest opcja3
SET opcja4=To wyjscie do DOS
ECHO
:procrysuj
CLS
ECHO
ECHO
IF NOT %pos%==1 ECHO ←[37;40m
If %pos%==1 ECHO ←[34;47m
ECHO ←[15C1 - %opcja1%
IF NOT %pos%==2 ECHO ←[37;40m
If %Pos%==2 Echo ←[34;47m
ECHO ←[15C2 - %opcja2%
IF not %pos%==3 ECHO ←[37;40m
IF %pos%==3 Echo ←[34;47m
ECHO ←[15C3 - %opcja3%
IF NOT %pos%==4 ECHO ←[37;40m
IF %pos%==4 ECHO ←[34;47m
ECHO ←[15C4 - %opcja4%
ECHO ←[31;40m
ECHO
ECHO
ECHO Pozycja nr %pos%
:mainproc
CHOICE /C:128 /N
IF ERRORLEVEL==3 GOTO upproc
IF ERRORLEVEL==2 GOTO downproc
IF ERRORLEVEL==1 GOTO exittoDOS
PAUSE
GOTO mainproc
:upproc
ECHO upped
IF %pos%==1 SET pos=1
IF %pos%==2 SET pos=1
IF %pos%==3 SET pos=2
IF %pos%==4 SET pos=3
GOTO procrysuj
:downproc
ECHO downed
IF %pos%==4 SET pos=4
IF %pos%==3 SET pos=4
IF %pos%==2 SET pos=3
IF %pos%==1 SET pos=2
GOTO procrysuj
:exittodos
Opis przedstawionego programu:
ECHO X←[244;72;"3";p
ECHO X←[244;80;"2";p
Linie te podmieniają klawisze tak, aby można było poruszać się po menu za pomocą klawiszy „strzałka w dół” i „strzałka w górę” z klawiatury numerycznej.
@ECHO OFF
CLS
Pierwsza linia wyłącza wyświetlane wierszy (znak @ przed nią powoduje, że ta linia również nie zostanie wyświetlona), druga linijka czyści ekran.
SET pos=1
SET opcja1=To jest opcja1
SET opcja2=To jest opcja2
SET opcja3=To jest opcja3
SET opcja4=To wyjscie do DOS
ECHO
Pierwsza linia ustawia zmienną środowiskową tak, aby po uruchomieniu pliku aktywną opcją w menu była opcja pierwsza. Kolejne cztery przypisują zmiennej opcjax różne ciągi znaków. Ostatnia linijka powoduje ustawienie ECHO w wartość domyślną (on).
:procrysuj
CLS
ECHO
ECHO
IF NOT %pos%==1 ECHO ←[37;40m
If %pos%==1 ECHO ←[34;47m
ECHO ←[15C1 - %opcja1%
IF NOT %pos%==2 ECHO ←[37;40m
If %Pos%==2 Echo ←[34;47m
ECHO ←[15C2 - %opcja2%
IF not %pos%==3 ECHO ←[37;40m
IF %pos%==3 Echo ←[34;47m
ECHO ←[15C3 - %opcja3%
IF NOT %pos%==4 ECHO ←[37;40m
IF %pos%==4 ECHO ←[34;47m
Pierwszym krokiem jest zadeklarowanie etykiety „procrysuj”, następnie czyszczenie ekranu.
Kolejne linie przypisują różne kolory liter i tła, w zależności od tego, czy dana opcja została wybrana lub nie oraz rozmieszczają wyświetlane linie w odpowiednim miejscu na ekranie monitora. Np:
IF NOT %pos%==1 ECHO ←[37;40m - jeśli aktywną opcją nie jest opcja pierwsza, to białe litery i czarne tło
If %pos%==1 ECHO ←[34;47m - jeśli aktywną opcją jest opcja pierwsza to niebieskie litery i białe tło
ECHO ←[15C1 - %opcja1% - przesuń kursor o 15 kolumn w prawo i wyświetl napis: „1 - <to co pod zmienną opcja1>”.
ECHO Pozycja nr %pos%
Wyświetla napis „Pozycja nr <nr aktywnej pozycji w menu>”. Numer aktywnej pozycji jest ukryty pod zmienną pos.
:mainproc
CHOICE /C:128 /N
IF ERRORLEVEL==3 GOTO upproc
IF ERRORLEVEL==2 GOTO downproc
IF ERRORLEVEL==1 GOTO exittoDOS
PAUSE
GOTO mainproc
Pierwsza linia deklaruje etykietę „mainproc”. Kolejna deklaruje, które klawisze są dozwolone (na które będzie reagował komputer) przy poruszaniu się po menu, czyli 1, 2, 8; parametr /N powoduje nie wyświetlanie wyborów jakie dokonuje użytkownik.
Kolejne trzy definiują do której etykiety zostanie wykonany skok w zależności od wartości za wartej w ERRORLEVEL. Następna powoduje czekanie na klawisz, a jeszcze następna powoduje skok do etykiety „mainproc”.
:upproc
ECHO upped
IF %pos%==1 SET pos=1
IF %pos%==2 SET pos=1
IF %pos%==3 SET pos=2
IF %pos%==4 SET pos=3
GOTO procrysuj
Ten fragment programu odpowiada za przemieszczanie belki aktywnej opcji do góry. Jeśli belka jest na pozycji pierwszej (dokładnie jeśli zmienna pos ma wartość 1) to ją tam pozostaw (dokładnie - przypisz zmiennej pos wartość 1); dalej jeśli jest na pozycji 2 to przesuń ją na pozycje 1 itd.
:downproc
ECHO downed
IF %pos%==4 SET pos=4
IF %pos%==3 SET pos=4
IF %pos%==2 SET pos=3
IF %pos%==1 SET pos=2
GOTO procrysuj
Ten fragment działa podobnie jak powyższy, tylko odpowiada za przesuwanie belki w dół.
:exittodos
Ostatnia etykieta - za nią nic nie ma, więc program kończy działanie.