Rispetto alla soluzione analizzata nel precedente articolo, ovvero rimaneggiare completamente il codice in modo da rendere
nutmeg una completa applicazione Win32 grafica, vi sono altre due soluzioni, per così dire "ibride", ambedue complementari e ambedue piuttosto
tricky, come dicono gli americani.
Come sappiamo, la versione originale di
nutmeg è un'applicazione di tipo console, realizzata originariamente sotto UNIX e, a parte la versione portata sotto MSDOS, non ha modo di generare output grafici in Windows. Ciò però non è del tutto vero: con ricerche approfondite nella vastissima documentazione di Windows MSDN, ho scoperto che è invece possibile operare in due maniere alternative.
Nel primo caso, si può procedere compilando
nutmeg come semplice applicazione
Win32 console, mantenendo l'originale codice in C — come già era stato fatto con i due simulatori
bspice e
cspice — facendo però attenzione a eliminare ogni riferimento alle chiamate delle funzioni grafiche originali (che in Win32 non esistono più), sostituendole eventualmente con degli
stub di funzioni vuote, onde permettere la riuscita della fase di
linking finale.
E l'output grafico, direte voi? L'output grafico lo creeremo in una finestra grafica standard Windows appunto, creando all'interno della funzione
main() originale di
nutmeg un nuovo thread e creando
ex novo, con alcuni trucchi, una finestra grafica "agganciata" a quella di tipo console di
nutmeg, passandole opportuni parametri.
La
seconda soluzione invece, quella a mio avviso più semplice, consiste nel creare una semplice finestra Windows, che contenga solamente la funzione principale
main(), o meglio
WinMain(), dato che è un'applicazione Windows nativa; anche qui, con alcune acrobazie, si apre una finestra di tipo console, "agganciata" alla finestra genitrice Windows precedentemente creata, si ridige lo standard output (
stdin,
stdout e così via) in essa e dalla finestra principale Windows si lancia il
main() originale di
nutmeg, al quale avremo ovviamente cambiato nome, dato che non possono coesistere due funzioni
main() in uno stesso programma.
Si avrà l'effetto che tutte le operazioni di input/output a carattere necessario per interagire con l'utente avverranno regolarmente nella finestra console creata, mentre nella finestra grafica principale, una volta collezionati i dati e i comandi tramite il command parser di
nutmeg, potremo agevolmente disegnare tutti i grafici desiderati.
Dato che ambedue le soluzioni risultano troppo tecniche per essere spiegate in poche righe, mi riservo di illustrarle meglio in una serie successiva, corredata da spezzoni di codice funzionante con cui potrete sbizzarrirvi.