Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Tavola pitagorica - impostazioni.c

impostazioni.c

Caricato da: AldoBaldo
Scarica il programma completo

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #include "impostazioni.h"
  6.  
  7. const char kNomeFileImpostazioni[] = "impostazioni.txt";
  8. const char kIdTipoFile[] = "Tavola pitagorica 1.0 - impostazioni";
  9. const size_t kLIdTipoFile = 36;
  10.  
  11. impostazioni_t imp = {
  12.        1000.0f, /* la larghezza del foglio */
  13.        1000.0f, /* l'altezza del foglio */
  14.          50.0f, /* il margine superiore della pagina */
  15.          50.0f, /* il margine inferiore della pagina */
  16.          50.0f, /* il margine sinistro della pagina */
  17.          50.0f, /* il margine destro della pagina */
  18.           2.0f, /* lo spessore del tratto per le caselle della tabella */
  19.  
  20.     0x0000000A, /* i limiti della tavola (da 1 a ?) */
  21.     0x00009999, /* il colore del bordo delle caselle in formato 00RRGGBB */
  22.     0x00000099, /* il colore dei numeri nelle caselle in formato 00RRGGBB */
  23.     0x00000001  /* un flag 0/1 che disattiva/attiva la bordatura del foglio */
  24. };
  25.  
  26. /* chiamata da carica_impostazioni() */
  27. /* "car_tra" = carattere compreso tra */
  28. int car_tra( int c, const char *tra ) {
  29.     size_t i, l = strlen(tra);
  30.     int tmp, ce = 0;
  31.  
  32.     for( i=0; i<l; ++i ) {
  33.         tmp = (unsigned char) tra[i];
  34.         if( c == tmp ) return 1;
  35.     }
  36.  
  37.     return ce;
  38. }
  39.  
  40. /* chiamata da carica_impostazioni() */
  41. int leggi_numero( FILE *f, float *dec, unsigned long *hex ) {
  42.     int ok = 0;
  43.  
  44.     if( f && (dec||hex) ) {
  45.         char buff[32];
  46.         char *fine;
  47.         int i=0, c;
  48.  
  49.         if( dec && !hex ) {
  50.             char cifre[] = "0123456789.";
  51.             float tmpDec;
  52.  
  53.             for( c=fgetc(f); car_tra(c,cifre)&&c!=EOF&&i<31; c=fgetc(f) )
  54.                  buff[i++] = c;
  55.             buff[i] = '\0';
  56.  
  57.             tmpDec = strtof( buff, &fine );
  58.             if( buff != fine ) *dec = tmpDec;
  59.             ok = buff != fine;
  60.         }
  61.         else if( hex && !dec ) {
  62.             char cifre[] = "0123456789ABCDEFabcdef";
  63.             unsigned int tmpHex;
  64.  
  65.             for( c=fgetc(f); car_tra(c,cifre)&&c!=EOF&&i<31; c=fgetc(f) )
  66.                  buff[i++] = c;
  67.             buff[i] = '\0';
  68.  
  69.             tmpHex = strtoul( buff, &fine, 16 );
  70.             if( buff != fine ) *hex = tmpHex;
  71.             ok = buff != fine;
  72.         }
  73.  
  74.         if( ok ) while( c!='\n' && c!=EOF ) c = fgetc(f);
  75.     }
  76.     return ok;
  77. }
  78.  
  79. /* chiamata da main() */
  80. int carica_impostazioni( const char *nome_file ) {
  81.     int ok = 0;
  82.  
  83.     if( nome_file ) {
  84.         FILE *f = fopen( nome_file, "r" );
  85.  
  86.         if( f ) {
  87.             unsigned long tmpHex[Q_GLOB_HEX] = {0L};
  88.             float tmpDec[Q_GLOB_DEC] = {0.0f};
  89.             size_t i;
  90.  
  91.             /* verifica che il contenuto del file
  92.                inizi con una stringa di identificazione */
  93.             for( i=0;
  94.                  fgetc(f)==(unsigned char)kIdTipoFile[i] && i<kLIdTipoFile;
  95.                  ++i );
  96.             if( i!=kLIdTipoFile ) { fclose( f ); return 0; }
  97.  
  98.             for( i=0; i<Q_GLOB_DEC; ++i ) {
  99.                 if( !leggi_numero(f,&tmpDec[i],NULL) )
  100.                     break;
  101.             }
  102.  
  103.             if( i==Q_GLOB_DEC ) {
  104.                 for( i=0; i<Q_GLOB_HEX; ++i ) {
  105.                     if( !leggi_numero(f,NULL,&tmpHex[i]) )
  106.                         break;
  107.                 }
  108.  
  109.                 if( i==Q_GLOB_HEX ) {
  110.                     imp.wFoglio         = tmpDec[0];
  111.                     imp.hFoglio         = tmpDec[1];
  112.                     imp.margSup         = tmpDec[2];
  113.                     imp.margInf         = tmpDec[3];
  114.                     imp.margDx          = tmpDec[4];
  115.                     imp.margSx          = tmpDec[5];
  116.                     imp.spGriglia       = tmpDec[6];
  117.                     imp.dimTavola       = tmpHex[0];
  118.                     imp.colGriglia      = tmpHex[1];
  119.                     imp.colNumeri       = tmpHex[2];
  120.                     imp.riquadraFoglio  = tmpHex[3];
  121.                     ok = 1;
  122.                 }
  123.             }
  124.  
  125.             fclose( f );
  126.         }
  127.     }
  128.  
  129.     return ok;
  130. }