Loading common/string.cpp +279 −233 Original line number Diff line number Diff line Loading @@ -11,21 +11,24 @@ /*********************************************************************/ int ReadDelimitedText( char* dest, char* source, int NbMaxChar ) /*********************************************************************/ /* lit et place dans dest la chaine de caractere trouvee dans source, delimitee par " . transfere NbMaxChar max retourne le nombre de codes lus dans source dest est termine par NULL * delimitee par " . * transfere NbMaxChar max * retourne le nombre de codes lus dans source * dest est termine par NULL */ { int ii, jj, flag = 0; for( ii = 0, jj = 0; ii < NbMaxChar - 1; jj++, source++ ) { if ( * source == 0 ) break; /* fin de ligne */ if( *source == 0 ) break; /* fin de ligne */ if( *source == '"' ) /* delimiteur trouve */ { if ( flag ) break; /* Fin de texte delimite */ if( flag ) break; /* Fin de texte delimite */ flag = 1; /* Marque 1er delimiteur trouve */ } else if( flag ) Loading @@ -33,45 +36,55 @@ int ii, jj, flag = 0; *dest = *source; dest++; ii++; } } *dest = 0; /* Null terminaison */ return (jj); return jj; } /********************************/ char* StrPurge( char* text ) /********************************/ /* Supprime les caracteres Space en debut de la ligne text retourne un pointeur sur le 1er caractere non Space de text * retourne un pointeur sur le 1er caractere non Space de text */ { char* ptspace; if ( text == NULL ) return NULL; while( (*text <= ' ') && *text ) text++; if( text == NULL ) return NULL; while( (*text <= ' ') && *text ) text++; ptspace = text + strlen( text ) - 1; while( (*ptspace <= ' ') && *ptspace && (ptspace >= text) ) { *ptspace = 0; ptspace--; } return(text); return text; } /*****************************************************************/ char* GetLine( FILE* File, char* Line, int* LineNum, int SizeLine ) /*****************************************************************/ /* Routine de lecture de 1 ligne utile retourne la 1ere ligne utile lue. elimine lignes vides et commentaires incremente *LineNum a chaque ligne lue * retourne la 1ere ligne utile lue. * elimine lignes vides et commentaires * incremente *LineNum a chaque ligne lue */ { do { if (fgets(Line, SizeLine, File) == NULL) return NULL; if( LineNum ) *LineNum += 1; } while (Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r' || Line[0] == 0); if( fgets( Line, SizeLine, File ) == NULL ) return NULL; if( LineNum ) *LineNum += 1; } while( Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r' || Line[0] == 0 ); strtok( Line, "\n\r" ); return Line; Loading @@ -92,9 +105,10 @@ struct tm * Date; Date->tm_mday, Date->tm_mon + 1, Date->tm_year + 1900, Date->tm_hour, Date->tm_min, Date->tm_sec ); return(Line); return Line; } /*******************************/ wxString DateAndTime() /*******************************/ Loading @@ -105,28 +119,32 @@ struct tm * Date; wxString Line; time( &Time_Buf ); Date = gmtime( &Time_Buf ); Line.Printf( wxT( "%d/%d/%d-%2.2d:%2.2d:%2.2d" ), Date->tm_mday, Date->tm_mon + 1, Date->tm_year + 1900, Date->tm_hour, Date->tm_min, Date->tm_sec ); return(Line); return Line; } /************************************************************/ int StrLenNumCmp( const wxChar* str1, const wxChar* str2, int NbMax ) /************************************************************/ /* routine (compatible qsort() ) de comparaison pour classement alphabtique Analogue a strncmp() mais les nombres sont compars selon leur valeur numrique et non pas par leur code ascii * routine (compatible qsort() ) de comparaison pour classement alphabtique * Analogue a strncmp() mais les nombres sont compars selon leur valeur numrique * et non pas par leur code ascii */ { int i; int nb1 = 0, nb2 = 0; if( (str1 == NULL) || (str2 == NULL) ) return(0); if( (str1 == NULL) || (str2 == NULL) ) return 0; for( i = 0; i < NbMax; i++ ) { Loading @@ -137,32 +155,40 @@ int nb1 = 0 , nb2 = 0; { nb1 = nb1 * 10 + *str1 - '0'; str1++; } while( isdigit( *str2 ) ) { nb2 = nb2 * 10 + *str2 - '0'; str2++; } if ( nb1 < nb2 ) return(-1) ; if ( nb1 > nb2 ) return(1) ; if( nb1 < nb2 ) return -1; if( nb1 > nb2 ) return 1; } if( *str1 < *str2 ) return(-1) ; if( *str1 > *str2 ) return(1) ; if( (*str1 == 0 ) && ( *str2 == 0 ) ) return(0) ; if( *str1 < *str2 ) return -1; if( *str1 > *str2 ) return 1; if( (*str1 == 0 ) && ( *str2 == 0 ) ) return 0; str1++; str2++; } return(0); return 0; } /***********************************************/ int StrNumICmp( const wxChar* str1, const wxChar* str2 ) /***********************************************/ /* routine (compatible qsort() ) de comparaison pour classement alphabtique, avec lower case == upper case. Analogue a stricmp() mais les nombres sont compars selon leur valeur numrique et non pas par leur code ascii * routine (compatible qsort() ) de comparaison pour classement alphabtique, * avec lower case == upper case. * Analogue a stricmp() mais les nombres sont compars selon leur valeur numrique * et non pas par leur code ascii */ { return StrLenNumICmp( str1, str2, 32735 ); Loading @@ -172,17 +198,19 @@ et non pas par leur code ascii /**************************************************************/ int StrLenNumICmp( const wxChar* str1, const wxChar* str2, int NbMax ) /**************************************************************/ /* routine (compatible qsort() ) de comparaison pour classement alphabetique, avec lower case == upper case. Analogue a stricmp() mais les nombres sont compares selon leur valeur numerique et non pas par leur code ascii * routine (compatible qsort() ) de comparaison pour classement alphabetique, * avec lower case == upper case. * Analogue a stricmp() mais les nombres sont compares selon leur valeur numerique * et non pas par leur code ascii */ { int i; int nb1 = 0, nb2 = 0; if( (str1 == NULL) || (str2 == NULL) ) return(0); if( (str1 == NULL) || (str2 == NULL) ) return 0; for( i = 0; i < NbMax; i++ ) { Loading @@ -193,21 +221,28 @@ int nb1 = 0 , nb2 = 0; { nb1 = nb1 * 10 + *str1 - '0'; str1++; } while( isdigit( *str2 ) ) { nb2 = nb2 * 10 + *str2 - '0'; str2++; } if ( nb1 < nb2 ) return(-1) ; if ( nb1 > nb2 ) return(1) ; if( nb1 < nb2 ) return -1; if( nb1 > nb2 ) return 1; } if( toupper(*str1) < toupper(*str2) ) return(-1) ; if( toupper(*str1) > toupper(*str2) ) return(1) ; if( (*str1 == 0 ) && ( *str2 == 0 ) ) return(0) ; if( toupper( *str1 ) < toupper( *str2 ) ) return -1; if( toupper( *str1 ) > toupper( *str2 ) ) return 1; if( (*str1 == 0 ) && ( *str2 == 0 ) ) return 0; str1++; str2++; } return(0); return 0; } Loading @@ -215,12 +250,13 @@ int nb1 = 0 , nb2 = 0; bool WildCompareString( const wxString& pattern, const wxString& string_to_tst, bool case_sensitive ) /***********************************************************************/ /* compare 2 noms de composants, selon regles usuelles ( Jokers * , ? , autoriss). la chaine de reference est "pattern" si case_sensitive == TRUE, comparaison exacte retourne TRUE si match retourne FALSE si differences * ( Jokers * , ? , autoriss). * la chaine de reference est "pattern" * si case_sensitive == TRUE, comparaison exacte * retourne TRUE si match * retourne FALSE si differences */ { const wxChar* cp = NULL, * mp = NULL; Loading @@ -240,7 +276,8 @@ wxString _pattern, _string_to_tst; while( (*string) && (*wild != '*') ) { if ( (*wild != *string) && (*wild != '?') ) return FALSE; if( (*wild != *string) && (*wild != '?') ) return FALSE; wild++; string++; } Loading @@ -248,7 +285,8 @@ wxString _pattern, _string_to_tst; { if( *wild == '*' ) { if (!*++wild) return 1; if( ! * ++wild ) return 1; mp = wild; cp = string + 1; } Loading @@ -264,41 +302,48 @@ wxString _pattern, _string_to_tst; } } while (*wild == '*') { while( *wild == '*' ) { wild++; } return ! * wild; } /***********************************************/ void ChangeSpaces( char* Text, int NewChar ) /***********************************************/ /* Change dans un texte les espaces en NewChar */ { if ( Text == NULL ) return; if( Text == NULL ) return; while( *Text ) { if( *Text == ' ') *Text = (char) NewChar; if( *Text == ' ' ) *Text = (char) NewChar; Text++; } } /***************************/ char* to_point( char* Text ) /**************************/ /* convertit les , en . dans une chaine. utilis pour compenser l'internalisationde la fct printf qui genere les flottants avec une virgule au lieu du point * l'internalisationde la fct printf * qui genere les flottants avec une virgule au lieu du point */ { char* line = Text; if ( Text == NULL ) return NULL; if( Text == NULL ) return NULL; for( ; *Text != 0; Text++ ) { if (*Text == ',') *Text = '.'; if( *Text == ',' ) *Text = '.'; } return line; Loading @@ -308,8 +353,9 @@ char * line = Text; /********************************/ char* strupper( char* Text ) /********************************/ /* Change les caracteres 'a' ... 'z' en 'A' ... 'Z'. dans la chaine Text. Retourne Text * Retourne Text */ { char* code = Text; Loading @@ -318,11 +364,11 @@ char * code = Text; { while( *code ) { if( (*code >= 'a') && (*code <= 'z') ) *code += 'A' - 'a'; if( (*code >= 'a') && (*code <= 'z') ) *code += 'A' - 'a'; code++; } } return(Text); return Text; } pcbnew/drc.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -61,15 +61,20 @@ void WinEDA_PcbFrame::Install_Test_DRC_Frame( wxDC* DC ) void DRC::ShowDialog() { updatePointers(); bool isNew = false; if( !m_ui ) { m_ui = new DrcDialog( this, m_mainWindow ); isNew = true; } // @todo enter retentitive member data into the DrcDialog here if( isNew ) m_ui->Show(true); else m_ui->Raise(); // @todo capture the UI entered data into this DRC object. BUT in the OK handler } Loading Loading @@ -226,6 +231,8 @@ void DRC::WriteReport( FILE* fp ) for( int i=0; i<m_pcb->GetOPENNETCount(); ++i ) fprintf( fp, m_pcb->GetOPENNET(i)->GetReporter().ShowReport().mb_str() ); */ fprintf( fp, "** End of Report **\n" ); } Loading todo.txt +8 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,14 @@ understanding by new developers. Need to do this using DialogBlocks. 2007-Nov-30 Assigned To: nobody asked by: Dick Hollenbeck ================================================================================ wxString DateAndTime() It seems the above function should be using a more user friendly "local time", not gmtime. 2007-Nov-4 Assigned To: dick, but probably not til January. ================================================================================ Enhance DRC dialog box to: Loading Loading
common/string.cpp +279 −233 Original line number Diff line number Diff line Loading @@ -11,21 +11,24 @@ /*********************************************************************/ int ReadDelimitedText( char* dest, char* source, int NbMaxChar ) /*********************************************************************/ /* lit et place dans dest la chaine de caractere trouvee dans source, delimitee par " . transfere NbMaxChar max retourne le nombre de codes lus dans source dest est termine par NULL * delimitee par " . * transfere NbMaxChar max * retourne le nombre de codes lus dans source * dest est termine par NULL */ { int ii, jj, flag = 0; for( ii = 0, jj = 0; ii < NbMaxChar - 1; jj++, source++ ) { if ( * source == 0 ) break; /* fin de ligne */ if( *source == 0 ) break; /* fin de ligne */ if( *source == '"' ) /* delimiteur trouve */ { if ( flag ) break; /* Fin de texte delimite */ if( flag ) break; /* Fin de texte delimite */ flag = 1; /* Marque 1er delimiteur trouve */ } else if( flag ) Loading @@ -33,45 +36,55 @@ int ii, jj, flag = 0; *dest = *source; dest++; ii++; } } *dest = 0; /* Null terminaison */ return (jj); return jj; } /********************************/ char* StrPurge( char* text ) /********************************/ /* Supprime les caracteres Space en debut de la ligne text retourne un pointeur sur le 1er caractere non Space de text * retourne un pointeur sur le 1er caractere non Space de text */ { char* ptspace; if ( text == NULL ) return NULL; while( (*text <= ' ') && *text ) text++; if( text == NULL ) return NULL; while( (*text <= ' ') && *text ) text++; ptspace = text + strlen( text ) - 1; while( (*ptspace <= ' ') && *ptspace && (ptspace >= text) ) { *ptspace = 0; ptspace--; } return(text); return text; } /*****************************************************************/ char* GetLine( FILE* File, char* Line, int* LineNum, int SizeLine ) /*****************************************************************/ /* Routine de lecture de 1 ligne utile retourne la 1ere ligne utile lue. elimine lignes vides et commentaires incremente *LineNum a chaque ligne lue * retourne la 1ere ligne utile lue. * elimine lignes vides et commentaires * incremente *LineNum a chaque ligne lue */ { do { if (fgets(Line, SizeLine, File) == NULL) return NULL; if( LineNum ) *LineNum += 1; } while (Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r' || Line[0] == 0); if( fgets( Line, SizeLine, File ) == NULL ) return NULL; if( LineNum ) *LineNum += 1; } while( Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r' || Line[0] == 0 ); strtok( Line, "\n\r" ); return Line; Loading @@ -92,9 +105,10 @@ struct tm * Date; Date->tm_mday, Date->tm_mon + 1, Date->tm_year + 1900, Date->tm_hour, Date->tm_min, Date->tm_sec ); return(Line); return Line; } /*******************************/ wxString DateAndTime() /*******************************/ Loading @@ -105,28 +119,32 @@ struct tm * Date; wxString Line; time( &Time_Buf ); Date = gmtime( &Time_Buf ); Line.Printf( wxT( "%d/%d/%d-%2.2d:%2.2d:%2.2d" ), Date->tm_mday, Date->tm_mon + 1, Date->tm_year + 1900, Date->tm_hour, Date->tm_min, Date->tm_sec ); return(Line); return Line; } /************************************************************/ int StrLenNumCmp( const wxChar* str1, const wxChar* str2, int NbMax ) /************************************************************/ /* routine (compatible qsort() ) de comparaison pour classement alphabtique Analogue a strncmp() mais les nombres sont compars selon leur valeur numrique et non pas par leur code ascii * routine (compatible qsort() ) de comparaison pour classement alphabtique * Analogue a strncmp() mais les nombres sont compars selon leur valeur numrique * et non pas par leur code ascii */ { int i; int nb1 = 0, nb2 = 0; if( (str1 == NULL) || (str2 == NULL) ) return(0); if( (str1 == NULL) || (str2 == NULL) ) return 0; for( i = 0; i < NbMax; i++ ) { Loading @@ -137,32 +155,40 @@ int nb1 = 0 , nb2 = 0; { nb1 = nb1 * 10 + *str1 - '0'; str1++; } while( isdigit( *str2 ) ) { nb2 = nb2 * 10 + *str2 - '0'; str2++; } if ( nb1 < nb2 ) return(-1) ; if ( nb1 > nb2 ) return(1) ; if( nb1 < nb2 ) return -1; if( nb1 > nb2 ) return 1; } if( *str1 < *str2 ) return(-1) ; if( *str1 > *str2 ) return(1) ; if( (*str1 == 0 ) && ( *str2 == 0 ) ) return(0) ; if( *str1 < *str2 ) return -1; if( *str1 > *str2 ) return 1; if( (*str1 == 0 ) && ( *str2 == 0 ) ) return 0; str1++; str2++; } return(0); return 0; } /***********************************************/ int StrNumICmp( const wxChar* str1, const wxChar* str2 ) /***********************************************/ /* routine (compatible qsort() ) de comparaison pour classement alphabtique, avec lower case == upper case. Analogue a stricmp() mais les nombres sont compars selon leur valeur numrique et non pas par leur code ascii * routine (compatible qsort() ) de comparaison pour classement alphabtique, * avec lower case == upper case. * Analogue a stricmp() mais les nombres sont compars selon leur valeur numrique * et non pas par leur code ascii */ { return StrLenNumICmp( str1, str2, 32735 ); Loading @@ -172,17 +198,19 @@ et non pas par leur code ascii /**************************************************************/ int StrLenNumICmp( const wxChar* str1, const wxChar* str2, int NbMax ) /**************************************************************/ /* routine (compatible qsort() ) de comparaison pour classement alphabetique, avec lower case == upper case. Analogue a stricmp() mais les nombres sont compares selon leur valeur numerique et non pas par leur code ascii * routine (compatible qsort() ) de comparaison pour classement alphabetique, * avec lower case == upper case. * Analogue a stricmp() mais les nombres sont compares selon leur valeur numerique * et non pas par leur code ascii */ { int i; int nb1 = 0, nb2 = 0; if( (str1 == NULL) || (str2 == NULL) ) return(0); if( (str1 == NULL) || (str2 == NULL) ) return 0; for( i = 0; i < NbMax; i++ ) { Loading @@ -193,21 +221,28 @@ int nb1 = 0 , nb2 = 0; { nb1 = nb1 * 10 + *str1 - '0'; str1++; } while( isdigit( *str2 ) ) { nb2 = nb2 * 10 + *str2 - '0'; str2++; } if ( nb1 < nb2 ) return(-1) ; if ( nb1 > nb2 ) return(1) ; if( nb1 < nb2 ) return -1; if( nb1 > nb2 ) return 1; } if( toupper(*str1) < toupper(*str2) ) return(-1) ; if( toupper(*str1) > toupper(*str2) ) return(1) ; if( (*str1 == 0 ) && ( *str2 == 0 ) ) return(0) ; if( toupper( *str1 ) < toupper( *str2 ) ) return -1; if( toupper( *str1 ) > toupper( *str2 ) ) return 1; if( (*str1 == 0 ) && ( *str2 == 0 ) ) return 0; str1++; str2++; } return(0); return 0; } Loading @@ -215,12 +250,13 @@ int nb1 = 0 , nb2 = 0; bool WildCompareString( const wxString& pattern, const wxString& string_to_tst, bool case_sensitive ) /***********************************************************************/ /* compare 2 noms de composants, selon regles usuelles ( Jokers * , ? , autoriss). la chaine de reference est "pattern" si case_sensitive == TRUE, comparaison exacte retourne TRUE si match retourne FALSE si differences * ( Jokers * , ? , autoriss). * la chaine de reference est "pattern" * si case_sensitive == TRUE, comparaison exacte * retourne TRUE si match * retourne FALSE si differences */ { const wxChar* cp = NULL, * mp = NULL; Loading @@ -240,7 +276,8 @@ wxString _pattern, _string_to_tst; while( (*string) && (*wild != '*') ) { if ( (*wild != *string) && (*wild != '?') ) return FALSE; if( (*wild != *string) && (*wild != '?') ) return FALSE; wild++; string++; } Loading @@ -248,7 +285,8 @@ wxString _pattern, _string_to_tst; { if( *wild == '*' ) { if (!*++wild) return 1; if( ! * ++wild ) return 1; mp = wild; cp = string + 1; } Loading @@ -264,41 +302,48 @@ wxString _pattern, _string_to_tst; } } while (*wild == '*') { while( *wild == '*' ) { wild++; } return ! * wild; } /***********************************************/ void ChangeSpaces( char* Text, int NewChar ) /***********************************************/ /* Change dans un texte les espaces en NewChar */ { if ( Text == NULL ) return; if( Text == NULL ) return; while( *Text ) { if( *Text == ' ') *Text = (char) NewChar; if( *Text == ' ' ) *Text = (char) NewChar; Text++; } } /***************************/ char* to_point( char* Text ) /**************************/ /* convertit les , en . dans une chaine. utilis pour compenser l'internalisationde la fct printf qui genere les flottants avec une virgule au lieu du point * l'internalisationde la fct printf * qui genere les flottants avec une virgule au lieu du point */ { char* line = Text; if ( Text == NULL ) return NULL; if( Text == NULL ) return NULL; for( ; *Text != 0; Text++ ) { if (*Text == ',') *Text = '.'; if( *Text == ',' ) *Text = '.'; } return line; Loading @@ -308,8 +353,9 @@ char * line = Text; /********************************/ char* strupper( char* Text ) /********************************/ /* Change les caracteres 'a' ... 'z' en 'A' ... 'Z'. dans la chaine Text. Retourne Text * Retourne Text */ { char* code = Text; Loading @@ -318,11 +364,11 @@ char * code = Text; { while( *code ) { if( (*code >= 'a') && (*code <= 'z') ) *code += 'A' - 'a'; if( (*code >= 'a') && (*code <= 'z') ) *code += 'A' - 'a'; code++; } } return(Text); return Text; }
pcbnew/drc.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -61,15 +61,20 @@ void WinEDA_PcbFrame::Install_Test_DRC_Frame( wxDC* DC ) void DRC::ShowDialog() { updatePointers(); bool isNew = false; if( !m_ui ) { m_ui = new DrcDialog( this, m_mainWindow ); isNew = true; } // @todo enter retentitive member data into the DrcDialog here if( isNew ) m_ui->Show(true); else m_ui->Raise(); // @todo capture the UI entered data into this DRC object. BUT in the OK handler } Loading Loading @@ -226,6 +231,8 @@ void DRC::WriteReport( FILE* fp ) for( int i=0; i<m_pcb->GetOPENNETCount(); ++i ) fprintf( fp, m_pcb->GetOPENNET(i)->GetReporter().ShowReport().mb_str() ); */ fprintf( fp, "** End of Report **\n" ); } Loading
todo.txt +8 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,14 @@ understanding by new developers. Need to do this using DialogBlocks. 2007-Nov-30 Assigned To: nobody asked by: Dick Hollenbeck ================================================================================ wxString DateAndTime() It seems the above function should be using a more user friendly "local time", not gmtime. 2007-Nov-4 Assigned To: dick, but probably not til January. ================================================================================ Enhance DRC dialog box to: Loading