Kak sozdat' TERMCAP opisanie terminala,
NEIZVESTNOGO INFORMIX
Dlya nastrojki na terminaly UNIX-ovskie programmy ispol'zuyut
fajl termcap, v kotorom sobrany opisaniya vseh (ili pochti vseh)
terminalov, sushchestvuyushchih v prirode. Vyyasniv, kakoj tip
terminala podklyuchen k mashine (a zadaetsya eto v peremennoj
okruzheniya TERM - naprimer TERM=d460 ili TERM=d211),
UNIX-programma nahodit opisanie etogo terminala v termcap i,
nastroivshis' po hranyashchejsya tam informacii, mozhet adekvatno
vosproizvodit' na nem informaciyu, podlezhashchuyu vyvodu.
INFORMIX imeet svoj sobstvennyj fajl s opisaniyami terminalov,
ego imya /usr/informix/etc/termcap , v nem podderzhivaetsya bol'she
vozmozhnostej po sravneniyu so standartnym termcap UNIX'a. Zato
mnogih terminalov, izvestnyh UNIX, v INFORMIXovom termcape ne
opisano. Poetomu esli na vashej mashine stoyat terminaly kakoj-to
drugoj konstrukcii (t.e., prakticheski lyuboj terminal pomimo
d211, d460, vt220), vam pridetsya opisanie delat' samomu.
Obshchij format termcap-opisaniya terminala mozhno opisan v termin
fo(4) ("Spravochnike administratora UNIX V"), ego tak zhe legko
urazumet', rassmatrivaya opisaniya drugih terminalov, i ya ne
stanu osobo podrobno na nem ostanavlivat'sya.
Sm. takzhe sleduyushchie fajly:
Format bazy terminalov termcap/terminfo
Za osnovu nado vzyat' opisanie terminala iz bazy terminfo UNIXa,
otredaktirovat', ispravit' i otladit' ego, i vstavit' v fajl
/usr/informix/etc/termcap
Pomestit' polnoe opisanie terminala vt220 v formate terminfo po
odnoj harakteristike v stroke v fajl vt220 :
---------------------------------------------------------------
infocmp -r1 vt220 > vt220
---------------------------------------------------------------
Pomestit' ispravlennoe opisanie terminala vt220 v bazu dannyh
terminfo
---------------------------------------------------------------
tic vt220
---------------------------------------------------------------
Pomestit' polnoe opisanie terminala vt220 v formate termcap po
odnoj harakteristike v stroke v fajl tmp :
---------------------------------------------------------------
infocmp -Cr1 vt220 > tmp
---------------------------------------------------------------
Pomestit' ispravlennoe opisanie terminala vt220 v bazu termcap
---------------------------------------------------------------
Samostoyatel'no, ruchkami, s pomoshch'yu lyubogo tekstovogo redaktora
zamenyaem staroe opisanie na novoe v fajle /etc/termcap ili/i
/usr/informix/etc/termcap
---------------------------------------------------------------
Sdelat' opisanie formata terminfo iz opisaniya formata termcap
---------------------------------------------------------------
captoinfo vt220.cap > vt220
---------------------------------------------------------------
V rezul'tate nekotorogo kolichestva eksperimentov ya vyyasnil, ka-
kie komandy dlya INFORMIX znat' neobhodimo, a kakie neobyazatel'-
ny.
Vot kakie harakteristiki imeet smysl, i sleduet, zadavat' (A
ostal'nye, skoree vsego, voobshche neobyazatel'no ukazyvat'):
0. Simvol'nye termcap harakteristiki.
:am:\ v terminale est' avtomaticheskie granicy
:bw:\ mozhno perevodit' kursor iz kolonki 0 v poslednyuyu
:mi:\ mozhno bez opasenij peremeshchat'sya v rezhime vstavki
:ms:\ mozhno bez opasenij peremeshchat'sya v rezhime soobshchenij
:xo:\ terminal ispol'zuet protokol xon/xoff
1. Klyuchi. T.e. kody, kotorye posylayutsya klavishej
esli na nee nazhat'.
termcap |
harakteristika | klavisha
----------------+------------------------------------------
k0 ... k9 F1 ... F10
kA ... kK F11 .. F20
ki klyuch vstavit' stroku
kj klyuch unichtozhit' stroku
kf klyuch na sleduyushchuyu stranicu
kg klyuch na predydushchuyu stranicu
ku strelka vverh
kd strelka vniz
kr strelka vpravo
kl strelka vlevo
naprimer, dlya xterm:
:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:\
2. Kody upravleniya kursorom
vi sdelat' kursor nevidimym
ve sdelat' kursor normal'nym
vs sdelat' kursor yarkim
cm pozicionirovat' kursor #str #stolb
(ispol'zuet stek-mashinu terminala),
naprimer :cm=\E[%i%d;%dH:\ dlya vt220
:cm=^P%r%.%.:\ dlya d211
bc shag nazad
le kursor vlevo
do kursor vniz
nd kursor vpravo
up kursor vverh
ho v nachalo ekrana
cr vernut' karetku
nl perejti na novuyu stroku
nw vozvrat karetki i perehod k novoj stroke
naprimer, dlya vt100:
:up=\E[A:do=\E[B:nd=\E[C:le=\E[D:\
3. Kody upravleniya ekranom
cl ochistit' ekran
ic vstavit' simvol
dc udalit' simvol
bl zvonok
4. Inicializaciya terminala.
ti vklyuchit' terminal v shtatnyj rezhim raboty.
te "vosstanovit'" pervobytnoe sostoyanie
Naprimer, dlya terminala d211-132:
:ti=^^FK:\ Vklyuchit' 132 simvol'nyj ekran
:te=^^FJ:\ Vklyuchit' 80 simvol'nyj ekran
5. Upravlenie atributami.
as perejti k dopolnitel'nomu alfavitu
ae vernut'sya iz dopolnitel'nogo alfavita
ac pary simvolov iz graficheskogo alfavita
mr v rezhim REVERSE
me vyklyuchit' vse atributy
6. Simvoly risovaniya ramochek.
nuzhno perechislit' simvoly ASCII, kotorye, buduchi
vyvedeny v rezhime psevdografiki, narisuyut "ugolki"
gb simvoly risovaniya ramki pqbd-|
gs v rezhim psevdografiki.
ge konec rezhima psevdografiki.
Naprimer, dlya terminala d460:
:gb=1324;\::\
:gs=^^FS11:ge=^^FS00:\
7. Upravlenie cvetami ZA.
Esli harakteristiki ZA ne zadano, to terminal budet podderzhi-
vat' tol'ko dva cveta: REVERSE i NORMAL. (V termcap UNIX'a est'
analogichnaya harakteristika sa.)
Harakteristika ZA ispol'zuet stek_mashinu terminala i parametry.
Ustroeno vse primerno tak:
U terminala est', tak nazyvaemaya, stek_mashina:
|to neskol'ko peremennyh, neskol'ko staticheskih peremennyh, vo-
sem' parametrov ot p1 do p8, i stek.
Imeetsya nabor operacij, kotorymi mozhno manipulirovat' s danny-
mi, lezhashchimi v peremennyh i v parametrah, proizvodit' nad nimi
v steke logicheskie i arifmeticheskie operacii i peresylat' na
terminal.
Kogda INFORMIXu nuzhno pomenyat' atributy vyvoda, on ustanavli-
vaet v parametrah p1 - p4 nuzhnye znacheniya, a dal'she primenyaet
komandu terminala, zapisannuyu v ZA. V itoge na terminal uhodit
ESC-posledovatel'nost', vklyuchayushchaya na nem zadannye atributy
(cveta).
parametr | znachenie | zadaet atribut(na monohrome) ili cvet
---------+-----------+---------------------------------------
p1 ot 0 do 7 opredelyaet cvet (ot WHITE do BLACK)
-------------------------------------------------------------
p1 0 NORMAL WHITE
p1 1 BOLD CYAN
p1 2 BOLD YELLOW
p1 3 BOLD MAGENTA
p1 4 DIM RED
p1 5 DIM GREEN
p1 6 DIM BLUE
p1 7 INVISIBLE BLACK
p2 1 ili 0 atribut REVERSE (est' ili net)
p3 1 ili 0 atribut DIM (est' ili net)
p4 1 ili 0 atribut UNDERLINE (est' ili net)
Stek-mashina ponimaet takie komandy:
%pi parametr i v stek gde i=1,2,...,8
%{n} chislo n v stek
%c vershinu steka na terminal v formate %c (1 bajt)
%d vershinu steka na terminal v formate %d (celoe chislo)
Uslovnyj operator %? %t %e %; Vynimaetsya znachenie iz steka, i,
v zavisimosti ot ego znacheniya (0 / ne0), vypolnyaet sootv.
vetv'.
%? operaciya %t operaciya_kogda_istinno %e operaciya_kogda_lozhno %;
%? operaciya %t operaciya_kogda_istinno %;
Est' eshche nekotoroe kolichestvo komand, no oni nam ne ponadobyatsya.
Ostal'nye simvoly srazu peresylayutsya na terminal bez izmenenij.
Razberem vse na primere terminala vt220
V instrukcii k terminalu napisano, chto ukazannye atributy na
terminale ustanavlivayutsya sleduyushchimi ESC-posledovatel'nostyami:
\E[0m sbrosit' vse atributy. (esli p1=0)
\E[0;1m ustanovit' BOLD (esli p1>0)
\E[0;7m ustanovit' REVERSE (esli p2=1)
\E[0;5m ustanovit' BLINK (esli p3=1)
\E[0;4m ustanovit' UNDERLINE (esli p4=1)
Itak:
ZA=\E[0 # posylaem nachalo posledovatel'nosti \E[0 - sbros vseh
# atributov.
%?%p1 # esli p1 ne raven 0
%t;1%; # to vyvesti na terminal simvoly ;1
%?%p2%t;7%; # esli p2 raven 1 to vyvesti na terminal ;7
%?%p3%t;5%; # esli p3 raven 1 to vyvesti na terminal ;5
%?%p4%t;4%; # esli p4 raven 1 to vyvesti na terminal ;4
m # vyvesti simvol m
Ob®edinyaem vse vmeste i poluchaem ZA harakteristiku terminala
vt220
:ZA=\E[0%?%p1%t;1%;%?%p2%t;7%;%?%p3%t;5%;%?%p4%t;4%;m:
Kak vidite, eta harakteristika ZA ne obespechit nam nikakih cve-
tov. Lyubiteli krasivogo mogut samostoyatel'no pouprazhnyat'sya s
razborkoj i obrabotkoj vseh vozmozhnyh znachenij parametra p1.
Last-modified: Tue, 25 Nov 1997 06:58:27 GMT