kicad/cvpcb/savecmp.cpp

168 lines
4.0 KiB
C++

/**************/
/* savecmp() */
/**************/
/* sauvegarde la liste des associations composants/empreintes */
#include "fctsys.h"
#include "wxstruct.h"
#include "common.h"
#include "cvpcb.h"
#include "protos.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(void)
/***************/
/* 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) ;
}