ARexx II.Jan Petkov
Je slušnost řádně se vyzbrojit než se pustíme do pořádné bitvy. V minulém
čísle jsme si mocný Arexx jen tak zlehka naťukli, dnešní výklad bude možná
trochu strohý, ale o to účinnější. Dřív než začne hra, vyložíme si všechny karty
na stůl. Struktura jazyka Arexx
Tak jako se náš přirozený jazyk český skládá z vět a ty pak dále ze slov,
tak je i Arexx složen z klausulí, které dělíme na tokeny. Speciálním mezistupněm
mezi tokenem a klausulí je výraz. Výrazy jsou určité druhy tokenů svázané
operátorem.
Příklady:
- klausule
SAY „Já celá jsem klausule!“
A:=2+2*10
Klausule:
- tokeny
„+“, „-“, „*“
100.432, 1E34,12
„tady je token“
/* A zde taky */
- výrazy
123*3-2/(A+B)
VolámFunkci(2,34,2) Operace
1. Spojení (konkatenace)
Operace konkatenace spojí dva řetězce do jednoho. Spojení na sebe bere tři různé
podoby. Více nám napoví příklady:
STR1 = „první“ „druhý připojím“
STR2 = STR1 „třetí bez mezery“
STR3 = STR1 || STR2 || STR1 2. Aritmetické operace
Tento druh operací nám slouží ke konstrukci matematických výrazů. Většina z
nich počítá se dvěma operandy, jen dva operátory jsou unární. Blíže tabulka. Tabulka aritmetických operací
Operátor |
Popis operace |
Priorita |
+ |
Přičítání |
5 |
- |
Odečítání |
5 |
* |
Násobení |
6 |
/ |
Dělení |
6 |
% |
Celočíselné dělení (dělíme-li například 5/2 celočíselně, pak obdržíme
jako výsledek 2 a zbytek bude 1) |
6 |
// |
Zbytek po celočíselném dělení |
6 |
** |
Mocnina (chcete-li vypočítat X na Y-tou, pak napište X**Y) |
7 |
- <číslo> |
Negace (to samé jako 0-<číslo>) |
8 |
+ <číslo> |
Konverze (to samé jako 0+<číslo>) |
8 |
Příklady:
Sedm = 7
SAY 10 / Sedm >>> 1.42857143
SAY 10 % Sedm >>> 1
SAY 10 // Sedm >>> 3
SAY 10 ** Sedm >>> 10000000
SAY +Sedm >>> 7
SAY –Sedm >>> -7
Pozn. Za znaky >>> následuje výsledek. 3. Porovnání
Výsledek výrazu, který používá operátory porovnání je jedna ze dvou hodnot:
0 jako FALSE nebo 1 pro TRUE. Porovnání může proběhnout v jednom ze tří módů:
- Přesné (exaktní) porovnání prochází znak po znaku, včetně všech prázdných
znaků.
- Řetězcové porovnání ignoruje úvodní mezery, případně doplní kratší řetězec
mezerami na konci.
- Číslicové porovnání nejdříve převede operandy na čísla, pak se provede
klasické aritmetické porovnání. Tabulka operátorů pro porovnání
Operátor |
Popis operace |
Priorita |
= |
rovno |
3 |
== |
rovno přesně |
3 |
~= |
nerovno |
3 |
~== |
nerovno přesně |
3 |
> |
větší než |
3 |
>= |
větší nebo roven |
3 |
~< |
větší nebo roven |
3 |
< |
menší než |
3 |
<= |
menší nebo roven |
3 |
~> |
menší nebo roven |
3 |
Příklady:
„about“ < „around“ >>> TRUE
30 > 7 >>> TRUE
„30“ > „7“ >>> TRUE řetězce jsou nejdříve převedeny na čísla
„Tricet“ > „Sedm“ >>> TRUE
30 > „Sedm“ >>> FALSE číslo je převedeno na ascii
„foo“ = „foo “ >>> TRUE mezery jsou ignorovány
„foo“ == „foo “ >>> FALSE přesné porovnání 4. Logické operace
Jakékoli dva výrazy, které mají jako výsledek TRUE nebo FALSE mohou být
spojeny logickou operací (pozn. logická negace pracuje jen s jedním operandem).
Blíže tabulka. Tabulka logických operací
Operátor |
Popis operace |
Priorita |
~ |
NOT, negace, TRUE se mění na FALSE a naopak |
8 |
& |
AND, TRUE jen tehdy, jsou-li 2 oba operandy TRUE |
2 |
| |
OR, Je TRUE, je-li aspoň jeden 1 z operandů TRUE |
1 |
&& |
Exklusivní OR. |
|
^ |
Exklusivní OR. TRUE, pokud právě 1 jeden ze dvou operandů je TRUE |
1 |
Příklady:
TRUE = 1
FALSE = 0
SAY ~TRUE >>> 0
SAY TRUE ^ FALSE >>> 1
SAY TRUE | TRUE >>> 1
SAY TRUE & FALSE >>> 0 Instrukce
Zde si stručně přiblížíme klíčová slova a syntaxi všech instrukcí, kterými
Arexx disponuje. Podrobnější vysvětlení bude následovat v příslušné pasáži
dalšího pokračování. Tabulka je seřazena podle abecedy. Tabulka všech instrukcí Arexxu
ADDRESS <jméno> [<příkaz>] | COMMAND [<příkaz>] | [VALUE] <adresa>;
- pošle příkaz na externí port <jméno> nebo změní aktuální port
ARG <vzor>;
- definuje seznam argumentů pro volaný program nebo funkci
BREAK;
- vyskočí z cyklu DO nebo z řetězce, který je INTERPRETován
CALL <jméno> [<výraz>] [[,] <výraz>] [[,]...
- zavolá podprogram, , funkci nebo další Arexxovský program
DO [<prom>=<výraz> [TO <výraz>] [BY <výraz>]] [FOR <výraz>] | [WHILE<podmínka>]
| UNTIL<podmínka>] | [FOREVER]
END [<jméno>];
- provádí cyklus s inicializační proměnou <prom>, hodnota této proměnné se
zvyšuje o hodnotu za BY, cyklus je ukončen podle TO, FOR, WHILE nebo UNTIL
DROP <proměnná> [<proměnná>...];
- zruší hodnotu dané proměnné
ECHO - viz SAY
EXIT <výraz>
- ukončí provádění programu, volajícímu procesu vrátí hodnotu <výrazu>
IF <podmínka>; THEN <akce>; [ ELSE <akce> ];
- podmínečné větvení programu
INTERPRET <výraz>;
- nejdříve provede <výraz>, který pak interpretuje jako Arexxovskou instrukci
ITERATE [<jméno>];
- v cyklu přeskakuje zbytek instrukcí až po ukončující END cyklu
LEAVE <jméno>;
- opuštění cyklu
NOP - žádná operace
NUMERIC DIGITS [<výraz>] | FUZZ [<výraz>] | FORM [ENGINEERING] | FORM
[SCIENTIFIC] | FORM [[VALUE] <výraz>]
- nastavuje přesnost numerických výpočtů
OPTIONS RESULTS | PROMPT <výraz> | [ON | OFF] | FAILAT <výraz> | CACHE
- nastavuje vnitřní proměnné pro aktuální program
PARSE [UPPER] <zdroj> <vzor> [, <vzor>]
- přiřadí hodnotu z řetězce <zdroj> proměnným ,specifikovaným jako <vzor>
PROCEDURE [EXPOSE <proměnná [<proměnná>..]
- vytvoří tabulku symbolů pra funkci. EXPOSE zviditelní přeměnné jako globální
PULL <vzor>;
- přečte hodnotu ze vstupu
PUSH <výraz>;
- hodnotu <výrazu> uloží na STDIN(pořadí LIFO)
QUEUE <výraz>;
- hodnotu <výrazu> uloží na STDIN (pořadí FOLI)
RETURN [<výraz>];
- vrací kontrolu volajícímu programu s případnou hodnotou <výrazu>
SAY [<výraz>];
- hodnotu výrazu uloží na výstup (STDOUT)
SELECT;
WHEN <podmínka> THEN ; <akce>
WHEN <podmínka> THEN ; <akce>
...
OTHERWISE ; [<akce>]
END
- klasické větvení ve ,stylu CASE
SIGNAL | {ON I OFF} <přerušení> | [VALUE] <návěští>
- pomocí této instrukce lze přesměrovat obsloužení nestandardních situací do
vlastních podprogramů
TRACE | VALUE <výraz> | [ {?I!} ] [<nastavení>] | -<počet>
- instrukce představuje .silnou pomůcku pro debugging
UPPER <proměnná> [<proměnná> ...]
- písmena <proměnné> transformuje na velká Funkce
Tato kapitola představuje přehled zabudovaných funkcí Arexxu, jakož i funkcí
obsažených v knihovně „rexxsupport.library“. Jedná se o orientační přehled s
hrubým popisem syntaxe. Tabulky byly navrženy především proto, aby vám ukrátili
hledáni napomenutých detailů. Nikdo po nás nemůže chtít, abychom si pamatovali
přesnou syntaxi všech užitečných funkcí. Ty nejzajímavější z funkcí si
podrobněji přiblížíme v dalších pokračováních. Funkce pro porovnání
ABBREV (<dlouhý řetězec>,<krátký text.>, [<délka>])
COMPARE (<řetězec1>,<řetězec2>,[<znak>[)
FIND (<řetězec>, <slovo>)
INDEX (<řetězec>,<slovo>, [<startovací pozice>])
LASTPOS (<slovo>,<řetězec>,[<startovací pozice>])
POS (<slovo>,<řetězec>,[<startovací pozice>])
VERIFY (<řetězec>, <odkaz>, [{„NOMATCH“ | „MATCH“}], [<start. poz.>]) Funkce pro práci s řetězci
CENTER (<řetězec>,<délka>,[<znak>])
COMPRESS (<řetězec>, [<seznam>])
COPIES (<řetězec>,<číslo>)
DELSTR (<řetězec>,<číslo>, [<délka>])
INSERT (<nový řetězec>> <starý řetězec> <start.poz.>, [<délka>],[<znak>])
LEFT (<řetězec>,<délka>,[<znak>])
LENGTH (<řetězec>)
OVERLAY (<nový řetězec>, <starý řetězec>, [<start.poz.>], [<délka>],[<znak>])
REVERSE (<řetězec>)
RIGHT (<řetězec>,<délka>,[<znak>])
STRIP (<řetězec>, [{ „B“ | „L“ | „T“ }],[<seznam>])
SUBSTR (<řetězec>, <start.poz.>, [<délka>], [<znak>])
TRANSLATE (<řetězec>,[<výstup. tabulka>], [<vstup. tabulka>],[<znak>])
TRIM (<řetězec>)
UPPER (<řetězec>)
XRANGE ([<začátek>, [<konec>]) Konverzní funkce
B2C (<binární řetězec>)
C2B (<řetězec>)
CZD (<řetězec>, [<počet bytů>])
C2X (<řetězec>)
D2C (<celé číslo>, [<délka>])
D2X (<celé číslo>, [<délka>]>
X2C (<hexadecimální řetězec>)
X2D (<hex, řetězec>) Funkce pro práci s čísly
ABS (<číslo>)
HASH (<řetězec>)
MAX (<číslo>,<číslo> [,<číslo>,...])
MIN (<číslo>,<číslo>, [,<číslo>,..])
RANDOM ([<min>],[<max>],[<zrno>])
RANDU ([<zrno>])
SIGN (<číslo>)
TRUNC (<číslo>, [<počet des. míst>]) Informativní funkce
DATE ([<nastavení>], [<datum>, <formát>])
SHOW (<nastavení>, [<jméno>], [<oddělovač>])
SHOWDIR (<adresář>, [„ALL“ | „FILE“ | „DIR“} <oddělovač>)
SHOWLIST (<nastavení>, [<jméno>], [<oddělovač>], [„A“])
TIME (<nastavení>) Funkce pro práci se slovy
DELWORD (<řetězec>,<pozice slova>, [<délka>])
SPACE (<řetězec>,<počet>,[<znak>])
SUBWORD (<řetězec>,<poz. slova>, [<délka>])
WORD (<řetězec>,<poz. slova>)
WORDINDEX (<řetězec>,<poz. slova>)
WORDLENGTH (<řetězec>,<poz. slova>
WORDS (<řetězec>) Práce se soubory
CLOSE (<soubor>)
EOF (<soubor>)
LINES ([{STDIN | STDOUT | STDERR}])
OPEN (<soubor>, <specifikace souboru>, [<nastavení>])
READCH (<soubor>, [<délka>])
READLN (<soubor>)
SEEK (<soubor>, <offset>, [<kotva>])
WRITECH (<soubor>,<řetězec>)
WRITELN (<soubor>,<řetězec>)
DELETE (<spec. souboru>)
EXISTS (<spec. souboru>)
MAKEDIR (<adresář>)
RENAME (<starý soubor>, <nový soubor>)
STATEF (<spec. souboru>) Všeobecné funkce Arexxu
ADDRESS ()
ADDLIB (<name>, <priotity>, [offset, version])
ARG ([<argnumber>], [„EXISTS“ | „OMITTED“])
DATATYPE (<string>, [<type>])
DELAY (<number>)
DIGITS ()
ERRORTEXT (<number>)
FORM ()
FUZZ ()
GETCLIP (<name>)
PRAGMA (<option> [,<value>])
REMLIB (<libname>)
SETCLIP (<clipname>, [<value>])
SOURCELINE ([<line number>])
SYMBOL (<name>)
TRACE ([<option>])
VALUE (<name>) Slibuji vám, že se příště vrátíme k přitažlivější praxi. Máme pro vás
připraveno několik velmi pěkných ukázek, na kterých si Arexx předvedeme i tak
jak jej ještě neznáte. Řekne-li vám někdo, že se v Arexxu nedá napsat aplikace s
přitažlivým GUI, nevěřte mu! 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
|