117 lines
3.5 KiB
C++
117 lines
3.5 KiB
C++
/***************************************************/
|
|
/* Localisation des elements pointes par la souris */
|
|
/***************************************************/
|
|
|
|
#include "fctsys.h"
|
|
|
|
#include "wxstruct.h"
|
|
#include "common.h"
|
|
#include "cvpcb.h"
|
|
#include "protos.h"
|
|
|
|
|
|
/*****************************************************************/
|
|
MODULE* WinEDA_DisplayFrame::Get_Module( const wxString& CmpName )
|
|
/*****************************************************************/
|
|
|
|
/*
|
|
* Analyse les LIBRAIRIES pour trouver le module demande
|
|
* Si ce module est trouve, le copie en memoire, et le
|
|
* chaine en fin de liste des modules
|
|
* - Entree:
|
|
* name_cmp = nom du module
|
|
* - Retour:
|
|
* Pointeur sur le nouveau module.
|
|
*/
|
|
{
|
|
int LineNum, Found = 0;
|
|
unsigned ii;
|
|
char Line[1024], Name[255];
|
|
wxString libname;
|
|
MODULE* Module = NULL;
|
|
|
|
for( ii = 0; ii < g_LibName_List.GetCount(); ii++ )
|
|
{
|
|
/* Calcul du nom complet de la librairie */
|
|
libname = MakeFileName( g_RealLibDirBuffer, g_LibName_List[ii], LibExtBuffer );
|
|
|
|
if( ( lib_module = wxFopen( libname, wxT( "rt" ) ) ) == NULL )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
/* lecture entete chaine definie par ENTETE_LIBRAIRIE */
|
|
LineNum = 0;
|
|
GetLine( lib_module, Line, &LineNum );
|
|
StrPurge( Line );
|
|
|
|
if( strnicmp( Line, ENTETE_LIBRAIRIE, L_ENTETE_LIB ) != 0 )
|
|
{
|
|
DisplayError( this, _( "This file is NOT a library file" ) );
|
|
return NULL;
|
|
}
|
|
|
|
/* Lecture de la liste des composants de la librairie */
|
|
Found = 0;
|
|
while( !Found && GetLine( lib_module, Line, &LineNum ) )
|
|
{
|
|
if( strncmp( Line, "$MODULE", 6 ) == 0 )
|
|
break;
|
|
|
|
if( strnicmp( Line, "$INDEX", 6 ) == 0 )
|
|
{
|
|
while( GetLine( lib_module, Line, &LineNum ) )
|
|
{
|
|
if( strnicmp( Line, "$EndINDEX", 9 ) == 0 )
|
|
break;
|
|
|
|
StrPurge( Line );
|
|
if( stricmp( Line, CONV_TO_UTF8( CmpName ) ) == 0 )
|
|
{
|
|
Found = 1;
|
|
break; /* Trouve! */
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Lecture de la librairie */
|
|
while( Found && GetLine( lib_module, Line, &LineNum ) )
|
|
{
|
|
if( Line[0] != '$' )
|
|
continue;
|
|
|
|
if( Line[1] != 'M' )
|
|
continue;
|
|
|
|
if( strnicmp( Line, "$MODULE", 7 ) != 0 )
|
|
continue;
|
|
|
|
/* Lecture du nom du composant */
|
|
sscanf( Line + 7, " %s", Name );
|
|
if( stricmp( Name, CONV_TO_UTF8( CmpName ) ) == 0 ) /* composant localise */
|
|
{
|
|
Module = new MODULE( GetBoard() );
|
|
|
|
// Switch the locale to standard C (needed to print floating point numbers like 1.3)
|
|
SetLocaleTo_C_standard();
|
|
Module->ReadDescr( lib_module, &LineNum );
|
|
SetLocaleTo_Default(); // revert to the current locale
|
|
Module->SetPosition( wxPoint( 0, 0 ) );
|
|
fclose( lib_module );
|
|
return Module;
|
|
}
|
|
}
|
|
|
|
fclose( lib_module ); lib_module = 0;
|
|
}
|
|
|
|
if( lib_module )
|
|
fclose( lib_module );
|
|
|
|
wxString msg;
|
|
msg.Printf( _( "Module %s not found" ), CmpName.GetData() );
|
|
DisplayError( this, msg );
|
|
return NULL;
|
|
}
|