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 |
$H | usunięcie znaku (backspace) |
$D | data |
$T | czas |
$P | katalog roboczy |
$N | nazwa dysku roboczego |
$e | escape (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[f | ustawienie kursora w lewym górnym rogu |
$e[s | zapamiętanie pozycji kursora |
$e[u | odtworzenie pozycji kursora (do pozycji zapamiętanej przez $e[s) |
$e[K | kasowanie wiersza od pozycji kursora do końca wiersza |
$e[2J | kasowanie ekranu i przesuniecie kursora do pozycji HOME |
$e[p1;p2 | przesuniecie pozcyji kursora do pozycji podanej przez parametry p1 i p2, po parametrze p2 jest litera f, np. $e[10;10f |
$e[pA | przesunię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[pB | przesunięcie kursora w dół o liczbę pozycji określoną przez parametr p, np. $e[2B - przesunięcie kursora o dwie pozycje w dół |
$e[pC | przesunięcie kursora do przodu o liczbę pozycji określoną przez parametr p, np. $e[2C - przesunięcie kursora o dwie pozycje do przodu |
$e[pD | przesunię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;p3m | ustawienie 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"p | remapowanie 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[trybh | zmiana 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:
30 | czarny (black), ciemnoszary (dark gray) przy rozjaśnianiu |
31 | czerwony (red), jasny czerwony przy rozjaśnianiu |
32 | zielony (green), jasny zielony przy rozjaśnianiu |
33 | pomarańczowy (orange), żółty (yellow) przy rozjaśnianiu |
34 | niebieski (blue), jasny niebieski przy rozjaśnianiu |
35 | fioletowy (magenta), jasny fioletowy przy rozjaśnianiu |
36 | turkusowy (cyan), jasny turkusowy przy rozjaśnianiu |
37 | szary (gray), biały (white) przy rozjaśnianiu |
Kolory tła:
40 | czarny (black) |
41 | czerwony (red) |
42 | zielony (green) |
43 | żółty (yellow) |
44 | niebieski (blue) |
45 | fioletowy (magenta) |
46 | turkusowy (cyan) |
47 | szary (gray) |
Atrybuty tekstu:
0 | wyłączenie wszystkich atrybutów |
1 | rozjaśnienie |
4 | podkreślenie (tylko na monitorach monochromatycznych) |
5 | miganie (działa tylko w trybie pełnoekranowym, nie działa w okienku) |
7 | inwersja |
8 | ukrywanie |
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:
0 | 40 x 148 x 25 monochromatyczny (tekst) |
1 | 40 x 148 x 25 kolorowy (tekstowy) |
2 | 80 x 148 x 25 monochromatyczny (tekstowy) |
3 | 80 x 148 x 25 kolorowy (tekstowy)(normalny) |
4 | 320 x 148 x 200 4-kolorowy (graficzny) |
5 | 320 x 148 x 200 monochromatyczny (graficzny) |
6 | 640 x 148 x 200 monochromatyczny (graficzny) |
7 | Nie czyści ekranu |
13 | 320 x 148 x 200 color (graphics) |
14 | 640 x 148 x 200 color (16-color graphics) |
15 | 640 x 148 x 350 monochrome (2-color graphics) |
16 | 640 x 148 x 350 color (16-color graphics) |
17 | 640 x 148 x 480 monochrome (2-color graphics) |
18 | 640 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.