CygnusEd a ARexxPetr Mareš
Starý známý CEd snad ani není třeba představovat. Jako ASCII textový editor se
výborně hodí pro programátory. Protože je vybaven bohatým ARexxovým rozhraním a
je dobře konfigurovatelný, dají se v něm dělat všelijaká kouzla. Tento článek se bude týkat verze 3.5, která je myslím poslední. Je z roku
1993 a oproti verzi minulé má vychytané některé chybičky a nedostatky. Jediné,
co by programátorovi mohlo v CEdu chybět, je to, že nemá zvýrazňování syntaxe,
jako je tomu např. u GoldEdu. Pokud vím, vše ostatní se dá naprogramovat pomocí
maker a ARexxu. Navíc je celý editor senzačně rychlý.
Systém maker je v CEdu jednoduchý a opravdu mocný. Umožňuje přiřadit libovolné
klávese libovolnou funkci. Dovoluje v makru použít běžné editování textu, nebo
výběr z menu, což nám dovolí přiřadit nějaké klávese třeba spuštění ARexxového
programu, či AmigaDOS skriptu. Například pokud děláte často v Borlandích
produktech (všem známý Turbo Packal) a jste zvyklí na přehazování okýnek pomocí
kláves F6, není problém si to takto nakonfigurovat. Není-li vám pomoci a opravdu
to tak chcete mít, pak postupujte podle následujících instrukcí. Zmáčkněte
kombinaci Amiga-m (řeknete tím CEdu, že chcete editovat makro), CEd se vás zeptá
na klávesu, ke které chcete makro přiřadit. Ťukněte do své oblíbené F6 a vyberte
si z menu „Special/View operation“ položku „Next view“ a znova zmáčkněte
Amiga-m. A od teďka můžete mezi okny přecházet pomocí klávesy F6. Je dokonce
možné přiřadit makro více stiskům kláves. Kdybyste chtěli používat pro
vyhledávání v textu zkratku Ctrl-q Ctrl-f, pak postupujte obdobně jako v
předchozím případě, pouze zaměňte Amiga-m za Amiga-M. CEd se vás bude při
zadávání klávesové zkratky po každém zmáčknutí ptát, jestli bude následující
klávesa ještě součástí zkratky. V případě, že se vám makro podařilo přiřadit
jiné klávese, než jste původně zamýšleli a za obnovení původní funkce byste byli
vděčni, přiřaďte oné klávese prázdné makro.
Než se pustíme do ARexxu, povíme si ještě, jak budeme naše skripty spouštět. CEd
má na to přímo menu „Special/DOS/ARexx interface“. Tam si můžeme na klávesy F1
až FI0 přiřadit spuštění skriptu pomocí položky „Install DOS/ARexx command...“,
třeba „rx REXX:compile.rexx“ na klávesu F9. Pokud chcete script spustit v
nějakém makru, použijte v tom samém menu položku „Send DOS/ARexx command...“.
Teď, když víme, jak ARexx spouštět, by bylo vhodné vědět, jak ho používat. CEdův
ARexxový port se jmenuje rexx_ced a pokud tedy chceme CEdu něco poručit,
použijeme příkaz ADDRESS „rexx_ced“ Příkaz CEd si nezakládá na tom, zdali je příkaz napsaný velkými, či malými písmeny,
můžete tedy použít obojí. Můžeme začít jednoduchým a užitečným příkazem „menu“.
Zapisuje se „menu x y z“, kde x, y a z jsou nezáporná čísla. Funguje to stejně,
jako bychom si zvolili v menu číslo x-1 podmenu číslo y-1 a v něm položku z-1.
Pokud položka není v podmenu, jednoduše číslo podmenu neuvádíme. Takže například
pokud chceme nastavit rozteč tabulátorů na 10, zadáme „menu 2 1 9“, nebo pokud
chceme aktivní soubor uložit, zadáme „menu 0 7“. Pokud ovšem nechceme čísla menu
jakýchkoliv důvodů používat, můžeme uvést přímo jméno položky. To znamená místo
„menu 0 7“ zadat „Save“. Některé funkce se tímto způsobem vyvolat nedají,
jmenovitě nastavování velikostí tabulátoru a asi i nějaké jiné, těch je ovšem
málo. Pokud jsou v menu za jménem položky tři tečky, do ARexxu se nepíšou, ale
za příkaz se připíše argument (třeba jméno souboru u „Open“). Pokud budete volat
nějaké funkce, které ukazují uživateli requester s možnostmi OK a CANCEL, stačí
zadat za jméno příkazu (tedy položky z menu) jedničku (pro OK), nebo nulu (pro
CANCEL).
Další skupinou příkazů jsou příkazy editační. K těm patří BACKSPACE, DELETE,
DOWN, LEFT, RIGHT. UP, všechny mají stejný efekt jako stisk klávesy s
odpovídajícím názvem. K editaci textu také slouží příkaz TEXT, který do CEdu
vypíše svůj parametr. Pokud chcete do textu vložit znak nového řádku, použijte
sekvenci 0AX.
Jestli vám ani tyto příkazy k editaci textu nestačí, bude se vám hodit příkaz,
který simuluje psaní na klávesnici. Je to příkaz RAWKEY. Má dva parametry, první
je rawkey kód klávesy a v druhém jsou zakódované kvalifikátory (tedy současně
zmáčknuté SHIFTy, ALTY a pod. ).
CEd také umožňuje využívat vlastních requesterů pro získání informací od
uživatele. Pamatujte, že abyste z nějakého příkazu dostali nějakou návratovou
hodnotu, či řetězec, musíte si to v ARexxu zapnout příkazem „OPTIONS RESULTS“.
Nabídka je následující:
GETFILENAME - tento příkaz ukáže filerequester a nechá na uživateli, jaký si
vybere soubor. Pokud zadáte jako parametr jméno souboru, tak toto jméno bude
nabízeno defaultně hned k odklepnutí. Jméno vybraného souboru vrací v proměnné
RESULT.
GETNUMBER - otevře CEdův requester pro zadávání čísla. Platí stejné pravidlo
jako u GETFILENAME, že pokud zadáme parametr, bude se tento parametr hned na
začátku nabízet.
GETSTRING - je podobný příkazu GETNUMBER s tím rozdílem, že umožňuje zadat
uživateli celý řetězec, nejen číslo.
OKAY1 - složí pro informováni uživatele. Otevře se requester s jedním čudlíkem
na odklepnutí. Co v něm bude napsáno zadejte v parametru příkazu (zase platí to,
že se pro vypsání více řádků použijte sekvence 0AX).
OKAY2 - nám nabídne requester s dvěma čudlíky. Pokud uživatel zvolí OK, příkaz
vrátí „1“, v opačném případě „0“. Vypsaný text se zase zadává do parametru.
Následující příkazy nemají k editaci přímý vztah.
CEDTOFRONT - přesune okno CEdu do popředí.
CEDTOBACK - dá okno CEdu do pozadí.
JUMPTO - přesune kurzor na pozici zadanou v parametrech jako ŘÁDEK a SLOUPEC.
GETWORD - nastaví do proměnné RESULT slovo, ua kterém stojí kurzor aktivního
souboru, nebo vrátí nulu, pokud kurzor na žádném slově není.
STATUS - je vůbec nejkomplexnější ze všech ARexxových příkazů CEdu. Skýtá
přístup k informacím o nastavení editoru. Volá se „STATUS kód“, kde „kód“ je
číslo z následující tabulky, které CEdu říká, co vlastně po něm chceme vyzvědět.
Pokud se na dotaz odpovídá ANO, nebo NE, je v tabulce za vysvětlením kódu
napsaný otazník a v RESULTu se nám vrátí 1 (ANO), nebo 0 (NE). Protože STATUS
umí přes 80 dotazů, uvedeme si jenom ty poměrně zajímavé.
7 vrací řetězec s rozložením tabulátorů. Ty jsou reprezentovány velkými písmeny
T, tam kde tabulátory nejsou, je znak minus.
8 velikost tabulátoru
9 je zapnuto zalamování řádků ?
10 číslo, po jakých krocích se scrolluje obraz (v pixelech)
11 layout mód ?
12 mód přepisování ?
13 nahrazují se tabulátory mezerami ?
14 pravý okraj pro zalamování řádků
16 vrací délku aktivního souboru v bytech
17 počet řádků aktivního souboru
18 počet změn provedených od posledního uložení
19 kompletní cesta a jméno aktivního souboru
20 jméno adresáře, ve kterém je aktivní soubor
21 jméno aktivního souboru
23-25 čísla řádků, na které jsou nastaveny tři záložky v aktivním souboru.
Záložky se nastavují pomocí „mark location 1-3“ v menu „Special“.
27-29 obsahují čísla sloupců, na které jsou nastaveny výše uvedené tři záložky.
43 číslo nejvýše zobrazeného řádku v aktuálním okně
44 X pozice kurzoru relativně k prvnímu zobrazenému znaku
45 Y pozice kurzoru relativně k prvnímu zobrazenému znaku
46 X pozice kurzoru relativně k začátku souboru
47 Y pozice kurzoru relativně k začátku souboru
48,49,53,54 X, Y, šířka a výška celého okna CEdu v pixelech
55 obsah řádku, na kterém stojí kurzor
56 číslo bytu, kterým začíná v aktivním souboru řádek, na kterém právě stojí
kurzor
57 číslo aktivního řádku
58 délka aktivního řádku v paměti
59 délka aktivního řádku na obrazovce. Ta se nemusí rovnat délce řádku v paměti,
protože tabulátory mohou zabírat více místa a ESCAPE kódy mohou být skryté
60 obsah bufferu, do kterého by/ naposled zkopírován blok
66 celkový počet view otevřených v CEdu
72 zapnuto automatické roztahování view ?
81 jméno fontu a jeho velikost
Nyní již víme dost na to, abychom vytvořili nějaké rozumné rozhraní pro
kompilaci, či prohlížení různých zdrojových textů, nebo třeba kontextovou
nápovědu. Abych vám ušetřil trochu trápení, nebo třeba jen poskytl inspiraci,
prozradím vám pár fint a nápadů, jak věc zlepšit. Hned jednu radu pro začátek.
Nespouštějte zbytečně DOSovské scripty. Pokud to jde, udělejte co potřebujete
přímo v ARexxu, ten je oproti DOS skriptům nesrovnatelně rychlejší.
Jestli si děláte script pro kompilaci, či spuštění programu, je výborné, pokud
podle přípony pozná o jaký typ souboru se jedná a podle toho buď kompiluje,
ukazuje, nebo spouští. Já sám mám takovou konfiguraci, která mi na soubory s
příponou „.c“ pustí céčko, soubory s příponou „.guide“ pošle přímo do MultiView,
„.s“ a „.asm“ prožene assemblerem, „.rexx“ pošle ARexxu a ostatní soubory se
pokusí spustit jako AmigaDOS skript. Před jakoukoliv prací se souborem ho
samozřejmě uložím.
Při kompilaci je dobré si vytvořit soubor, ve kterém jsou zapsány všechny chyby,
které nám kompiler nahlásil, nejlépe ve formě ŘÁDEK, SLOUPEC, Text chyby. Potom
stačí mít na jinou klávesu přiřazený skript, který bude chybový soubor postupně
procházet a pokaždé nám v souboru, který jsme editovali, přeběhne kurzorem na
místo činu a sdělí nám text chybové hlášky (například pomocí příkazu OKAY1).
Dalším dobrým nápadem je pamatovat si, s jakým souborem jsme naposled pracovali
a ten automaticky otevřít při spouštění našeho „integrovaného prostředí“. To
bych dělal nějakým skriptem, který bych měl přiřazený na horkou klávesu pomocí
komodity FKey (a taky to tak dělám). Nápadů je skutečně nespočet, teď už se jen
naučit ARexx. Ten, kdo ho umí, je za vodou a všem ostatním doporučuji prohledat
nějaká starší čísla AMIGA Review, ve kterých najdou o ARexxu celý seriál.
Na jednu drobnost bych málem zapomněl. Pokud je v systému spuštěných více CEdů,
s jedním portem byste si asi nevystačili. CEd s tím počítá a ve jménu každého
nového portu uvádí i jeho číslo. Obvykle s tím ale nepočítá programátor. Určitě
by se dalo nějak zjistit, jak se ten nový port vlastně jmenuje. Proč si ale
komplikovat život, když už nejméně jeden CEd spuštěný máme? Ukážu vám obvyklý
postup, jak se s tím vypořádat.
Nebude zločinem, pokud si budete dělat nějaké nároky na port „cedrexx“. Když
zjistíte, že tam není, spusťte svůj CEd. Pro podobné účely je k dispozici příkaz
WaitForPort, ten však v případě nepřítomnosti portu čeká deset vteřin, jestli se
náhodou nějaký neobjeví, což se sebou nese nepříjemný důsledek, že čeká deset
sekund i uživatel. Podívejte se na to, jak se to dá dělat o něco elegantněji: FailAt 21
RX >NIL: „Address rexx_ced CEDTOFRONT“
IF ERROR
CEd
EndIF Pokud ARexx na druhém řádku nenajde adresáta, vyhodí nám chybu, následující
podmínka je splněna a náš CEd se opravdu objeví. Vida, jaké hezké triky se dají
vymyslet. Určitě i vy na něco pěkného přijdete, nebo v to aspoň doufejte,
protože nic dalšího vám dnes neprozradím. Od programátora se stejně očekává, že
má na takové věci talent. Držím vám palečky, aby se vám to jakž takž dařilo a
aby konečně ubylo lidí odmítajících kvalitní kompilátory, pro které není napsané
dobré integrované prostředí.
Adios Amigos! 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
|