Post by Antonio MacchiPost by Alessandro SelliCarino. Ho un paio di appunti da fare, però.
grazie
Prego. Mi ricorda tanto i trucchi dei primi PC multimediali. In quei
tempi far "cantare" un PC non era cosa facile, e i maniaci dello
scripting facevano proprio giochetti come questo per far stupire gli amici.
Post by Antonio Macchiil frame rate di default del dispositivo
non e' detto che debba per forza essere una costante
non so come si faccia, ma credi sia possibile modificarlo
Si potrebbe prevedere un parametro opzionale da passare allo script
sulla riga di comando, che se presente inizializzi questa stessa
variabile. Qualcosa come:
Err () {
echo "ERRORE: l'opzione '-f' prevede un parametro numerico" >&2
return 1
}
# Se ci sono parametri/switch sulla riga di comando leggili
while test $# -gt 0
do case "$1" in
'-f'|'--framerate') # Se il primo parametro è -f oppure --framerate
if test -n "$2" # deve essere seguito da un altro parametro
# che deve contenere solo caratteri numerici
then if test "$2" = $(echo $2 | tr -dc [0-9])
then # Si, sono solo caratteri numerici
dsp_fps=$2
# I primi due parametri sono stati riconosciuti e
# analizzati: possiamo cancellarli
shift 2
else # No, non è una stringa accettabile
Err
exit $?
fi
else # Non ci siamo, manca il parametro con il framerate
Err
# Proseguo lo stesso, ma userò il valore di dsp_fps di
# default (impostato all'inizio dello script)
# Butto il parametro
shift
fi ;;
*) echo "ERRORE: parametro \"$1\" sconosciuto" >&2
exit 2 ;;
esac
done
Di solito uso un costrutto case ... esac anche se ho un parametro solo
perché sarà poi facile estendere il tutto ad altri eventuali parametri
futuri.
Sono d'accordo che l'analisi dei parametri sulla riga di comando,
fatta per bene, complichi abbastanza le cose, ma fatta una volta si
ricicla n volte con n grande a piacere.
Se lo script prevedesse diversi valori specificabili sulla riga di
comando, ad esempio, si dovrebbe avere una funzione interna che scriva
una pagina di aiuto e inserire uno switch -h|--help|-? che esegua questa
funzione ed esca. E magari in caso di errore rilevato sulla riga di
comando eseguire questa funzione prima di uscire dallo script. Ma qui
stiamo veramente a fare le cose extralusso.
Post by Antonio MacchiPost by Alessandro SelliPost by Antonio Macchiscore=( a0 d a0 e a0 f a0 d a0 e a0 f a0 g a0 e a0 f a0 g a0 a a0 f
a0 g
Post by Antonio Macchia0 a a0 bes a0 g a0 a a0 f a0 g a0 e a0 f a0 d a0 e a0 cis a0 d d d d )
for note in ${score[*]}; do
Non ha senso inizializzare una matrice se poi la si usa una volta sola
espandendola completamente estraendone tutti gli elementi. Si passa
for note in a0 d a0 e a0 f a0 d a0 e a0 f a0 g a0 e a0 f a0 g a0 a a0 f
a0 g a0 a a0 bes a0 g a0 a a0 f a0 g a0 e a0 f a0 d a0 e a0 cis a0 d d d d
la creazione della tabella vien fatta una volta sola
e' cosi anche la sua espansione
quindi una differenza in prestazioni molto piccola, compensata (imho) da
una maggior chiarezza del codice
Allora usa una semplice variabile:
score='a0 d a0 e a0 f a0 d a0 e a0 f a0 g a0 e a0 f a0 g a0 a a0 f a0 g
a0 a a0 bes a0 g a0 a a0 f a0 g a0 e a0 f a0 d a0 e a0 cis a0 d d d d'
for note in $score
...
Post by Antonio Macchisicuro di non aver preso un abbaglio?
A volte succede... :-)
Post by Antonio Macchigrazie per l'interessamento
Prego, grazie a te per questo script divertente!
Ciao,
--
Alessandro Selli http://alessandro.route-add.net
AVVERTENZA: i messaggi inviati a "trappola" non mi arriveranno.
WARNING: messages sent to "trappola" will never reach me.