Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
76fb213b
Commit
76fb213b
authored
Dec 01, 2007
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2nd of 3 commits for DrcDialog rework
parent
3465bfeb
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
295 additions
and
234 deletions
+295
-234
string.cpp
common/string.cpp
+279
-233
drc.cpp
pcbnew/drc.cpp
+8
-1
todo.txt
todo.txt
+8
-0
No files found.
common/string.cpp
View file @
76fb213b
...
@@ -9,225 +9,261 @@
...
@@ -9,225 +9,261 @@
/*********************************************************************/
/*********************************************************************/
int
ReadDelimitedText
(
char
*
dest
,
char
*
source
,
int
NbMaxChar
)
int
ReadDelimitedText
(
char
*
dest
,
char
*
source
,
int
NbMaxChar
)
/*********************************************************************/
/*********************************************************************/
/* lit et place dans dest la chaine de caractere trouvee dans source,
/* lit et place dans dest la chaine de caractere trouvee dans source,
delimitee par " .
*
delimitee par " .
transfere NbMaxChar max
*
transfere NbMaxChar max
retourne le nombre de codes lus dans source
*
retourne le nombre de codes lus dans source
dest est termine par NULL
*
dest est termine par NULL
*/
*/
{
{
int
ii
,
jj
,
flag
=
0
;
int
ii
,
jj
,
flag
=
0
;
for
(
ii
=
0
,
jj
=
0
;
ii
<
NbMaxChar
-
1
;
jj
++
,
source
++
)
for
(
ii
=
0
,
jj
=
0
;
ii
<
NbMaxChar
-
1
;
jj
++
,
source
++
)
{
{
if
(
*
source
==
0
)
break
;
/* fin de ligne */
if
(
*
source
==
0
)
if
(
*
source
==
'"'
)
/* delimiteur trouve */
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 */
flag
=
1
;
/* Marque 1er delimiteur trouve */
}
}
else
if
(
flag
)
else
if
(
flag
)
{
{
*
dest
=
*
source
;
dest
++
;
ii
++
;
*
dest
=
*
source
;
dest
++
;
ii
++
;
}
}
}
}
*
dest
=
0
;
/* Null terminaison */
*
dest
=
0
;
/* Null terminaison */
return
(
jj
)
;
return
jj
;
}
}
/********************************/
/********************************/
char
*
StrPurge
(
char
*
text
)
char
*
StrPurge
(
char
*
text
)
/********************************/
/********************************/
/* Supprime les caracteres Space en debut de la ligne 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
;
char
*
ptspace
;
if
(
text
==
NULL
)
return
NULL
;
if
(
text
==
NULL
)
return
NULL
;
while
(
(
*
text
<=
' '
)
&&
*
text
)
text
++
;
while
(
(
*
text
<=
' '
)
&&
*
text
)
ptspace
=
text
+
strlen
(
text
)
-
1
;
text
++
;
ptspace
=
text
+
strlen
(
text
)
-
1
;
while
(
(
*
ptspace
<=
' '
)
&&
*
ptspace
&&
(
ptspace
>=
text
)
)
while
(
(
*
ptspace
<=
' '
)
&&
*
ptspace
&&
(
ptspace
>=
text
)
)
{
{
*
ptspace
=
0
;
ptspace
--
;
*
ptspace
=
0
;
ptspace
--
;
}
}
return
(
text
);
return
text
;
}
}
/*****************************************************************/
/*****************************************************************/
char
*
GetLine
(
FILE
*
File
,
char
*
Line
,
int
*
LineNum
,
int
SizeLine
)
char
*
GetLine
(
FILE
*
File
,
char
*
Line
,
int
*
LineNum
,
int
SizeLine
)
/*****************************************************************/
/*****************************************************************/
/* Routine de lecture de 1 ligne utile
/* Routine de lecture de 1 ligne utile
retourne la 1ere ligne utile lue.
*
retourne la 1ere ligne utile lue.
elimine lignes vides et commentaires
*
elimine lignes vides et commentaires
incremente *LineNum a chaque ligne lue
*
incremente *LineNum a chaque ligne lue
*/
*/
{
{
do
{
do
{
if
(
fgets
(
Line
,
SizeLine
,
File
)
==
NULL
)
return
NULL
;
if
(
fgets
(
Line
,
SizeLine
,
File
)
==
NULL
)
if
(
LineNum
)
*
LineNum
+=
1
;
return
NULL
;
}
while
(
Line
[
0
]
==
'#'
||
Line
[
0
]
==
'\n'
||
Line
[
0
]
==
'\r'
||
if
(
LineNum
)
Line
[
0
]
==
0
);
*
LineNum
+=
1
;
}
while
(
Line
[
0
]
==
'#'
||
Line
[
0
]
==
'\n'
||
Line
[
0
]
==
'\r'
strtok
(
Line
,
"
\n\r
"
);
||
Line
[
0
]
==
0
);
strtok
(
Line
,
"
\n\r
"
);
return
Line
;
return
Line
;
}
}
/*******************************/
/*******************************/
char
*
DateAndTime
(
char
*
Line
)
char
*
DateAndTime
(
char
*
Line
)
/*******************************/
/*******************************/
/* Retourne la chaine de caractere donnant date+heure */
/* Retourne la chaine de caractere donnant date+heure */
{
{
time_t
Time_Buf
;
time_t
Time_Buf
;
struct
tm
*
Date
;
struct
tm
*
Date
;
time
(
&
Time_Buf
);
time
(
&
Time_Buf
);
Date
=
gmtime
(
&
Time_Buf
);
Date
=
gmtime
(
&
Time_Buf
);
sprintf
(
Line
,
"%d/%d/%d-%2.2d:%2.2d:%2.2d"
,
sprintf
(
Line
,
"%d/%d/%d-%2.2d:%2.2d:%2.2d"
,
Date
->
tm_mday
,
Date
->
tm_mon
+
1
,
Date
->
tm_year
+
1900
,
Date
->
tm_mday
,
Date
->
tm_mon
+
1
,
Date
->
tm_year
+
1900
,
Date
->
tm_hour
,
Date
->
tm_min
,
Date
->
tm_sec
);
Date
->
tm_hour
,
Date
->
tm_min
,
Date
->
tm_sec
);
return
(
Line
)
;
return
Line
;
}
}
/*******************************/
/*******************************/
wxString
DateAndTime
()
wxString
DateAndTime
()
/*******************************/
/*******************************/
/* Retourne la chaine de caractere donnant date+heure */
/* Retourne la chaine de caractere donnant date+heure */
{
{
time_t
Time_Buf
;
time_t
Time_Buf
;
struct
tm
*
Date
;
struct
tm
*
Date
;
wxString
Line
;
wxString
Line
;
time
(
&
Time_Buf
);
time
(
&
Time_Buf
);
Date
=
gmtime
(
&
Time_Buf
);
Date
=
gmtime
(
&
Time_Buf
);
Line
.
Printf
(
wxT
(
"%d/%d/%d-%2.2d:%2.2d:%2.2d"
),
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_mday
,
Date
->
tm_mon
+
1
,
Date
->
tm_year
+
1900
,
Date
->
tm_hour
,
Date
->
tm_min
,
Date
->
tm_sec
);
Date
->
tm_hour
,
Date
->
tm_min
,
Date
->
tm_sec
);
return
(
Line
)
;
return
Line
;
}
}
/************************************************************/
/************************************************************/
int
StrLenNumCmp
(
const
wxChar
*
str1
,
const
wxChar
*
str2
,
int
NbMax
)
int
StrLenNumCmp
(
const
wxChar
*
str1
,
const
wxChar
*
str2
,
int
NbMax
)
/************************************************************/
/************************************************************/
/*
/*
routine (compatible qsort() ) de comparaison pour classement alphabtique
*
routine (compatible qsort() ) de comparaison pour classement alphabtique
Analogue a strncmp() mais les nombres sont compars selon leur valeur numrique
*
Analogue a strncmp() mais les nombres sont compars selon leur valeur numrique
et non pas par leur code ascii
*
et non pas par leur code ascii
*/
*/
{
{
int
i
;
int
i
;
int
nb1
=
0
,
nb2
=
0
;
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
++
)
for
(
i
=
0
;
i
<
NbMax
;
i
++
)
{
{
if
(
isdigit
(
*
str1
)
&&
isdigit
(
*
str2
)
)
/* nombres en jeu */
if
(
isdigit
(
*
str1
)
&&
isdigit
(
*
str2
)
)
/* nombres en jeu */
{
{
nb1
=
0
;
nb2
=
0
;
nb1
=
0
;
nb2
=
0
;
while
(
isdigit
(
*
str1
)
)
while
(
isdigit
(
*
str1
)
)
{
{
nb1
=
nb1
*
10
+
*
str1
-
'0'
;
str1
++
;
nb1
=
nb1
*
10
+
*
str1
-
'0'
;
str1
++
;
}
}
while
(
isdigit
(
*
str2
))
while
(
isdigit
(
*
str2
)
)
{
{
nb2
=
nb2
*
10
+
*
str2
-
'0'
;
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
)
if
(
*
str1
>
*
str2
)
return
(
1
)
;
return
-
1
;
if
(
(
*
str1
==
0
)
&&
(
*
str2
==
0
)
)
return
(
0
)
;
if
(
*
str1
>
*
str2
)
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
)
int
StrNumICmp
(
const
wxChar
*
str1
,
const
wxChar
*
str2
)
/***********************************************/
/***********************************************/
/*
/*
routine (compatible qsort() ) de comparaison pour classement alphabtique,
*
routine (compatible qsort() ) de comparaison pour classement alphabtique,
avec lower case == upper case.
*
avec lower case == upper case.
Analogue a stricmp() mais les nombres sont compars selon leur valeur numrique
*
Analogue a stricmp() mais les nombres sont compars selon leur valeur numrique
et non pas par leur code ascii
*
et non pas par leur code ascii
*/
*/
{
{
return
StrLenNumICmp
(
str1
,
str2
,
32735
);
return
StrLenNumICmp
(
str1
,
str2
,
32735
);
}
}
/**************************************************************/
/**************************************************************/
int
StrLenNumICmp
(
const
wxChar
*
str1
,
const
wxChar
*
str2
,
int
NbMax
)
int
StrLenNumICmp
(
const
wxChar
*
str1
,
const
wxChar
*
str2
,
int
NbMax
)
/**************************************************************/
/**************************************************************/
/*
/*
routine (compatible qsort() ) de comparaison pour classement alphabetique,
*
routine (compatible qsort() ) de comparaison pour classement alphabetique,
avec lower case == upper case.
*
avec lower case == upper case.
Analogue a stricmp() mais les nombres sont compares selon leur valeur numerique
*
Analogue a stricmp() mais les nombres sont compares selon leur valeur numerique
et non pas par leur code ascii
*
et non pas par leur code ascii
*/
*/
{
{
int
i
;
int
i
;
int
nb1
=
0
,
nb2
=
0
;
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
++
)
for
(
i
=
0
;
i
<
NbMax
;
i
++
)
{
{
if
(
isdigit
(
*
str1
)
&&
isdigit
(
*
str2
)
)
/* nombres en jeu */
if
(
isdigit
(
*
str1
)
&&
isdigit
(
*
str2
)
)
/* nombres en jeu */
{
{
nb1
=
0
;
nb2
=
0
;
nb1
=
0
;
nb2
=
0
;
while
(
isdigit
(
*
str1
)
)
while
(
isdigit
(
*
str1
)
)
{
{
nb1
=
nb1
*
10
+
*
str1
-
'0'
;
str1
++
;
nb1
=
nb1
*
10
+
*
str1
-
'0'
;
str1
++
;
}
}
while
(
isdigit
(
*
str2
))
while
(
isdigit
(
*
str2
)
)
{
{
nb2
=
nb2
*
10
+
*
str2
-
'0'
;
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
)
)
if
(
toupper
(
*
str1
)
>
toupper
(
*
str2
)
)
return
(
1
)
;
return
-
1
;
if
(
(
*
str1
==
0
)
&&
(
*
str2
==
0
)
)
return
(
0
)
;
if
(
toupper
(
*
str1
)
>
toupper
(
*
str2
)
)
str1
++
;
str2
++
;
return
1
;
if
(
(
*
str1
==
0
)
&&
(
*
str2
==
0
)
)
return
0
;
str1
++
;
str2
++
;
}
}
return
(
0
)
;
return
0
;
}
}
/***********************************************************************/
/***********************************************************************/
bool
WildCompareString
(
const
wxString
&
pattern
,
const
wxString
&
string_to_tst
,
bool
WildCompareString
(
const
wxString
&
pattern
,
const
wxString
&
string_to_tst
,
bool
case_sensitive
)
bool
case_sensitive
)
/***********************************************************************/
/***********************************************************************/
/* compare 2 noms de composants, selon regles usuelles
/* compare 2 noms de composants, selon regles usuelles
( Jokers * , ? , autoriss).
*
( Jokers * , ? , autoriss).
la chaine de reference est "pattern"
*
la chaine de reference est "pattern"
si case_sensitive == TRUE, comparaison exacte
*
si case_sensitive == TRUE, comparaison exacte
retourne TRUE si match
*
retourne TRUE si match
retourne FALSE si differences
*
retourne FALSE si differences
*/
*/
{
{
const
wxChar
*
cp
=
NULL
,
*
mp
=
NULL
;
const
wxChar
*
cp
=
NULL
,
*
mp
=
NULL
;
const
wxChar
*
wild
,
*
string
;
const
wxChar
*
wild
,
*
string
;
wxString
_pattern
,
_string_to_tst
;
wxString
_pattern
,
_string_to_tst
;
if
(
case_sensitive
)
if
(
case_sensitive
)
{
{
wild
=
pattern
.
GetData
();
string
=
string_to_tst
.
GetData
();
wild
=
pattern
.
GetData
();
string
=
string_to_tst
.
GetData
();
}
}
...
@@ -238,21 +274,23 @@ wxString _pattern, _string_to_tst;
...
@@ -238,21 +274,23 @@ wxString _pattern, _string_to_tst;
wild
=
_pattern
.
GetData
();
string
=
_string_to_tst
.
GetData
();
wild
=
_pattern
.
GetData
();
string
=
_string_to_tst
.
GetData
();
}
}
while
(
(
*
string
)
&&
(
*
wild
!=
'*'
)
)
while
(
(
*
string
)
&&
(
*
wild
!=
'*'
)
)
{
{
if
(
(
*
wild
!=
*
string
)
&&
(
*
wild
!=
'?'
)
)
return
FALSE
;
if
(
(
*
wild
!=
*
string
)
&&
(
*
wild
!=
'?'
)
)
return
FALSE
;
wild
++
;
string
++
;
wild
++
;
string
++
;
}
}
while
(
*
string
)
while
(
*
string
)
{
{
if
(
*
wild
==
'*'
)
if
(
*
wild
==
'*'
)
{
{
if
(
!*++
wild
)
return
1
;
if
(
!
*
++
wild
)
return
1
;
mp
=
wild
;
mp
=
wild
;
cp
=
string
+
1
;
cp
=
string
+
1
;
}
}
else
if
((
*
wild
==
*
string
)
||
(
*
wild
==
'?'
)
)
else
if
(
(
*
wild
==
*
string
)
||
(
*
wild
==
'?'
)
)
{
{
wild
++
;
wild
++
;
string
++
;
string
++
;
...
@@ -264,41 +302,48 @@ wxString _pattern, _string_to_tst;
...
@@ -264,41 +302,48 @@ wxString _pattern, _string_to_tst;
}
}
}
}
while
(
*
wild
==
'*'
)
{
while
(
*
wild
==
'*'
)
{
wild
++
;
wild
++
;
}
}
return
!*
wild
;
return
!
*
wild
;
}
}
/***********************************************/
/***********************************************/
void
ChangeSpaces
(
char
*
Text
,
int
NewChar
)
void
ChangeSpaces
(
char
*
Text
,
int
NewChar
)
/***********************************************/
/***********************************************/
/* Change dans un texte les espaces en NewChar */
/* Change dans un texte les espaces en NewChar */
{
{
if
(
Text
==
NULL
)
return
;
if
(
Text
==
NULL
)
return
;
while
(
*
Text
)
while
(
*
Text
)
{
{
if
(
*
Text
==
' '
)
*
Text
=
(
char
)
NewChar
;
if
(
*
Text
==
' '
)
*
Text
=
(
char
)
NewChar
;
Text
++
;
Text
++
;
}
}
}
}
/***************************/
/***************************/
char
*
to_point
(
char
*
Text
)
char
*
to_point
(
char
*
Text
)
/**************************/
/**************************/
/* convertit les , en . dans une chaine. utilis pour compenser
/* convertit les , en . dans une chaine. utilis pour compenser
l'internalisationde la fct printf
*
l'internalisationde la fct printf
qui genere les flottants avec une virgule au lieu du point
*
qui genere les flottants avec une virgule au lieu du point
*/
*/
{
{
char
*
line
=
Text
;
char
*
line
=
Text
;
if
(
Text
==
NULL
)
return
NULL
;
if
(
Text
==
NULL
)
for
(
;
*
Text
!=
0
;
Text
++
)
return
NULL
;
for
(
;
*
Text
!=
0
;
Text
++
)
{
{
if
(
*
Text
==
','
)
*
Text
=
'.'
;
if
(
*
Text
==
','
)
*
Text
=
'.'
;
}
}
return
line
;
return
line
;
...
@@ -306,23 +351,24 @@ char * line = Text;
...
@@ -306,23 +351,24 @@ char * line = Text;
/********************************/
/********************************/
char
*
strupper
(
char
*
Text
)
char
*
strupper
(
char
*
Text
)
/********************************/
/********************************/
/* Change les caracteres 'a' ... 'z' en 'A' ... 'Z'. dans la chaine Text.
/* Change les caracteres 'a' ... 'z' en 'A' ... 'Z'. dans la chaine Text.
Retourne Text
*
Retourne Text
*/
*/
{
{
char
*
code
=
Text
;
char
*
code
=
Text
;
if
(
Text
)
if
(
Text
)
{
{
while
(
*
code
)
while
(
*
code
)
{
{
if
(
(
*
code
>=
'a'
)
&&
(
*
code
<=
'z'
)
)
*
code
+=
'A'
-
'a'
;
if
(
(
*
code
>=
'a'
)
&&
(
*
code
<=
'z'
)
)
code
++
;
*
code
+=
'A'
-
'a'
;
code
++
;
}
}
}
}
return
(
Text
)
;
return
Text
;
}
}
pcbnew/drc.cpp
View file @
76fb213b
...
@@ -61,15 +61,20 @@ void WinEDA_PcbFrame::Install_Test_DRC_Frame( wxDC* DC )
...
@@ -61,15 +61,20 @@ void WinEDA_PcbFrame::Install_Test_DRC_Frame( wxDC* DC )
void
DRC
::
ShowDialog
()
void
DRC
::
ShowDialog
()
{
{
updatePointers
();
updatePointers
();
bool
isNew
=
false
;
if
(
!
m_ui
)
if
(
!
m_ui
)
{
{
m_ui
=
new
DrcDialog
(
this
,
m_mainWindow
);
m_ui
=
new
DrcDialog
(
this
,
m_mainWindow
);
isNew
=
true
;
}
}
// @todo enter retentitive member data into the DrcDialog here
// @todo enter retentitive member data into the DrcDialog here
if
(
isNew
)
m_ui
->
Show
(
true
);
m_ui
->
Show
(
true
);
else
m_ui
->
Raise
();
// @todo capture the UI entered data into this DRC object. BUT in the OK handler
// @todo capture the UI entered data into this DRC object. BUT in the OK handler
}
}
...
@@ -226,6 +231,8 @@ void DRC::WriteReport( FILE* fp )
...
@@ -226,6 +231,8 @@ void DRC::WriteReport( FILE* fp )
for( int i=0; i<m_pcb->GetOPENNETCount(); ++i )
for( int i=0; i<m_pcb->GetOPENNETCount(); ++i )
fprintf( fp, m_pcb->GetOPENNET(i)->GetReporter().ShowReport().mb_str() );
fprintf( fp, m_pcb->GetOPENNET(i)->GetReporter().ShowReport().mb_str() );
*/
*/
fprintf
(
fp
,
"** End of Report **
\n
"
);
}
}
...
...
todo.txt
View file @
76fb213b
...
@@ -47,6 +47,14 @@ understanding by new developers.
...
@@ -47,6 +47,14 @@ understanding by new developers.
Need to do this using DialogBlocks.
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.
2007-Nov-4 Assigned To: dick, but probably not til January.
================================================================================
================================================================================
Enhance DRC dialog box to:
Enhance DRC dialog box to:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment