#

Razionalizziamo i batch

Da bravi programmatori incapsuliamo le funzioni


Così come abbiamo fatto per la generazione dei file di controllo di spumux dobbiamo cercare di raggruppare i comandi per la generazione delle immagini e soprattutto delle maschere. Solo così eviteremo di dover controllare ogni volta le posizioni dei vari elementi lasciando che sia il programma a fare il lavoro per noi.

Iniziamo con il generare i pulsanti per i menu con solo testo; come nel caso precedente utilizzeremo javascript in una struttura WSF come si può vedere nel Listato 8 (Nuova pagina).

Il comando maketextbutton può prendere una lunga serie di parametri molti dei quali opzionali:

Il flusso del programma è piuttosto lineare e non necessita di particolari commenti se non una piccola nota relativa all'oggetto COM di ImageMagick.

Questo ha infatti solo alcuni metodi che si chiamano come i rispettivi tool command line e che prendono delle stringhe con i parametri. La cosa da notare è che ogni parametro va messo in una stringa separata e non è permesso raggruppare più opzioni nella stessa stringa (nemmeno i parametri dell’opzione stessa).

Qui era un caso semplice ed è bastato riadattare la riga di comando per ottenere il codice, ma vedremo che in altri casi dovremo fare qualcosa di più complesso.

In questo caso abbiamo riportato come maschera il testo del pulsante cosicchè quando questo è attivato la scritta sullo schermo cambia colore; naturalmente possiamo cambiare il codice che genera la maschera per ottenere altri effetti.

Una volta creati tutti i pulsanti avremo bisogno di un programma che li raggruppi per creare un menu completo: a questo serve maketextmenu.wsf.

Anche questo programma (Listato 9 (Nuova pagina)) ha una lunga lista di opzioni:

La struttura iniziale di questo secondo programma è del tutto analoga a quella del precedente, poi invece dobbiamo gestire un numero variabile di parametri per il metodo convert di ImageMagickObject.

Per fare questo sfrutteremo la funzione eval di javascript che permette di eseguire del codice contenuto all'interno di una stringa.

Per prima cosa riempiamo un array con tutte le stringhe dei parametri che ci serviranno, poi le concateniamo con il metodo join dell'array in questa riga

var cmd = "im.Convert(\"" + arr.join("\",\"")+"\",\""+filename+".jpg\")";

L'aspetto è reso confuso dall'abbondante presenza di virgolette, alcune come delimitatori di stringa, altre precedute dal codice di escape all'interno delle stringhe.

Nonostante tutto il codice è concettualmente semplice: infatti il cuore è quel arr.join che concatena le varie stringhe che compongono l'array arr inserendo ogni volta la sequenza virgolette-virgola-virgolette. Una volta composto il comando non ci resta che eseguirlo con una eval.

Proseguendo si sostituiscono i nomi delle immagini con quelli delle maschere e allo stesso modo si crea un comando da valutare dinamicamente.

L’ultima utility è quella che serve a creare i menu con le immagini e che si può vedere nel Listato 10 (Nuova pagina), Anche per questa cominciamo con l’analizzare i parametri che può ricevere:

Anche in questo caso si fa gran uso di array concatenati con il metodo join in quanto dobbiamo gestire un numero variabile di immagini e di icone per lo spostamento tra i menu.

Una riga abbastanza curiosa è quella che carica il parametro xgap:

xgap = WScript.Arguments.Named("xgap") * 1;

La moltiplicazione per uno serve a far sì che la variabile xgap sia numerica e non una stringa. Non dimentichiamo che stiamo utilizzando un linguaggio di scripting che utilizza l’operatore + sia per l’operazione matematica di addizione che per la concatenazione delle stringhe. Inoltre a complicare le cose ci si mette anche il casting automatico che rende possibili magie come

arrc[cntc*4+7] = "+" + (384 - xgap - 5 -  xwidth) + "+450";

dove all'elemento dell'array viene assegnata una stringa "+176+450" in cui il primo numero è ottenuto dall'espressione matematica.

Qui non sussistono problemi perchè si utilizzano operatori - che non creano ambiguità, ma se utilizziamo il + come in questo caso

arrc[cntc*4+7] = "+" + (384 + xgap + 5 + xwidth - 64) + "+450";

è fondamentale il tipo della variabile xgap.

L'operatore + infatti si comporta da addizione matematica solo se entrambi gli operandi sono numerici, altrimenti effettua la concatenazione di stringhe facendo il casting dell'eventuale operando numerico.

La moltiplicazione dopo la lettura del parametro xgap serve a forzare il casting verso un numero della variabile e quindi ad ottenere la valutazione corretta delle espressioni.

Inizio pagina
Successivo
Sommario
Precedente
 
Creative Commons  License BY-NC-SA
Ove non diversamente specificato i contenuti del sito sono rilasciati con licenza Creative Commons BY-NC-SA 4.0 

Copyright © 2007-2020 The Strawberry Field - Roberto Ceccarelli