AMIGA REVIEW online
  Uvodná stránka     Software     Hry     Obaly     Download     Amiga na PC     Amiga Forever  

CygnusEd a ARexx

Petr 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


© 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 )