Introduzione
Con questa sezione vorrei presentare il sorgente commentato di una piccola utility che ho realizzato di recente. Lo scopo principale è quello di aiutare i programmatori che per la prima volta si scontrano con le API di PM fornendo loro alcuni principi di base che possono rendere più semplice e veloce il difficile compito in cui si stanno avventurando. Visto che anch'io mi sono accostato alla programmazione in PM da molto poco, non pretendo di insegnare niente a nessuno, ma solo di condividere con altri i risultati dei miei sforzi nella speranza che ciò possa incoraggiarli.
Il programma in questione permette di muovere o copiare sezioni dei profile di OS/2 (file .INI). Sicuramente questo programma potrebbe essere realizzato in maniera più semplice, ma il mio scopo è anche quello di familiarizzare con le tecniche che possono essere necessarie per progetti assai più complessi.
Le tecniche che voglio esercitare sono:
- utilizzo di più thread in PM.
- gestione delle eccezioni.
- comunicazione fra thread.
- finestre con controlli ridimensionabili.
- sfruttare al massimo le possibiltà offerte dalle risorse compilate con il Resource Compiler.
I files
Prima di tutto vediamo i files di definizioni globali. Nel file resource.h ci sono le definizioni di tutte le costanti in qualche modo connesse con le risorse, mentre nel file global.h ci sono tutte le dichiarazioni delle variabili globali e le funzioni che sono utili in più moduli.
Vediamo poi i sorgenti dei vari moduli:
Un'altra componente importante del programma sono le risorse:
Note
Nel realizzare questo programma ho cercato di evitare ogni possibilità di blocco della coda dei messaggi del sistema. In seguito mi sono accorto che c'è una particolare situazione in cui si può bloccare l'esecuzione dei messaggi. Ho già pensato a un modo per risolvere il problema, ma ho deciso che può essere un ottimo esercizio per chi ha deciso di studiare il funzionamento di questo programma.
Ancora una volta ripeto che mi fa piacere ricevere commenti (in senso negativo e positivo) e quindi vi invito a scrivermi. Ovviamente accetto suggerimenti su come migliorare la leggibilità di queste pagine e sono a disposizione per qualsiasi tipo di chiarimento sul codice.
|