Nome: Eval
Locazione: C/
Template : VALUE1/A,OP,VALUE2/M,TO/K,LFORMAT/K
EVAL permette di eseguire calcoli interi a 32 bit e di stampare a
video il risultato. Si possono inserire più operandi o più operatori,
separati o meno da spazi. E' anche possibile usare parentesi
annidate. I valori numerici in ingresso devono essere, di default, in
formato decimale. Possono essere in formato ottale o esadecimale se
vengono preceduti da uno dei seguenti codici:
0x o #x un numero esadecimale
0 o # un numero ottale
Si può anche richiedere la conversione di un singolo carattere nel
corrispondente valore ASCII facendo precedere il carattere
dall'apostrofo (').
Gli operatori binari (che richiedono due operandi) di tipo aritmetico sono:
+ addizione
- sottrazione
* moltiplicazione
/ divisione
mod, M, m, % modulo
Gli operatori binari che operano sui bit possono essere:
rsh, R, r shift a destra
lsh, L, l shift a sinistra
& AND
| OR
xor, X, x XOR
eqv, E, e NOT XOR
Sono ammessi anche i seguenti operatori unari (che operano su un solo
operando):
- negazione
~ NOT binario
L'output è un valore decimale che esprime il risultato delle
operazioni. Può essere modificato, se si usa LFORMAT seguito da una
stringa posta tra virgolette. All'interno di questa stringa il
risultato apparirà al posto di uno dei seguenti codici:
%N in formato decimale
%X in formato esadecimale
%O in formato ottale
%C un singolo carattere ASCII
%X e %O possono essere seguiti da un numero che esprime il numero di cifre
del numero esadecimale o ottale.
Al posto dei valori numerici si possono usare delle variabili AmigaDOS
create con SET ed è possibile usare EVAL per creare dei loop a
contatore negli script, usandolo in combinazione con le variabili e
gli accenti gravi (si veda l'ultimo esempio).
VALUE1/A: il primo valore numerico.
OP: l'operatore
VALUE2/M: gli altri valori numerici e gli altri operatori. Possono
essere omessi.
TO/K: il file verso cui inviare l'output.
LFORMAT/K: richiede come parametro una stringa posta tra virgolette che
esprime il formato che deve assumere il risultato.
Esempi:
EVAL 'A
EVAL ~0xff
EVAL 0x10 + 010 - 'A
EVAL 'A+32 LFORMAT "%C*n"
EVAL (100*(28+36)/64+5)*10
Script d'esempio:
SET cont 5
LAB LOOP
IF VAL $cont EQ 0
QUIT
ENDIF
SET cont `EVAL $cont-1`
ECHO $cont
SKIP LOOP BACK