Quando si ha una serie di dati fissi all'interno del programma, (per esempio un dato che identifica la modalità di un lavoro, o uno che indica il ritardo di accensione di un'uscita) il modo migliore per gestirli, caricarli, salvarli ecc. è quello di definire tipi di strutture dati (typedef struct), nelle quali vengono definiti i dati fissi, e di definire una serie di funzioni per varie operazioni relative ai dati (come ad esempio resettarli con i valori di default ecc.).
La struttura dati viene dichiarata nel common.h (o comunque all'interno di un file .h incluso nel common).
All'interno dello stesso file .h vado anche a definire le funzioni e le variabili per eseguire operazioni con i dati.
Esempio:
// dichiaro le funzioni per eseguire le operazioni con i dati fissi
void carica_fissi(void);
char salva_fissi(void);
void reset_fissi(void);
char pathProg[32] = "C:\\prog.fissi"; // viene dichiarato il percorso relativo al file da cui prendere i dati fissi
// il percorso è di una penna USB (C è la penna)
// definisco un tipo di struttura chiamata dati_fissi e dichiaro i nomi dei dati
typedef struct dati_fissi
{
unsigned char dato_fisso1;
unsigned char dato_fisso2;
unsigned char dato_fisso3;
long int dato_fisso4;
}
dati_fissi d; // viene dichiarata una struttura dati d
FILE *f //viene dichiarato un file f che ci servirà nelle funzioni
// Questa funzione prende i valori dei dati fissi da un file e li carica in una struttura dati (d)
void carica_fissi(void)
{
f = fopen(pathProg, "r"); // apre in modalità lettura il file del percorso pathProg
if (f == 0) // se f è 0 --> l'operazione non ha avuto successo
reset_fissi(); // resetta i valori dei dati fissi impostando quelli di default
// (questa funzione è spiegata più avanti)
fread(&d, sizeof(d), 1, f); // legge i valori dei dati fissi presenti nel file f e li carica nella struttura dati d
fclose(f); // chiude il file f
}
// la seguente funzione prende i valori dei dati fissi caricati nella struttura dati d e li salva in un file
char salva_fissi(void)
{
f = fopen(pathProg,"w"); // apre in modalità scrittura il file del percorso pathProg
if (f == 0) // se f è 0 --> l'operazione non ha avuto successo
return 0; // la funzione ritorna 0
//se f non è 0
fwrite(&d, sizeof(d), 1, f); // i valori dei dati fissi contenuti in d li salva in f
// (modificando il file del percorso di pathProg)
fclose(f); // chiude il file f
return 1; // la funzione ritorna 1
}
// Questa funzione resetta i valori dei dati fissi impostandoli su suoi valori di defaul e salvandoli
void reset_fissi(void)
{
d.dato_fisso1 = 0;
d.dato_fisso2 = 3;
d.dato_fisso3 = 0;
d.dato_fisso4 = 4;
salva_fissi(); //salva i valori di default
}
Di seguito riportiamo anche un esempio applicativo reale commentato