Vyšlo v týdeníku: | COMPUTERWORLD |
Číslo: | 23/93 |
Ročník: | 1993 |
Rubrika/kategorie: | Co je čím ... v počítačových sítích |
Díl: | 66 |
Dnešní počítačový svět není homogenní. Byl, je a zřejmě vždy bude obydlen výpočetními systémy, které vychází z odlišných filosofií, používají odlišné přístupy a metody, technologie a techniky, a v důsledku toho nejsou nikdy zcela kompatibilní. Snahy o co největší "otevřenost" však vedou alespoň k tomu, že různé systémy spolu dokáží rozumným způsobem spolupracovat. Tendence ke vzájemnému sbližování, zajišťovaná dodržováním společných standardů, se však neprosazuje ve všech oblastech stejně snadno.
Zkusme si nyní naznačit, v čem mohou rozdíly mezi jednotlivými terminály spočívat.
Největší rozdíly mohou být již v samotné koncepci terminálu a "míře inteligence", kterou je vybaven. Z tohoto pohledu se terminály obvykle rozdělují do tří skupin, na tzv. znakové (někdy též: řádkové terminály, anglicky: scroll mode terminals), na stránkové (page mode terminals) a formulářové (form mode terminals).
Znakový terminál je nejjednodušším typem, a je charakteristický tím, že neumí pohybovat kurzorem nahoru a dolů po obrazovce. Jeho displej se chová obdobně jako tiskárna - každý znak je vytisknut (zobrazen) tam, kde se právě nachází kurzor, a ten je následně posunut doprava na následující pozici. Pokud by přitom přešel přes pravý okraj řádky, je přesunut na začátek řádky nové, a pokud by pro tuto novou řádku již nebylo na displeji místo, jsou všechny právě zobrazované řádky odrolovány (anglicky: scrolled) směrem nahoru. Znakový terminál tedy neumožňuje "vrátit" se zpět (posunout kurzor) na dříve zobrazenou řádku (ale obvykle umožňuje pohybovat kurzorem zpět v rámci dané řádky). Pro ovládání znakového terminálu jsou pak zapotřebí příkazy typu: zobraz znak (na pozici kurzoru, s následným posunutím kurzoru na další pozici), přejdi na novou řádku, případně: vrať kurzor o jednu pozici zpět (v rámci dané řádky), vymaž znaky od kurzoru do konce řádky apod.
Při určitém zjednodušení si lze představit, že znakový terminál má jen jednu jedinou řádku (zatímco na displeji je zobrazováno ještě několik "předchozích" řádek, které ale již nejsou jinak přístupné).
Naproti tomu u stránkového (page mode) terminálu si můžeme představit, že jeho displej reprezentuje dvojrozměrné pole o n řádcích a m sloupcích, a kurzor lze nastavit na libovolnou pozici v tomto dvojrozměrném poli.
Díky této možnost je pak možné pohybovat kurzorem všemi směry, a na rozdíl od znakového terminálu je již možné implementovat na stránkovém terminálu například celoobrazovkové (full-screen) editory a další aplikace, které pohyb kurzoru všemi směry vyžadují. Z pohledu ovládání pak přibývají u stránkového terminálu nezbytné příkazy pro nastavování pozice kurzoru.
Formulářový terminál je ještě "chytřejším" typem terminálu. U něj si můžeme představit, že místo jednoho dvojrozměrného pole se jeho displej dokáže chovat jako několik (menších) jedno a dvojrozměrných polí. Ty pak můžeme interpretovat jako navzájem disjunktní "políčka" formuláře, se kterými se pracuje nezávisle na sobě (tj. která se samostatně vyplňují). Formulářový terminál pak obvykle umožňuje definovat strukturu "formuláře": stanovit počet, velikost, dimenzi a druh jednotlivých polí, způsob jejich zobrazení na displeji (včetně doplnění vysvětlujícím textem) atd.
I v rámci jedné a téže kategorie (např. znakových terminálů) se však jednotlivé druhy terminálů mohou výrazně lišit, a to ve dvou základních směrech:
V poslední době, zvláště pak s masovým nástupem počítačových sítí, se však začíná používat i jiné řešení: terminálová emulace (terminal emulation). Vše je postaveno na myšlence, že místo jednoúčelového zařízení s pevně danou funkcí se použije zařízení univerzální, které se pouze bude chovat stejně jako jednoúčelový terminál (bude jej tzv. emulovat, odsud: emulace). Vhodným kandidátem na tuto funkci je osobní počítač, který není obtížné naprogramovat tak, aby věrně napodoboval chování v podstatě jakéhokoli terminálu.
Výhodou terminálové emulace není jen její flexibilita - tedy schopnost přizpůsobit se podle potřeby vlastnostem více různých terminálů. Další výhodou je i to, příslušné univerzální zařízení (osobní počítač) může vystupovat v roli emulovaného terminálu jen v době, kdy si to jeho uživatel přeje, zatímco v ostatní době může sloužit jiným účelům. Aplikační programy, zajišťující emulaci terminálů, také obvykle umožňují otevírat více terminálových relací současně - jak jsme si ostatně již naznačovali v minulém dílu.
Zajímavé jsou pak i ekonomické ukazatele. Díky dnešní masové výrobě osobních počítačů se jejich cena stala srovnatelnou s cenou jednoúčelových terminálů.
Jednotlivé aplikace, které v rámci terminálových relací pracují s terminály, je však nutně musí umět ovládat. Musí vědět, co všechno terminál "umí", jaké znaky je schopen přijímat a zobrazovat, s jakými řídícími znaky pracuje, jak mají být zakončovány jednotlivé řádky, jaké používá řídící sekvence apod.
Každá aplikace si samozřejmě může předepsat, že chce pracovat jen s takovým a takovým typem terminálu, a tomu se plně přizpůsobit. To je ale příliš omezující vůči uživatelům, kteří disponují jinými terminály, zvláště pak v prostředí sítí. Stejně tak není dost dobře možné, aby se jednotlivé úlohy přizpůsobovaly určitému konkrétnímu repertoáru terminálů - vždy se totiž najde někdo, kdo bude chtít používat ještě jiný terminál, a navíc: nové druhy terminálů, s novými schopnostmi, dokonalejšími vlastnostmi a hlavně odlišnými způsoby ovládání neustále vznikají.
V podstatě jedinou schůdnou alternativou je vytvořit jednotný mezistupeň, a přizpůsobení typu "každý s každým" nahradit mnohem schůdnější variantou, při které se všechny aplikace přizpůsobují jednotnému mezistupni, kterému se na druhé straně přizpůsobují i všechny konkrétní terminály. Jak ale správně interpretovat zmíněný mezistupeň?
Z pohledu aplikací jde vlastně o terminál, který se vždy "tváří" stejně - tedy který má vždy stejné schopnosti, stejné vlastnosti, a stejný způsob ovládání. Ve skutečnosti však nejde o fyzické zařízení, ale například jen o určité konvence (formát dat a příkazů), či o objekt programové povahy (např. nějakou datovou strukturu), který skutečný terminál pouze zastupuje. Proto se také společnému mezistupni říká virtuální terminál (virtual terminal).
V prostředí počítačových sítí a vzdálených terminálových relací pak není problémem, aby se společnému mezistupni (virtuálnímu terminálu) přizpůsobily i jednotlivé konkrétní terminály. Vzpomeňme si na minulý díl, kdy jsme si ukazovali, jak všechny vstupy a výstupy z konkrétního terminálu na daném počítači zpracovává "úloha telnet", a dále je posílá po sítí do vzdáleného počítače. Není jistě těžké vytvořit tuto "úlohu telnet" tak, aby zajišťovala potřebné přizpůsobení konkrétního terminálu terminálu virtuálnímu.
Nejjednodušším modelem virtuálního terminálu je tzv. parametrický model. Zde si můžeme představit, že virtuální terminál je reprezentován tabulkou, která má pevně daný počet položek i pevně daný význam těchto položek. Tyto položky přitom mohou obsahovat například údaj o tom, kolik znakových řádek má displej terminálu, kolik znakových pozic je na jedné řádce, zda terminál očekává zakončení každé řádky dvojicí CR a LF apod. Dále zde mohou být příkazy (escape sekvence)pro ovládání nejrůznější efektů a možností (např. podtrhování, tučné písmo apod.), nastavování kurzoru (u stránkových terminálů) atd.
Vlastní aplikace se pak přizpůsobuje společnému mezistupni (virtuálnímu terminálu) tím, že skutečný terminál ovládá pouze "prostřednictvím" této tabulky. Jestliže například potřebuje nastavit kurzor na určitou pozici, najde si na příslušném místě v tabulce konkrétní řídící příkaz, a ten pak zadá terminálu. Konkrétní terminál se zase přizpůsobuje virtuálnímu terminálu tak, že jeho předem definované položky naplní konkrétnímu údaji, které přesně definují jeho vlastnosti a způsob ovládání.
Právě naznačený mechanismus se ve své nejobecnější podobě prosadil v BSD Unixu. Zde je výše naznačených tabulek více - po jedné pro každý druh terminálu, který daný operační systém zná - a jsou všechny sdruženy do jedné databáze, označované jako termcap (což je zkratka od: terminal capabilities). Aplikace, která chce korektním způsobem pracovat s terminálem, si nejprve musí zjistit, o jaký konkrétní druh terminálu se jedná. Pak si z databáze termcap "přečte" odpovídající tabulku, a příslušný terminál ovládá prostřednictvím příkazů (escape sekvencí), které v této tabulce najde. Správce systému přitom může databázi termcap doplňovat, a tím rozšiřovat repertoár terminálů, se kterými budou aplikace schopny plnohodnotně pracovat.
Za zvláštní případ parametrického modelu můžeme považovat takovou situaci, kdy bude pevně dána nejen struktura položek tabulky a jejich význam, ale bude pevně dán také jejich obsah. Tato představa odpovídá tomu, že konkrétní způsob ovládání virtuálního terminálu je fixován, po síti jsou přenášeny vždy stejné řídící příkazy, a potřebné přizpůsobení je zajišťováno až v místě, kde je připojen skutečný terminál ("úlohou telnet" z minulého dílu). Právě tato varianta je použita v síťovém modelu TCP/IP.
Zmíněná datová struktura přitom zdaleka nemusí být jen dvojrozměrné pole, reprezentující znakové pozice skutečného displeje. Například u formulářového terminálu to mohou být jednotlivá dílčí pole, představující části formuláře, a jiná část datové struktury zase může definovat, jak mají být jednotlivá pole "poskládána" na skutečném displeji.
Tímto mnohem obecnějším způsobem jsou pak řešeny virtuální terminály v rámci referenčního modelu ISO/OSI.