Eval
| Formát: | EVAL <hodnota1> [<operátor>] [<hodnota2>] [TO <soubor>] [LFORMAT=<řetězec>] |
| Šablona: | VALUE1/A, OP, VALUE2/M, TO/K, LFORMAT/K |
| Účel: | Vyhodnocuje jednoduché celočíselné výrazy |
| Cesta: | C:EVAL |
Příkaz EVAL umí vyhodnocovat jednoduché celočíselné výrazy. Pokud by výsledkem mělo být desetinné číslo (k čemuž může dojít třeba při dělení), bude z výsledku zobrazena jen celočíselná část, desetinná část je odříznuta.
<Hodnota1> a <hodnota2> mohou být desítková, šestnáctková nebo osmičková čísla. Můžete sice zadat i desetinná desítková čísla, avšak příkaz z nich použije pouze celočíselné části.
Implicitně příkaz EVAL používá desítková čísla. Šestnáctková čísla se označují předponou 0x nebo #X. Osmičková čísla mají předponu 0 nebo #. Jako hodnotu můžete zadávat i znaky, pro výpočet je použit jejich ASCII kód. Znak musí vždy být uveden apostrofem (').
Výsledek je implicitně desítkový, avšak klíčovým slovem LFORMAT můžete nastavit i jiný formát. Řetězec argumentu LFORMAT je formátovací řetězec, který určuje vzhled výsledku.
Ve formátovacím řetězci můžete použít tyto znaky:
| Znak | Popis |
|---|---|
| %X | Šestnáctkové číslo |
| %O | Osmičkové číslo |
| %N | Desítkové číslo |
| %C | Znak |
| *N | Znak pro odřádkování |
U kódů %X a %O navíc musíte vždy zadat počet zobrazených číslic (například %X4 je čtyřciferné šestnáctkové číslo). Ostatní znaky formátovacího řetězce se zobrazí tak, jak je zapíšete.
Příkaz EVAL může zadané hodnoty zpracovat těmito operátory:
| Operátor | Operace |
|---|---|
| + | Sčítání |
| - | Odečítání |
| * | Násobení |
| / | Dělení (celočíselné) |
| mod | Zbytek celočíselného dělení |
| & | Logický součin (AND) |
| | | Logický součet (OR) |
| ~ | Logická negace (NOT) |
| xor | Výlučný logický součet (XOR) |
| qqv | Bitová ekvivalence |
Ve výrazech je možno používat závorky, syntaxe výrazů se řídí běžnými algebraickými pravidly.
Výstup příkazu EVAL můžete klíčovým slovem TO přesměrovat do zadaného <souboru>.
Příkaz EVAL může fungovat jako jednoduchá kalkulačka, ale zajímavější je možnost použít ho jako čítače smyček v dávkových souborech.
Příklady
| 1.System2.0:> EVAL 5+3 8 |
Tohle je hodně primitivní výpočet.
| 1.System2.0:> EVAL 0xff LFORMAT="%N*N" 255 |
S argumentem LFORMAT může příkaz EVAL sloužit i jako převodník číselných soustav.
| ECHO >ENV:Loop{loop} LAB Start ECHO "Smyčka #" NOLINE TYPE ENV:Loop EVAL <ENV:LOOP >NIL: TO T:Temp{$$} value2=1 op=- ? TYPE >ENV:Loop T:Temp{$$} IF val $loop GT 0 SKIP Start BACK ENDIF ECHO "Konec" 7.Ram_Disk:> execute loop 5 Smyčka #5 Smyčka #4 Smyčka #3 Smyčka #2 Smyčka #1 Konec |
Dávkový soubor "loop" ilustruje užití příkazu EVAL pro čítač smyčky.
První příkaz ECHO uloží počet průběhů smyčkou, zadaný jako argument dávkového souboru, do souboru "ENV:Loop" (systémové proměnné). Zde to je 5. Druhý příkaz ECHO ve spojení s příkazem TYPE zobrazuje číslo právě prováděné smyčky (poprvé tedy 5).
Příkaz EVAL použije jako první hodnotu číslo v souboru "ENV:Loop", druhá hodnota je vždy 1 a provádí se odečítání. Výsledek se ukládá do souboru T:Temp<$$>. V prvním průchodu to bude číslo 4.
Výsledek se poté překopíruje ze souboru Temp<$$> do souboru "ENV:Loop".
Podmínka IF sleduje, zda je hodnota čítače větší než nula. Když je, vše se provádí znovu, ale s čítačem o jedničku menším. O toto zmenšení se postará opět příkaz EVAL. Až bude čítač nulový, zpracování souboru se ukončí.



