Finty v ShelluPetr Mareš
V minulém seriálu o AmigaDOSu jste se dozvěděli něco o standardních příkazech a
o tom, jak psát scripty. Tento článek by vám měl tuto práci zpříjemnit a dát vám
rady, jak si můžete nakonfigurovat systém dle libostí. Začneme třeba jednoduchým scriptem, který nahradí nepříjemné cestování mezi
adresáři pomocí DIR a CD něčím pohodlnějším: CD RequestFile DRAWERSONLY TITLE „Change Directory“ Tento jednořádkový script si uložte do adresáře S: třeba jako „cdr“ a
nastavte mu pomocí příkazu „Protect S:cdr s ADD“ flag S, aby systém věděl, že ho
má spouštět užitím příkazu EXECUTE. Nyní stačí napsat „cdr“ a v ASL requesteru
si vybrat nový aktuální adresář (dokonce funguje i vhození ikony adresáře do ASL
okna).
Podobná finta s FileRequesterem se nám může hodit i jindy. Pokud například
kopírujeme soubory s dlouhými názvy, je snadnější napsat Copy RequestFile DF0: a soubor k zápisu na disketu si vybrat myší. Ne každému se ale chce vždy
vypisovat celé „RequestFile“ a proto je lepší přidat do souboru S:Shell-Startup
řádek Alias rf RequestFile který způsobí, že místo „RequestFile“ stačí napsat jenom „rf“. Osobně bych
doporučoval si v S:Shell-Startup změnit standardní PROMPT na Prompt „[%R] %S> “ což způsobí, že prompt bude vypisovat v hranatých závorkách návratový kód
posledního spouštěného programu. Tím bych rád příkazový řádek opustil a věnoval
bych se spíše scriptům a jmenovitě fintám, které z dávkových souborů dělají
nástroj nadmíru užitečný. Některé z uvedených triků budou trochu nečisté,
nicméně perfektně funkční. Můžeme začít třeba čtením řetězce z klávesnice.
AmigaDOS na první pohled nemá příkaz pro čtení ze vstupu, ale my si už nějak
vypomůžeme. Uvedu příklad, který načte z klávesnice jméno souboru a ten poté
bude hledat v adresáři SYS: (disk, ze kterého se bootovalo): Echo „Zadej soubor: “ NOLINE
Set >NIL: Vstup ?
Echo „Prohledávám SYS:“
Search SYS: „$Vstup“ FILE ALL
IF WARN
Echo „Nic jsem nenašel.“
EndIF Za pozornost stojí hlavně druhý řádek. Příkazu „Set“ jsme zadali neúplné
argumenty a otazník. To znamená, že se nás příkaz zeptá na další argumenty a
teprve pak se provede. Template příkazu Set je „NAME, STRING/F“, přičemž jsme mu
zadali NAME, a tak se nás ptá na STRING. Ten pak zapíše do systémové proměnné
„Vstup“. Další příklad spočítá velikost zadaného adresáře: .key DIR
.bra {
.ket }
List „{DIR}“ ALL FILES TO T:q{$$} LFORMAT „Set SUM *Eval *$SUM+%l*“
Set SUM 0
Resident C:Eval PURE
Execute T:q{$$}
Resident Eval REMOVE
Echo „Velikost adresare = $SUM“
UnsetENV T:q{$$} Klíčový je zde čtvrtý řádek. Příkaz List vypíše všechny sou bory ze zadaného
adresáře do souboru q{$$} ({$$} bude nahrazeno číslem procesu), a to ve formátu
„Set SUM Eval $SUM+%1`“ (aby shell nepovažoval dolar a zpětné apostrofy za
řídící znaky, musíme před ně napsat hvězdičku). Místo jména souboru bude List
vypisovat výše uvedený řetězec, ve kterém nahradí „%l“ délkou vypisovaného
souboru. Tento výstup předložíme příkazu EXECUTE, který bude na každém řádku
nastavovat proměnnou SUM na hodnotu SUM + délka souboru. Poslední řádek také
stojí za povšimnutí. Ať se vám to zdá jakkoliv drastické, výsledkem tohoto
příkazu je smazání souboru T:q{$$). UnsetENV se ,obyčejně používá na odstranění
globální systémové proměnné, která se ovšem nachází na logickém zařízení ENV:.
Stačí však zadat jméno proměnné jako absolutní cestu a místo proměnné v ENV: se
smaže kterýkoliv soubor na disku, třeba i prázdný adresář. Pokud bychom chtěli
jenom spočítat všechny soubory v adresáři, máme o něco jednodušší práci.
Při Listování (do souboru) budeme místo jména souboru vypisovat pouze prázdný
řádek a nakonec prohlásíme velikost výstupu příkazu List (což bude náš soubor se
samými prázdnými řádky) za počet souborů v adresáři (a ono tomu tak opravdu
bude):
.key DIR
.bra {
.ket }
List „{DIR}“ ALL FILES TO T:q{$$} LFORMAT „“
List T:q{$$} LFORMAT „Napočítal jsem %l souborů.“
UnsetENV T:q{$$} Další méně známou vlastností mechanismu čtení argumentů je řetězec „*n“,
který je automaticky nahrazen znakem nového řádku. To se nám výborně hodí právě
do parametru LFORMAT, protože pak budeme schopni provést s jedním souborem více
akcí najednou. Script který uvedu, z smaže aktuálního adresáře všechny soubory,
které mají nulovou délku. List „“ TO T:qqq LFORMAT „IF %l eq empty*nDelete*“%s%s*“*nEndIF“
Execute T:qqq
UnsetENV T:qqq Atraktivní způsob využití scriptů je příprava dat pro různé programy. Když
někdy pracuji s grafikou a potřebuji si prohlédnout více fontů, použiji
skriptík, který mi vytvoří amigaguide soubor pro MultiView, ve kterém si
prohlédnu všechny fonty začínající například písmenem „T“ (při prohlížení příliš
velkého množství fontů by mohly nastat všeliké problémy). Echo „@Database
Fonts*n“ TO RAM:Fonts.guide
List FONTS:T#?.font >> RAM:Fonts.guide LFORMAT „@{*“ %m *“ Link %m }“
Echo „*n@EndNode“ >> RAM:Fonts.guide
List FONTS:T#?.font >> RAM:Fonts.guide LFORMAT „@node %m %n*n@font %n
64*n%m*n@EndNode*n“
MultiView RAM:Fonts.guide
UnsetENV RAM:Fonts.guide Jak jde vidět, s příkazem List se dá zvládnout skoro vše. V některých
případech může tvořit samotný parametr LFORMAT dokonce více než polovinu délky
scriptu! Pár fint na závěr
Buffery pro partitiony se dají nastavit v HDToolBoxu a při každém
nabootování se automaticky použije pro partition tolik bufferů, kolik mu
nastavíte (implicitně 30).
Číselné argumenty v shellu můžeme zadávat v desítkové, šestnáctkové, nebo v
osmičkové soustavě, záleží na tom, jestli číslo začíná řetězcem „0x“
(hexadecimální), nulou „0“ (oktalová), nebo jestli je zapsáno obyčejně
(dekadická soustava).
Clipboard bývá často zapsán v souboru CLIPS:0. Pokud dáte v nějakém programu
funkci :Copy to Clipboard“, snad to tam najdete zapsané jako IFF soubor. Pokud
naopak zapíšete do CLIPS:0 správná data, můžete to využít pro funkci „Paste“.
Nedoporučuji se na to příliš spoléhat.
Zařízení DF0: se dá odmontovat pomocí „Assign DF0: DISMOUNT“ a následně
Assignovat kam chcete. Hodí se to například u hry K204, která se ptá systému na
DF0: kvůli ukládání pozic.
Pokud si ENV: Assignujete někam na disk, nemusíte ho ve Startup-sequenci plnit z
ENVARC:, čímž se bootování výrazně urychlí. Zařízení T: mějte raději v RAM:, mít
ho na disku by zpomalovalo a disk by se vám často mohl validovat.
Pokud chcete ve scriptu používat řetězec {$$}, musíte na začátku uvést „.key“,
bez něj to nebude fungovat. Pokud ale nechcete, aby script měl nějaké parametry,
můžete použít se stejným efektem řetězec ($process).
Po provedení příkazu EXECUTE se zapomenou provedené příkazy „LAB“. Znamená to,
že těsně po EXECUTE nebude fungovat :SKIP Návěští BACK“. Neznám způsob, kterým
by se to dalo jednoduše obejít.
Nejrychlejší způsob, jak dostat na disketu spoustu souborů v mnoha adresářích je
tento: Namontujte si RAD: o stejném počtu stop, bloků a hlav jako má standardní
zařízení DF0: (takový vytvoříte, když ve standardním mountlistu pro RAD
nastavíte HighCyl=79). Do tohoto :RAD“ nakopírujte vše, co potřebujete dostat na
disketu a proveďte příkaz „DiskCopy RAD: DF0:“.Pokud jste v adresáři DEVS:
soubor mountlist nenašli, aplikujte uvedený postup na soubor
SYS:Storage/DOSDrivers/RAD. V tomto případě se hodnota „HighCyl“ nastavuje v
ToolTypech příslušné ikony.
Zařízení RAD: můžete mít více. Například mountlist RAD1: vyrobíte z mountlistu
pro RAD: tak, že v něm nastavíte „Unit = 1“ a změníte jméno zařízení na RAD1:.
Často používané programy můžete spouštět zmáčknutím libovolné klávesové
kombinace. Umí to zařídit systémová komodita „FKey“. Rozběhnutí DirWorku z HD je
potom záležitostí necelé vteřiny i na nerozšířené A1200; kam se hrabe Pentium s
tlačítkem „Start“ ve Windows!
Když si necháte vypsat informace o ikoně nějakého disku (Pravá Amiga-1) a nebude
to právě Ram Disk, pravděpodobně uvidíte položku Default Tool a v ní napsané
„SYS:System/DiskCopy“. Toto je program, který se má spustit, pokud ikonku hodíte
na ikonu jiného disku. Pokud si tam napíšete například
„SYS:Games/Sokoban/ASokoban“, uložíte to a hodíte tuto ikonu na ikonu jiného
disku, můžete si poté zahrát Sokobana, nebo cokoliv, co se vám zamane (a budete
tam mít zapsané).
Nakonec si můžete vyzkoušet jeden žert. Vložte do disketové mechaniky disketu
naformátovanou pod jménem CON a spusťte příkaz NewShell. 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
|