Bajery w DOSie i Trybie MS-DOS za pomocą ansi.sys


   Za pomocą pliku ansi.sys i wpisów w autoexec.bat i config.sys można zrobić w DOSie wiele fajnych rzeczy. Aby były możliwe, potrzebny będzie wspomniany sterownik ansi.sys . Aby ładował się przy uruchamianiu systemu, dopiszmy następującą linijkę w pliku config.sys:
Device=c:\windows\command\Ansi.sys
Jeśli ktoś ma Windows w innym folderze, musi zmienić ścieżkę dostępu w powyższej linijce. Wszystkie efekty uzyskujemy przez modyfikację zmiennej systemowej DOSa o nazwie prompt. Zmienna ta określa wygląd znaku zachęty (promptu) DOSa. Dzięki sterownikowi ansi.sys (który jest pewnego rodzaju rozszerzeniem), możemy zmieniać kolory, tryby ekranu, przenosić kursor, wyswietlać takie rzeczy jak np. godzinę czy datę, a także remapować klawiaturę, przypisując klawiszom nowe funkcje. Aby zmienić prompt, używamy polecenia set, które służy do modyfikacji zmiennych systemowych. Dobrze byłoby teraz otworzyć sobie okienko Trybu MS-DOS i popróbować różnych ustawień. A więc wpiszmy:
set prompt=Matrix
I co uzyskaliśmy? Zamiast zwykłego znaku zachęty z bieżącym folderem i znakiem większości mamy słowo Matrix. Można wpisywać inne słowa. Jeśli jednak użyjemy znaku $ wówczas to, co będzie po nim, będzie potraktowane jako specjalny parametr. Oto lista takich parametrów:

$G>
$L<
$B|
$_przejście do nowego wiersza
$Husunięcie znaku (backspace)
$Ddata
$Tczas
$Pkatalog roboczy
$Nnazwa dysku roboczego
$eescape (mozna odwolywac sie do poleceń, np. ansi)

Widzimy, że standardowo prompt ma wartość $p$g Przejdźmy teraz do najciekawszej części, czyli do tego, co umożliwia nam parametr $e Po nim możemy umieścić jeden z poniższych, dodatkowych parametrów udostępnianych przez ansi.sys (w tabeli uwzględniono parametr $e ):

