/**************/ /* savecmp() */ /**************/ /* sauvegarde la liste des associations composants/empreintes */ #include "fctsys.h" #include "wxstruct.h" #include "common.h" #include "confirm.h" #include "kicad_string.h" #include "gestfich.h" #include "cvpcb.h" #include "protos.h" #include "cvstruct.h" /* Chaines de caractere d'identification */ char EnteteCmpMod[] = { "Cmp-Mod V01" }; /****************************************************************************/ int WinEDA_CvpcbFrame::SaveComponentList( const wxString& NetlistFullFileName ) /*****************************************************************************/ /* Routine de sauvegarde du fichier des modules * Retourne 1 si OK * 0 si ecriture non faite */ { STORECMP* Cmp; wxString FullFileName; char Line[1024]; wxString Title = g_Main_Title + wxT( " " ) + GetBuildVersion(); /* calcul du nom du fichier */ FullFileName = NetlistFullFileName; ChangeFileNameExt( FullFileName, g_ExtCmpBuffer ); dest = wxFopen( FullFileName, wxT( "wt" ) ); if( dest == NULL ) return 0; /* Erreur ecriture */ fprintf( dest, "%s", EnteteCmpMod ); fprintf( dest, " Created by %s", CONV_TO_UTF8( Title ) ); fprintf( dest, " date = %s\n", DateAndTime( Line ) ); for( Cmp = g_BaseListeCmp; Cmp != NULL; Cmp = Cmp->Pnext ) { fprintf( dest, "\nBeginCmp\n" ); fprintf( dest, "TimeStamp = %s;\n", CONV_TO_UTF8( Cmp->m_TimeStamp ) ); fprintf( dest, "Reference = %s;\n", CONV_TO_UTF8( Cmp->m_Reference ) ); fprintf( dest, "ValeurCmp = %s;\n", CONV_TO_UTF8( Cmp->m_Valeur ) ); fprintf( dest, "IdModule = %s;\n", CONV_TO_UTF8( Cmp->m_Module ) ); fprintf( dest, "EndCmp\n" ); } fprintf( dest, "\nEndListe\n" ); fclose( dest ); return 1; } /****************/ int loadcmp() /***************/ /* recupere la liste des associations composants/empreintes */ { wxString timestamp, valeur, ilib, namecmp; bool read_cmp_data = FALSE, eof = FALSE; STORECMP* Cmp; char Line[1024], * ident, * data; wxString FullFileName; /* calcul du nom du fichier */ FullFileName = FFileName; ChangeFileNameExt( FullFileName, g_ExtCmpBuffer ); source = wxFopen( FullFileName, wxT( "rt" ) ); if( source == NULL ) { return 0; } /* Identification du Type de fichier CmpMod */ if( fgets( Line, 79, source ) == 0 ) return 0; if( strnicmp( Line, EnteteCmpMod, 11 ) != 0 ) /* old file version*/ { fclose( source ); DisplayError( NULL, wxT( "Old version of Componaent file, recreate it!" ) ); return 0; } /* lecture de la liste */ while( !eof && fgets( Line, 79, source ) != 0 ) { if( strnicmp( Line, "EndListe", 8 ) == 0 ) break; /* Recherche du debut de description du composant */ if( strnicmp( Line, "BeginCmp", 8 ) != 0 ) continue; timestamp.Empty(); valeur.Empty(); ilib.Empty(); namecmp.Empty(); read_cmp_data = TRUE; while( !eof && read_cmp_data ) { if( fgets( Line, 1024, source ) == 0 ) { eof = TRUE; break; } if( strnicmp( Line, "EndCmp", 6 ) == 0 ) { read_cmp_data = TRUE; break; } ident = strtok( Line, "=;\n\r" ); data = strtok( NULL, ";\n\r" ); if( strnicmp( ident, "TimeStamp", 9 ) == 0 ) { timestamp = CONV_FROM_UTF8( data ); timestamp.Trim( TRUE ); timestamp.Trim( FALSE ); continue; } if( strnicmp( ident, "Reference", 9 ) == 0 ) { namecmp = CONV_FROM_UTF8( data ); namecmp.Trim( TRUE ); namecmp.Trim( FALSE ); continue; } if( strnicmp( ident, "ValeurCmp", 9 ) == 0 ) { valeur = CONV_FROM_UTF8( data ); valeur.Trim( TRUE ); valeur.Trim( FALSE ); continue; } if( strnicmp( ident, "IdModule", 8 ) == 0 ) { ilib = CONV_FROM_UTF8( data ); ilib.Trim( TRUE ); ilib.Trim( FALSE ); continue; } } /* Fin lecture description de 1 composant */ /* Recherche du composant correspondant en netliste et * mise a jour de ses parametres */ for( Cmp = g_BaseListeCmp; Cmp != NULL; Cmp = Cmp->Pnext ) { if( selection_type == 1 ) { if( timestamp != Cmp->m_TimeStamp ) continue; } else if( namecmp != Cmp->m_Reference ) continue; /* composant identifie , copie du nom du module correspondant */ Cmp->m_Module = ilib; } } fclose( source ); return 1; }