Zneužíváme MultiViewPetr Mareš
Asi málokoho hned napadne, jak se dá tento systémový program zneužít. Tím
nemyslím přehrávání a ukazování všelijakých obrázků, textů, nebo zvuků, to snad
umí každý. Ač se to může zdát nemožné, Multiview je celkem obstojný nástroj pro
vytváření GUI pro různé aplikace. Výborně se hodí pro scripty, shellovské
příkazy a programové nabídky. Jak je to možné? Pomocí AmigaGuide dokumentu.
Majitelé KS 2.x nemusí být nešťastní, mohou používat jejich AmigaGuide
prohlížeč, nicméně jsou ochuzeni o zábavu s datatypy. Abych vás hned ze začátku moc nepolekal, uvedu pro začátek nepříliš složitý
(a také nepříliš užitečný) dokument, který zjednoduší nastavování parametrů
obrazu a na kterém si vysvětlíme, jak se AmigaGuide může chovat jako normální
program. Ještě jedno upozornění: obsah složených závorek musí být na jednom
řádku, jinak by nám tlačítka nefungovala.
Tak teď ten příklad: @database ScreenPrefs
@node Main Obraz
@font topaz-k8.font 8
@{„ Gr.Mód „ system „RUN SYS:Prefs/ScreenMode“}
@{„ Paleta „ system „RUN SYS:Prefs/Palette“}
@{„ Pozadí „ system „RUN SYS:Prefs/WBPattern“}
@{„ Font „ system „RUN SYS:Prefs/Font“}
@{„ Oversc.“ system „RUN SYS:Prefs/Overscan“}
@endnode Tady toto nabušte do klávesnice a pusťte na to MultiView. Jak to funguje? Při
zmáčknutí tlačítka se spustí příslušný preferenční program ovládající tu či onu
vlastnost obrazu. Ti, kteří již někdy slyšeli o událostmi řízeném programování,
ví, o čem mluvím. K samotnému obsahu dokumentu řeknu jenom tolik, ze první dva
řádky jsou víceméně povinné a třetí řádek je tam kvůli správnému vypisování
češtiny, na to místo dosaďte jméno fontu, který pro češtinu běžně používáte. Na
čtvrtém až osmém řádku jsou zapsány tlačítka a jména programů s parametry, které
se spustí po zmáčknutí. Poslední řádek náš dokument ukončuje. Další podrobnosti
o tvorbě AmigaGuide dokumentů najdete v 22. čísle AMIGA Review. Takový program
by však neměl velký smysl, pokud by nám nenabídnut ještě něco navíc. Celkem se
hodí dodělat tlačítka pro spuštění promotéru nebo pro nastavení našich
oblíbených preferencí. Tlačítko @{„Velké fonty“ system „Copy SYS:Prefs/Presets/Big_font.prefs
ENV:sys/font.prefs“} je příkladem toho, jak se to dá udělat. Námětů k vylepšení lze najít spousty
a je možné, že by z toho mohl vzejít celkem zajímavý prográmek. Pokud si pomocí
utility FKey na nějakou klávesovou kombinaci přiřadíte spuštění MultiView S:Preference.guide SCREEN budete mít vždy po ruce vše, co k nastavování preferencí potřebujete.
Při psaní lepších dokumentů se ale neobejdeme bez volání shellovských scriptů a
bez znalosti ovládání MultiView přes ARexx. Spouštění scriptů není nijak
složité, jen v definici tlačítka napíšeme na místo spouštěného programu „Execute
JMÉNO SCRIPTU“. Abychom mohli používat ARexx, musíme toho udělat více. Musí
běžet ARexxovský server RexxMast a musíme vědět jméno portu našeho MultiView.
Pokud spouštíte RexxMast hned při bootování, tak vás první problém nesouží. Co
se týče jména portu, nejlepší bude, když MultiView hned při spouštění řekneme,
jak se má port jmenovat. To se dělá parametrem PORTNAME JménoPortu. Pokud toto
nezadáme, MultiView si zvolí jméno portu „MULTIVIEW.x“, kde x je obvykle
jednička. Pokud zadáte jméno portu pomocí parametru, může se vám stát, že port
tohoto jména již existuje a MultiView se bohužel nespustí. Nejlepší volba jména
portu je taková, abychom s nim neměli v ARexxu problémy, nedoporučuji tudíž
používat apostrofy a uvozovky. K dispozici jsou nám následující ARexxové příkazy:
OPEN NAME/K, CLIPBOARD/S, CLIPUNIT/K/N - slouží k (jaké překvapení) otevření
požadovaného souboru. Chceme-li tedy donutit již otevřené MultiView k tomu, aby
zapomnělo na to, co ukazovalo dosud a ukázalo nám soubor SPat v adresáři S:.
napíšeme
RX „Address PORTNAME OPEN NAME S : SPat “
Za „PORTNAME“ si dosaďte jméno portu toho MultiView, po kterém to chcete. Když
uvedete parametr CLIPBOARD, zobrazí se obsah clipboardu.
RELOAD - znova nahraje právě otevřený soubor
SAVEAS NAME/K, IFF/S - uloží data pod uvedeným názvem na disk. IFF způsobí, že
data budou ukládána ve formě IFF
PRINT - vytiskne objekt na tiskárnu
ABOUT - ukáže About okénko, stejné jako v menu „Project/About...“
QUIT - ukončí MultiView
MARK - Po tady tomto příkazu se spustí mód označování (nejspíše to funguje jen u
obrázků). Ekvivalentní je výběr „Mark“ z menu „Edit“.
COPY - zkopíruje označený blok do clipboardu.
CLEARSELECTED - odznačí vysvícení bloku
SCREEN TRUE/S, FALSE/S - Pokud uvedete parametr TRUE, MultiView použije vlastní
obrazovku, pokud FALSE, okénko se otevře na defaultním public screenu
PUBSCREEN NAME/A - způsobí, že se MultiView přesune na uvedenou erární obrazovku
SNAPSHOT - uloží současnou pozici okna do adresáře ENV:
GETCURRENTDIR - vrací v proměnné RESULT jméno adresáře, ve kterém se nachází
otevřený soubor. Nezapomeňte říct ARexxu, aby vracel výsledky, to se dělá ARexx
příkazem OPTIONS RESULTS
GETFILEINFO - vrátí jméno souboru
GETOBJECTINFO VAR/S, STEM/K - vrátí informace o objektu. Použijte VAR, aby
výsledek vrátil v proměnné RESULT
MINIMUMSIZE, NORMALSIZE, MAXIMUMSIZE - nastavují velikost okna na minimální,
normální a maximální
WINDOWTOFRONT, WINDOWTOBACK - slouží pro nastavování okna do popředí a do pozadí
ACTIVATE WINDOW - aktivuje oknu. Vhodně při použití příkazu MARK
SCREENTOFRONT, SCREENTOBACK - umístí obrazovku, na které leží MultiView, do
popředí, nebo do pozadí
BEEPSCREEN - blikne obrazovkou, popřípadě přehraje výstražný sampl, podle
nastavených sound preferenci To bychom měli příkazy, kterými se ovládá samotné MultiView. Pokud je
zobrazen AmigaGuide dokument, můžeme použít i ovládání samotného AmigaGuide.
Jméno jeho portu dostaneme zejména portu MultiView přidáním koncovky „.1“.
Příkazy, na které AmigaGuide reaguje jsou RETRACF, PREVIOUS a NEXT, jejichž
význam by měl být zřejmý.
Nyní už toho víme dost, abychom mohli naprogramovat něco rozumného. Co byste
říkali na jednoduchý konvertor obrázků? Nahrát obrázek v libovolném formátu
umíme (pokud na to máme datatypy). uložit ve formátu IFF rovněž. GUI máme, co
více si přát? Tak se podívejme na tělo programu: @database Konvertor
@font topaz-k8.font 9
@help MujHelp
@node Main „Konvertor obrázků“ Konvertor obrázků
@{„ Načíst „ system „Execute S:Conv/Load“}
@{„ Zapsat „ system „Execute S:Conv/Save“}
@endnode
@node MujHelp „Nápověda“
Tlačítkem „Načíst“ si vyberte soubor, který chcete převést do formátu IFF a
zmáčkněte tlačítko „Zapsat“. @endnode Narozdíl od našeho scriptu pro preference je tu navíc nápověda pro uživatele
umístěná místo standardního HELPu. Důležité je ovšem volání externích
shellovských scriptů „Load“ a „Save“. Tyto scripty musí být umístěny v adresáři
S:Conv. Ty dělají hlavní práci, takže se na ně hezky podíváme: ;$VER: Load pro Konvertor
Failat 21
SetENV Poml RequestFile TITLE „Načíst“ Jediné, co tento script dělá, je to, že si zapamatuje jméno souboru, který
chceme konvertovat. V scriptu „Save“ tady tento soubor načteme do nového
MultiView a pomocí ARexxu ho donutíme aby se zapsal na disk do pomocného souboru
ve formátu IFF. Pak necháme uživatele, aby si vybral nové jméno pro
zkonvertovaný obrázek a obrázek tam z pomocného souboru zkopírujeme: ;$VER: Save pro konvertor
Failat 21
Run <>NIL: MultiView „GetENV Poml “ PORTNAME MV-0 SCREEN
WaitForPort MV-0
IF NOT WARN
RX „address MV-0 SAVEAS IFF NAME T:Pom “
RX „address MV-0 QUIT“
Copy T:Pom RequestFile TITLE „Zapsat“
EndIF
UnSetENV Poml
UnSetENV T:Pom
UnSetENV T:Pom.info Tady vidíte příklad toho, že se dá v MultiView opravdu něco rozumného
naprogramovat. Tento konvertor je sice celkem nekompletní a v dnešní tvrdé
konkurenci dobrých konvertorů by neobstál, ale mnohým může být živnou půdou pro
jejich experimenty.
Tím bych chtěl uzavřít povídání o programování v AmigaGuide a věnovat se na
chvíli ještě něčemu jinému. Jak už byla řeč, MultiView umí zkopírovat obsah
okénka do clipboardu. Tento clipboard však krom MultiView používají také textové
editory, Shell a další programy. Typicky, po zmáčknutí klávesové kombinace
PraváAmiga-v, se text, který je zkopírován do clipboardu, vypíše na obrazovku,
jako by byl zadán z klávesnice. Výborný nápad jak to využít, je udělat si
script, který otevře souborový requester a jméno vybraného souboru napíše do
clipboardu. Tady, je: Set qrq RequestFile
Echo >T:Pom1 „$qrq“ NOLINE
RUN >NIL: MultiView T:Pom1 BACKDROP PORTNAME RF
WaitForPort RF
RX „Address RF COPY;Address RF QUIT“
UnSet qrq
UnSetENV T:Pom1 Na prvním a druhém řádku vyrobíme textový soubor, který se vypíše po
zmáčknutí PraváAmiga-v. Důležité je na druhém řádku „NOLINE“, kdybychom ho tam
nedali, po vypsání textu by se nám vypsal i znak nového řádku, což by bylo
(například v shellu) nejspíše nežádoucí. Na dalších dvou řádcích se spouští
MultiView, které na pátém řádku nutíme k tomu, aby zapsal načtený textový soubor
do clipboardu. Pokud si spuštění tohoto scriptu přiřadíte na nějakou klávesovou
zkratku pomocí starého dobrého FKey, ani vám moc nebude vadit, když vám nějaký
program při výběru souborů nenabídne filerequester.
Poslední způsob využití MultiView, který mne napadá. je jednoduché formátování
textu. Použijeme k tomu zase AmigaGuide. Pokud třeba chcete vycentrovat všechny
řádky v textovém souboru, jeden ze způsobů jak to udělat je z něj udělat
AmigaGuide dokument s automatický centrováním a v MultiView jej zkopírovat do
clipboardu a z něj pak zapsat do textového souboru, třeba pomocí PraváAmiga-v v
CEDu, nebo příkazem MultiView CLIPBOARD a pak uložením do souboru.
Z textového dokumentu uděláme jednoduchý formátovaný AmigaGuide upravením do
této podoby @database a
@node main a
@{JCenter}
Text text text
@endnode Pokud „JCenter“ nahradíte slovem „JRight“, text se bude zarovnávat doprava. A
celé formátování máte hotovo během minuty.
A pak že je MultiView jen prohlížeč souborů ... 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
|