AMIGA REVIEW online
  Uvodná stránka     Software     Hry     Obaly     Download     Kniha návštev     Amiga na PC     Amiga Forever  

AmigaDOS II.

Jan Hlavatý

SHELL A OSTATNÍ OKNA POD AMIGADOSEM

Milí systémoví zvědavci, mám tu pro vás druhou část článku věnujícího se AmigaDOSu. Zatímco v minulé části jsme se seznámili z úplnými základy (takže ji mnoho z vás jistě se znechucením přeskočilo), v tomto díle se podíváme na okna pod AmigaDOSem, zejména ta shellu. Myslíte že na tom celkem nic není? Taky sem myslel, ale poté co mi to zabralo celý tento díl článku, jsem změnil názor... Ale co, já myslím, že když to pořádně vysvětlím, budete jen rádi - lepší než luštit nějaké kryprogramy na půl stránky...
Na konci minulé části jsem vám prozradil, kterak sobě okno shellu otevřití. Abyste využili plně jeho schopností, musíte vědět, co všechno se s takovým oknem dá dělat. Věz tedy, milý čtenáři, že o okno shellu se, stejně jako všechna ostatní okna pod AmigaDOSem, stará logické zařízení jménem „CON:“. Toto zařízení umožňuje AmigaDOSu otevřít si okno, do kterého může vypisovat text a ze kterého může číst co uživatel napsal z klávesnice. AmigaDOSu se toto okno jeví jako soubor - při zápisu do souboru se zapisovaná data vypisují do okna, při čtení z tohoto souboru jsou načtena data která uživatel napsal. Jedná se o tzv. „proudový“ (stream) typ vstupně-výstupního souboru - tzn. že tento typ souboru nemá ve skutečnosti délku a že se s ním nedá dělat všechno co se dá dělat se skutečnými soubory na filesystému (např. na disketě) - nelze kupříkladu nastavovat pozici odkud se má ze souboru číst. Data se zapisují a čtou sekvenčně, jednou načtená data už nelze načíst znovu, stejně jako jednou zapsaná data už nelze vzít zpátky. Stejným typem (výstupního) souboru je například tiskárna - „PRT:“.

