Commit 4f8049f8 authored by jean-pierre charras's avatar jean-pierre charras
Browse files

fixed 2 minor bugs

parent de509f57
Loading
Loading
Loading
Loading
+0 −4
Original line number Original line Diff line number Diff line
@@ -115,11 +115,7 @@ public:
    int              SaveNetList( const wxString& FullFileName );
    int              SaveNetList( const wxString& FullFileName );
    int              SaveComponentList( const wxString& FullFileName );
    int              SaveComponentList( const wxString& FullFileName );
    bool             ReadNetList();
    bool             ReadNetList();
    int              rdpcad();
    int              ReadSchematicNetlist();
    int              ReadSchematicNetlist();
    int              ReadFootprintFilterList( FILE* f );
    int              ReadViewlogicWirList();
    int              ReadViewlogicNetList();
    void             LoadProjectFile( const wxString& FileName );
    void             LoadProjectFile( const wxString& FileName );
    void             SaveProjectFile( const wxString& fileName );
    void             SaveProjectFile( const wxString& fileName );
    virtual void     LoadSettings();
    virtual void     LoadSettings();
+97 −106
Original line number Original line Diff line number Diff line
@@ -18,11 +18,14 @@
#include "protos.h"
#include "protos.h"
#include "cvstruct.h"
#include "cvstruct.h"


#include "richio.h"



#define SEPARATEUR '|'  /* Separator character in NetList */
#define SEPARATEUR '|'  /* Separator character in NetList */




static int ReadPinConnection( FILE* f, COMPONENT* CurrentCmp );
static int ReadPinConnection( FILE_LINE_READER& aNetlistReader, COMPONENT* CurrentCmp );
static int ReadFootprintFilterList( FILE_LINE_READER& aNetlistReader, COMPONENT_LIST& aComponentsList );




/* Sort the list alphabetically by component and and returns
/* Sort the list alphabetically by component and and returns
@@ -86,17 +89,12 @@ static int ReadPinConnection( FILE* f, COMPONENT* CurrentCmp );
int WinEDA_CvpcbFrame::ReadSchematicNetlist()
int WinEDA_CvpcbFrame::ReadSchematicNetlist()
{
{
    char       alim[1024];
    char       alim[1024];
    int        i, k, l;
    int        idx, jj, k, l;
    char*      LibName;
    char*      LibName;
    char       Line[BUFFER_CHAR_SIZE + 1];
    char       cbuffer[BUFFER_CHAR_SIZE];      /* temporary storage */
    wxString   component_reference;  /* buffer for component reference (U1, R4...) */
    wxString   schematic_timestamp;  /* buffer for component time stamp */
    wxString   footprint_name;       /* buffer for component footprint field */
    wxString   component_value;      /* buffer for component values (470K, 22nF ...) */
    char* ptchar;
    char* ptchar;
    COMPONENT* Cmp;
    COMPONENT* Cmp;
    FILE*      source;
    FILE*      source;
    char*      result;


    m_modified = false;
    m_modified = false;
    m_isEESchemaNetlist = false;
    m_isEESchemaNetlist = false;
@@ -116,22 +114,26 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
        return -1;
        return -1;
    }
    }


    FILE_LINE_READER netlistReader( source,  BUFFER_CHAR_SIZE );
    char* Line = netlistReader;

    /* Read the file header (must be  "( { OrCAD PCB" or "({ OrCAD PCB" )
    /* Read the file header (must be  "( { OrCAD PCB" or "({ OrCAD PCB" )
     * or "# EESchema Netlist"
     * or "# EESchema Netlist"
     */
     */
    result = fgets( Line, BUFFER_CHAR_SIZE, source );
    netlistReader.ReadLine( );

    /* test for netlist type PCB2 */
    /* test for netlist type PCB2 */
    i = strnicmp( Line, "( {", 3 );
    idx = strnicmp( Line, "( {", 3 );
    if( i != 0 )
    if( idx != 0 )
        i = strnicmp( Line, "({", 2 );
        idx = strnicmp( Line, "({", 2 );
    if( i != 0 )
    if( idx != 0 )
    {
    {
        i = strnicmp( Line, "# EESchema", 7 ); /* net type EESchema */
        idx = strnicmp( Line, "# EESchema", 7 ); /* net type EESchema */
        if( i == 0 )
        if( idx == 0 )
            m_isEESchemaNetlist = TRUE;
            m_isEESchemaNetlist = true;
    }
    }


    if( i != 0 )
    if( idx != 0 )
    {
    {
        wxString msg, Lineconv = CONV_FROM_UTF8( Line );
        wxString msg, Lineconv = CONV_FROM_UTF8( Line );
        msg.Printf( _( "Unknown file format <%s>" ), Lineconv.GetData() );
        msg.Printf( _( "Unknown file format <%s>" ), Lineconv.GetData() );
@@ -148,56 +150,54 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
    {
    {
        /* Search the beginning of a component description */
        /* Search the beginning of a component description */


        if( fgets( Line, BUFFER_CHAR_SIZE, source )  == 0 )
        if( netlistReader.ReadLine( ) == 0 )
            break;
            break;


        /* Remove blanks */
        /* Remove blanks */
        i = 0; while( Line[i] == ' ' )
        idx = 0;
            i++;
        while( Line[idx] == ' ' )
            idx++;


        /* remove empty lines : */
        /* remove empty lines : */
        if( Line[i] < ' ' )
        if( Line[idx] < ' ' )
            continue;
            continue;


        if( strnicmp( &Line[i], "{ Allowed footprints", 20 ) == 0 )
        if( strnicmp( &Line[idx], "{ Allowed footprints", 20 ) == 0 )
        {
        {
            ReadFootprintFilterList( source );
            ReadFootprintFilterList( netlistReader, m_components );
            continue;
            continue;
        }
        }


        if( strnicmp( &Line[i], "( ", 2 ) != 0 )
        if( strnicmp( &Line[idx], "( ", 2 ) != 0 )
            continue;
            continue;


        /*******************************/
        /*******************************/
        /* Component description found */
        /* Component description found */
        /*******************************/
        /*******************************/
        while( Line[i] != ' ' )
        Cmp = new COMPONENT();  // Creates the new component storage
            i++;


        while( Line[i] == ' ' )
        while( Line[idx] != ' ' )
            i++;
            idx++;


        /* i points the beginning of the schematic time stamp */
        while( Line[idx] == ' ' )
            idx++;


        schematic_timestamp.Empty();
        /* idx points the beginning of the schematic time stamp */
        while( Line[i] != ' ' )
        jj = 0;
            schematic_timestamp.Append( Line[i++] );
        while( Line[idx] != ' ' && Line[idx] )
            cbuffer[jj++] = Line[idx++];
        cbuffer[jj] = 0;
        Cmp->m_TimeStamp = CONV_FROM_UTF8(cbuffer);


        /* search val/ref.lib */
        /* search val/ref.lib */
        while( Line[i] == ' ' )
        while( Line[idx] == ' ' )
            i++;
            idx++;

        /* i points the component value */
        LibName = Line + i;


        component_reference.Empty();
        /* idx points the component value */
        footprint_name.Empty();
        LibName = Line + idx;
        component_value.Empty();
        memset( alim, 0, sizeof(alim) );


        /* Read value */
        /* Read value */

        ptchar = strstr( &Line[idx], " " );  // Search end of value field (space)
        ptchar = strstr( &Line[i], " " );  // Search end of value field (space)
        if( ptchar == 0 )
        if( ptchar == 0 )
        {
        {
            wxString msg;
            wxString msg;
@@ -208,62 +208,57 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
        else
        else
            k = ptchar - Line;
            k = ptchar - Line;


        for( ; i < k; i++ )
        for( jj = 0; idx < k; idx++ )
        {
        {
            if( Line[i] == SEPARATEUR )
            if( Line[idx] == SEPARATEUR )
                break;
                break;
            footprint_name.Append( Line[i] );
            cbuffer[jj++] = Line[idx];
        }
        }
        cbuffer[jj] = 0;
        Cmp->m_Module = CONV_FROM_UTF8(cbuffer);


        if( (Line[++i] == '(') && (Line[k - 1] == ')' ) )
        if( (Line[++idx] == '(') && (Line[k - 1] == ')' ) )
        {
        {
            i++; l = 0; while( k - 1 > i )
            idx++; l = 0;
                alim[l++] = Line[i++];
            while( k - 1 > idx )
                alim[l++] = Line[idx++];
        }
        }
        else
        else
            i = k;
            idx = k;


        /* Search component reference */
        /* Search component reference */
        while( Line[i] != ' ' )
        while( Line[idx] != ' ' && Line[idx] )
            i++;
            idx++;


        /* goto end of value field */
        /* goto end of value field */
        while( Line[i] == ' ' )
        while( Line[idx] == ' ' && Line[idx] )
            i++;
            idx++;


        /* goto beginning of reference */
        /* goto beginning of reference */
        for( ; ; i++ )
        for( jj = 0; ; idx++ )
        {
        {
#if defined(KICAD_GOST)
            if( Line[idx] == ' ' || Line[idx] == 0)
            if( Line[i] == ' ' )
#else
            if( Line[i] <= ' ' )
#endif
                break;
                break;
            component_reference.Append( Line[i] );
            cbuffer[jj++] = Line[idx];
        }
        }
        cbuffer[jj] = 0;
        Cmp->m_Reference = CONV_FROM_UTF8(cbuffer);


        /* Search component value */
        /* Search component value */
        while( Line[i] == ' ' )
        while( Line[idx] == ' ' && Line[idx] )
            i++;
            idx++;


        /** goto beginning of value */
        /** goto beginning of value */


        for( ; ; i++ )
        for( jj = 0 ; ; idx++ )
        {
        {
#if defined(KICAD_GOST)
            if( (Line[idx] == ' ') || (Line[idx] == '\n') || (Line[idx] == '\r') || Line[idx] == 0)
            if( (Line[i] == ' ') || (Line[i] == '\n') || (Line[i] == '\r') )
#else
            if( Line[i] <= ' ' )
#endif
                break;
                break;
            component_value.Append( Line[i] );
            cbuffer[jj++] = Line[idx];
        }
        }
        cbuffer[jj] = 0;
        Cmp->m_Value = CONV_FROM_UTF8(cbuffer);


        /* Store info for this component */
        Cmp = new COMPONENT();
        Cmp->m_Reference = component_reference;
        Cmp->m_Value     = component_value;
        m_components.push_back( Cmp );
        m_components.push_back( Cmp );


        if(  m_isEESchemaNetlist )   /* copy footprint name: */
        if(  m_isEESchemaNetlist )   /* copy footprint name: */
@@ -277,9 +272,8 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
                }
                }
            }
            }
        }
        }
        Cmp->m_TimeStamp = schematic_timestamp;


        ReadPinConnection( source, Cmp );
        ReadPinConnection( netlistReader, Cmp );
    }
    }


    fclose( source );
    fclose( source );
