MODULE * WinEDA_BasePcbFrame::Get_Librairie_Module(wxWindow * winaff, const wxString & library, const wxString & ModuleName, bool show_msg_err) /*******************************************************************************/ /* 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; wxString fulllibname; char Line[512]; wxString Name; wxString ComponentName, msg; MODULE * Module; MODULE * NewModule; FILE * lib_module = NULL; unsigned ii; ComponentName = ModuleName; /* Calcul de l'adresse du dernier module: */ Module = m_Pcb->m_Modules; if( Module ) while( Module->Pnext ) Module = (MODULE*) Module->Pnext; for( ii = 0; ii < g_LibName_List.GetCount(); ii++) { fulllibname = g_LibName_List[ii]; /* Calcul du nom complet de la librairie */ fulllibname = MakeFileName(g_RealLibDirBuffer,fulllibname,LibExtBuffer); if ((lib_module = wxFopen(fulllibname, wxT("rt"))) == NULL ) { msg.Printf(_("Library <%s> not found"),fulllibname.GetData()); Affiche_Message(msg); continue ; } msg.Printf(_("Scan Lib: %s"),fulllibname.GetData()); Affiche_Message(msg); /* 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(winaff, _("File is Not a library") ); return(NULL); } /* Lecture de la liste des composants de la librairie */ Found = 0; while( !Found && GetLine(lib_module,Line, &LineNum) ) { if( strnicmp( 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); msg = CONV_FROM_UTF8(Line); if( msg.CmpNoCase(ComponentName) == 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 */ Name = CONV_FROM_UTF8(Line+8); if( Name.CmpNoCase(ComponentName) == 0 ) /* composant localise */ { NewModule = new MODULE(m_Pcb); NewModule->ReadDescr(lib_module, &LineNum); if( Module == NULL ) /* 1er Module */ { m_Pcb->m_Modules = NewModule; NewModule->Pback = m_Pcb; } else { Module->Pnext = NewModule; NewModule->Pback = Module; } fclose(lib_module) ; Affiche_Message(wxEmptyString) ; return(NewModule) ; } } fclose(lib_module) ; lib_module = 0; } if( lib_module ) fclose(lib_module) ; if ( show_msg_err ) { msg.Printf(_("Module <%s> not found"),ComponentName.GetData()); DisplayError(winaff, msg); } return(NULL) ; }
MODULE * WinEDA_ModuleEditFrame::Import_Module(wxDC * DC) /*********************************************************/ /* Importation de modules Hors librairie Lit 1 fichier type Empreinte et place le module sur PCB */ { int NbLine = 0; char Line[1024]; wxString CmpFullFileName; FILE * dest; MODULE * module = NULL; /* Lecture Fichier module */ CmpFullFileName = EDA_FileSelector( _("Import Module:"), wxEmptyString, /* Chemin par defaut */ wxEmptyString, /* nom fichier par defaut */ EXT_CMP, /* extension par defaut */ EXT_CMP_MASK, /* Masque d'affichage */ this, wxOPEN, TRUE ); if ( CmpFullFileName == wxEmptyString ) return NULL; if ( (dest = wxFopen(CmpFullFileName, wxT("rt")) ) == NULL ) { wxString msg; msg.Printf( _("File <%s> not found"), CmpFullFileName.GetData()); DisplayError(this, msg) ; return NULL; } /* Lecture Entete */ GetLine(dest, Line, &NbLine); if(strnicmp( Line, ENTETE_LIBRAIRIE, L_ENTETE_LIB) != 0) { DisplayError(this, _("Not a module file")); return NULL; } /* Lecture du fichier: recherche du debut de la descr module */ while( GetLine(dest, Line, &NbLine) != NULL) { if(strnicmp( Line,"$MODULE",7) == 0) break; } module = new MODULE(m_Pcb); module->ReadDescr(dest, &NbLine); fclose(dest); /* Mise a jour du chainage */ if( m_Pcb->m_Modules ) { m_Pcb->m_Modules->Pback = module; } module->Pnext = m_Pcb->m_Modules; module->Pback = m_Pcb; m_Pcb->m_Modules = module; /* Affichage des caracteristiques : */ module->Display_Infos(this); Place_Module(module, DC) ; m_Pcb->m_Status_Pcb = 0 ; build_liste_pads(); return module; }