Otvíráme okno
Když si chce někdo otevřít okno zařízení „CON:“, prostě uvede jméno tohoto zařízení jako jméno vstupního a/nebo výstupního souboru. Aby bylo možné nějakým způsobem kontrolovat vzhled okna, lze zařízení „CON:“ při otevírání okna předat parametry ovlivňující vzhled a funkci okna. Protože to všechno dohromady musí odpovídat konvenci jména souboru, jsou parametry oddělovány lomítky „/“ místo mezerami. Prvních pět parametrů popisuje pozici, velikost a titul okna. Každý z těchto parametrů lze vynechat. Pokud vynecháte rozměry nebo pozici okna, zařízení si tyto údaje vymyslí podle sebe a okno je pak poměrně malé. Zařízení „CON:“ má své vlastní představy o minimální velikostí okna, takže vás nenechá udělat je příliš malé. Teď vám prozradím jednu fintu - pokud za hodnotu některého z rozměrů okna dosadíte hodnotu -1, bude automaticky dosazen maximální možný rozměr (tedy šířka nebo výška celé obrazovky). V případě že by se vámi specifikované okno nevešlo na obrazovku, bude nejprve upravena jeho pozice na screenu, a pokud ani to nestačí, bude upravena i jeho velikost tak, aby se na screen vešlo.
Kromě rozměrů a názvu okna lze modifikovat i jiné jeho vlastnosti. To se provádí přidáním speciálních klíčových slov jako další parametry za jméno okna. Zde je seznam těchto klíčových slov:
AUTO - okno se otevře až když je do něj něco napsáno, nebo když se z něj má číst vstup od uživatele. Pokud takové okno zavřete (kliknutím na Close-gadget okna nebo stiskem „ctrl “, zase se otevře jakmile nastane některá z výše uvedených skutečností. To se hodí například když provádíte nějaké příkazy na pozadí, které nic nevypisují kromě chybových hlášek.
CLOSE - zařídí, aby otevírané okno mělo Close gadget.
NOCLOSE - okno nemá mít Close gadget. Toto nemusíte specifikovat, protože to je normální stav.
SMART - nastaví ošklivější způsob obnovování obsahu okna. Když zvětšíte okno, vše zůstane při starém. O obnovování obsahu okna se tu stará intuition na úrovni grafiky, takže přirozeně neví, co by s tím měl dělat.
SIMPLE - při změně velikosti okna je celý obsah vykreslen znovu s použitím nových rozměrů okna. Tím se může zobrazit text který předtím nebyl viditelný, protože odscrolloval. Obnovování okna tady obstarává „CON:“ samo. Toto je implicitní stav a není tedy potřeba tento parametr zadávat.
INACTIVE - když se okno otevře, nestane se aktivním a nemusíte tedy klikat na původní okno když v něm chcete pokračovat v psaní.
BACKDROP - okno se otevře na pozadí a tam také zůstane. Nelze měnit jeho velikost, ani ho posouvat. Ve spojení s „NOBORDER“ si můžete udělat okno shellu přes celý screen...
NOBORDER - Vypne zobrazování okrajů okna. Bohužel se nezbavíte pruhu na horním okraji - to by se muselo jméno okna zadat jako NULL pointer a ne jako prázdný řetězec, a to není takto možné. Ve spojení s backdrop můžete tento pruh schovat pod lištu screenu, protože pak se okno posouvá pod ni.
NOSIZE - vypne možnost měnit velikost okna, tedy gadgety pro zoom a změnu velikostí. Hodí se v případě „NOBORDER“, protože jinak okno vypadá hrozně bez okrajů ale se size gadgety.
NODRAG - zakáže posouvání okna taháním za jeho lištu.
NODEPTH - odstraní gadget pro posouvání okna do popředí/pozadí, čímž tuto činnost znemožní.
SCREEN – specifiku je jméno public screenu (veřejné obrazovky), na kterém se má tuto okno otevřít. Jméno následuje bezprostředně za tímto klíčovým slovem, bez mezery nebo odděleno mezerou a je citlivé na velikost písmen. Pokud specifikujete celé toto jméno souboru jako argument na příkazové řádce, musíte ho kvůli té mezeře uzavřít do uvozovek. Pokud ho zapisujete například do nastavení CygnusEd v menu „Special DOS/ARexx interface - send DOS/ARexx output to...“, tak ho naopak do uvozovek dát nesmíte - tady mezera nevadí, protože celek je chápán jako jedno jméno souboru. Pokud není daný screen k nalezení, okno „spadne zpátky“ na Workbench. Tento argument musí být uveden jako poslední, jinak je ignorován.
WAIT - způsobí, že po uzavření vstupně-výstupního souboru okna se toto okno nezavře, dokud to neudělá uživatel. To umožní uživateli přečíst si co je v okně napsáno než se okno uzavře. V opačném případě se okno uzavře ihned. Tento čekací mód je použit například když spouštíte příkazy AmigaDOSu pomocí menu workbenche „Workbench - Execute command....“.
Pokud používáte některou náhradu CON:, jako například KingCon, v jeho dokumentaci mohou být uvedena další klíčová slova která umí.

Editační možnosti okna
Takže to by bylo otevírání okna „CON:“. Teď se ještě zmíním o editačních schopnostech tohoto okna. Software obsluhující editaci umí v podstatě dva módy: „raw“, kdy každá klávesa kterou uživatel zmáčkne je okamžitě posílána programu čtoucímu z okna, a „cooked“, který umožňuje editaci řádku textu ještě předtím než je odeslán programu. Mezi těmito dvěma módy může program čtoucí z okna přepínat, ale moc často se to nedělá. Jedním z programů který to umí je „lha“. Většinou se setkáte s „cooked“ módem, což znamená že program text který napíšete zaregistruje až když zmáčknete klávesu Enter. Než to uděláte, máte k dispozici jisté editační možnosti, které nyní popíšu:
Při psaní textu v okně se (jaké překvapení) můžete po testu pohybovat pomocí kurzorových kláves <- a ->. Kombinace kláves shift + <- přesune kurzor (že nevíte co je to kurzor!? Néééé! No dobře. Dobře. Sem klidnej. T oje takovej ten majinkej „vobdélníček“ co ukazuje kam zrovna píšete...stačí!? Grrrr) na začátek řádku. Pomocí shift + -> se (neuvěřitelné) přesunete na konec vámi napsaného textu. Pomocí backspace a Del můžete mazat znaky vlevo od nebo pod kurzorem. Zatím nuda.
Pomocí ctrl + J odešlete napsaný řádek, ale narozdíl od klávesy Enter tento není ještě poslán programu, nýbrž je hromaděn a bude poslán spolu s ostatními vámi napsanými řádky poté co stisknete Enter za posledním řádkem. Ctrl + W smaže poslední slovo vlevo od kurzoru - tj. všechny znaky dokud nenarazí na mezeru. Ctrl + X smaže celý řádek. Ctrl + K smaže všechny znaky od kurzoru počínaje až do konce řádku. Takto smazané znaky lze vrátit zpět na místo kurzoru pomocí Ctrl +Y (i poté co jste něco změnili). Ctrl + U smaže všechny znaky od začátku řádku až ke kurzoru.
Další zajímavou editační schopností je historie. CON: si pamatuje všechny řádky které jste předtím už napsali, takže když chcete některý z nich zopakovat, můžete si ho najít pomocí kurzorových kláves nahoru a dolů. Je tu i lepší způsob - napíšete několik znaků kterými tento řádek začínal, a stisknete shift+nahoru. Vyhledá se takový řádek, který začíná napsanými písmeny. Pokud takový není, obrazovka blikne. Pokud jich je víc, můžete se jimi prohrabovat opakovaným stiskem shift+nahoru Stiskem shift+dolů získáte opět prázdný řádek.
Pomocí Ctrl + S můžete dočasně zastavit výpis do okna. Ctrl + Q takto zastavený výpis opět spustí. Druhou možností je napsat do okna jakýkoliv znak - třeba mezeru. Výpis bude pozastaven abyste mohli napsat řádek. Pokud tento znak zase smažete pomocí backspace, výpis pokračuje.
Speciální význam mají klávesy Ctrl + C, Ctrl + D, Ctrl + E a Ctrl + F. Technicky vzato posílají signály procesu programu spuštěného v tomto okně. Z hlediska uživatele Ctrl + C způsobí přerušení probíhajícího programu (pokud toho je program schopen - zdaleka ne všechno lze přerušit), Ctrl + U přeruší provádění probíhajícího skriptu (stiskem Ctrl + C by se přerušil pouze právě probíhající příkaz, ale skript by pokračoval dál)
Další speciální kombinací kláves je Ctrl + . Znamená „konec souboru“. Pomocí tohoto znaku je možné například zavřít okno shellu (stejně jako pomocí „endshell“) nebo sdělit programu čtoucímu z vašeho okna konec vkládaných dat.
Pokud máte ve startup-sequenci spuštěný prográmek „ConClip“, jako že by standardně měl být, můžete v okně CON: pomocí myši označit blok textu a ten pomocí RAmiga + C zkopírovat do clipboardu. Obdobně pomocí RAmiga + V vložíte obsah clipboardu do příkazového řádku.

Formát výstupu
Tolik k editaci. Pokud jde o výpis dat do okna „CON:“, toto zařízení podporuje řídící kódy podle normy ANSI-X3.64. Tyto kódy začínají speciálním znakem Esc (ascii kód 27). V okně obvykle tento znak napsat lze (stiskem klávesy Esc), zobrazí se jako inverzní [. Pokud chcete tento znak napsat na příkazovém řádku pomocí viditelných znaků, můžete použít kombinaci „*E“. podobně jako v případě znaku pro nový řádek „*N“. V následujícím seznamu uvedené řídící sekvence začínají vždy znakem Esc a končí písmenem které identifikuje požadovanou funkci. Kromě kódu pro reset parametrů „<Esc>c“ začínají všechny řídící sekvence dvojicí znaků „<Esc>[“.
<Esc>c - reset parametrů, vymaže obsah okna
<Esc>[0m - nastaví normální vzhled písma - deaktivuje VŠECHNO
<Esc>[1m - zapne „bold“ styl písma
<Esc>[2m - nastaví alternativní barvu textu
<Esc>[3m - zapne „italic“ styl písma
<Esc>[4m - zapne podtržení
<Esc>[7m - zapne inverzní text
<Esc>[8 - text v barvě pozadí (neviditelný)
<Esc>[22m - vypne bold nebo alternativní barvu
<Esc>[23m - deaktivuje kurzívu
<Esc>[24m - deaktivuje podtržení
<Esc>[27m - deaktivuje inverzní text
<Esc>[28m - normální barva textu (viditelný)
<Esc>[3#m - kde #je číslice 0-7 nastaví barvu textu
<Esc>[39m - nastaví barvu textu na normální (1)
<Esc>[4#m - kde #je 0-7 nastaví barvu pozadí
<Esc>[49m - nastaví normální barvu pozadí (0)
<Esc>[#u - nastaví maximální délku řádku v okně na # znaků (#=číslo)
<Esc>[#t - nastaví maximální počet řádků v okně na #. Okno nebude zvětšeno pokud se tolik řádků do něj nevejde.
<Esc>[#x - nastaví počátek zobrazování v okně na # pixelů od levého okraje.
<Esc>[#y - nastaví počátek zobrazování v okně na # pixelů od horního okraje.

Jak na to
Teď už jen maličkost: Jak se to vlastně přesně dělá s těmi okny shellu? Jak jsem už minule řekl, okno Shellu se dá vytvořit buď pomocí příkazu „newshell“ nebo z Workbenche pomocí ikony „Shell“ v SYS:System. Dnes vám prozradím jak novému oknu shellu vnutit vzhled, který chcete a který teď už umíte popsat. Nuže - v případě příkazu newshell lze zadat dva argumenty: Prvním je argument WINDOW – to je to co hledáme. Sem se vloží jméno souboru popisující okno. Druhým argumentem je FROM - ten udává jméno souboru scriptu který se má okamžitě po spuštění okna aktivovat, protože scripty ještě neumíme, zůstaneme zatím u WINDOW. Zkuste si například:
newshell window=„con://-1/130/Můj Shell/close“.
Tohle vytvoří okno shellu začínající na 0,0 (implicitní hodnota, protože souřadnice okna jsem jak vidíte vynechal), široké jako celý screen a vysoké 130 pixelů. Jmenuje se „Můj Shell“ a má Close gadget a všechny ostatní náležitosti, které má takové slušně vychované okno mít.
Pokud jde o ikonu „Shell“, je to ikona typu Projekt, můžete si ji tedy klidně zkopírovat někam jinam nebo pod jiným jménem - kopíruje se pouze ikona, samotný program zůstane na místě (ale manuály k Workbenchi MÁTE!!!).
Popis okna je uveden v tooltypes ikony - zvolte ikonu a dejte na ni „Information“. V tooltype WINDOW= je uvedenu opět specifikace okna.
Pokud hodláte Shell používat často, je výhodné si buďto ikonu shellu vytáhnout na pracovní plochu Workbenche (kde ale někteří lidé mají neuvěřitelný binec), nebo pomocí nějaké commodity přiřadit spouštění okna některé kombinaci kláves. K tomu se hodí například komodita „FKey“. dodávaná standardně se systémem - je na systémovém disku v adresáři „Tools/Commodities“. Ještě lepší je podle mého komodita „Tools Daemon“. Ta umožňuje vytvořit si menu která se připojí k menu Workbenche a z nich spouštět všechny programy. Místo vytahování ikon na plochu Workbenche (která není zase tak velká a člověk se pak bojí někam kliknout) si pak tyto ikony hodíte do menu a je to. Doslova hodíte - vezmete ikonu a pustíte ji do okna preferencí ToolsDaemona. Navíc každé položce menu může být přiřazena jakákoliv kombinace kláves - jak klasických „menu“ - amiga + znak, tak i hotkey fungující kdekoliv.. Já osobně mám spuštění okna shellu na „alt f1“ a většina lidí které jsem navštívil s údivem zjišťuje že oni taky :-)

Vstupy a výstupy
Poslední věc; o které se dnes zmíním jsou standardní vstup a výstup a jejich přesměrovávání. Každý příkaz AmigaDOSu který spustíte dostane přiřazen jeden vstupní a jeden výstupní soubor, pomocí kterých může komunikovat s okolím. Ze vstupního souboru pouze čte, do výstupního souboru jen zapisuje.
Normálně to obojí bývá okno shellu ze kterého byl program spuštěn. Na toto okno se lze odkázat jménem zařízení „CONSOLE:“. Na OS 1.3 se pro to používal znak „*“ - to je zachováno z důvodu kompatibility, ale nemělo by se to používat. No a toto přiřazení vstupního a výstupního souboru je možné změnit. Pokud chceme výstup programu například zachytit do souboru místo vypsat do okna shellu, přesměrujeme výstup tohoto programu do souboru. Dělá se to takhle: na příkazový řádek za jméno spouštěného příkazu se vloží speciální argument, začínající znaky „<“ pro přesměrování vstupu. „>“ pro přesměrování výstupu, „>>“ pro přesměrování výstupu s přidáním na konec souboru nebo „<>“ pro přesměrování obojího do téhož souboru (např. okna dosu). Rozdíl mezi uvedením „<“ a „>“ se stejným jménem souboru a jedním „<>“ s tímtéž jménem je zřejmý - v prvním případě se otevřou okna dvě, jedno pro čtení klávesnice a druhé pro výstup textu, kdežto v druhém případě se otevře okno jen jedno a čtení i vypisování probíhá v něm.
Protože není možné přímo identifikovat už otevřené okno, musí se to v případě potřeby obejít nějakou fintou -jak si ukážeme až budeme zkoumat scripty. Mezi znaky „>“, „<“, „>>“ a „<>“ a jménem souboru může být mezera. Pokud je nutné jméno souboru dát do uvozovek, nezahrnujte do nich tyto znaky. Tyto argumenty program ve skutečnosti nedostane – jsou odfiltrovány DOSem, příslušné soubory otevřeny na nastaveny jako vstup/výstup. Teprve poté je program spuštěn.

Něco na vyzkoušení
Na závěr opět nějaká inspirace k experimentům. Abyste docenili význam funkce „wait“, zkuste následující:
dir >CON://///CLOSE
Tak co? Přečetli? Nééé? To se nedivím. Co tohle:
dir >CON:////CLOSE/WAIT
To už je lepčejší, né? Ted něco na Ctrl:
copy CONSOLE: „CON:0/l00/-1/100/Text sem!/AUTO/CLOSE/INACTIVE“
Tohle je tak trochu příklad na úplně všechno: Po spuštění tohoto příkazu se zdánlivě nic neděje. Zkuste napsat „Ahoj“ a stiskněte Enter. BAF! Objeví se okno, které bylo díky funkci „AUTO“ schované, dokud do něj nebyl vypsán text. Když ho teď zavřete, zase se objeví když napíšete nějaký text do vašeho původního okna (shellu, nebo „Output window“ v případě spuštění pomocí „Execute command...“ z Workbenche.). Za to může AUTO. Navíc si všimněte, že zůstává aktivní vaše původní okno, takže můžete zvesela psát. Za to může pro změnu INACTIVE. Vidíte ho tam, myšku? Teď si zkuste pro změnu nějaké ANSI Escape-sekvence. Ve vašem původním okně můžete psát escape-sekvence, v tom druhém sledujte co dělají. Jekněte na seznam výše a nezapomeňte že „<Esc>“ není pět znaků, ale jeden který vznikne stiskem klávesy Esc. POZOR! „*E“ funguje pouze na příkazovém řádku! To kam teď píšete není příkazový řádek, tak můžete mačkat rovnou Esc... Nakonec, vše ukončíte jedním stiskem „Ctrl “. Co ten příkaz vlastně dělal? Kopíroval pomocí příkazu COPY ze vstupního souboru CONSOLE: (který označuje okno shellu ze kterého je příkaz spuštěn - protože z CONSOLE: čteme, tedy text napsaný uživatelem do tohoto okna) do výstupního souboru zařízení CON: - které si pro tyto účely otevřelo okno které jsme mu popsali. Protože do tohoto souboru zapisujeme, vypisuje se to co zapisujeme do tohoto okna. Když pořadí argumentů prohodíte, bude to fungovat obráceně.
No to je už ale pro dnešek úplně všechno. Nashle příště!

Vytlačiť článok


© ATLANTIDA Publishing Všechna práva vyhrazena.
Žádna část nesmí být reprodukována nebo jinak šířena bez písemného svolení vydavatele.



Amiga na Vašem PC rychle, snadno a zdarma!


none

AMIGA REVIEW

57 ( 11-12 / 2000 )
56 ( 9-10 / 2000 )
55 ( 7-8 / 2000 )
54 ( 5-6 / 2000 )
53 ( 3-4 / 2000 )
52 ( 1-2 / 2000 )
 
51 ( 12 / 1999 )
50 ( 11 / 1999 )
49 ( 10 / 1999 )
48 ( 9 / 1999 )
46-47 ( 7-8 / 1999 )
45 ( 6 / 1999 )
44 ( 5 / 1999 )
43 ( 4 / 1999 )
42 ( 3 / 1999 )
41 ( 2 / 1999 )
40 ( 1 / 1999 )
 
39 ( 12 / 1998 )
38 ( 11 / 1998 )
37 ( 10 / 1998 )
36 ( 9 / 1998 )
35 ( x / 1998 )
34 ( x / 1998 )
33 ( 1-2 / 1998 )
 
32 ( 11-12 / 1997 )
31 ( 9-10 / 1997 )
30 ( 7-8 / 1997 )
29 ( 6 / 1997 )
28 ( 5 / 1997 )
27 ( 4 / 1997 )
26 ( 3 / 1997 )
25 ( 2 / 1997 )
24 ( 1 / 1997 )
 
23 ( 12 / 1996 )
22 ( 11 / 1996 )
21 ( 10 / 1996 )
20 ( 9 / 1996 )
18-19 ( 7-8 / 1996 )
17 ( 6 / 1996 )
16 ( 5 / 1996 )
15 ( 4 / 1996 )
14 ( 3 / 1996 )
13 ( 2 / 1996 )
12 ( 1 / 1996 )
 
11 ( 12 / 1995 )
10 ( 11 / 1995 )
9 ( 10 / 1995 )
8 ( 9 / 1995 )
7 ( 7 / 1995 )
6 ( 5 / 1995 )

ATLANTIDA NEWS

5 ( 3 / 1995 )
4 ( 1 / 1995 )
 
3 ( 11 / 1994 )
2 ( 9 / 1994 )
1 ( 7 / 1994 )
0 ( 5 / 1994 )