$e[fustawienie kursora w lewym górnym rogu
$e[szapamiętanie pozycji kursora
$e[uodtworzenie pozycji kursora (do pozycji zapamiętanej przez $e[s)
$e[Kkasowanie wiersza od pozycji kursora do końca wiersza
$e[2Jkasowanie ekranu i przesuniecie kursora do pozycji HOME
$e[p1;p2przesuniecie pozcyji kursora do pozycji podanej przez parametry p1 i p2, po parametrze p2 jest litera f, np. $e[10;10f
$e[pAprzesunięcie kursora w górę o liczbę pozycji określoną przez parametr p, np. $e[2A - przesunięcie kursora o dwie pozycje w górę
$e[pBprzesunięcie kursora w dół o liczbę pozycji określoną przez parametr p, np. $e[2B - przesunięcie kursora o dwie pozycje w dół
$e[pCprzesunięcie kursora do przodu o liczbę pozycji określoną przez parametr p, np. $e[2C - przesunięcie kursora o dwie pozycje do przodu
$e[pDprzesunięcie kursora do tyłu o liczbę pozycji określoną przez parametr p, np. $e[2D - przesunięcie kursora o dwie pozycje do tyłu
$e[p1;p2;p3mustawienie atrybutów tekstu, można podać kilka parametrów, na końcu litera m, np. $e[5,33,40m - migający pomarańczowy tekst na czarnym tle
$e[kod;"ciąg"premapowanie klawiszy. Po kodzie klawisza jest średnik, potem ciąg w cudzysłowie i litera p, np. $e[0;59;"dir"p - po wciśnięciu F1 automatycznie wpisze się dir i po zatwierdzeniu Enterem wyświetli się zawartość foldera
$e[trybhzmiana trybu pracy ekranu, po numerze trybu jest litera h, np. $e[3h

Do ustawień tekstu należy kolor liter, kolor tła i dodatkowe atrybuty.

Kolory tesktu:
30czarny (black), ciemnoszary (dark gray) przy rozjaśnianiu
31czerwony (red), jasny czerwony przy rozjaśnianiu
32zielony (green), jasny zielony przy rozjaśnianiu
33pomarańczowy (orange), żółty (yellow) przy rozjaśnianiu
34niebieski (blue), jasny niebieski przy rozjaśnianiu
35 fioletowy (magenta), jasny fioletowy przy rozjaśnianiu
36turkusowy (cyan), jasny turkusowy przy rozjaśnianiu
37szary (gray), biały (white) przy rozjaśnianiu

Kolory tła:
40czarny (black)
41czerwony (red)
42zielony (green)
43żółty (yellow)
44niebieski (blue)
45 fioletowy (magenta)
46turkusowy (cyan)
47szary (gray)

Atrybuty tekstu:
0wyłączenie wszystkich atrybutów
1rozjaśnienie
4podkreślenie (tylko na monitorach monochromatycznych)
5miganie (działa tylko w trybie pełnoekranowym, nie działa w okienku)
7inwersja
8ukrywanie

Posiadając te wiadomości możemy już coś robić. Spróbujmy przeanalizować przykład podany w poprzedniej wersji tego tekstu, a mianowicie baner u góry okna. SET PROMPT=$e[s$e[f$e[1;37;42mMS-DOS * The X-Files The truth is out there! Trust no one! The X-Files * MS-DOS $e[0;37;40m$e[u$P$G
Najpierw zapamiętana zostaje pozycja kursora, następnie kursor przenoszony jest do lewego górnego rogu. Włączane jest rozjaśnianie, kolor tekstu ustawiany jest na biały a kolor tła na zielono. Potem jest napis. Na jego końcu jest spacja, żeby było 80 znaków, czyli żeby była wykorzystana cała szerokość ekranu. Następnie wyłączane są atrybuty i przywracane standardowe kolory. Odtwarzana jest pozycja kursora, dzięki czemu wraca na miejsce. Dalej wyświetlany jest standardowy prompt, czyli bierzący folder i znak większości. Napis może być dowolnej długości. Należy zwrócić uwagę na polskie litery. Są one inaczej kodowane w DOSie i inaczej w Windowsie. Dlatego jeśli chcemy użyć polskich liter, to do edycji pliku autoexec.bat lepiej użyć edit.com W tym celu wpisujemy edit c:\autoexec.bat Baner u góry okna to tylko przykład. Można zrobić o wiele więcej, np. miganie całego ekranu, kolorowanie wpisywanego tekstu, wyświetlanie godziny, czarny tekst na czarnym tle (sposób na lamerów) itd. To zależy tylko od wyobraźni i pomysłów. Uważni Czytelnicy zauważyli pewnie parametry służące do remapowania klawiatury i zmiany trybu pracy monitora. Tak, tak, jakby było mało tych funkcji, które opisałem, ten nie pozorny pliczek ansi.sys, który nie ma nawet 10 kB potrafi znacznie więcej. Jeśli pracujemy w okienku Trybu MS-DOS, kliknijmy odpowiedni przycisk na pasku narzędzi lub wciśnijmy Alt+Enter aby przełączyć się na peły ekran. Wpiszmy:
set prompt=$e[0h
Coś te litery jakby większe. Nie widać też kursora. Wciskając F3 możemy przywołać wydane polecenie i posługując się backspace'em wpisywać inne numery trybów. Standardowo w większości trybów po wpisaniu dowolnego polecenia ekran jest czyszczony. Dlatego po wybraniu trybu, trzeba jeszcze wybrać tryb 7. Nie można jednak zrobić tego w jednym poleceniu. Poszczególne tryby ekranu można też oglądać w okienku Trybu MS-DOS, ale wtedy wyglądają mniej efektownie. Przypominam, że pomiędzy okienkiem, a pełnym ekranem przełączamy się za pomocą Alt+Enter. Poniżej zamieszczam listę trybów:

040 x 148 x 25 monochromatyczny (tekst)
140 x 148 x 25 kolorowy (tekstowy)
2 80 x 148 x 25 monochromatyczny (tekstowy)
380 x 148 x 25 kolorowy (tekstowy)(normalny)
4320 x 148 x 200 4-kolorowy (graficzny)
5320 x 148 x 200 monochromatyczny (graficzny)
6640 x 148 x 200 monochromatyczny (graficzny)
7Nie czyści ekranu
13 320 x 148 x 200 color (graphics)
14640 x 148 x 200 color (16-color graphics)
15 640 x 148 x 350 monochrome (2-color graphics)
16640 x 148 x 350 color (16-color graphics)
17640 x 148 x 480 monochrome (2-color graphics)
18640 x 148 x 480 color (16-color graphics)
19 320 x 148 x 200 color (256-color graphics)

Pozostało do omówienia remapowanie klawiszy. Dzięki niemu możemy dowolnemu klawiszowi przypisać jakiś tekst, który będzie się wpisywał po jego wciśnięciu. Może się to przydać to ułatwienia pracy w DOSie, np. F1 to będzie dir a F2 to format c: albo coś innego ;)

Klawisz                  Kod       SHIFT+klawisz   CTRL+klawisz  ALT+klawisz

  
F1                        0;59      0;84           0;94          0;104 
  
F2                        0;60      0;85           0;95          0;105 
  
F3                        0;61      0;86           0;96          0;106 
  
F4                        0;62      0;87           0;97          0;107 
  
F5                        0;63      0;88           0;98          0;108 
  
F6                        0;64      0;89           0;99          0;109 
  
F7                        0;65      0;90           0;100         0;110 
  
F8                        0;66      0;91           0;101         0;111 
  
F9                        0;67      0;92           0;102         0;112 
  
F10                       0;68      0;93           0;103         0;113 
  
F11                       0;133     0;135          0;137         0;139 
  
F12                       0;134     0;136          0;138         0;140 
  
HOME (num keypad)         0;71      55             0;119          
  
UP ARROW (num keypad)     0;72      56             (0;141)     
  
PAGE UP (num keypad)      0;73      57             0;132       
  
LEFT ARROW (num keypad)   0;75      52             0;115       
  
RIGHT ARROW (num          0;77      54             0;116       
keypad) 
  
END (num keypad)          0;79      49             0;117       
  
DOWN ARROW (num keypad)   0;80      50             (0;145)     
  
PAGE DOWN (num keypad)    0;81      51             0;118       
  
INSERT (num keypad)       0;82      48             (0;146)     
  
DELETE  (num keypad)      0;83      46             (0;147)     
  
HOME                      (224;71)  (224;71)       (224;119)  (224;151) 
  
UP ARROW                  (224;72)  (224;72)       (224;141)  (224;152) 
  
PAGE UP                   (224;73)  (224;73)       (224;132)  (224;153) 
  
LEFT ARROW                (224;75)  (224;75)       (224;115)  (224;155) 
  
RIGHT ARROW               (224;77)  (224;77)       (224;116)  (224;157) 
  
END                       (224;79)  (224;79)       (224;117)  (224;159) 
  
DOWN ARROW                (224;80)  (224;80)       (224;145)  (224;154) 
  
PAGE DOWN                 (224;81)  (224;81)       (224;118)  (224;161) 
  
INSERT                    (224;82)  (224;82)       (224;146)  (224;162) 
  
DELETE                    (224;83)  (224;83)       (224;147)  (224;163) 
  
PRINT SCREEN                                        0;114       
  
PAUSE/BREAK                                         0;0         
  
BACKSPACE                 8         8               127        (0) 
  
ENTER                     13                        10         (0 
  
TAB                       9         0;15            (0;148)    (0;165) 
  
NULL                      0;3                           
  
A                         97        65              1          0;30 
  
B                         98        66              2          0;48 
  
C                         99        66              3          0;46 
  
D                         100       68              4          0;32 
  
E                         101       69              5          0;18 
  
F                         102       70              6          0;33 
  
G                         103       71              7          0;34 
  
H                         104       72              8          0;35 
  
I                         105       73              9          0;23 
  
J                         106       74              10         0;36 
  
K                         107       75              11         0;37 
  
L                         108       76              12         0;38 
  
M                         109       77              13         0;50 
  
N                         110       78              14         0;49 
  
O                         111       79              15         0;24 
  
P                         112       80              16         0;25 
  
Q                         113       81              17         0;16 
  
R                         114       82              18         0;19 
  
S                         115       83              19         0;31 
  
T                         116       84              20         0;20 
  
U                         117       85              21         0;22 
  
V                         118       86              22         0;47 
  
W                         119       87              23         0;17 
  
X                         120       88              24         0;45 
  
Y                         121       89              25         0;21 
  
Z                         122       90              26         0;44 
  
1                         49        33                         0;120 
  
2                         50        64              0          0;121 
  
3                         51        35                         0;122 
  
4                         52        36                         0;123 
  
5                         53        37                         0;124 
  
6                         54        94              30         0;125 
  
7                         55        38                         0;126 
  
8                         56        42                         0;126 
  
9                         57        40                         0;127 
  
0                         48        41                         0;129 
  
-                         45        95              31         0;130 
  
=                         61        43                         0;131 
  
[                         91        123             27         0;26 
  
]                         93        125             29         0;27 
  
                          92        124             28         0;43 
  
;                         59        58                         0;39 
  
'                         39        34                         0;40 
  
,                         44        60                         0;51 
  
.                         46        62                         0;52 
  
/                         47        63                         0;53 
  
`                         96        126                        (0;41) 
  
ENTER (keypad)            13                        10         (0;166) 
  
/ (keypad)                47        47              (0;142)    (0;74) 
  
* (keypad)                42        (0;144)         (0;78)      
  
- (keypad)                45        45              (0;149)    (0;164) 
  
+ (keypad)                43        43              (0;150)    (0;55) 
  
5 (keypad)                (0;76)    53              (0;143)     
Ten tekst nie powstałby dzięki pomocy Roberta Szczepaniaka i Mattai, którym jestem bardzo wdzięczny.