AMIGA REVIEW online
  Uvodná stránka     Software     Hry     Obaly     Download     Kniha návštev     Amiga na PC     Amiga Forever  

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


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