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
Codificatore - comandi.cpp

comandi.cpp

Caricato da: AldoBaldo
Scarica il programma completo

  1. #include "comandi.h"
  2.  
  3.  
  4. // un puntatore a un buffer per il percorso del file
  5. static char *gPercFile = NULL;
  6.  
  7.  
  8. void Codifica( HWND hwnd ) {
  9.     char *percFile;
  10.  
  11.     try {
  12.         CDF *pCdf = (CDF*) GetWindowLong( hwnd, GWL_USERDATA );
  13.  
  14.         pCdf->elabora();
  15.  
  16.         percFile = ScegliFile( hwnd, kCDFEstensioneFileCodificato,
  17.             CreaPercorsoFileOutput(kCDFEstensioneFileCodificato) );
  18.  
  19.         pCdf->salva_dati( percFile );
  20.  
  21.         AggiornaPulsanti( hwnd, pCdf );
  22.     } catch( const char *strErr ) {
  23.         Errore( strErr, hwnd );
  24.     }
  25. }
  26.  
  27.  
  28. void Decodifica( HWND hwnd ) {
  29.     char *percFile;
  30.  
  31.     try {
  32.         CDF *pCdf = (CDF*) GetWindowLong( hwnd, GWL_USERDATA );
  33.  
  34.         pCdf->elabora();
  35.  
  36.         percFile = ScegliFile( hwnd, kCDFEstensioneFileInChiaro,
  37.             CreaPercorsoFileOutput(kCDFEstensioneFileInChiaro) );
  38.  
  39.         pCdf->salva_dati( percFile );
  40.  
  41.         AggiornaPulsanti( hwnd, pCdf );
  42.     } catch( const char *strErr ) {
  43.         Errore( strErr, hwnd );
  44.     }
  45. }
  46.  
  47.  
  48. void CaricaChiave( HWND hwnd ) {
  49.     unsigned long lStrChiave;
  50.     char *strChiave = RicavaAppuntiTxt( NULL, &lStrChiave );
  51.     CDF *pCdf = (CDF*) GetWindowLong( hwnd, GWL_USERDATA );
  52.  
  53.     try {
  54.         pCdf->imposta_chiave( strChiave, lStrChiave );
  55.         delete[] strChiave;
  56.     } catch( const char *strErr ) {
  57.         delete[] strChiave;
  58.         Errore( strErr, hwnd );
  59.     }
  60.  
  61.     PopolaListaCaratteriMancanti( hwnd, pCdf );
  62.     AggiornaInformazioniChiave( hwnd, pCdf );
  63.     AggiornaPulsanti( hwnd, pCdf );
  64. }
  65.  
  66.  
  67. void CaricaDati( HWND hwnd, int tipoDati ) {
  68.     delete[] gPercFile;
  69.  
  70.     if( tipoDati == kCDFInChiaro )
  71.         gPercFile = ScegliFile( hwnd, kCDFEstensioneFileInChiaro );
  72.     else gPercFile = ScegliFile( hwnd, kCDFEstensioneFileCodificato );
  73.     if( gPercFile == NULL ) return;
  74.  
  75.     CompletaCaricamentoDati( hwnd, gPercFile );
  76. }
  77.  
  78.  
  79. void CaricaDati( HWND hwnd, LPSTR dd ) {
  80.     delete[] gPercFile;
  81.  
  82.     gPercFile = RicavaPrimoFileTrascinato(dd);
  83.     if( gPercFile == NULL ) return;
  84.  
  85.     CompletaCaricamentoDati( hwnd, gPercFile );
  86. }
  87.  
  88.  
  89. void CompletaCaricamentoDati( HWND hwnd, const char *percFile ) {
  90.     if( percFile == NULL ) return;
  91.  
  92.     const char *est = TrovaEstensione( percFile );
  93.     if( est == NULL ) return;
  94.  
  95.     int tipoDati = DeterminaTipoDati( est );
  96.     if( tipoDati == kCDFNoDati ) return;
  97.  
  98.     unsigned long dimFile;
  99.     char *pDati = CaricaDatiDaFile( percFile, &dimFile );
  100.     CDF *pCdf = (CDF*) GetWindowLong( hwnd, GWL_USERDATA );
  101.  
  102.     if( pDati != NULL ) {
  103.         try {
  104.             pCdf->imposta_dati( tipoDati, pDati, dimFile );
  105.             delete[] pDati;
  106.         } catch( const char *strErr ) {
  107.             delete[] pDati;
  108.             Errore( strErr, hwnd );
  109.         }
  110.     }
  111.     else {
  112.         Errore( "File non caricato.", hwnd );
  113.         return;
  114.     }
  115.  
  116.     PopolaListaCaratteriMancanti( hwnd, pCdf );
  117.     AggiornaInformazioniChiave( hwnd, pCdf );
  118.     AggiornaPulsanti( hwnd, pCdf );
  119. }
  120.  
  121.  
  122. char *CaricaDatiDaFile( const char *nomeFile, unsigned long *dimFile ) {
  123.     FILE *f = fopen( nomeFile, "r" );
  124.  
  125.     if( f != NULL ) {
  126.         char *d = NULL;
  127.         unsigned long i, l;
  128.         int c;
  129.  
  130.         for( l=0, c=fgetc(f); c!=EOF; c=fgetc(f), ++l );
  131.         rewind(f);
  132.  
  133.         try {
  134.             d = new char[l+1];
  135.             for( i=0; i<l; ++i )
  136.                 d[i] = fgetc(f);
  137.             d[i] = '\0';
  138.             *dimFile = i;
  139.         } catch( ... ) {
  140.             fclose(f);
  141.             return NULL;
  142.         }
  143.  
  144.         fclose(f);
  145.         return d;
  146.     }
  147.     else {
  148.         return NULL;
  149.     }
  150. }
  151.  
  152.  
  153. const char *TrovaEstensione( const char *s, unsigned long l ) {
  154.     if( s == NULL ) return NULL;
  155.     l = l!=0xFFFFFFFF ? l : strlen( s );
  156.     const char *p = s + l;
  157.  
  158.     while( *(--p)!='.' && l-- );
  159.  
  160.     if( l == 0xFFFFFFFF )
  161.         return NULL;
  162.     else return ++p;
  163. }
  164.  
  165.  
  166. int DeterminaTipoDati( const char *est ) {
  167.     if( !strcmp(est,kCDFEstensioneFileCodificato) )
  168.         return kCDFCodificati;
  169.     else if( !strcmp(est,kCDFEstensioneFileInChiaro) )
  170.         return kCDFInChiaro;
  171.     else return kCDFNoDati;
  172. }
  173.  
  174.  
  175. char *CreaPercorsoFileOutput( const char *estensione ) {
  176.     unsigned long lPercFile = strlen( gPercFile );
  177.     const char *p = TrovaEstensione( gPercFile );
  178.  
  179.     if( p == NULL ) {
  180.         delete[] gPercFile;
  181.         gPercFile = NULL;
  182.         return gPercFile;
  183.     }
  184.  
  185.     unsigned long lVecchiaEstensione = strlen( p );
  186.     unsigned long lNuovaEstensione   = strlen( estensione );
  187.  
  188.     try {
  189.         char *pfu = new char[lPercFile-lVecchiaEstensione+lNuovaEstensione+1];
  190.         strcpy( pfu, gPercFile );
  191.         strcpy( pfu+(p-gPercFile), estensione );
  192.         delete[] gPercFile;
  193.         gPercFile = pfu;
  194.         return gPercFile;
  195.     } catch( ... ) {
  196.         return NULL;
  197.     }
  198. }