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
4ca51f75
Commit
4ca51f75
authored
Aug 18, 2007
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mac support fixes
parent
4987c15e
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
279 additions
and
268 deletions
+279
-268
netlist_form_pads-pcb.cpp
eeschema/plugins/netlist_form_pads-pcb.cpp
+279
-268
No files found.
eeschema/plugins/netlist_form_pads-pcb.cpp
View file @
4ca51f75
...
...
@@ -3,111 +3,110 @@
/**********************************/
/* read the generic netlist created by eeschema and convert it to a pads-pcb form
*/
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#if
def __UNIX__
#if
defined (__UNIX__) || defined (__APPLE__)
#define stricmp strcasecmp
#define strnicmp strncasecmp
#endif
/* Pads-pcb sample:
*PADS-PCB*
*PART*
C1 CHIP_D
C2 C1206
C3 CHIP_B
C4 CHIP_B
D1 CHIP_B
JP1 unknown
*NET*
*SIGNAL* N03791
C3.1 R1.1 JP2.7 U1.3
*SIGNAL* VCC
U2.14 Y1.8 JP5.2 U3.2 C1.1 U1.20 JP1.8 JP1.3
C5.2 C6.1 C7.2 U1.7 Y1.7
*SIGNAL* N01384
JP5.1 U1.1
*SIGNAL* N02594
*END*
*/
*PADS-PCB*
*PART*
*
C1 CHIP_D
*
C2 C1206
*
C3 CHIP_B
*
C4 CHIP_B
*
D1 CHIP_B
*
JP1 unknown
*
*NET*
*SIGNAL* N03791
*
C3.1 R1.1 JP2.7 U1.3
*SIGNAL* VCC
*
U2.14 Y1.8 JP5.2 U3.2 C1.1 U1.20 JP1.8 JP1.3
*
C5.2 C6.1 C7.2 U1.7 Y1.7
*SIGNAL* N01384
*
JP5.1 U1.1
*SIGNAL* N02594
*END*
*/
/* Generic netlist sample:
$BeginNetlist
$BeginComponentList
$BeginComponent
TimeStamp=32568D1E
Footprint=
Reference=JP1
Value=CONN_8X2
Libname=CONN_8X2
$BeginPinList
1=GND
2=REF10_1
3=GND
4=REF11_1
5=GND
6=REF7_1
7=GND
8=REF9_1
9=GND
10=REF6_1
11=GND
12=REF8_1
13=GND
14=REF4_1
15=GND
16=REF5_1
$EndPinList
$EndComponent
$BeginComponent
TimeStamp=325679C1
Footprint=
Reference=RR1
Value=9x1K
Libref=RR9
$BeginPinList
1=VCC
2=REF5_1
3=REF4_1
4=REF8_1
5=REF6_1
6=REF9_1
7=REF7_1
8=REF11_1
9=REF10_1
10=?
$EndPinList
$EndComponent
$EndComponentList
$BeginNets
Net 0 ""
Net 1 "GND"
BUS1 31
U3 19
U3 10
U3 1
Net 172 ""
BUS1 32
Net 173 ""
BUS1 30
$EndNets
$EndNetlist
*/
char
*
GetLine
(
FILE
*
File
,
char
*
Line
,
int
*
LineNum
,
int
SizeLine
);
int
ReadAndWriteComponentDataSection
(
FILE
*
InFile
,
FILE
*
OutFile
,
int
*
LineNumber
);
int
ReadAndWriteNetsDataSection
(
FILE
*
InFile
,
FILE
*
OutFile
,
int
*
LineNumber
);
* $BeginNetlist
* $BeginComponentList
*
* $BeginComponent
* TimeStamp=32568D1E
* Footprint=
* Reference=JP1
* Value=CONN_8X2
* Libname=CONN_8X2
* $BeginPinList
* 1=GND
* 2=REF10_1
* 3=GND
* 4=REF11_1
* 5=GND
* 6=REF7_1
* 7=GND
* 8=REF9_1
* 9=GND
* 10=REF6_1
* 11=GND
* 12=REF8_1
* 13=GND
* 14=REF4_1
* 15=GND
* 16=REF5_1
* $EndPinList
* $EndComponent
*
* $BeginComponent
* TimeStamp=325679C1
* Footprint=
* Reference=RR1
* Value=9x1K
* Libref=RR9
* $BeginPinList
* 1=VCC
* 2=REF5_1
* 3=REF4_1
* 4=REF8_1
* 5=REF6_1
* 6=REF9_1
* 7=REF7_1
* 8=REF11_1
* 9=REF10_1
* 10=?
* $EndPinList
* $EndComponent
* $EndComponentList
*
* $BeginNets
* Net 0 ""
* Net 1 "GND"
* BUS1 31
* U3 19
* U3 10
* U3 1
* Net 172 ""
* BUS1 32
* Net 173 ""
* BUS1 30
* $EndNets
*
* $EndNetlist
*/
char
*
GetLine
(
FILE
*
File
,
char
*
Line
,
int
*
LineNum
,
int
SizeLine
);
int
ReadAndWriteComponentDataSection
(
FILE
*
InFile
,
FILE
*
OutFile
,
int
*
LineNumber
);
int
ReadAndWriteNetsDataSection
(
FILE
*
InFile
,
FILE
*
OutFile
,
int
*
LineNumber
);
class
ComponentDataClass
...
...
@@ -120,11 +119,13 @@ public:
long
m_TimeStamp
;
public
:
ComponentDataClass
(
void
)
ComponentDataClass
(
void
)
{
InitData
();
}
void
InitData
(
void
)
void
InitData
(
void
)
{
m_TimeStamp
=
0
;
m_Reference
[
0
]
=
0
;
...
...
@@ -136,31 +137,31 @@ public:
/********************************/
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
/********************************/
{
char
*
InputfileName
,
*
OutputFilename
;
FILE
*
InFile
,
*
OutFile
;
int
LineNumber
;
char
Line
[
1024
];
char
*
InputfileName
,
*
OutputFilename
;
FILE
*
InFile
,
*
OutFile
;
int
LineNumber
;
char
Line
[
1024
];
if
(
argc
<
3
)
if
(
argc
<
3
)
{
printf
(
"
\n
Usage; netlist_form_pads-pcb infile outfile
\n
"
);
printf
(
"
\n
Usage; netlist_form_pads-pcb infile outfile
\n
"
);
return
-
1
;
}
InputfileName
=
argv
[
1
];
OutputFilename
=
argv
[
2
];
if
(
(
InFile
=
fopen
(
InputfileName
,
"rt"
))
==
NULL
)
if
(
(
InFile
=
fopen
(
InputfileName
,
"rt"
)
)
==
NULL
)
{
printf
(
"Failed to open file %s"
,
InputfileName
);
printf
(
"Failed to open file %s"
,
InputfileName
);
return
-
2
;
}
if
(
(
OutFile
=
fopen
(
OutputFilename
,
"wt"
))
==
NULL
)
if
(
(
OutFile
=
fopen
(
OutputFilename
,
"wt"
)
)
==
NULL
)
{
printf
(
"Failed to create file %s"
,
OutputFilename
);
printf
(
"Failed to create file %s"
,
OutputFilename
);
return
-
3
;
}
...
...
@@ -169,17 +170,17 @@ char Line[1024];
fprintf
(
OutFile
,
"*PADS-PCB*
\n
*PART*
\n
"
);
/* Read and write data lines */
while
(
GetLine
(
InFile
,
Line
,
&
LineNumber
,
sizeof
(
Line
)
)
)
while
(
GetLine
(
InFile
,
Line
,
&
LineNumber
,
sizeof
(
Line
)
)
)
{
if
(
stricmp
(
Line
,
"$BeginComponent"
)
==
0
)
if
(
stricmp
(
Line
,
"$BeginComponent"
)
==
0
)
{
ReadAndWriteComponentDataSection
(
InFile
,
OutFile
,
&
LineNumber
);
ReadAndWriteComponentDataSection
(
InFile
,
OutFile
,
&
LineNumber
);
continue
;
}
if
(
stricmp
(
Line
,
"$BeginNets"
)
==
0
)
if
(
stricmp
(
Line
,
"$BeginNets"
)
==
0
)
{
fprintf
(
OutFile
,
"
\n
*NET*
\n
"
);
ReadAndWriteNetsDataSection
(
InFile
,
OutFile
,
&
LineNumber
);
ReadAndWriteNetsDataSection
(
InFile
,
OutFile
,
&
LineNumber
);
continue
;
}
}
...
...
@@ -187,71 +188,76 @@ char Line[1024];
fprintf
(
OutFile
,
"*END*
\n
"
);
fclose
(
InFile
);
fclose
(
OutFile
);
fclose
(
InFile
);
fclose
(
OutFile
);
return
0
;
}
/****************************************************************/
int
ReadAndWriteComponentDataSection
(
FILE
*
InFile
,
FILE
*
OutFile
,
int
*
LineNumber
)
int
ReadAndWriteComponentDataSection
(
FILE
*
InFile
,
FILE
*
OutFile
,
int
*
LineNumber
)
/****************************************************************/
/* Read the Components Section from the Generic Netlist and create Components section in Pads-Pcb format
For the component section only reference and footprint are used.
Create lines like:
C1 CHIP_D
C2 unknown
*/
*
For the component section only reference and footprint are used.
*
Create lines like:
*
C1 CHIP_D
*
C2 unknown
*/
{
char
Line
[
1024
];
class
ComponentDataClass
ComponentData
;
char
*
ident
,
*
data
;
char
Line
[
1024
];
class
ComponentDataClass
ComponentData
;
char
*
ident
,
*
data
;
while
(
GetLine
(
InFile
,
Line
,
LineNumber
,
sizeof
(
Line
)
)
)
while
(
GetLine
(
InFile
,
Line
,
LineNumber
,
sizeof
(
Line
)
)
)
{
if
(
stricmp
(
Line
,
"$BeginPinList"
)
==
0
)
if
(
stricmp
(
Line
,
"$BeginPinList"
)
==
0
)
{
while
(
GetLine
(
InFile
,
Line
,
LineNumber
,
sizeof
(
Line
)
)
)
if
(
stricmp
(
Line
,
"$EndPinList"
)
==
0
)
break
;
while
(
GetLine
(
InFile
,
Line
,
LineNumber
,
sizeof
(
Line
)
)
)
if
(
stricmp
(
Line
,
"$EndPinList"
)
==
0
)
break
;
continue
;
}
if
(
stricmp
(
Line
,
"$EndComponent"
)
==
0
)
// Create the output for the component:
if
(
stricmp
(
Line
,
"$EndComponent"
)
==
0
)
// Create the output for the component:
{
/* Create the line like: C2 unknown */
fprintf
(
OutFile
,
"%s "
,
ComponentData
.
m_Reference
);
fprintf
(
OutFile
,
"%s
\n
"
,
strlen
(
ComponentData
.
m_Footprint
)
?
ComponentData
.
m_Footprint
:
"unknown"
);
fprintf
(
OutFile
,
"%s "
,
ComponentData
.
m_Reference
);
fprintf
(
OutFile
,
"%s
\n
"
,
strlen
(
ComponentData
.
m_Footprint
)
?
ComponentData
.
m_Footprint
:
"unknown"
);
return
0
;
}
ident
=
strtok
(
Line
,
"=
\n\r
"
);
data
=
strtok
(
NULL
,
"=
\n\r
"
);
if
(
data
==
NULL
)
continue
;
if
(
stricmp
(
Line
,
"TimeStamp"
)
==
0
)
ident
=
strtok
(
Line
,
"=
\n\r
"
);
data
=
strtok
(
NULL
,
"=
\n\r
"
);
if
(
data
==
NULL
)
continue
;
if
(
stricmp
(
Line
,
"TimeStamp"
)
==
0
)
{
ComponentData
.
m_TimeStamp
=
atol
(
data
);
ComponentData
.
m_TimeStamp
=
atol
(
data
);
continue
;
}
if
(
stricmp
(
Line
,
"Footprint"
)
==
0
)
if
(
stricmp
(
Line
,
"Footprint"
)
==
0
)
{
strncpy
(
ComponentData
.
m_Footprint
,
data
,
255
);
strncpy
(
ComponentData
.
m_Footprint
,
data
,
255
);
continue
;
}
if
(
stricmp
(
Line
,
"Reference"
)
==
0
)
if
(
stricmp
(
Line
,
"Reference"
)
==
0
)
{
strncpy
(
ComponentData
.
m_Reference
,
data
,
255
);
strncpy
(
ComponentData
.
m_Reference
,
data
,
255
);
continue
;
}
if
(
stricmp
(
Line
,
"Value"
)
==
0
)
if
(
stricmp
(
Line
,
"Value"
)
==
0
)
{
strncpy
(
ComponentData
.
m_Value
,
data
,
255
);
strncpy
(
ComponentData
.
m_Value
,
data
,
255
);
continue
;
}
if
(
stricmp
(
Line
,
"Libref"
)
==
0
)
if
(
stricmp
(
Line
,
"Libref"
)
==
0
)
{
strncpy
(
ComponentData
.
m_LibRef
,
data
,
255
);
strncpy
(
ComponentData
.
m_LibRef
,
data
,
255
);
continue
;
}
}
...
...
@@ -259,38 +265,42 @@ char * ident, *data;
return
1
;
}
/****************************************************************/
int
ReadAndWriteNetsDataSection
(
FILE
*
InFile
,
FILE
*
OutFile
,
int
*
LineNumber
)
int
ReadAndWriteNetsDataSection
(
FILE
*
InFile
,
FILE
*
OutFile
,
int
*
LineNumber
)
/****************************************************************/
/* Read the Nets Section from the Generic Netlist and create Nets section in Pads-Pcb format
create info type:
*
create info type:
*SIGNAL* N03791
C3.1 R1.1 JP2.7 U1.3
*/
*
C3.1 R1.1 JP2.7 U1.3
*/
{
char
Line
[
1024
];
char
*
ident
,
*
netnum
,
*
netname
,
*
pin
;
char
Line
[
1024
];
char
*
ident
,
*
netnum
,
*
netname
,
*
pin
;
while
(
GetLine
(
InFile
,
Line
,
LineNumber
,
sizeof
(
Line
)
)
)
while
(
GetLine
(
InFile
,
Line
,
LineNumber
,
sizeof
(
Line
)
)
)
{
if
(
stricmp
(
Line
,
"$EndNets"
)
==
0
)
return
0
;
ident
=
strtok
(
Line
,
"
\n\r
"
);
if
(
stricmp
(
ident
,
"Net"
)
==
0
)
if
(
stricmp
(
Line
,
"$EndNets"
)
==
0
)
return
0
;
ident
=
strtok
(
Line
,
"
\n\r
"
);
if
(
stricmp
(
ident
,
"Net"
)
==
0
)
{
netnum
=
strtok
(
NULL
,
"
\n\r
"
);
netname
=
strtok
(
NULL
,
"
\"\n\r
"
);
if
(
(
netname
==
NULL
)
||
strlen
(
netname
)
==
0
)
netnum
=
strtok
(
NULL
,
"
\n\r
"
);
netname
=
strtok
(
NULL
,
"
\"\n\r
"
);
if
(
(
netname
==
NULL
)
||
strlen
(
netname
)
==
0
)
{
// Create the line like: *SIGNAL* N03791
int
num
=
atoi
(
netnum
);
sprintf
(
Line
,
"N-%6.6d"
,
num
);
int
num
=
atoi
(
netnum
);
sprintf
(
Line
,
"N-%6.6d"
,
num
);
netname
=
Line
;
}
fprintf
(
OutFile
,
"*SIGNAL* %s
\n
"
,
netname
);
fprintf
(
OutFile
,
"*SIGNAL* %s
\n
"
,
netname
);
}
else
{
// Create the line like: C3.1 R1.1 JP2.7 U1.3
pin
=
strtok
(
NULL
,
"
\n\r
"
);
fprintf
(
OutFile
,
" %s.%s
\n
"
,
ident
,
pin
);
{
// Create the line like: C3.1 R1.1 JP2.7 U1.3
pin
=
strtok
(
NULL
,
"
\n\r
"
);
fprintf
(
OutFile
,
" %s.%s
\n
"
,
ident
,
pin
);
}
}
...
...
@@ -299,21 +309,22 @@ char * ident, *netnum, *netname, * pin;
/*****************************************************************/
char
*
GetLine
(
FILE
*
File
,
char
*
Line
,
int
*
LineNum
,
int
SizeLine
)
char
*
GetLine
(
FILE
*
File
,
char
*
Line
,
int
*
LineNum
,
int
SizeLine
)
/*****************************************************************/
/* Return a non empty line
increment *LineNum for each read line
Comment lines (starting by '#') are skipped
*/
*
increment *LineNum for each read line
*
Comment lines (starting by '#') are skipped
*/
{
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
);
strtok
(
Line
,
"
\n\r
"
);
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
;
}
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