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
Pozn.: články boli naskenované ako text a preto obsahujú aj zopár chýb. Taktiež neručíme za zdrojové kódy (Asm, C, Arexx, AmigaGuide, Html) a odkazy na web. Dúfame, že napriek tomu vám táto databáza dobre poslúži.
Žiadna časť nesmie byť reprodukovaná alebo inak šírená bez písomného povolenia vydavatela © ATLANTIDA Publishing
none
|