AMIGA REVIEW online
  Uvodná stránka     Software     Hry     Obaly     Download     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 )