@@ -290,15 +284,15 @@ int WinEDA_CvpcbFrame::ReadSchematicNetlist()
}
}




int WinEDA_CvpcbFrame::ReadFootprintFilterList( FILE* f )
int ReadFootprintFilterList(  FILE_LINE_READER& aNetlistReader, COMPONENT_LIST& aComponentsList )
{
{
    char       Line[BUFFER_CHAR_SIZE + 1];
    char*       Line = aNetlistReader;
    wxString   CmpRef;
    wxString   CmpRef;
    COMPONENT* Cmp = NULL;
    COMPONENT* Cmp = NULL;


    for( ; ; )
    for( ; ; )
    {
    {
        if( fgets( Line, BUFFER_CHAR_SIZE, f )  == 0 )
        if( aNetlistReader.ReadLine( )  == 0 )
            break;
            break;
        if( strnicmp( Line, "$endlist", 8 ) == 0 )
        if( strnicmp( Line, "$endlist", 8 ) == 0 )
        {
        {
@@ -311,14 +305,13 @@ int WinEDA_CvpcbFrame::ReadFootprintFilterList( FILE* f )
        if( strnicmp( Line, "$component", 10 ) == 0 ) // New component ref found
        if( strnicmp( Line, "$component", 10 ) == 0 ) // New component ref found
        {
        {
            CmpRef = CONV_FROM_UTF8( Line + 11 );
            CmpRef = CONV_FROM_UTF8( Line + 11 );
            CmpRef.Trim( TRUE );
            CmpRef.Trim( true );
            CmpRef.Trim( FALSE );
            CmpRef.Trim( false );


            /* Search the new component in list */
            /* Search the new component in list */
            BOOST_FOREACH( COMPONENT& component, m_components )
            BOOST_FOREACH( COMPONENT & component, aComponentsList )
            {
            {
                Cmp = &component;
                Cmp = &component;

                if( Cmp->m_Reference == CmpRef )
                if( Cmp->m_Reference == CmpRef )
                    break;
                    break;
            }
            }
@@ -326,8 +319,8 @@ int WinEDA_CvpcbFrame::ReadFootprintFilterList( FILE* f )
        else if( Cmp )
        else if( Cmp )
        {
        {
            wxString fp = CONV_FROM_UTF8( Line + 1 );
            wxString fp = CONV_FROM_UTF8( Line + 1 );
            fp.Trim( FALSE );
            fp.Trim( false );
            fp.Trim( TRUE );
            fp.Trim( true );
            Cmp->m_FootprintFilter.Add( fp );
            Cmp->m_FootprintFilter.Add( fp );
        }
        }
    }
    }
@@ -336,20 +329,18 @@ int WinEDA_CvpcbFrame::ReadFootprintFilterList( FILE* f )
}
}




int ReadPinConnection( FILE* f, COMPONENT* Cmp )
int ReadPinConnection( FILE_LINE_READER& aNetlistReader, COMPONENT* Cmp )
{
{
    int      i, jj;
    int      i, jj;
    wxString numpin;
    char*     Line = aNetlistReader;
    wxString net;
    char cbuffer[BUFFER_CHAR_SIZE];
    char     Line[BUFFER_CHAR_SIZE + 1];
    PIN*     Pin     = NULL;


    for( ; ; )
    for( ; ; )
    {
    {
        /* Find beginning of description. */
        /* Find beginning of description. */
        for( ; ; )
        for( ; ; )
        {
        {
            if( fgets( Line, BUFFER_CHAR_SIZE, f ) == 0 )
            if( aNetlistReader.ReadLine( ) == 0 )
                return -1;
                return -1;


            /* Remove blanks from the beginning of the line. */
            /* Remove blanks from the beginning of the line. */
@@ -370,31 +361,31 @@ int ReadPinConnection( FILE* f, COMPONENT* Cmp )
            if( Line[i] == ')' )
            if( Line[i] == ')' )
                return 0;
                return 0;


            net.Empty();
            PIN * Pin = new PIN();
            numpin.Empty();


            /* Read pin name, 4 letters */
            /* Read pin name, usually 4 letters */
            for( jj = 0; jj < 4; jj++, i++ )
            for( jj = 0; ; i++ )
            {
            {
                if( Line[i] == ' ' )
                if( Line[i] == ' ' || Line[i] == 0 )
                    break;
                    break;
                numpin.Append( Line[i] );
                cbuffer[jj++] = Line[i];
            }
            }
            cbuffer[jj] =  0;
            Pin->m_Number = CONV_FROM_UTF8(cbuffer);


            /* Read netname */
            /* Read netname */
            while( Line[i] == ' ' )
            while( Line[i] == ' ' )
                i++;
                i++;


            for( ; ; i++ )
            for( jj = 0; ; i++ )
            {
            {
                if( Line[i] <= ' ' )
                if( Line[i] == ' ' || Line[i] == '\n' || Line[i] == '\r' || Line[i] == 0 )
                    break;
                    break;
                net.Append( Line[i] );
                cbuffer[jj++] = Line[i];
            }
            }
            cbuffer[jj] =  0;
            Pin->m_Net = CONV_FROM_UTF8(cbuffer);


            Pin           = new PIN();
            Pin->m_Number = numpin;
            Pin->m_Net = net;
            Cmp->m_Pins.push_back( Pin );
            Cmp->m_Pins.push_back( Pin );
        }
        }
    }
    }
+2 −13
Original line number Original line Diff line number Diff line
@@ -159,21 +159,10 @@ void WinEDA_PcbFrame::PrepareLayerIndicator()


    if( m_HToolBar )
    if( m_HToolBar )
    {
    {
#if wxCHECK_VERSION( 2, 8, 3 ) & !defined(__WXX11__)
        m_HToolBar->SetToolBitmap( ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR,
        m_HToolBar->SetToolNormalBitmap( ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR,
                                         *LayerPairBitmap );
                                         *LayerPairBitmap );
#else
        int pos = m_HToolBar->GetToolPos( ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR );
        if( pos != wxNOT_FOUND )
        {
            m_HToolBar->DeleteTool( ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR );
            m_HToolBar->InsertTool( pos, ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR,
                                    *LayerPairBitmap, wxNullBitmap, false,
                                    NULL, SEL_LAYER_HELP );
        m_HToolBar->Realize();
        m_HToolBar->Realize();
    }
    }
#endif
    }
}
}