#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "impostazioni.h"
const char kNomeFileImpostazioni[] = "impostazioni.txt";
const char kIdTipoFile[] = "Tavola pitagorica 1.0 - impostazioni";
const size_t kLIdTipoFile = 36;
impostazioni_t imp = {
1000.0f, /* la larghezza del foglio */
1000.0f, /* l'altezza del foglio */
50.0f, /* il margine superiore della pagina */
50.0f, /* il margine inferiore della pagina */
50.0f, /* il margine sinistro della pagina */
50.0f, /* il margine destro della pagina */
2.0f, /* lo spessore del tratto per le caselle della tabella */
0x0000000A, /* i limiti della tavola (da 1 a ?) */
0x00009999, /* il colore del bordo delle caselle in formato 00RRGGBB */
0x00000099, /* il colore dei numeri nelle caselle in formato 00RRGGBB */
0x00000001 /* un flag 0/1 che disattiva/attiva la bordatura del foglio */
};
/* chiamata da carica_impostazioni() */
/* "car_tra" = carattere compreso tra */
int car_tra( int c, const char *tra ) {
size_t i, l = strlen(tra);
int tmp, ce = 0;
for( i=0; i<l; ++i ) {
tmp = (unsigned char) tra[i];
if( c == tmp ) return 1;
}
return ce;
}
/* chiamata da carica_impostazioni() */
int leggi_numero( FILE *f, float *dec, unsigned long *hex ) {
int ok = 0;
if( f && (dec||hex) ) {
char buff[32];
char *fine;
int i=0, c;
if( dec && !hex ) {
char cifre[] = "0123456789.";
float tmpDec;
for( c=fgetc(f); car_tra(c,cifre)&&c!=EOF&&i<31; c=fgetc(f) )
buff[i++] = c;
buff[i] = '\0';
tmpDec = strtof( buff, &fine );
if( buff != fine ) *dec = tmpDec;
ok = buff != fine;
}
else if( hex && !dec ) {
char cifre[] = "0123456789ABCDEFabcdef";
unsigned int tmpHex;
for( c=fgetc(f); car_tra(c,cifre)&&c!=EOF&&i<31; c=fgetc(f) )
buff[i++] = c;
buff[i] = '\0';
tmpHex = strtoul( buff, &fine, 16 );
if( buff != fine ) *hex = tmpHex;
ok = buff != fine;
}
if( ok ) while( c!='\n' && c!=EOF ) c = fgetc(f);
}
return ok;
}
/* chiamata da main() */
int carica_impostazioni( const char *nome_file ) {
int ok = 0;
if( nome_file ) {
FILE *f = fopen( nome_file, "r" );
if( f ) {
unsigned long tmpHex[Q_GLOB_HEX] = {0L};
float tmpDec[Q_GLOB_DEC] = {0.0f};
size_t i;
/* verifica che il contenuto del file
inizi con una stringa di identificazione */
for( i=0;
fgetc(f)==(unsigned char)kIdTipoFile[i] && i<kLIdTipoFile;
++i );
if( i!=kLIdTipoFile ) { fclose( f ); return 0; }
for( i=0; i<Q_GLOB_DEC; ++i ) {
if( !leggi_numero(f,&tmpDec[i],NULL) )
break;
}
if( i==Q_GLOB_DEC ) {
for( i=0; i<Q_GLOB_HEX; ++i ) {
if( !leggi_numero(f,NULL,&tmpHex[i]) )
break;
}
if( i==Q_GLOB_HEX ) {
imp.wFoglio = tmpDec[0];
imp.hFoglio = tmpDec[1];
imp.margSup = tmpDec[2];
imp.margInf = tmpDec[3];
imp.margDx = tmpDec[4];
imp.margSx = tmpDec[5];
imp.spGriglia = tmpDec[6];
imp.dimTavola = tmpHex[0];
imp.colGriglia = tmpHex[1];
imp.colNumeri = tmpHex[2];
imp.riquadraFoglio = tmpHex[3];
ok = 1;
}
}
fclose( f );
}
}
return ok;
}