summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorrahulp132020-03-17 14:55:41 +0530
committerrahulp132020-03-17 14:55:41 +0530
commit296443137f4288cb030e92859ccfbe3204bc1088 (patch)
treeca4798c2da1e7244edc3bc108d81b462b537aea2 /bin
parent0db48f6533517ecebfd9f0693f89deca28408b76 (diff)
downloadKiCad-eSim-296443137f4288cb030e92859ccfbe3204bc1088.tar.gz
KiCad-eSim-296443137f4288cb030e92859ccfbe3204bc1088.tar.bz2
KiCad-eSim-296443137f4288cb030e92859ccfbe3204bc1088.zip
initial commit
Diffstat (limited to 'bin')
-rw-r--r--bin/_cvpcb.kifacebin0 -> 4750800 bytes
-rw-r--r--bin/_eeschema.kifacebin0 -> 5314595 bytes
-rw-r--r--bin/_gerbview.kifacebin0 -> 2111018 bytes
-rw-r--r--bin/_pcb_calculator.kifacebin0 -> 1759992 bytes
-rw-r--r--bin/_pcbnew.kifacebin0 -> 14756982 bytes
-rw-r--r--bin/_pl_editor.kifacebin0 -> 1870610 bytes
-rw-r--r--bin/bitmap2component.exebin0 -> 1040896 bytes
-rw-r--r--bin/dxf2idf.exebin0 -> 833536 bytes
-rw-r--r--bin/easy_install-script.py12
-rw-r--r--bin/easy_install.exebin0 -> 22016 bytes
-rw-r--r--bin/easy_install.exe.manifest15
-rw-r--r--bin/eeschema.exebin0 -> 568320 bytes
-rw-r--r--bin/gdb.exebin0 -> 7796242 bytes
-rw-r--r--bin/gerbview.exebin0 -> 567808 bytes
-rw-r--r--bin/glew32.dllbin0 -> 402757 bytes
-rw-r--r--bin/idf2vrml.exebin0 -> 415232 bytes
-rw-r--r--bin/idfcyl.exebin0 -> 65024 bytes
-rw-r--r--bin/idfrect.exebin0 -> 54272 bytes
-rw-r--r--bin/kicad.exebin0 -> 1211392 bytes
-rw-r--r--bin/libFWOSPlugin.dllbin0 -> 26095 bytes
-rw-r--r--bin/libPTKernel.dllbin0 -> 323879 bytes
-rw-r--r--bin/libTKBO.dllbin0 -> 1742143 bytes
-rw-r--r--bin/libTKBRep.dllbin0 -> 867207 bytes
-rw-r--r--bin/libTKBin.dllbin0 -> 332170 bytes
-rw-r--r--bin/libTKBinL.dllbin0 -> 338152 bytes
-rw-r--r--bin/libTKBinTObj.dllbin0 -> 76683 bytes
-rw-r--r--bin/libTKBinXCAF.dllbin0 -> 141411 bytes
-rw-r--r--bin/libTKBool.dllbin0 -> 3484690 bytes
-rw-r--r--bin/libTKCAF.dllbin0 -> 707414 bytes
-rw-r--r--bin/libTKCDF.dllbin0 -> 414810 bytes
-rw-r--r--bin/libTKFeat.dllbin0 -> 986678 bytes
-rw-r--r--bin/libTKFillet.dllbin0 -> 2527922 bytes
-rw-r--r--bin/libTKG2d.dllbin0 -> 492932 bytes
-rw-r--r--bin/libTKG3d.dllbin0 -> 1076311 bytes
-rw-r--r--bin/libTKGeomAlgo.dllbin0 -> 5115544 bytes
-rw-r--r--bin/libTKGeomBase.dllbin0 -> 4788003 bytes
-rw-r--r--bin/libTKHLR.dllbin0 -> 1234229 bytes
-rw-r--r--bin/libTKIGES.dllbin0 -> 3755204 bytes
-rw-r--r--bin/libTKLCAF.dllbin0 -> 875873 bytes
-rw-r--r--bin/libTKMath.dllbin0 -> 2465678 bytes
-rw-r--r--bin/libTKMesh.dllbin0 -> 491004 bytes
-rw-r--r--bin/libTKMeshVS.dllbin0 -> 438990 bytes
-rw-r--r--bin/libTKNIS.dllbin0 -> 222112 bytes
-rw-r--r--bin/libTKOffset.dllbin0 -> 1090354 bytes
-rw-r--r--bin/libTKOpenGl.dllbin0 -> 943843 bytes
-rw-r--r--bin/libTKPCAF.dllbin0 -> 299918 bytes
-rw-r--r--bin/libTKPLCAF.dllbin0 -> 764475 bytes
-rw-r--r--bin/libTKPShape.dllbin0 -> 1051501 bytes
-rw-r--r--bin/libTKPrim.dllbin0 -> 341939 bytes
-rw-r--r--bin/libTKSTEP.dllbin0 -> 2788781 bytes
-rw-r--r--bin/libTKSTEP209.dllbin0 -> 792713 bytes
-rw-r--r--bin/libTKSTEPAttr.dllbin0 -> 696230 bytes
-rw-r--r--bin/libTKSTEPBase.dllbin0 -> 2614060 bytes
-rw-r--r--bin/libTKSTL.dllbin0 -> 203540 bytes
-rw-r--r--bin/libTKService.dllbin0 -> 396521 bytes
-rw-r--r--bin/libTKShHealing.dllbin0 -> 2130629 bytes
-rw-r--r--bin/libTKShapeSchema.dllbin0 -> 1058955 bytes
-rw-r--r--bin/libTKStdLSchema.dllbin0 -> 381177 bytes
-rw-r--r--bin/libTKStdSchema.dllbin0 -> 285772 bytes
-rw-r--r--bin/libTKTObj.dllbin0 -> 236728 bytes
-rw-r--r--bin/libTKTopAlgo.dllbin0 -> 2338476 bytes
-rw-r--r--bin/libTKV3d.dllbin0 -> 3096669 bytes
-rw-r--r--bin/libTKVRML.dllbin0 -> 563487 bytes
-rw-r--r--bin/libTKVoxel.dllbin0 -> 264477 bytes
-rw-r--r--bin/libTKXCAF.dllbin0 -> 344817 bytes
-rw-r--r--bin/libTKXCAFSchema.dllbin0 -> 471521 bytes
-rw-r--r--bin/libTKXDEIGES.dllbin0 -> 74005 bytes
-rw-r--r--bin/libTKXDESTEP.dllbin0 -> 366893 bytes
-rw-r--r--bin/libTKXMesh.dllbin0 -> 43843 bytes
-rw-r--r--bin/libTKXSBase.dllbin0 -> 2523546 bytes
-rw-r--r--bin/libTKXml.dllbin0 -> 205234 bytes
-rw-r--r--bin/libTKXmlL.dllbin0 -> 415767 bytes
-rw-r--r--bin/libTKXmlTObj.dllbin0 -> 79541 bytes
-rw-r--r--bin/libTKXmlXCAF.dllbin0 -> 156129 bytes
-rw-r--r--bin/libTKernel.dllbin0 -> 2294671 bytes
-rw-r--r--bin/libboost_atomic-mt.dllbin0 -> 17279 bytes
-rw-r--r--bin/libboost_chrono-mt.dllbin0 -> 37243 bytes
-rw-r--r--bin/libboost_container-mt.dllbin0 -> 97428 bytes
-rw-r--r--bin/libboost_context-mt.dllbin0 -> 22983 bytes
-rw-r--r--bin/libboost_coroutine-mt.dllbin0 -> 47792 bytes
-rw-r--r--bin/libboost_date_time-mt.dllbin0 -> 70272 bytes
-rw-r--r--bin/libboost_filesystem-mt.dllbin0 -> 123765 bytes
-rw-r--r--bin/libboost_graph-mt.dllbin0 -> 685968 bytes
-rw-r--r--bin/libboost_iostreams-mt.dllbin0 -> 86993 bytes
-rw-r--r--bin/libboost_locale-mt.dllbin0 -> 842238 bytes
-rw-r--r--bin/libboost_log-mt.dllbin0 -> 1054089 bytes
-rw-r--r--bin/libboost_log_setup-mt.dllbin0 -> 1689311 bytes
-rw-r--r--bin/libboost_math_c99-mt.dllbin0 -> 237617 bytes
-rw-r--r--bin/libboost_math_c99f-mt.dllbin0 -> 102236 bytes
-rw-r--r--bin/libboost_math_c99l-mt.dllbin0 -> 219154 bytes
-rw-r--r--bin/libboost_math_tr1-mt.dllbin0 -> 617290 bytes
-rw-r--r--bin/libboost_math_tr1f-mt.dllbin0 -> 596490 bytes
-rw-r--r--bin/libboost_math_tr1l-mt.dllbin0 -> 607050 bytes
-rw-r--r--bin/libboost_prg_exec_monitor-mt.dllbin0 -> 77199 bytes
-rw-r--r--bin/libboost_program_options-mt.dllbin0 -> 421779 bytes
-rw-r--r--bin/libboost_python-mt.dllbin0 -> 436792 bytes
-rw-r--r--bin/libboost_python3-mt.dllbin0 -> 431245 bytes
-rw-r--r--bin/libboost_random-mt.dllbin0 -> 31637 bytes
-rw-r--r--bin/libboost_regex-mt.dllbin0 -> 961586 bytes
-rw-r--r--bin/libboost_serialization-mt.dllbin0 -> 532900 bytes
-rw-r--r--bin/libboost_signals-mt.dllbin0 -> 137202 bytes
-rw-r--r--bin/libboost_system-mt.dllbin0 -> 25492 bytes
-rw-r--r--bin/libboost_thread-mt.dllbin0 -> 139851 bytes
-rw-r--r--bin/libboost_timer-mt.dllbin0 -> 27155 bytes
-rw-r--r--bin/libboost_type_erasure-mt.dllbin0 -> 89517 bytes
-rw-r--r--bin/libboost_unit_test_framework-mt.dllbin0 -> 827519 bytes
-rw-r--r--bin/libboost_wave-mt.dllbin0 -> 1235390 bytes
-rw-r--r--bin/libboost_wserialization-mt.dllbin0 -> 373982 bytes
-rw-r--r--bin/libbz2-1.dllbin0 -> 76571 bytes
-rw-r--r--bin/libcairo-2.dllbin0 -> 1114226 bytes
-rw-r--r--bin/libcairo-gobject-2.dllbin0 -> 33780 bytes
-rw-r--r--bin/libcairo-script-interpreter-2.dllbin0 -> 174345 bytes
-rw-r--r--bin/libcurl-4.dllbin0 -> 567627 bytes
-rw-r--r--bin/libeay32.dllbin0 -> 1751374 bytes
-rw-r--r--bin/libexpat-1.dllbin0 -> 223693 bytes
-rw-r--r--bin/libexslt-0.dllbin0 -> 103976 bytes
-rw-r--r--bin/libffi-6.dllbin0 -> 34874 bytes
-rw-r--r--bin/libfontconfig-1.dllbin0 -> 332895 bytes
-rw-r--r--bin/libfreetype-6.dllbin0 -> 709803 bytes
-rw-r--r--bin/libgcc_s_dw2-1.dllbin0 -> 121524 bytes
-rw-r--r--bin/libglib-2.0-0.dllbin0 -> 1225932 bytes
-rw-r--r--bin/libgmp-10.dllbin0 -> 521228 bytes
-rw-r--r--bin/libgmpxx-4.dllbin0 -> 33549 bytes
-rw-r--r--bin/libgnutls-30.dllbin0 -> 1469812 bytes
-rw-r--r--bin/libgnutlsxx-28.dllbin0 -> 57167 bytes
-rw-r--r--bin/libgomp-1.dllbin0 -> 174997 bytes
-rw-r--r--bin/libgraphite2.dllbin0 -> 236568 bytes
-rw-r--r--bin/libharfbuzz-0.dllbin0 -> 650411 bytes
-rw-r--r--bin/libharfbuzz-gobject-0.dllbin0 -> 45168 bytes
-rw-r--r--bin/libharfbuzz-icu-0.dllbin0 -> 20053 bytes
-rw-r--r--bin/libhogweed-4.dllbin0 -> 212130 bytes
-rw-r--r--bin/libiconv-2.dllbin0 -> 1060570 bytes
-rw-r--r--bin/libicudt58.dllbin0 -> 26229959 bytes
-rw-r--r--bin/libicuin58.dllbin0 -> 2693209 bytes
-rw-r--r--bin/libicuio58.dllbin0 -> 61336 bytes
-rw-r--r--bin/libicutest58.dllbin0 -> 99826 bytes
-rw-r--r--bin/libicutu58.dllbin0 -> 307370 bytes
-rw-r--r--bin/libicuuc58.dllbin0 -> 1741142 bytes
-rw-r--r--bin/libidn-11.dllbin0 -> 214834 bytes
-rw-r--r--bin/libintl-8.dllbin0 -> 140752 bytes
-rw-r--r--bin/libjpeg-8.dllbin0 -> 503182 bytes
-rw-r--r--bin/liblzma-5.dllbin0 -> 171848 bytes
-rw-r--r--bin/libnettle-6.dllbin0 -> 269180 bytes
-rw-r--r--bin/libnghttp2-14.dllbin0 -> 176092 bytes
-rw-r--r--bin/libngspice-0.dllbin0 -> 6031015 bytes
-rw-r--r--bin/libp11-kit-0.dllbin0 -> 1098210 bytes
-rw-r--r--bin/libpcre-1.dllbin0 -> 292597 bytes
-rw-r--r--bin/libpcre16-0.dllbin0 -> 256725 bytes
-rw-r--r--bin/libpcre32-0.dllbin0 -> 246485 bytes
-rw-r--r--bin/libpcrecpp-0.dllbin0 -> 66193 bytes
-rw-r--r--bin/libpcreposix-0.dllbin0 -> 47313 bytes
-rw-r--r--bin/libpixman-1-0.dllbin0 -> 706136 bytes
-rw-r--r--bin/libpng16-16.dllbin0 -> 249238 bytes
-rw-r--r--bin/libpython2.7.dllbin0 -> 1632768 bytes
-rw-r--r--bin/libpython3.6m.dllbin0 -> 2385408 bytes
-rw-r--r--bin/librtmp-1.dllbin0 -> 181693 bytes
-rw-r--r--bin/libssh2-1.dllbin0 -> 214471 bytes
-rw-r--r--bin/libstdc++-6.dllbin0 -> 1547595 bytes
-rw-r--r--bin/libtasn1-6.dllbin0 -> 107502 bytes
-rw-r--r--bin/libtiff-5.dllbin0 -> 503853 bytes
-rw-r--r--bin/libtiffxx-5.dllbin0 -> 21336 bytes
-rw-r--r--bin/libturbojpeg-0.dllbin0 -> 539154 bytes
-rw-r--r--bin/libunistring-2.dllbin0 -> 1839507 bytes
-rw-r--r--bin/libwinpthread-1.dllbin0 -> 65693 bytes
-rw-r--r--bin/libxml2-2.dllbin0 -> 1400653 bytes
-rw-r--r--bin/libxslt-1.dllbin0 -> 315440 bytes
-rw-r--r--bin/pcb_calculator.exebin0 -> 567808 bytes
-rw-r--r--bin/pcbnew.exebin0 -> 568320 bytes
-rw-r--r--bin/pip-script.py12
-rw-r--r--bin/pip.exebin0 -> 22016 bytes
-rw-r--r--bin/pip.exe.manifest15
-rw-r--r--bin/pl_editor.exebin0 -> 517120 bytes
-rw-r--r--bin/python.exebin0 -> 17408 bytes
-rw-r--r--bin/pythonw.exebin0 -> 17408 bytes
-rw-r--r--bin/scripting/plugins/README-bom.txt38
-rw-r--r--bin/scripting/plugins/bom2csv.xsl99
-rw-r--r--bin/scripting/plugins/bom2grouped_csv.xsl104
-rw-r--r--bin/scripting/plugins/bom_csv_grouped_by_value.py167
-rw-r--r--bin/scripting/plugins/bom_csv_grouped_by_value_with_fp.py65
-rw-r--r--bin/scripting/plugins/bom_csv_sorted_by_ref.py62
-rw-r--r--bin/scripting/plugins/bom_html_grouped_by_value.py98
-rw-r--r--bin/scripting/plugins/bom_html_with_advanced_grouping.py132
-rw-r--r--bin/scripting/plugins/bom_sorted_by_ref.py61
-rw-r--r--bin/scripting/plugins/bom_with_title_block_2_csv.xsl167
-rw-r--r--bin/scripting/plugins/kicad_netlist_reader.py764
-rw-r--r--bin/scripting/plugins/netlist_form_OrcadPcb2.xsl210
-rw-r--r--bin/scripting/plugins/netlist_form_cadstar-RINF.xsl131
-rw-r--r--bin/scripting/plugins/netlist_form_cadstar.xsl123
-rw-r--r--bin/scripting/plugins/netlist_form_pads-pcb.xsl69
-rw-r--r--bin/ssleay32.dllbin0 -> 393195 bytes
-rw-r--r--bin/wxbase30u_gcc_custom.dllbin0 -> 2698427 bytes
-rw-r--r--bin/wxbase30u_net_gcc_custom.dllbin0 -> 315205 bytes
-rw-r--r--bin/wxbase30u_xml_gcc_custom.dllbin0 -> 73237 bytes
-rw-r--r--bin/wxmsw30u_adv_gcc_custom.dllbin0 -> 1725437 bytes
-rw-r--r--bin/wxmsw30u_aui_gcc_custom.dllbin0 -> 604503 bytes
-rw-r--r--bin/wxmsw30u_core_gcc_custom.dllbin0 -> 6772673 bytes
-rw-r--r--bin/wxmsw30u_gl_gcc_custom.dllbin0 -> 132651 bytes
-rw-r--r--bin/wxmsw30u_html_gcc_custom.dllbin0 -> 909405 bytes
-rw-r--r--bin/wxmsw30u_propgrid_gcc_custom.dllbin0 -> 952155 bytes
-rw-r--r--bin/wxmsw30u_qa_gcc_custom.dllbin0 -> 206876 bytes
-rw-r--r--bin/wxmsw30u_ribbon_gcc_custom.dllbin0 -> 570599 bytes
-rw-r--r--bin/wxmsw30u_richtext_gcc_custom.dllbin0 -> 1716278 bytes
-rw-r--r--bin/wxmsw30u_stc_gcc_custom.dllbin0 -> 2590139 bytes
-rw-r--r--bin/wxmsw30u_webview_gcc_custom.dllbin0 -> 199467 bytes
-rw-r--r--bin/wxmsw30u_xrc_gcc_custom.dllbin0 -> 1044766 bytes
-rw-r--r--bin/xsltproc.exebin0 -> 96020 bytes
-rw-r--r--bin/zlib1.dllbin0 -> 98626 bytes
207 files changed, 2344 insertions, 0 deletions
diff --git a/bin/_cvpcb.kiface b/bin/_cvpcb.kiface
new file mode 100644
index 0000000..9d869b1
--- /dev/null
+++ b/bin/_cvpcb.kiface
Binary files differ
diff --git a/bin/_eeschema.kiface b/bin/_eeschema.kiface
new file mode 100644
index 0000000..a490396
--- /dev/null
+++ b/bin/_eeschema.kiface
Binary files differ
diff --git a/bin/_gerbview.kiface b/bin/_gerbview.kiface
new file mode 100644
index 0000000..291a89b
--- /dev/null
+++ b/bin/_gerbview.kiface
Binary files differ
diff --git a/bin/_pcb_calculator.kiface b/bin/_pcb_calculator.kiface
new file mode 100644
index 0000000..3943252
--- /dev/null
+++ b/bin/_pcb_calculator.kiface
Binary files differ
diff --git a/bin/_pcbnew.kiface b/bin/_pcbnew.kiface
new file mode 100644
index 0000000..719a41c
--- /dev/null
+++ b/bin/_pcbnew.kiface
Binary files differ
diff --git a/bin/_pl_editor.kiface b/bin/_pl_editor.kiface
new file mode 100644
index 0000000..a2580d4
--- /dev/null
+++ b/bin/_pl_editor.kiface
Binary files differ
diff --git a/bin/bitmap2component.exe b/bin/bitmap2component.exe
new file mode 100644
index 0000000..cd042cd
--- /dev/null
+++ b/bin/bitmap2component.exe
Binary files differ
diff --git a/bin/dxf2idf.exe b/bin/dxf2idf.exe
new file mode 100644
index 0000000..3bff487
--- /dev/null
+++ b/bin/dxf2idf.exe
Binary files differ
diff --git a/bin/easy_install-script.py b/bin/easy_install-script.py
new file mode 100644
index 0000000..e91f11c
--- /dev/null
+++ b/bin/easy_install-script.py
@@ -0,0 +1,12 @@
+#!python.exe
+# EASY-INSTALL-ENTRY-SCRIPT: 'setuptools==36.0.1.post20170616','console_scripts','easy_install'
+__requires__ = 'setuptools==36.0.1.post20170616'
+import re
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+ sys.exit(
+ load_entry_point('setuptools==36.0.1.post20170616', 'console_scripts', 'easy_install')()
+ )
diff --git a/bin/easy_install.exe b/bin/easy_install.exe
new file mode 100644
index 0000000..49b476e
--- /dev/null
+++ b/bin/easy_install.exe
Binary files differ
diff --git a/bin/easy_install.exe.manifest b/bin/easy_install.exe.manifest
new file mode 100644
index 0000000..9c19e18
--- /dev/null
+++ b/bin/easy_install.exe.manifest
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+ <assemblyIdentity version="1.0.0.0"
+ processorArchitecture="X86"
+ name="easy_install"
+ type="win32"/>
+ <!-- Identify the application security requirements. -->
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
diff --git a/bin/eeschema.exe b/bin/eeschema.exe
new file mode 100644
index 0000000..475cd72
--- /dev/null
+++ b/bin/eeschema.exe
Binary files differ
diff --git a/bin/gdb.exe b/bin/gdb.exe
new file mode 100644
index 0000000..252fac8
--- /dev/null
+++ b/bin/gdb.exe
Binary files differ
diff --git a/bin/gerbview.exe b/bin/gerbview.exe
new file mode 100644
index 0000000..067671d
--- /dev/null
+++ b/bin/gerbview.exe
Binary files differ
diff --git a/bin/glew32.dll b/bin/glew32.dll
new file mode 100644
index 0000000..96b0ca6
--- /dev/null
+++ b/bin/glew32.dll
Binary files differ
diff --git a/bin/idf2vrml.exe b/bin/idf2vrml.exe
new file mode 100644
index 0000000..3a6bc30
--- /dev/null
+++ b/bin/idf2vrml.exe
Binary files differ
diff --git a/bin/idfcyl.exe b/bin/idfcyl.exe
new file mode 100644
index 0000000..df1104f
--- /dev/null
+++ b/bin/idfcyl.exe
Binary files differ
diff --git a/bin/idfrect.exe b/bin/idfrect.exe
new file mode 100644
index 0000000..3f94368
--- /dev/null
+++ b/bin/idfrect.exe
Binary files differ
diff --git a/bin/kicad.exe b/bin/kicad.exe
new file mode 100644
index 0000000..1d21160
--- /dev/null
+++ b/bin/kicad.exe
Binary files differ
diff --git a/bin/libFWOSPlugin.dll b/bin/libFWOSPlugin.dll
new file mode 100644
index 0000000..990629b
--- /dev/null
+++ b/bin/libFWOSPlugin.dll
Binary files differ
diff --git a/bin/libPTKernel.dll b/bin/libPTKernel.dll
new file mode 100644
index 0000000..8f671d9
--- /dev/null
+++ b/bin/libPTKernel.dll
Binary files differ
diff --git a/bin/libTKBO.dll b/bin/libTKBO.dll
new file mode 100644
index 0000000..7f17f37
--- /dev/null
+++ b/bin/libTKBO.dll
Binary files differ
diff --git a/bin/libTKBRep.dll b/bin/libTKBRep.dll
new file mode 100644
index 0000000..5a86385
--- /dev/null
+++ b/bin/libTKBRep.dll
Binary files differ
diff --git a/bin/libTKBin.dll b/bin/libTKBin.dll
new file mode 100644
index 0000000..3f70d03
--- /dev/null
+++ b/bin/libTKBin.dll
Binary files differ
diff --git a/bin/libTKBinL.dll b/bin/libTKBinL.dll
new file mode 100644
index 0000000..2ead891
--- /dev/null
+++ b/bin/libTKBinL.dll
Binary files differ
diff --git a/bin/libTKBinTObj.dll b/bin/libTKBinTObj.dll
new file mode 100644
index 0000000..01231df
--- /dev/null
+++ b/bin/libTKBinTObj.dll
Binary files differ
diff --git a/bin/libTKBinXCAF.dll b/bin/libTKBinXCAF.dll
new file mode 100644
index 0000000..2c5f253
--- /dev/null
+++ b/bin/libTKBinXCAF.dll
Binary files differ
diff --git a/bin/libTKBool.dll b/bin/libTKBool.dll
new file mode 100644
index 0000000..a38baa8
--- /dev/null
+++ b/bin/libTKBool.dll
Binary files differ
diff --git a/bin/libTKCAF.dll b/bin/libTKCAF.dll
new file mode 100644
index 0000000..d587f65
--- /dev/null
+++ b/bin/libTKCAF.dll
Binary files differ
diff --git a/bin/libTKCDF.dll b/bin/libTKCDF.dll
new file mode 100644
index 0000000..38d8ed2
--- /dev/null
+++ b/bin/libTKCDF.dll
Binary files differ
diff --git a/bin/libTKFeat.dll b/bin/libTKFeat.dll
new file mode 100644
index 0000000..c093e57
--- /dev/null
+++ b/bin/libTKFeat.dll
Binary files differ
diff --git a/bin/libTKFillet.dll b/bin/libTKFillet.dll
new file mode 100644
index 0000000..43e7939
--- /dev/null
+++ b/bin/libTKFillet.dll
Binary files differ
diff --git a/bin/libTKG2d.dll b/bin/libTKG2d.dll
new file mode 100644
index 0000000..77c08d8
--- /dev/null
+++ b/bin/libTKG2d.dll
Binary files differ
diff --git a/bin/libTKG3d.dll b/bin/libTKG3d.dll
new file mode 100644
index 0000000..d71d438
--- /dev/null
+++ b/bin/libTKG3d.dll
Binary files differ
diff --git a/bin/libTKGeomAlgo.dll b/bin/libTKGeomAlgo.dll
new file mode 100644
index 0000000..fa3ddbe
--- /dev/null
+++ b/bin/libTKGeomAlgo.dll
Binary files differ
diff --git a/bin/libTKGeomBase.dll b/bin/libTKGeomBase.dll
new file mode 100644
index 0000000..f70e7a8
--- /dev/null
+++ b/bin/libTKGeomBase.dll
Binary files differ
diff --git a/bin/libTKHLR.dll b/bin/libTKHLR.dll
new file mode 100644
index 0000000..5d326c3
--- /dev/null
+++ b/bin/libTKHLR.dll
Binary files differ
diff --git a/bin/libTKIGES.dll b/bin/libTKIGES.dll
new file mode 100644
index 0000000..1cfc550
--- /dev/null
+++ b/bin/libTKIGES.dll
Binary files differ
diff --git a/bin/libTKLCAF.dll b/bin/libTKLCAF.dll
new file mode 100644
index 0000000..597b6ac
--- /dev/null
+++ b/bin/libTKLCAF.dll
Binary files differ
diff --git a/bin/libTKMath.dll b/bin/libTKMath.dll
new file mode 100644
index 0000000..8264ba1
--- /dev/null
+++ b/bin/libTKMath.dll
Binary files differ
diff --git a/bin/libTKMesh.dll b/bin/libTKMesh.dll
new file mode 100644
index 0000000..f9fe484
--- /dev/null
+++ b/bin/libTKMesh.dll
Binary files differ
diff --git a/bin/libTKMeshVS.dll b/bin/libTKMeshVS.dll
new file mode 100644
index 0000000..00ac49e
--- /dev/null
+++ b/bin/libTKMeshVS.dll
Binary files differ
diff --git a/bin/libTKNIS.dll b/bin/libTKNIS.dll
new file mode 100644
index 0000000..304b2c1
--- /dev/null
+++ b/bin/libTKNIS.dll
Binary files differ
diff --git a/bin/libTKOffset.dll b/bin/libTKOffset.dll
new file mode 100644
index 0000000..f4cd6f9
--- /dev/null
+++ b/bin/libTKOffset.dll
Binary files differ
diff --git a/bin/libTKOpenGl.dll b/bin/libTKOpenGl.dll
new file mode 100644
index 0000000..5e77e61
--- /dev/null
+++ b/bin/libTKOpenGl.dll
Binary files differ
diff --git a/bin/libTKPCAF.dll b/bin/libTKPCAF.dll
new file mode 100644
index 0000000..36a3af4
--- /dev/null
+++ b/bin/libTKPCAF.dll
Binary files differ
diff --git a/bin/libTKPLCAF.dll b/bin/libTKPLCAF.dll
new file mode 100644
index 0000000..0653cca
--- /dev/null
+++ b/bin/libTKPLCAF.dll
Binary files differ
diff --git a/bin/libTKPShape.dll b/bin/libTKPShape.dll
new file mode 100644
index 0000000..4e618f5
--- /dev/null
+++ b/bin/libTKPShape.dll
Binary files differ
diff --git a/bin/libTKPrim.dll b/bin/libTKPrim.dll
new file mode 100644
index 0000000..f33c655
--- /dev/null
+++ b/bin/libTKPrim.dll
Binary files differ
diff --git a/bin/libTKSTEP.dll b/bin/libTKSTEP.dll
new file mode 100644
index 0000000..5cfcf09
--- /dev/null
+++ b/bin/libTKSTEP.dll
Binary files differ
diff --git a/bin/libTKSTEP209.dll b/bin/libTKSTEP209.dll
new file mode 100644
index 0000000..568a10e
--- /dev/null
+++ b/bin/libTKSTEP209.dll
Binary files differ
diff --git a/bin/libTKSTEPAttr.dll b/bin/libTKSTEPAttr.dll
new file mode 100644
index 0000000..ecab8d6
--- /dev/null
+++ b/bin/libTKSTEPAttr.dll
Binary files differ
diff --git a/bin/libTKSTEPBase.dll b/bin/libTKSTEPBase.dll
new file mode 100644
index 0000000..b8dff02
--- /dev/null
+++ b/bin/libTKSTEPBase.dll
Binary files differ
diff --git a/bin/libTKSTL.dll b/bin/libTKSTL.dll
new file mode 100644
index 0000000..5a957d3
--- /dev/null
+++ b/bin/libTKSTL.dll
Binary files differ
diff --git a/bin/libTKService.dll b/bin/libTKService.dll
new file mode 100644
index 0000000..35b9d2d
--- /dev/null
+++ b/bin/libTKService.dll
Binary files differ
diff --git a/bin/libTKShHealing.dll b/bin/libTKShHealing.dll
new file mode 100644
index 0000000..6fe0dfd
--- /dev/null
+++ b/bin/libTKShHealing.dll
Binary files differ
diff --git a/bin/libTKShapeSchema.dll b/bin/libTKShapeSchema.dll
new file mode 100644
index 0000000..fee2474
--- /dev/null
+++ b/bin/libTKShapeSchema.dll
Binary files differ
diff --git a/bin/libTKStdLSchema.dll b/bin/libTKStdLSchema.dll
new file mode 100644
index 0000000..2b160d6
--- /dev/null
+++ b/bin/libTKStdLSchema.dll
Binary files differ
diff --git a/bin/libTKStdSchema.dll b/bin/libTKStdSchema.dll
new file mode 100644
index 0000000..c2974a6
--- /dev/null
+++ b/bin/libTKStdSchema.dll
Binary files differ
diff --git a/bin/libTKTObj.dll b/bin/libTKTObj.dll
new file mode 100644
index 0000000..d4f0e10
--- /dev/null
+++ b/bin/libTKTObj.dll
Binary files differ
diff --git a/bin/libTKTopAlgo.dll b/bin/libTKTopAlgo.dll
new file mode 100644
index 0000000..ecd34b7
--- /dev/null
+++ b/bin/libTKTopAlgo.dll
Binary files differ
diff --git a/bin/libTKV3d.dll b/bin/libTKV3d.dll
new file mode 100644
index 0000000..40406d0
--- /dev/null
+++ b/bin/libTKV3d.dll
Binary files differ
diff --git a/bin/libTKVRML.dll b/bin/libTKVRML.dll
new file mode 100644
index 0000000..0647682
--- /dev/null
+++ b/bin/libTKVRML.dll
Binary files differ
diff --git a/bin/libTKVoxel.dll b/bin/libTKVoxel.dll
new file mode 100644
index 0000000..29bd389
--- /dev/null
+++ b/bin/libTKVoxel.dll
Binary files differ
diff --git a/bin/libTKXCAF.dll b/bin/libTKXCAF.dll
new file mode 100644
index 0000000..f953606
--- /dev/null
+++ b/bin/libTKXCAF.dll
Binary files differ
diff --git a/bin/libTKXCAFSchema.dll b/bin/libTKXCAFSchema.dll
new file mode 100644
index 0000000..5dcd829
--- /dev/null
+++ b/bin/libTKXCAFSchema.dll
Binary files differ
diff --git a/bin/libTKXDEIGES.dll b/bin/libTKXDEIGES.dll
new file mode 100644
index 0000000..1cd5148
--- /dev/null
+++ b/bin/libTKXDEIGES.dll
Binary files differ
diff --git a/bin/libTKXDESTEP.dll b/bin/libTKXDESTEP.dll
new file mode 100644
index 0000000..80e6376
--- /dev/null
+++ b/bin/libTKXDESTEP.dll
Binary files differ
diff --git a/bin/libTKXMesh.dll b/bin/libTKXMesh.dll
new file mode 100644
index 0000000..cdcb148
--- /dev/null
+++ b/bin/libTKXMesh.dll
Binary files differ
diff --git a/bin/libTKXSBase.dll b/bin/libTKXSBase.dll
new file mode 100644
index 0000000..397ce79
--- /dev/null
+++ b/bin/libTKXSBase.dll
Binary files differ
diff --git a/bin/libTKXml.dll b/bin/libTKXml.dll
new file mode 100644
index 0000000..9acc454
--- /dev/null
+++ b/bin/libTKXml.dll
Binary files differ
diff --git a/bin/libTKXmlL.dll b/bin/libTKXmlL.dll
new file mode 100644
index 0000000..f3726de
--- /dev/null
+++ b/bin/libTKXmlL.dll
Binary files differ
diff --git a/bin/libTKXmlTObj.dll b/bin/libTKXmlTObj.dll
new file mode 100644
index 0000000..1c4fa2e
--- /dev/null
+++ b/bin/libTKXmlTObj.dll
Binary files differ
diff --git a/bin/libTKXmlXCAF.dll b/bin/libTKXmlXCAF.dll
new file mode 100644
index 0000000..ea0e054
--- /dev/null
+++ b/bin/libTKXmlXCAF.dll
Binary files differ
diff --git a/bin/libTKernel.dll b/bin/libTKernel.dll
new file mode 100644
index 0000000..6c81577
--- /dev/null
+++ b/bin/libTKernel.dll
Binary files differ
diff --git a/bin/libboost_atomic-mt.dll b/bin/libboost_atomic-mt.dll
new file mode 100644
index 0000000..4e1d351
--- /dev/null
+++ b/bin/libboost_atomic-mt.dll
Binary files differ
diff --git a/bin/libboost_chrono-mt.dll b/bin/libboost_chrono-mt.dll
new file mode 100644
index 0000000..bac0999
--- /dev/null
+++ b/bin/libboost_chrono-mt.dll
Binary files differ
diff --git a/bin/libboost_container-mt.dll b/bin/libboost_container-mt.dll
new file mode 100644
index 0000000..aaa9257
--- /dev/null
+++ b/bin/libboost_container-mt.dll
Binary files differ
diff --git a/bin/libboost_context-mt.dll b/bin/libboost_context-mt.dll
new file mode 100644
index 0000000..555040a
--- /dev/null
+++ b/bin/libboost_context-mt.dll
Binary files differ
diff --git a/bin/libboost_coroutine-mt.dll b/bin/libboost_coroutine-mt.dll
new file mode 100644
index 0000000..fde9157
--- /dev/null
+++ b/bin/libboost_coroutine-mt.dll
Binary files differ
diff --git a/bin/libboost_date_time-mt.dll b/bin/libboost_date_time-mt.dll
new file mode 100644
index 0000000..abb64ee
--- /dev/null
+++ b/bin/libboost_date_time-mt.dll
Binary files differ
diff --git a/bin/libboost_filesystem-mt.dll b/bin/libboost_filesystem-mt.dll
new file mode 100644
index 0000000..660531a
--- /dev/null
+++ b/bin/libboost_filesystem-mt.dll
Binary files differ
diff --git a/bin/libboost_graph-mt.dll b/bin/libboost_graph-mt.dll
new file mode 100644
index 0000000..52d7a78
--- /dev/null
+++ b/bin/libboost_graph-mt.dll
Binary files differ
diff --git a/bin/libboost_iostreams-mt.dll b/bin/libboost_iostreams-mt.dll
new file mode 100644
index 0000000..d06a07c
--- /dev/null
+++ b/bin/libboost_iostreams-mt.dll
Binary files differ
diff --git a/bin/libboost_locale-mt.dll b/bin/libboost_locale-mt.dll
new file mode 100644
index 0000000..71d411e
--- /dev/null
+++ b/bin/libboost_locale-mt.dll
Binary files differ
diff --git a/bin/libboost_log-mt.dll b/bin/libboost_log-mt.dll
new file mode 100644
index 0000000..fad04a3
--- /dev/null
+++ b/bin/libboost_log-mt.dll
Binary files differ
diff --git a/bin/libboost_log_setup-mt.dll b/bin/libboost_log_setup-mt.dll
new file mode 100644
index 0000000..e9208fd
--- /dev/null
+++ b/bin/libboost_log_setup-mt.dll
Binary files differ
diff --git a/bin/libboost_math_c99-mt.dll b/bin/libboost_math_c99-mt.dll
new file mode 100644
index 0000000..5a49ffe
--- /dev/null
+++ b/bin/libboost_math_c99-mt.dll
Binary files differ
diff --git a/bin/libboost_math_c99f-mt.dll b/bin/libboost_math_c99f-mt.dll
new file mode 100644
index 0000000..9cd5999
--- /dev/null
+++ b/bin/libboost_math_c99f-mt.dll
Binary files differ
diff --git a/bin/libboost_math_c99l-mt.dll b/bin/libboost_math_c99l-mt.dll
new file mode 100644
index 0000000..7c792ab
--- /dev/null
+++ b/bin/libboost_math_c99l-mt.dll
Binary files differ
diff --git a/bin/libboost_math_tr1-mt.dll b/bin/libboost_math_tr1-mt.dll
new file mode 100644
index 0000000..22e686b
--- /dev/null
+++ b/bin/libboost_math_tr1-mt.dll
Binary files differ
diff --git a/bin/libboost_math_tr1f-mt.dll b/bin/libboost_math_tr1f-mt.dll
new file mode 100644
index 0000000..0f8248c
--- /dev/null
+++ b/bin/libboost_math_tr1f-mt.dll
Binary files differ
diff --git a/bin/libboost_math_tr1l-mt.dll b/bin/libboost_math_tr1l-mt.dll
new file mode 100644
index 0000000..6c9ee5a
--- /dev/null
+++ b/bin/libboost_math_tr1l-mt.dll
Binary files differ
diff --git a/bin/libboost_prg_exec_monitor-mt.dll b/bin/libboost_prg_exec_monitor-mt.dll
new file mode 100644
index 0000000..7d19379
--- /dev/null
+++ b/bin/libboost_prg_exec_monitor-mt.dll
Binary files differ
diff --git a/bin/libboost_program_options-mt.dll b/bin/libboost_program_options-mt.dll
new file mode 100644
index 0000000..21c4d35
--- /dev/null
+++ b/bin/libboost_program_options-mt.dll
Binary files differ
diff --git a/bin/libboost_python-mt.dll b/bin/libboost_python-mt.dll
new file mode 100644
index 0000000..a101291
--- /dev/null
+++ b/bin/libboost_python-mt.dll
Binary files differ
diff --git a/bin/libboost_python3-mt.dll b/bin/libboost_python3-mt.dll
new file mode 100644
index 0000000..436c4bc
--- /dev/null
+++ b/bin/libboost_python3-mt.dll
Binary files differ
diff --git a/bin/libboost_random-mt.dll b/bin/libboost_random-mt.dll
new file mode 100644
index 0000000..f626fd7
--- /dev/null
+++ b/bin/libboost_random-mt.dll
Binary files differ
diff --git a/bin/libboost_regex-mt.dll b/bin/libboost_regex-mt.dll
new file mode 100644
index 0000000..3cf12bc
--- /dev/null
+++ b/bin/libboost_regex-mt.dll
Binary files differ
diff --git a/bin/libboost_serialization-mt.dll b/bin/libboost_serialization-mt.dll
new file mode 100644
index 0000000..998153b
--- /dev/null
+++ b/bin/libboost_serialization-mt.dll
Binary files differ
diff --git a/bin/libboost_signals-mt.dll b/bin/libboost_signals-mt.dll
new file mode 100644
index 0000000..d470a58
--- /dev/null
+++ b/bin/libboost_signals-mt.dll
Binary files differ
diff --git a/bin/libboost_system-mt.dll b/bin/libboost_system-mt.dll
new file mode 100644
index 0000000..2cbbb7a
--- /dev/null
+++ b/bin/libboost_system-mt.dll
Binary files differ
diff --git a/bin/libboost_thread-mt.dll b/bin/libboost_thread-mt.dll
new file mode 100644
index 0000000..db6baa1
--- /dev/null
+++ b/bin/libboost_thread-mt.dll
Binary files differ
diff --git a/bin/libboost_timer-mt.dll b/bin/libboost_timer-mt.dll
new file mode 100644
index 0000000..6507fbd
--- /dev/null
+++ b/bin/libboost_timer-mt.dll
Binary files differ
diff --git a/bin/libboost_type_erasure-mt.dll b/bin/libboost_type_erasure-mt.dll
new file mode 100644
index 0000000..6938b37
--- /dev/null
+++ b/bin/libboost_type_erasure-mt.dll
Binary files differ
diff --git a/bin/libboost_unit_test_framework-mt.dll b/bin/libboost_unit_test_framework-mt.dll
new file mode 100644
index 0000000..001326d
--- /dev/null
+++ b/bin/libboost_unit_test_framework-mt.dll
Binary files differ
diff --git a/bin/libboost_wave-mt.dll b/bin/libboost_wave-mt.dll
new file mode 100644
index 0000000..39e9b7b
--- /dev/null
+++ b/bin/libboost_wave-mt.dll
Binary files differ
diff --git a/bin/libboost_wserialization-mt.dll b/bin/libboost_wserialization-mt.dll
new file mode 100644
index 0000000..6811cb3
--- /dev/null
+++ b/bin/libboost_wserialization-mt.dll
Binary files differ
diff --git a/bin/libbz2-1.dll b/bin/libbz2-1.dll
new file mode 100644
index 0000000..b4281bc
--- /dev/null
+++ b/bin/libbz2-1.dll
Binary files differ
diff --git a/bin/libcairo-2.dll b/bin/libcairo-2.dll
new file mode 100644
index 0000000..67433a3
--- /dev/null
+++ b/bin/libcairo-2.dll
Binary files differ
diff --git a/bin/libcairo-gobject-2.dll b/bin/libcairo-gobject-2.dll
new file mode 100644
index 0000000..cea07f8
--- /dev/null
+++ b/bin/libcairo-gobject-2.dll
Binary files differ
diff --git a/bin/libcairo-script-interpreter-2.dll b/bin/libcairo-script-interpreter-2.dll
new file mode 100644
index 0000000..896dcfd
--- /dev/null
+++ b/bin/libcairo-script-interpreter-2.dll
Binary files differ
diff --git a/bin/libcurl-4.dll b/bin/libcurl-4.dll
new file mode 100644
index 0000000..67f83a8
--- /dev/null
+++ b/bin/libcurl-4.dll
Binary files differ
diff --git a/bin/libeay32.dll b/bin/libeay32.dll
new file mode 100644
index 0000000..df18818
--- /dev/null
+++ b/bin/libeay32.dll
Binary files differ
diff --git a/bin/libexpat-1.dll b/bin/libexpat-1.dll
new file mode 100644
index 0000000..efd5d76
--- /dev/null
+++ b/bin/libexpat-1.dll
Binary files differ
diff --git a/bin/libexslt-0.dll b/bin/libexslt-0.dll
new file mode 100644
index 0000000..8a2d5b3
--- /dev/null
+++ b/bin/libexslt-0.dll
Binary files differ
diff --git a/bin/libffi-6.dll b/bin/libffi-6.dll
new file mode 100644
index 0000000..f87af2d
--- /dev/null
+++ b/bin/libffi-6.dll
Binary files differ
diff --git a/bin/libfontconfig-1.dll b/bin/libfontconfig-1.dll
new file mode 100644
index 0000000..87bdc3d
--- /dev/null
+++ b/bin/libfontconfig-1.dll
Binary files differ
diff --git a/bin/libfreetype-6.dll b/bin/libfreetype-6.dll
new file mode 100644
index 0000000..55b4afd
--- /dev/null
+++ b/bin/libfreetype-6.dll
Binary files differ
diff --git a/bin/libgcc_s_dw2-1.dll b/bin/libgcc_s_dw2-1.dll
new file mode 100644
index 0000000..c923420
--- /dev/null
+++ b/bin/libgcc_s_dw2-1.dll
Binary files differ
diff --git a/bin/libglib-2.0-0.dll b/bin/libglib-2.0-0.dll
new file mode 100644
index 0000000..75ad317
--- /dev/null
+++ b/bin/libglib-2.0-0.dll
Binary files differ
diff --git a/bin/libgmp-10.dll b/bin/libgmp-10.dll
new file mode 100644
index 0000000..9886875
--- /dev/null
+++ b/bin/libgmp-10.dll
Binary files differ
diff --git a/bin/libgmpxx-4.dll b/bin/libgmpxx-4.dll
new file mode 100644
index 0000000..6b52ee0
--- /dev/null
+++ b/bin/libgmpxx-4.dll
Binary files differ
diff --git a/bin/libgnutls-30.dll b/bin/libgnutls-30.dll
new file mode 100644
index 0000000..3bdd79c
--- /dev/null
+++ b/bin/libgnutls-30.dll
Binary files differ
diff --git a/bin/libgnutlsxx-28.dll b/bin/libgnutlsxx-28.dll
new file mode 100644
index 0000000..b78d42e
--- /dev/null
+++ b/bin/libgnutlsxx-28.dll
Binary files differ
diff --git a/bin/libgomp-1.dll b/bin/libgomp-1.dll
new file mode 100644
index 0000000..9c80271
--- /dev/null
+++ b/bin/libgomp-1.dll
Binary files differ
diff --git a/bin/libgraphite2.dll b/bin/libgraphite2.dll
new file mode 100644
index 0000000..428bd31
--- /dev/null
+++ b/bin/libgraphite2.dll
Binary files differ
diff --git a/bin/libharfbuzz-0.dll b/bin/libharfbuzz-0.dll
new file mode 100644
index 0000000..37b61d2
--- /dev/null
+++ b/bin/libharfbuzz-0.dll
Binary files differ
diff --git a/bin/libharfbuzz-gobject-0.dll b/bin/libharfbuzz-gobject-0.dll
new file mode 100644
index 0000000..30afa57
--- /dev/null
+++ b/bin/libharfbuzz-gobject-0.dll
Binary files differ
diff --git a/bin/libharfbuzz-icu-0.dll b/bin/libharfbuzz-icu-0.dll
new file mode 100644
index 0000000..eb13621
--- /dev/null
+++ b/bin/libharfbuzz-icu-0.dll
Binary files differ
diff --git a/bin/libhogweed-4.dll b/bin/libhogweed-4.dll
new file mode 100644
index 0000000..7553efc
--- /dev/null
+++ b/bin/libhogweed-4.dll
Binary files differ
diff --git a/bin/libiconv-2.dll b/bin/libiconv-2.dll
new file mode 100644
index 0000000..9a2b2e5
--- /dev/null
+++ b/bin/libiconv-2.dll
Binary files differ
diff --git a/bin/libicudt58.dll b/bin/libicudt58.dll
new file mode 100644
index 0000000..49c5a4c
--- /dev/null
+++ b/bin/libicudt58.dll
Binary files differ
diff --git a/bin/libicuin58.dll b/bin/libicuin58.dll
new file mode 100644
index 0000000..5662320
--- /dev/null
+++ b/bin/libicuin58.dll
Binary files differ
diff --git a/bin/libicuio58.dll b/bin/libicuio58.dll
new file mode 100644
index 0000000..eb30856
--- /dev/null
+++ b/bin/libicuio58.dll
Binary files differ
diff --git a/bin/libicutest58.dll b/bin/libicutest58.dll
new file mode 100644
index 0000000..9aa7492
--- /dev/null
+++ b/bin/libicutest58.dll
Binary files differ
diff --git a/bin/libicutu58.dll b/bin/libicutu58.dll
new file mode 100644
index 0000000..9ae0b0d
--- /dev/null
+++ b/bin/libicutu58.dll
Binary files differ
diff --git a/bin/libicuuc58.dll b/bin/libicuuc58.dll
new file mode 100644
index 0000000..fb6e0b1
--- /dev/null
+++ b/bin/libicuuc58.dll
Binary files differ
diff --git a/bin/libidn-11.dll b/bin/libidn-11.dll
new file mode 100644
index 0000000..101ddfc
--- /dev/null
+++ b/bin/libidn-11.dll
Binary files differ
diff --git a/bin/libintl-8.dll b/bin/libintl-8.dll
new file mode 100644
index 0000000..2424330
--- /dev/null
+++ b/bin/libintl-8.dll
Binary files differ
diff --git a/bin/libjpeg-8.dll b/bin/libjpeg-8.dll
new file mode 100644
index 0000000..f8d259b
--- /dev/null
+++ b/bin/libjpeg-8.dll
Binary files differ
diff --git a/bin/liblzma-5.dll b/bin/liblzma-5.dll
new file mode 100644
index 0000000..5bd73f8
--- /dev/null
+++ b/bin/liblzma-5.dll
Binary files differ
diff --git a/bin/libnettle-6.dll b/bin/libnettle-6.dll
new file mode 100644
index 0000000..f81f863
--- /dev/null
+++ b/bin/libnettle-6.dll
Binary files differ
diff --git a/bin/libnghttp2-14.dll b/bin/libnghttp2-14.dll
new file mode 100644
index 0000000..1451cb1
--- /dev/null
+++ b/bin/libnghttp2-14.dll
Binary files differ
diff --git a/bin/libngspice-0.dll b/bin/libngspice-0.dll
new file mode 100644
index 0000000..6d44c72
--- /dev/null
+++ b/bin/libngspice-0.dll
Binary files differ
diff --git a/bin/libp11-kit-0.dll b/bin/libp11-kit-0.dll
new file mode 100644
index 0000000..88aa150
--- /dev/null
+++ b/bin/libp11-kit-0.dll
Binary files differ
diff --git a/bin/libpcre-1.dll b/bin/libpcre-1.dll
new file mode 100644
index 0000000..a667a91
--- /dev/null
+++ b/bin/libpcre-1.dll
Binary files differ
diff --git a/bin/libpcre16-0.dll b/bin/libpcre16-0.dll
new file mode 100644
index 0000000..98a872a
--- /dev/null
+++ b/bin/libpcre16-0.dll
Binary files differ
diff --git a/bin/libpcre32-0.dll b/bin/libpcre32-0.dll
new file mode 100644
index 0000000..90d2b9b
--- /dev/null
+++ b/bin/libpcre32-0.dll
Binary files differ
diff --git a/bin/libpcrecpp-0.dll b/bin/libpcrecpp-0.dll
new file mode 100644
index 0000000..cd1fd78
--- /dev/null
+++ b/bin/libpcrecpp-0.dll
Binary files differ
diff --git a/bin/libpcreposix-0.dll b/bin/libpcreposix-0.dll
new file mode 100644
index 0000000..d575c59
--- /dev/null
+++ b/bin/libpcreposix-0.dll
Binary files differ
diff --git a/bin/libpixman-1-0.dll b/bin/libpixman-1-0.dll
new file mode 100644
index 0000000..748b469
--- /dev/null
+++ b/bin/libpixman-1-0.dll
Binary files differ
diff --git a/bin/libpng16-16.dll b/bin/libpng16-16.dll
new file mode 100644
index 0000000..5ce387b
--- /dev/null
+++ b/bin/libpng16-16.dll
Binary files differ
diff --git a/bin/libpython2.7.dll b/bin/libpython2.7.dll
new file mode 100644
index 0000000..1713a8a
--- /dev/null
+++ b/bin/libpython2.7.dll
Binary files differ
diff --git a/bin/libpython3.6m.dll b/bin/libpython3.6m.dll
new file mode 100644
index 0000000..d9db668
--- /dev/null
+++ b/bin/libpython3.6m.dll
Binary files differ
diff --git a/bin/librtmp-1.dll b/bin/librtmp-1.dll
new file mode 100644
index 0000000..81e6a05
--- /dev/null
+++ b/bin/librtmp-1.dll
Binary files differ
diff --git a/bin/libssh2-1.dll b/bin/libssh2-1.dll
new file mode 100644
index 0000000..331726e
--- /dev/null
+++ b/bin/libssh2-1.dll
Binary files differ
diff --git a/bin/libstdc++-6.dll b/bin/libstdc++-6.dll
new file mode 100644
index 0000000..6ef46f9
--- /dev/null
+++ b/bin/libstdc++-6.dll
Binary files differ
diff --git a/bin/libtasn1-6.dll b/bin/libtasn1-6.dll
new file mode 100644
index 0000000..a6ff9d8
--- /dev/null
+++ b/bin/libtasn1-6.dll
Binary files differ
diff --git a/bin/libtiff-5.dll b/bin/libtiff-5.dll
new file mode 100644
index 0000000..ec5e544
--- /dev/null
+++ b/bin/libtiff-5.dll
Binary files differ
diff --git a/bin/libtiffxx-5.dll b/bin/libtiffxx-5.dll
new file mode 100644
index 0000000..d3150d3
--- /dev/null
+++ b/bin/libtiffxx-5.dll
Binary files differ
diff --git a/bin/libturbojpeg-0.dll b/bin/libturbojpeg-0.dll
new file mode 100644
index 0000000..b76b510
--- /dev/null
+++ b/bin/libturbojpeg-0.dll
Binary files differ
diff --git a/bin/libunistring-2.dll b/bin/libunistring-2.dll
new file mode 100644
index 0000000..33cde31
--- /dev/null
+++ b/bin/libunistring-2.dll
Binary files differ
diff --git a/bin/libwinpthread-1.dll b/bin/libwinpthread-1.dll
new file mode 100644
index 0000000..c458c57
--- /dev/null
+++ b/bin/libwinpthread-1.dll
Binary files differ
diff --git a/bin/libxml2-2.dll b/bin/libxml2-2.dll
new file mode 100644
index 0000000..b524d57
--- /dev/null
+++ b/bin/libxml2-2.dll
Binary files differ
diff --git a/bin/libxslt-1.dll b/bin/libxslt-1.dll
new file mode 100644
index 0000000..3debcd4
--- /dev/null
+++ b/bin/libxslt-1.dll
Binary files differ
diff --git a/bin/pcb_calculator.exe b/bin/pcb_calculator.exe
new file mode 100644
index 0000000..a564efa
--- /dev/null
+++ b/bin/pcb_calculator.exe
Binary files differ
diff --git a/bin/pcbnew.exe b/bin/pcbnew.exe
new file mode 100644
index 0000000..f3780df
--- /dev/null
+++ b/bin/pcbnew.exe
Binary files differ
diff --git a/bin/pip-script.py b/bin/pip-script.py
new file mode 100644
index 0000000..6b0a456
--- /dev/null
+++ b/bin/pip-script.py
@@ -0,0 +1,12 @@
+#!python.exe
+# EASY-INSTALL-ENTRY-SCRIPT: 'pip==9.0.1','console_scripts','pip'
+__requires__ = 'pip==9.0.1'
+import re
+import sys
+from pkg_resources import load_entry_point
+
+if __name__ == '__main__':
+ sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+ sys.exit(
+ load_entry_point('pip==9.0.1', 'console_scripts', 'pip')()
+ )
diff --git a/bin/pip.exe b/bin/pip.exe
new file mode 100644
index 0000000..49b476e
--- /dev/null
+++ b/bin/pip.exe
Binary files differ
diff --git a/bin/pip.exe.manifest b/bin/pip.exe.manifest
new file mode 100644
index 0000000..dd6f562
--- /dev/null
+++ b/bin/pip.exe.manifest
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+ <assemblyIdentity version="1.0.0.0"
+ processorArchitecture="X86"
+ name="pip"
+ type="win32"/>
+ <!-- Identify the application security requirements. -->
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
diff --git a/bin/pl_editor.exe b/bin/pl_editor.exe
new file mode 100644
index 0000000..4090fd1
--- /dev/null
+++ b/bin/pl_editor.exe
Binary files differ
diff --git a/bin/python.exe b/bin/python.exe
new file mode 100644
index 0000000..57df250
--- /dev/null
+++ b/bin/python.exe
Binary files differ
diff --git a/bin/pythonw.exe b/bin/pythonw.exe
new file mode 100644
index 0000000..a84c1d3
--- /dev/null
+++ b/bin/pythonw.exe
Binary files differ
diff --git a/bin/scripting/plugins/README-bom.txt b/bin/scripting/plugins/README-bom.txt
new file mode 100644
index 0000000..7a53d7d
--- /dev/null
+++ b/bin/scripting/plugins/README-bom.txt
@@ -0,0 +1,38 @@
+bom_?.py are some python scripts which read a generic xml netlist from eeschema,
+and create a bom.
+
+All examples use kicad_netlist_reader.py, which is a python utility to read
+and parse this generic xml netlist and create the corresponding data
+used to build the bom.
+
+You can modify them to build the bom you want.
+
+to use them, you should install python, and run:
+python bom_example?.py <netlist name> <bom list netname>
+
+See Eeschema doc, chapter 14 for info about the generic xml netlist format,
+and how to run a script from Eeschema to create a customized netlist or BOM.
+
+If the python comment
+"""
+ @package
+ some comments
+"""
+is added to the begining of the python script, the comment will be displayed
+in Eescheam, in the BOM dialog
+
+For instance:
+"""
+ @package
+ Generate a HTML BOM list.
+ Components are sorted and grouped by value
+ Fields are (if exist)
+ Ref, Quantity, Value, Part, Datasheet, Description, Vendor
+"""
+
+displays:
+ Generate a HTML BOM list.
+ Components are sorted and grouped by value
+ Fields are (if exist)
+ Ref, Quantity, Value, Part, Datasheet, Description, Vendor
+in BOM dialog
diff --git a/bin/scripting/plugins/bom2csv.xsl b/bin/scripting/plugins/bom2csv.xsl
new file mode 100644
index 0000000..67d588b
--- /dev/null
+++ b/bin/scripting/plugins/bom2csv.xsl
@@ -0,0 +1,99 @@
+<!--XSL style sheet to convert EESCHEMA XML Partlist Format to CSV BOM Format
+ Copyright (C) 2013, Stefan Helmert.
+ GPL v2.
+
+ Functionality:
+ Generation of csv table with table head of all existing field names
+ and correct assigned cell entries
+
+ How to use this is explained in eeschema.pdf chapter 14. You enter a command line into the
+ netlist exporter using a new (custom) tab in the netlist export dialog. The command is
+ similar to
+ on Windows:
+ xsltproc -o "%O.csv" "C:\Program Files (x86)\KiCad\bin\plugins\bom2csv.xsl" "%I"
+ on Linux:
+ xsltproc -o "%O.csv" /usr/local/lib/kicad/plugins/bom2csv.xsl "%I"
+
+ Instead of "%O.csv" you can alternatively use "%O" if you will supply your own file extension when
+ prompted in the UI. The double quotes are there to account for the possibility of space(s)
+ in the filename.
+-->
+
+<!--
+ @package
+ Generate a Tab delimited list (csv file type).
+ One component per line
+ Fields are
+ Ref,Value, Footprint, Datasheet, Field5, Field4, price
+
+ Command line
+ xsltproc -o "%O.csv" "pathToFile/bom2csv.xsl" "%I"
+-->
+
+<!DOCTYPE xsl:stylesheet [
+ <!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF, or LF, your choice -->
+]>
+
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output method="text"/>
+
+ <!-- for table head and empty table fields-->
+ <xsl:key name="headentr" match="field" use="@name"/>
+
+ <!-- main part -->
+ <xsl:template match="/export">
+ <xsl:text>Reference, Value, Footprint, Datasheet</xsl:text>
+
+ <!-- find all existing table head entries and list each one once -->
+ <xsl:for-each select="components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:for-each>
+ <xsl:text>&nl;</xsl:text>
+
+ <!-- all table entries -->
+ <xsl:apply-templates select="components/comp"/>
+ </xsl:template>
+
+ <!-- the table entries -->
+ <xsl:template match="components/comp">
+ <xsl:text>"</xsl:text>
+ <xsl:value-of select="@ref"/><xsl:text>","</xsl:text>
+ <xsl:value-of select="value"/><xsl:text>","</xsl:text>
+ <xsl:value-of select="footprint"/><xsl:text>","</xsl:text>
+ <xsl:value-of select="datasheet"/><xsl:text>"</xsl:text>
+ <xsl:apply-templates select="fields"/>
+ <xsl:text>&nl;</xsl:text>
+ </xsl:template>
+
+ <!-- table entries with dynamic table head -->
+ <xsl:template match="fields">
+
+ <!-- remember current fields section -->
+ <xsl:variable name="fieldvar" select="field"/>
+
+ <!-- for all existing head entries -->
+ <xsl:for-each select="/export/components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
+ <xsl:variable name="allnames" select="@name"/>
+ <xsl:text>,"</xsl:text>
+
+ <!-- for all field entries in the remembered fields section -->
+ <xsl:for-each select="$fieldvar">
+
+ <!-- only if this field entry exists in this fields section -->
+ <xsl:if test="@name=$allnames">
+ <!-- content of the field -->
+ <xsl:value-of select="."/>
+ </xsl:if>
+ <!--
+ If it does not exist, use an empty cell in output for this row.
+ Every non-blank entry is assigned to its proper column.
+ -->
+ </xsl:for-each>
+
+ <xsl:text>"</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ </xsl:stylesheet>
diff --git a/bin/scripting/plugins/bom2grouped_csv.xsl b/bin/scripting/plugins/bom2grouped_csv.xsl
new file mode 100644
index 0000000..e9b8446
--- /dev/null
+++ b/bin/scripting/plugins/bom2grouped_csv.xsl
@@ -0,0 +1,104 @@
+<!--XSL style sheet to convert EESCHEMA XML Partlist Format to grouped CSV BOM Format
+ Copyright (C) 2014, Wolf Walter.
+ Copyright (C) 2013, Stefan Helmert.
+ GPL v2.
+
+ Functionality:
+ Generation of Digi-Key ordering system compatible BOM
+
+ How to use this is explained in eeschema.pdf chapter 14. You enter a command line into the
+ netlist exporter using a new (custom) tab in the netlist export dialog.
+ The command line is
+ xsltproc -o "%O.csv" "FullPathToFile/bom2groupedCsv.xsl" "%I"
+-->
+<!--
+ @package
+ Functionality:
+ * Generate a comma separated value BOM list (csv file type).
+ * Components are sorted by ref and grouped by same value+footprint
+ One value per line
+ Fields are
+ Reference, Quantity, Value, Footprint, Datasheet
+
+ The command line is
+ xsltproc -o "%O.csv" "FullPathToFile/bom2groupedCsv.xsl" "%I"
+-->
+
+
+<!DOCTYPE xsl:stylesheet [
+ <!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF, or LF, your choice -->
+]>
+
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output method="text"/>
+
+ <!-- for Muenchian grouping of footprint and value combination -->
+ <xsl:key name="partTypeByValueAndFootprint" match="comp" use="concat(footprint, '-', value)" />
+
+ <!-- for table head and empty table fields-->
+ <xsl:key name="headentr" match="field" use="@name"/>
+
+ <!-- main part -->
+ <xsl:template match="/export">
+ <xsl:text>Reference, Quantity, Value, Footprint, Datasheet</xsl:text>
+
+ <!-- find all existing table head entries and list each one once -->
+ <xsl:for-each select="components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:for-each>
+
+ <!-- all table entries -->
+ <xsl:apply-templates select="components"/>
+ </xsl:template>
+
+ <xsl:template match="components">
+ <!-- for Muenchian grouping of footprint and value combination -->
+ <xsl:for-each select="comp[count(. | key('partTypeByValueAndFootprint', concat(footprint, '-', value))[1]) = 1]">
+ <xsl:sort select="@ref" />
+ <xsl:text>&nl;</xsl:text>
+ <!-- list of all references -->
+ <xsl:for-each select="key('partTypeByValueAndFootprint', concat(footprint, '-', value))">
+ <xsl:sort select="@ref" />
+ <xsl:value-of select="@ref"/><xsl:text> </xsl:text>
+ </xsl:for-each><xsl:text>,</xsl:text>
+ <!-- quantity of parts with same footprint and value -->
+ <xsl:value-of select="count(key('partTypeByValueAndFootprint', concat(footprint, '-', value)))"/><xsl:text>,</xsl:text>
+ <xsl:text>"</xsl:text>
+ <xsl:value-of select="value"/><xsl:text>","</xsl:text>
+ <xsl:value-of select="footprint"/><xsl:text>","</xsl:text>
+ <xsl:value-of select="datasheet"/><xsl:text>"</xsl:text>
+ <xsl:apply-templates select="fields"/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!-- table entries with dynamic table head -->
+ <xsl:template match="fields">
+
+ <!-- remember current fields section -->
+ <xsl:variable name="fieldvar" select="field"/>
+
+ <!-- for all existing head entries -->
+ <xsl:for-each select="/export/components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
+ <xsl:variable name="allnames" select="@name"/>
+ <xsl:text>,"</xsl:text>
+
+ <!-- for all field entries in the remembered fields section -->
+ <xsl:for-each select="$fieldvar">
+
+ <!-- only if this field entry exists in this fields section -->
+ <xsl:if test="@name=$allnames">
+ <!-- content of the field -->
+ <xsl:value-of select="."/>
+ <xsl:text>"</xsl:text>
+ </xsl:if>
+ <!--
+ If it does not exist, use an empty cell in output for this row.
+ Every non-blank entry is assigned to its proper column.
+ -->
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ </xsl:stylesheet> \ No newline at end of file
diff --git a/bin/scripting/plugins/bom_csv_grouped_by_value.py b/bin/scripting/plugins/bom_csv_grouped_by_value.py
new file mode 100644
index 0000000..b582d61
--- /dev/null
+++ b/bin/scripting/plugins/bom_csv_grouped_by_value.py
@@ -0,0 +1,167 @@
+#
+# Example python script to generate a BOM from a KiCad generic netlist
+#
+# Example: Sorted and Grouped CSV BOM
+#
+"""
+ @package
+ Generate a csv BOM list.
+ Components are sorted by ref and grouped by value
+ Fields are (if exist)
+ Item, Qty, Reference(s), Value, LibPart, Footprint, Datasheet
+
+ Command line:
+ python "pathToFile/bom_csv_grouped_by_value.py" "%I" "%O.csv"
+"""
+
+from __future__ import print_function
+
+# Import the KiCad python helper module and the csv formatter
+import kicad_netlist_reader
+import csv
+import sys
+
+def myEqu(self, other):
+ """myEqu is a more advanced equivalence function for components which is
+ used by component grouping. Normal operation is to group components based
+ on their value and footprint.
+
+ In this example of a custom equivalency operator we compare the
+ value, the part name and the footprint.
+ """
+ result = True
+ if self.getValue() != other.getValue():
+ result = False
+ elif self.getPartName() != other.getPartName():
+ result = False
+ elif self.getFootprint() != other.getFootprint():
+ result = False
+
+ return result
+
+# Override the component equivalence operator - it is important to do this
+# before loading the netlist, otherwise all components will have the original
+# equivalency operator.
+kicad_netlist_reader.comp.__eq__ = myEqu
+
+if len(sys.argv) != 3:
+ print("Usage ", __file__, "<generic_netlist.xml> <output.csv>", file=sys.stderr)
+ sys.exit(1)
+
+
+# Generate an instance of a generic netlist, and load the netlist tree from
+# the command line option. If the file doesn't exist, execution will stop
+net = kicad_netlist_reader.netlist(sys.argv[1])
+
+# Open a file to write to, if the file cannot be opened output to stdout
+# instead
+try:
+ f = open(sys.argv[2], 'w')
+except IOError:
+ e = "Can't open output file for writing: " + sys.argv[2]
+ print( __file__, ":", e, sys.stderr )
+ f = sys.stdout
+
+# subset the components to those wanted in the BOM, controlled
+# by <configure> block in kicad_netlist_reader.py
+components = net.getInterestingComponents()
+
+compfields = net.gatherComponentFieldUnion(components)
+partfields = net.gatherLibPartFieldUnion()
+
+# remove Reference, Value, Datasheet, and Footprint, they will come from 'columns' below
+partfields -= set( ['Reference', 'Value', 'Datasheet', 'Footprint'] )
+
+columnset = compfields | partfields # union
+
+# prepend an initial 'hard coded' list and put the enchillada into list 'columns'
+columns = ['Item', 'Qty', 'Reference(s)', 'Value', 'LibPart', 'Footprint', 'Datasheet'] + sorted(list(columnset))
+
+# Create a new csv writer object to use as the output formatter
+out = csv.writer( f, lineterminator='\n', delimiter=',', quotechar='\"', quoting=csv.QUOTE_ALL )
+
+# override csv.writer's writerow() to support encoding conversion (initial encoding is utf8):
+def writerow( acsvwriter, columns ):
+ utf8row = []
+ for col in columns:
+ utf8row.append( str(col) ) # currently, no change
+ acsvwriter.writerow( utf8row )
+
+# Output a set of rows as a header providing general information
+writerow( out, ['Source:', net.getSource()] )
+writerow( out, ['Date:', net.getDate()] )
+writerow( out, ['Tool:', net.getTool()] )
+writerow( out, ['Generator:', sys.argv[0]] )
+writerow( out, ['Component Count:', len(components)] )
+writerow( out, [] )
+writerow( out, ['Individual Components:'] )
+writerow( out, [] ) # blank line
+writerow( out, columns )
+
+# Output all the interesting components individually first:
+row = []
+for c in components:
+ del row[:]
+ row.append('') # item is blank in individual table
+ row.append('') # Qty is always 1, why print it
+ row.append( c.getRef() ) # Reference
+ row.append( c.getValue() ) # Value
+ row.append( c.getLibName() + ":" + c.getPartName() ) # LibPart
+ #row.append( c.getDescription() )
+ row.append( c.getFootprint() )
+ row.append( c.getDatasheet() )
+
+ # from column 7 upwards, use the fieldnames to grab the data
+ for field in columns[7:]:
+ row.append( c.getField( field ) );
+
+ writerow( out, row )
+
+
+writerow( out, [] ) # blank line
+writerow( out, [] ) # blank line
+writerow( out, [] ) # blank line
+
+writerow( out, ['Collated Components:'] )
+writerow( out, [] ) # blank line
+writerow( out, columns ) # reuse same columns
+
+
+
+# Get all of the components in groups of matching parts + values
+# (see kicad_netlist_reader.py)
+grouped = net.groupComponents(components)
+
+
+# Output component information organized by group, aka as collated:
+item = 0
+for group in grouped:
+ del row[:]
+ refs = ""
+
+ # Add the reference of every component in the group and keep a reference
+ # to the component so that the other data can be filled in once per group
+ for component in group:
+ if len(refs) > 0:
+ refs += ", "
+ refs += component.getRef()
+ c = component
+
+ # Fill in the component groups common data
+ # columns = ['Item', 'Qty', 'Reference(s)', 'Value', 'LibPart', 'Footprint', 'Datasheet'] + sorted(list(columnset))
+ item += 1
+ row.append( item )
+ row.append( len(group) )
+ row.append( refs );
+ row.append( c.getValue() )
+ row.append( c.getLibName() + ":" + c.getPartName() )
+ row.append( net.getGroupFootprint(group) )
+ row.append( net.getGroupDatasheet(group) )
+
+ # from column 7 upwards, use the fieldnames to grab the data
+ for field in columns[7:]:
+ row.append( net.getGroupField(group, field) );
+
+ writerow( out, row )
+
+f.close()
diff --git a/bin/scripting/plugins/bom_csv_grouped_by_value_with_fp.py b/bin/scripting/plugins/bom_csv_grouped_by_value_with_fp.py
new file mode 100644
index 0000000..dd14af0
--- /dev/null
+++ b/bin/scripting/plugins/bom_csv_grouped_by_value_with_fp.py
@@ -0,0 +1,65 @@
+#
+# Example python script to generate a BOM from a KiCad generic netlist
+#
+# Example: Sorted and Grouped CSV BOM
+#
+
+"""
+ @package
+ Generate a Tab delimited list (csv file type).
+ Components are sorted by ref and grouped by value with same footprint
+ Fields are (if exist)
+ 'Ref', 'Qnty', 'Value', 'Cmp name', 'Footprint', 'Description', 'Vendor'
+
+ Command line:
+ python "pathToFile/bom_csv_grouped_by_value_with_fp.py" "%I" "%O.csv"
+"""
+
+# Import the KiCad python helper module and the csv formatter
+import kicad_netlist_reader
+import csv
+import sys
+
+# Generate an instance of a generic netlist, and load the netlist tree from
+# the command line option. If the file doesn't exist, execution will stop
+net = kicad_netlist_reader.netlist(sys.argv[1])
+
+# Open a file to write to, if the file cannot be opened output to stdout
+# instead
+try:
+ f = open(sys.argv[2], 'w')
+except IOError:
+ e = "Can't open output file for writing: " + sys.argv[2]
+ print(__file__, ":", e, sys.stderr)
+ f = sys.stdout
+
+# Create a new csv writer object to use as the output formatter
+out = csv.writer(f, lineterminator='\n', delimiter=',', quotechar='\"', quoting=csv.QUOTE_ALL)
+
+# Output a set of rows for a header providing general information
+out.writerow(['Source:', net.getSource()])
+out.writerow(['Date:', net.getDate()])
+out.writerow(['Tool:', net.getTool()])
+out.writerow( ['Generator:', sys.argv[0]] )
+out.writerow(['Component Count:', len(net.components)])
+out.writerow(['Ref', 'Qnty', 'Value', 'Cmp name', 'Footprint', 'Description', 'Vendor'])
+
+# Get all of the components in groups of matching parts + values
+# (see ky_generic_netlist_reader.py)
+grouped = net.groupComponents()
+
+# Output all of the component information
+for group in grouped:
+ refs = ""
+
+ # Add the reference of every component in the group and keep a reference
+ # to the component so that the other data can be filled in once per group
+ for component in group:
+ refs += component.getRef() + ", "
+ c = component
+
+ # Fill in the component groups common data
+ out.writerow([refs, len(group), c.getValue(), c.getPartName(), c.getFootprint(),
+ c.getDescription(), c.getField("Vendor")])
+
+
diff --git a/bin/scripting/plugins/bom_csv_sorted_by_ref.py b/bin/scripting/plugins/bom_csv_sorted_by_ref.py
new file mode 100644
index 0000000..e66cc13
--- /dev/null
+++ b/bin/scripting/plugins/bom_csv_sorted_by_ref.py
@@ -0,0 +1,62 @@
+#
+# Example python script to generate a BOM from a KiCad generic netlist
+#
+# Example: Ungrouped (One component per row) CSV output
+#
+
+"""
+ @package
+ Generate a csv list file.
+ Components are sorted by ref
+ One component per line
+ Fields are (if exist)
+ Ref, value, Part, footprint, Datasheet, Manufacturer, Vendor
+
+ Command line:
+ python "pathToFile/bom_csv_sorted_by_ref.py" "%I" "%O.csv"
+"""
+
+from __future__ import print_function
+
+# Import the KiCad python helper module
+import kicad_netlist_reader
+import csv
+import sys
+
+# Generate an instance of a generic netlist, and load the netlist tree from
+# the command line option. If the file doesn't exist, execution will stop
+net = kicad_netlist_reader.netlist(sys.argv[1])
+
+# Open a file to write to, if the file cannot be opened output to stdout
+# instead
+try:
+ f = open(sys.argv[2], 'w')
+except IOError:
+ e = "Can't open output file for writing: " + sys.argv[2]
+ print( __file__, ":", e, sys.stderr )
+ f = sys.stdout
+
+# Create a new csv writer object to use as the output formatter
+out = csv.writer(f, lineterminator='\n', delimiter=',', quotechar="\"", quoting=csv.QUOTE_ALL)
+
+# override csv.writer's writerow() to support utf8 encoding:
+def writerow( acsvwriter, columns ):
+ utf8row = []
+ for col in columns:
+ utf8row.append( str(col) )
+ acsvwriter.writerow( utf8row )
+
+components = net.getInterestingComponents()
+
+# Output a field delimited header line
+writerow( out, ['Source:', net.getSource()] )
+writerow( out, ['Date:', net.getDate()] )
+writerow( out, ['Tool:', net.getTool()] )
+writerow( out, ['Component Count:', len(components)] )
+writerow( out, ['Ref', 'Value', 'Footprint', 'Datasheet', 'Manufacturer', 'Vendor'] )
+
+# Output all of the component information (One component per row)
+for c in components:
+ writerow( out, [c.getRef(), c.getValue(), c.getFootprint(), c.getDatasheet(),
+ c.getField("Manufacturer"), c.getField("Vendor")])
+
diff --git a/bin/scripting/plugins/bom_html_grouped_by_value.py b/bin/scripting/plugins/bom_html_grouped_by_value.py
new file mode 100644
index 0000000..80def66
--- /dev/null
+++ b/bin/scripting/plugins/bom_html_grouped_by_value.py
@@ -0,0 +1,98 @@
+#
+# Example python script to generate a BOM from a KiCad generic netlist
+#
+# Example: Sorted and Grouped HTML BOM
+#
+"""
+ @package
+ Generate a HTML BOM list.
+ Components are sorted by ref and grouped by value
+ Fields are (if exist)
+ Ref, Quantity, Value, Part, Datasheet, Description, Vendor
+
+ Command line:
+ python "pathToFile/bom_html_grouped_by_value.py" "%I" "%O.html"
+"""
+
+from __future__ import print_function
+
+# Import the KiCad python helper module and the csv formatter
+import kicad_netlist_reader
+import sys
+
+# Start with a basic html template
+html = """
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ </head>
+ <body>
+ <h1><!--SOURCE--></h1>
+ <p><!--DATE--></p>
+ <p><!--TOOL--></p>
+ <p><!--COMPCOUNT--></p>
+ <table>
+ <!--TABLEROW-->
+ </table>
+ </body>
+</html>
+ """
+
+# Generate an instance of a generic netlist, and load the netlist tree from
+# the command line option. If the file doesn't exist, execution will stop
+net = kicad_netlist_reader.netlist(sys.argv[1])
+
+# Open a file to write to, if the file cannot be opened output to stdout
+# instead
+try:
+ f = open(sys.argv[2], 'w')
+except IOError:
+ e = "Can't open output file for writing: " + sys.argv[2]
+ print(__file__, ":", e, file=sys.stderr)
+ f = sys.stdout
+
+components = net.getInterestingComponents()
+
+# Output a set of rows for a header providing general information
+html = html.replace('<!--SOURCE-->', net.getSource())
+html = html.replace('<!--DATE-->', net.getDate())
+html = html.replace('<!--TOOL-->', net.getTool())
+html = html.replace('<!--COMPCOUNT-->', "<b>Component Count:</b>" + \
+ str(len(components)))
+
+row = "<tr><th style='width:640px'>Ref</th>"
+row += "<th>Qnty</th>"
+row += "<th>Value</th>" + "<th>Part</th>" + "<th>Datasheet</th>"
+row += "<th>Description</th>" + "<th>Vendor</th></tr>"
+
+html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->")
+
+# Get all of the components in groups of matching parts + values
+# (see kicad_netlist_reader.py)
+grouped = net.groupComponents(components)
+
+# Output all of the component information
+for group in grouped:
+ refs = ""
+
+ # Add the reference of every component in the group and keep a reference
+ # to the component so that the other data can be filled in once per group
+ for component in group:
+ if len(refs) > 0:
+ refs += ", "
+ refs += component.getRef()
+ c = component
+
+ row = "<tr><td>" + refs +"</td><td>" + str(len(group))
+ row += "</td><td>" + c.getValue()
+ row += "</td><td>" + c.getLibName() + ":" + c.getPartName()
+ row += "</td><td>" + c.getDatasheet()
+ row += "</td><td>" + c.getDescription()
+ row += "</td><td>" + c.getField("Vendor")+ "</td></tr>"
+
+ html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->")
+
+# Print the formatted html to the file
+print(html, file=f)
diff --git a/bin/scripting/plugins/bom_html_with_advanced_grouping.py b/bin/scripting/plugins/bom_html_with_advanced_grouping.py
new file mode 100644
index 0000000..a091351
--- /dev/null
+++ b/bin/scripting/plugins/bom_html_with_advanced_grouping.py
@@ -0,0 +1,132 @@
+#
+# Example python script to generate a BOM from a KiCad generic netlist
+#
+# Example: Sorted and Grouped HTML BOM with advanced grouping
+#
+
+"""
+ @package
+ Generate a HTML BOM list.
+ Components are sorted and grouped by value
+ Fields are (if exist)
+ Ref, Quantity, Value, Part, Footprint, Description, Vendor
+
+ Command line:
+ python "pathToFile/bom_with_advanced_grouping.py" "%I" "%O.html"
+"""
+
+
+from __future__ import print_function
+
+# Import the KiCad python helper module and the csv formatter
+import kicad_netlist_reader
+import sys
+
+# Start with a basic html template
+html = """
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>KiCad BOM Example 5</title>
+ </head>
+ <body>
+ <h1><!--SOURCE--></h1>
+ <p><!--DATE--></p>
+ <p><!--TOOL--></p>
+ <p><!--COMPCOUNT--></p>
+ <table>
+ <!--TABLEROW-->
+ </table>
+ </body>
+</html>
+ """
+
+def myEqu(self, other):
+ """myEqu is a more advanced equivalence function for components which is
+ used by component grouping. Normal operation is to group components based
+ on their Value and Footprint.
+
+ In this example of a more advanced equivalency operator we also compare the
+ custom fields Voltage, Tolerance and Manufacturer as well as the assigned
+ footprint. If these fields are not used in some parts they will simply be
+ ignored (they will match as both will be empty strings).
+
+ """
+ result = True
+ if self.getValue() != other.getValue():
+ result = False
+ elif self.getPartName() != other.getPartName():
+ result = False
+ elif self.getFootprint() != other.getFootprint():
+ result = False
+ elif self.getField("Tolerance") != other.getField("Tolerance"):
+ result = False
+ elif self.getField("Manufacturer") != other.getField("Manufacturer"):
+ result = False
+ elif self.getField("Voltage") != other.getField("Voltage"):
+ result = False
+
+ return result
+
+# Override the component equivalence operator - it is important to do this
+# before loading the netlist, otherwise all components will have the original
+# equivalency operator.
+kicad_netlist_reader.comp.__eq__ = myEqu
+
+# Generate an instance of a generic netlist, and load the netlist tree from
+# <file>.tmp. If the file doesn't exist, execution will stop
+net = kicad_netlist_reader.netlist(sys.argv[1])
+
+# Open a file to write too, if the file cannot be opened output to stdout
+# instead
+try:
+ f = open(sys.argv[2], 'w')
+except IOError:
+ e = "Can't open output file for writing: " + sys.argv[2]
+ print(__file__, ":", e, file=sys.stderr)
+ f = sys.stdout
+
+# Output a set of rows for a header providing general information
+html = html.replace('<!--SOURCE-->', net.getSource())
+html = html.replace('<!--DATE-->', net.getDate())
+html = html.replace('<!--TOOL-->', net.getTool())
+html = html.replace('<!--COMPCOUNT-->', "<b>Component Count:</b>" + \
+ str(len(net.components)))
+
+row = "<tr><th style='width:640px'>Ref</th>" + "<th>Qnty</th>"
+row += "<th>Value</th>" + "<th>Part</th>" + "<th>Footprint</th>"
+row += "<th>Description</th>" + "<th>Vendor</th></tr>"
+
+html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->")
+
+components = net.getInterestingComponents()
+
+# Get all of the components in groups of matching parts + values
+# (see kicad_netlist_reader.py)
+grouped = net.groupComponents(components)
+
+# Output all of the component information
+for group in grouped:
+ refs = ""
+
+ # Add the reference of every component in the group and keep a reference
+ # to the component so that the other data can be filled in once per group
+ for component in group:
+ if len(refs) > 0:
+ refs += ", "
+ refs += component.getRef()
+ c = component
+
+ row = "\n "
+ row += "<tr><td>" + refs +"</td><td>" + str(len(group))
+ row += "</td><td>" + c.getValue() + "</td><td>" + c.getLibName() + ":"
+ row += c.getPartName() + "</td><td>" + c.getFootprint() + "</td><td>"
+ row += c.getDescription() + "</td><td>" + c.getField("Vendor")
+ row += "</td></tr>"
+
+ html = html.replace('<!--TABLEROW-->', row + "<!--TABLEROW-->")
+
+# Print the formatted html to output file
+print(html, file=f)
diff --git a/bin/scripting/plugins/bom_sorted_by_ref.py b/bin/scripting/plugins/bom_sorted_by_ref.py
new file mode 100644
index 0000000..6dd28d5
--- /dev/null
+++ b/bin/scripting/plugins/bom_sorted_by_ref.py
@@ -0,0 +1,61 @@
+#
+# Example python script to generate a BOM from a KiCad generic netlist
+#
+"""
+ @package
+ Generate a BOM list file (a simple text).
+ Components are sorted by ref
+ One component per line
+ Fields are (if exist)
+ Ref, Quantity, value, Part, footprint, Description, Vendor
+ Fields are separated by tabs
+
+ Command line:
+ python "pathToFile/bom_sorted_by_ref.py" "%I" "%O.txt"
+"""
+
+from __future__ import print_function
+
+# Import the KiCad python helper module and the csv formatter
+import kicad_netlist_reader
+import csv
+import sys
+
+# Generate an instance of a generic netlist, and load the netlist tree from
+# the command line option. If the file doesn't exist, execution will stop
+net = kicad_netlist_reader.netlist(sys.argv[1])
+
+# Open a file to write to, if the file cannot be opened output to stdout
+# instead
+try:
+ f = open(sys.argv[2], 'w')
+except IOError:
+ e = "Can't open output file for writing: " + sys.argv[2]
+ print(__file__, ":", e, sys.stderr)
+ f = sys.stdout
+
+# Create a new csv writer object to use as the output formatter, although we
+# are created a tab delimited list instead!
+out = csv.writer(f, lineterminator='\n', delimiter='\t', quoting=csv.QUOTE_NONE)
+
+# override csv.writer's writerow() to support utf8 encoding:
+def writerow( acsvwriter, columns ):
+ utf8row = []
+ for col in columns:
+ txt=str(col);
+ utf8row.append( txt )
+ acsvwriter.writerow( utf8row )
+
+components = net.getInterestingComponents()
+
+# Output a field delimited header line
+writerow( out, ['Source:', net.getSource()] )
+writerow( out, ['Date:', net.getDate()] )
+writerow( out, ['Tool:', net.getTool()] )
+writerow( out, ['Component Count:', len(components)] )
+writerow( out, ['Ref', 'Value', 'Part', 'Footprint', 'Description', 'Vendor'] )
+
+# Output all of the component information
+for c in components:
+ writerow( out, [c.getRef(), c.getValue(), c.getLibName() + ":" + c.getPartName(),
+ c.getFootprint(), c.getDescription(), c.getField("Vendor")])
diff --git a/bin/scripting/plugins/bom_with_title_block_2_csv.xsl b/bin/scripting/plugins/bom_with_title_block_2_csv.xsl
new file mode 100644
index 0000000..feed1ce
--- /dev/null
+++ b/bin/scripting/plugins/bom_with_title_block_2_csv.xsl
@@ -0,0 +1,167 @@
+<!--
+ EESCHEMA BOM plugin. Creates BOM CSV files from the project net file.
+ Based on Stefan Helmert bom2csv.xsl
+
+ Note:
+ The project infomation (i.e title, company and revision) is taken from the root sheet.
+
+ Arthur:
+ Ronald Sousa HashDefineElectronics.com
+
+ Ouput Example:
+ Source,
+ Kicad Rev, working director and file source
+ Generated Date, date this file was generated
+
+ Title, the project's title
+ Company, the project's company
+ Rev, the project's revision
+ Date Source, project's issue date
+ Comment, This is comment 1
+ Comment, This is comment 2
+ Comment, This is comment 3
+ Comment, This is comment 4
+-->
+<!--
+ @package
+ Output format
+ Reference, Value, Fields[n], Library, Library Ref
+ U1, PIC32MX, Fields[n], KicadLib, PIC
+
+Command line:
+ xsltproc -o "%O.csv" "pathToFile/bom2csv.xsl" "%I"
+-->
+
+<!DOCTYPE xsl:stylesheet [
+ <!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF, or LF, your choice -->
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output method="text"/>
+
+ <!-- for table head and empty table fields-->
+ <xsl:key name="headentr" match="field" use="@name"/>
+
+ <!-- main part -->
+ <xsl:template match="/export">
+ <xsl:text>Source,</xsl:text><xsl:value-of select="design/source"/><xsl:text>&nl;</xsl:text>
+ <xsl:text>Kicad Rev,</xsl:text><xsl:value-of select="design/tool"/><xsl:text>&nl;</xsl:text>
+ <xsl:text>Generated Date,</xsl:text><xsl:value-of select="design/date"/><xsl:text>&nl;</xsl:text>
+
+ <xsl:text>&nl;</xsl:text>
+
+ <!-- Ouput Root sheet project information -->
+ <xsl:apply-templates select="/export/design/sheet[1]"/>
+
+ <xsl:text>&nl;</xsl:text>
+
+ <!-- Output table header -->
+ <xsl:text>Reference,Value,</xsl:text>
+ <xsl:for-each select="components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
+ <xsl:value-of select="@name"/>
+ <xsl:text>,</xsl:text>
+ </xsl:for-each>
+ <xsl:text>Library,Library Ref</xsl:text>
+ <xsl:text>&nl;</xsl:text>
+
+ <!-- all table entries -->
+ <xsl:apply-templates select="components/comp"/>
+ </xsl:template>
+
+ <!-- generate the Root sheet project information -->
+ <xsl:template match="/export/design/sheet[1]">
+
+ <xsl:choose>
+ <xsl:when test="title_block/title !=''">
+ <xsl:text>Title,</xsl:text><xsl:value-of select="title_block/title"/><xsl:text>&nl;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Title,Not Set</xsl:text><xsl:text>&nl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+
+
+ <xsl:choose>
+ <xsl:when test="title_block/company !=''">
+ <xsl:text>Company,</xsl:text><xsl:value-of select="title_block/company"/><xsl:text>&nl;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Company,Not Set</xsl:text><xsl:text>&nl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="title_block/rev !=''">
+ <xsl:text>Revision,</xsl:text><xsl:value-of select="title_block/rev"/><xsl:text>&nl;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Revision,Not Set</xsl:text><xsl:text>&nl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="title_block/date !=''">
+ <xsl:text>Date Issue,</xsl:text><xsl:value-of select="title_block/date"/><xsl:text>&nl;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Date Issue,Not Set</xsl:text><xsl:text>&nl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:apply-templates select="title_block/comment"/>
+
+ </xsl:template>
+
+ <xsl:template match="title_block/comment">
+ <xsl:choose>
+ <xsl:when test="@value !=''">
+ <xsl:text>Comment,</xsl:text><xsl:value-of select="@value"/><xsl:text>&nl;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+
+
+ <!-- the table entries -->
+ <xsl:template match="components/comp">
+ <xsl:value-of select="@ref"/><xsl:text>,</xsl:text>
+ <xsl:value-of select="value"/><xsl:text>,</xsl:text>
+ <xsl:apply-templates select="fields"/>
+ <xsl:apply-templates select="libsource"/>
+ <xsl:text>&nl;</xsl:text>
+ </xsl:template>
+
+ <!-- the library selection -->
+ <xsl:template match="libsource">
+ <xsl:value-of select="@lib"/><xsl:text>,</xsl:text>
+ <xsl:value-of select="@part"/>
+ </xsl:template>
+
+ <!-- table entries with dynamic table head -->
+ <xsl:template match="fields">
+
+ <!-- remember current fields section -->
+ <xsl:variable name="fieldvar" select="field"/>
+
+ <!-- for all existing head entries -->
+ <xsl:for-each select="/export/components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
+ <xsl:variable name="allnames" select="@name"/>
+
+ <!-- for all field entries in the remembered fields section -->
+ <xsl:for-each select="$fieldvar">
+
+ <!-- only if this field entry exists in this fields section -->
+ <xsl:if test="@name=$allnames">
+ <!-- content of the field -->
+ <xsl:value-of select="."/>
+ </xsl:if>
+ <!--
+ If it does not exist, use an empty cell in output for this row.
+ Every non-blank entry is assigned to its proper column.
+ -->
+ </xsl:for-each>
+ <xsl:text>,</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ </xsl:stylesheet>
diff --git a/bin/scripting/plugins/kicad_netlist_reader.py b/bin/scripting/plugins/kicad_netlist_reader.py
new file mode 100644
index 0000000..407f572
--- /dev/null
+++ b/bin/scripting/plugins/kicad_netlist_reader.py
@@ -0,0 +1,764 @@
+#
+# KiCad python module for interpreting generic netlists which can be used
+# to generate Bills of materials, etc.
+#
+# Remember these files use UTF8 encoding
+#
+# No string formatting is used on purpose as the only string formatting that
+# is current compatible with python 2.4+ to 3.0+ is the '%' method, and that
+# is due to be deprecated in 3.0+ soon
+#
+
+"""
+ @package
+ Helper module for interpreting generic netlist and build custom
+ bom generators or netlists in foreign format
+"""
+
+
+from __future__ import print_function
+import sys
+import xml.sax as sax
+import re
+import pdb
+
+#-----<Configure>----------------------------------------------------------------
+
+# excluded_fields is a list of regular expressions. If any one matches a field
+# from either a component or a libpart, then that will not be included as a
+# column in the BOM. Otherwise all columns from all used libparts and components
+# will be unionized and will appear. Some fields are impossible to blacklist, such
+# as Ref, Value, Footprint, and Datasheet. Additionally Qty and Item are supplied
+# unconditionally as columns, and may not be removed.
+excluded_fields = [
+ #'Price@1000'
+ ]
+
+
+# You may exlude components from the BOM by either:
+#
+# 1) adding a custom field named "Installed" to your components and filling it
+# with a value of "NU" (Normally Uninstalled).
+# See netlist.getInterestingComponents(), or
+#
+# 2) blacklisting it in any of the three following lists:
+
+
+# regular expressions which match component 'Reference' fields of components that
+# are to be excluded from the BOM.
+excluded_references = [
+ 'TP[0-9]+' # all test points
+ ]
+
+
+# regular expressions which match component 'Value' fields of components that
+# are to be excluded from the BOM.
+excluded_values = [
+ 'MOUNTHOLE',
+ 'SCOPETEST',
+ 'MOUNT_HOLE',
+ 'SOLDER_BRIDGE.*'
+ ]
+
+
+# regular expressions which match component 'Footprint' fields of components that
+# are to be excluded from the BOM.
+excluded_footprints = [
+ #'MOUNTHOLE'
+ ]
+
+#-----</Configure>---------------------------------------------------------------
+
+
+class xmlElement():
+ """xml element which can represent all nodes of the netlist tree. It can be
+ used to easily generate various output formats by propogating format
+ requests to children recursively.
+ """
+ def __init__(self, name, parent=None):
+ self.name = name
+ self.attributes = {}
+ self.parent = parent
+ self.chars = ""
+ self.children = []
+
+ def __str__(self):
+ """String representation of this netlist element
+
+ """
+ return self.name + "[" + self.chars + "]" + " attr_count:" + str(len(self.attributes))
+
+ def formatXML(self, nestLevel=0, amChild=False):
+ """Return this element formatted as XML
+
+ Keywords:
+ nestLevel -- increases by one for each level of nesting.
+ amChild -- If set to True, the start of document is not returned.
+
+ """
+ s = ""
+
+ indent = ""
+ for i in range(nestLevel):
+ indent += " "
+
+ if not amChild:
+ s = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+
+ s += indent + "<" + self.name
+ for a in self.attributes:
+ s += " " + a + "=\"" + self.attributes[a] + "\""
+
+ if (len(self.chars) == 0) and (len(self.children) == 0):
+ s += "/>"
+ else:
+ s += ">" + self.chars
+
+ for c in self.children:
+ s += "\n"
+ s += c.formatXML(nestLevel+1, True)
+
+ if (len(self.children) > 0):
+ s += "\n" + indent
+
+ if (len(self.children) > 0) or (len(self.chars) > 0):
+ s += "</" + self.name + ">"
+
+ return s
+
+ def formatHTML(self, amChild=False):
+ """Return this element formatted as HTML
+
+ Keywords:
+ amChild -- If set to True, the start of document is not returned
+
+ """
+ s = ""
+
+ if not amChild:
+ s = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title></title>
+ </head>
+ <body>
+ <table>
+ """
+
+ s += "<tr><td><b>" + self.name + "</b><br>" + self.chars + "</td><td><ul>"
+ for a in self.attributes:
+ s += "<li>" + a + " = " + self.attributes[a] + "</li>"
+
+ s += "</ul></td></tr>\n"
+
+ for c in self.children:
+ s += c.formatHTML(True)
+
+ if not amChild:
+ s += """</table>
+ </body>
+ </html>"""
+
+ return s
+
+ def addAttribute(self, attr, value):
+ """Add an attribute to this element"""
+ if type(value) != str: value = value.encode('utf-8')
+ self.attributes[attr] = value
+
+ def setAttribute(self, attr, value):
+ """Set an attributes value - in fact does the same thing as add
+ attribute
+
+ """
+ self.attributes[attr] = value
+
+ def setChars(self, chars):
+ """Set the characters for this element"""
+ self.chars = chars
+
+ def addChars(self, chars):
+ """Add characters (textual value) to this element"""
+ self.chars += chars
+
+ def addChild(self, child):
+ """Add a child element to this element"""
+ self.children.append(child)
+ return self.children[len(self.children) - 1]
+
+ def getParent(self):
+ """Get the parent of this element (Could be None)"""
+ return self.parent
+
+ def getChild(self, name):
+ """Returns the first child element named 'name'
+
+ Keywords:
+ name -- The name of the child element to return"""
+ for child in self.children:
+ if child.name == name:
+ return child
+ return None
+
+ def getChildren(self, name=None):
+ if name:
+ # return _all_ children named "name"
+ ret = []
+ for child in self.children:
+ if child.name == name:
+ ret.append(child)
+ return ret
+ else:
+ return self.children
+
+ def get(self, elemName, attribute="", attrmatch=""):
+ """Return the text data for either an attribute or an xmlElement
+ """
+ if (self.name == elemName):
+ if attribute != "":
+ try:
+ if attrmatch != "":
+ if self.attributes[attribute] == attrmatch:
+ ret = self.chars
+ if type(ret) != str: ret = ret.encode('utf-8')
+ return ret
+ else:
+ ret = self.attributes[attribute]
+ if type(ret) != str: ret = ret.encode('utf-8')
+ return ret
+ except AttributeError:
+ ret = ""
+ if type(ret) != str: ret = ret.encode('utf-8')
+ return ret
+ else:
+ ret = self.chars
+ if type(ret) != str: ret = ret.encode('utf-8')
+ return ret
+
+ for child in self.children:
+ ret = child.get(elemName, attribute, attrmatch)
+ if ret != "":
+ if type(ret) != str: ret = ret.encode('utf-8')
+ return ret
+
+ ret = ""
+ if type(ret) != str: ret = ret.encode('utf-8')
+ return ret
+
+
+
+class libpart():
+ """Class for a library part, aka 'libpart' in the xml netlist file.
+ (Components in eeschema are instantiated from library parts.)
+ This part class is implemented by wrapping an xmlElement with accessors.
+ This xmlElement instance is held in field 'element'.
+ """
+ def __init__(self, xml_element):
+ #
+ self.element = xml_element
+
+ #def __str__(self):
+ # simply print the xmlElement associated with this part
+ #return str(self.element)
+
+ def getLibName(self):
+ return self.element.get("libpart", "lib")
+
+ def getPartName(self):
+ return self.element.get("libpart", "part")
+
+ def getDescription(self):
+ return self.element.get("description")
+
+ def getField(self, name):
+ return self.element.get("field", "name", name)
+
+ def getFieldNames(self):
+ """Return a list of field names in play for this libpart.
+ """
+ fieldNames = []
+ fields = self.element.getChild('fields')
+ if fields:
+ for f in fields.getChildren():
+ fieldNames.append( f.get('field','name') )
+ return fieldNames
+
+ def getDatasheet(self):
+ return self.getField("Datasheet")
+
+ def getFootprint(self):
+ return self.getField("Footprint")
+
+ def getAliases(self):
+ """Return a list of aliases or None"""
+ aliases = self.element.getChild("aliases")
+ if aliases:
+ ret = []
+ children = aliases.getChildren()
+ # grab the text out of each child:
+ for child in children:
+ ret.append( child.get("alias") )
+ return ret
+ return None
+
+
+class comp():
+ """Class for a component, aka 'comp' in the xml netlist file.
+ This component class is implemented by wrapping an xmlElement instance
+ with accessors. The xmlElement is held in field 'element'.
+ """
+
+ def __init__(self, xml_element):
+ self.element = xml_element
+ self.libpart = None
+
+ # Set to true when this component is included in a component group
+ self.grouped = False
+
+ def __eq__(self, other):
+ """ Equivalency operator, remember this can be easily overloaded
+ 2 components are equivalent ( i.e. can be grouped
+ if they have same value and same footprint
+
+ Override the component equivalence operator must be done before
+ loading the netlist, otherwise all components will have the original
+ equivalency operator.
+
+ You have to define a comparison module (for instance named myEqu)
+ and add the line;
+ kicad_netlist_reader.comp.__eq__ = myEqu
+ in your bom generator script before calling the netliste reader by something like:
+ net = kicad_netlist_reader.netlist(sys.argv[1])
+ """
+ result = False
+ if self.getValue() == other.getValue():
+ if self.getFootprint() == other.getFootprint():
+ result = True
+ return result
+
+ def setLibPart(self, part):
+ self.libpart = part
+
+ def getLibPart(self):
+ return self.libpart
+
+ def getPartName(self):
+ return self.element.get("libsource", "part")
+
+ def getLibName(self):
+ return self.element.get("libsource", "lib")
+
+ def setValue(self, value):
+ """Set the value of this component"""
+ v = self.element.getChild("value")
+ if v:
+ v.setChars(value)
+
+ def getValue(self):
+ return self.element.get("value")
+
+ def getField(self, name, libraryToo=True):
+ """Return the value of a field named name. The component is first
+ checked for the field, and then the components library part is checked
+ for the field. If the field doesn't exist in either, an empty string is
+ returned
+
+ Keywords:
+ name -- The name of the field to return the value for
+ libraryToo -- look in the libpart's fields for the same name if not found
+ in component itself
+ """
+
+ field = self.element.get("field", "name", name)
+ if field == "" and libraryToo:
+ field = self.libpart.getField(name)
+ return field
+
+ def getFieldNames(self):
+ """Return a list of field names in play for this component. Mandatory
+ fields are not included, and they are: Value, Footprint, Datasheet, Ref.
+ The netlist format only includes fields with non-empty values. So if a field
+ is empty, it will not be present in the returned list.
+ """
+ fieldNames = []
+ fields = self.element.getChild('fields')
+ if fields:
+ for f in fields.getChildren():
+ fieldNames.append( f.get('field','name') )
+ return fieldNames
+
+ def getRef(self):
+ return self.element.get("comp", "ref")
+
+ def getFootprint(self, libraryToo=True):
+ ret = self.element.get("footprint")
+ if ret =="" and libraryToo:
+ ret = self.libpart.getFootprint()
+ return ret
+
+ def getDatasheet(self, libraryToo=True):
+ ret = self.element.get("datasheet")
+ if ret == '' and libraryToo:
+ ret = self.libpart.getDatasheet()
+ return ret
+
+ def getTimestamp(self):
+ return self.element.get("tstamp")
+
+ def getDescription(self):
+ return self.libpart.getDescription()
+
+
+class netlist():
+ """ Kicad generic netlist class. Generally loaded from a kicad generic
+ netlist file. Includes several helper functions to ease BOM creating
+ scripts
+
+ """
+ def __init__(self, fname=""):
+ """Initialiser for the genericNetlist class
+
+ Keywords:
+ fname -- The name of the generic netlist file to open (Optional)
+
+ """
+ self.design = None
+ self.components = []
+ self.libparts = []
+ self.libraries = []
+ self.nets = []
+
+ # The entire tree is loaded into self.tree
+ self.tree = []
+
+ self._curr_element = None
+
+ # component blacklist regexs, made from exluded_* above.
+ self.excluded_references = []
+ self.excluded_values = []
+ self.excluded_footprints = []
+
+ if fname != "":
+ self.load(fname)
+
+ def addChars(self, content):
+ """Add characters to the current element"""
+ self._curr_element.addChars(content)
+
+ def addElement(self, name):
+ """Add a new kicad generic element to the list"""
+ if self._curr_element == None:
+ self.tree = xmlElement(name)
+ self._curr_element = self.tree
+ else:
+ self._curr_element = self._curr_element.addChild(
+ xmlElement(name, self._curr_element))
+
+ # If this element is a component, add it to the components list
+ if self._curr_element.name == "comp":
+ self.components.append(comp(self._curr_element))
+
+ # Assign the design element
+ if self._curr_element.name == "design":
+ self.design = self._curr_element
+
+ # If this element is a library part, add it to the parts list
+ if self._curr_element.name == "libpart":
+ self.libparts.append(libpart(self._curr_element))
+
+ # If this element is a net, add it to the nets list
+ if self._curr_element.name == "net":
+ self.nets.append(self._curr_element)
+
+ # If this element is a library, add it to the libraries list
+ if self._curr_element.name == "library":
+ self.libraries.append(self._curr_element)
+
+ return self._curr_element
+
+ def endDocument(self):
+ """Called when the netlist document has been fully parsed"""
+ # When the document is complete, the library parts must be linked to
+ # the components as they are seperate in the tree so as not to
+ # duplicate library part information for every component
+ for c in self.components:
+ for p in self.libparts:
+ if p.getLibName() == c.getLibName():
+ if p.getPartName() == c.getPartName():
+ c.setLibPart(p)
+ break
+ else:
+ aliases = p.getAliases()
+ if aliases and self.aliasMatch( c.getPartName(), aliases ):
+ c.setLibPart(p)
+ break;
+
+ if not c.getLibPart():
+ print( 'missing libpart for ref:', c.getRef(), c.getPartName(), c.getLibName() )
+
+
+ def aliasMatch(self, partName, aliasList):
+ for alias in aliasList:
+ if partName == alias:
+ return True
+ return False
+
+ def endElement(self):
+ """End the current element and switch to its parent"""
+ self._curr_element = self._curr_element.getParent()
+
+ def getDate(self):
+ """Return the date + time string generated by the tree creation tool"""
+ return self.design.get("date")
+
+ def getSource(self):
+ """Return the source string for the design"""
+ return self.design.get("source")
+
+ def getTool(self):
+ """Return the tool string which was used to create the netlist tree"""
+ return self.design.get("tool")
+
+ def gatherComponentFieldUnion(self, components=None):
+ """Gather the complete 'set' of unique component fields, fields found in any component.
+ """
+ if not components:
+ components=self.components
+
+ s = set()
+ for c in components:
+ s.update( c.getFieldNames() )
+
+ # omit anything matching any regex in excluded_fields
+ ret = set()
+ for field in s:
+ exclude = False
+ for rex in excluded_fields:
+ if re.match( rex, field ):
+ exclude = True
+ break
+ if not exclude:
+ ret.add(field)
+
+ return ret # this is a python 'set'
+
+ def gatherLibPartFieldUnion(self):
+ """Gather the complete 'set' of part fields, fields found in any part.
+ """
+ s = set()
+ for p in self.libparts:
+ s.update( p.getFieldNames() )
+
+ # omit anything matching any regex in excluded_fields
+ ret = set()
+ for field in s:
+ exclude = False
+ for rex in excluded_fields:
+ if re.match( rex, field ):
+ exclude = True
+ break
+ if not exclude:
+ ret.add(field)
+
+ return ret # this is a python 'set'
+
+ def getInterestingComponents(self):
+ """Return a subset of all components, those that should show up in the BOM.
+ Omit those that should not, by consulting the blacklists:
+ excluded_values, excluded_refs, and excluded_footprints, which hold one
+ or more regular expressions. If any of the the regular expressions match
+ the corresponding field's value in a component, then the component is exluded.
+ """
+
+ # pre-compile all the regex expressions:
+ del self.excluded_references[:]
+ del self.excluded_values[:]
+ del self.excluded_footprints[:]
+
+ for rex in excluded_references:
+ self.excluded_references.append( re.compile( rex ) )
+
+ for rex in excluded_values:
+ self.excluded_values.append( re.compile( rex ) )
+
+ for rex in excluded_footprints:
+ self.excluded_footprints.append( re.compile( rex ) )
+
+ # the subset of components to return, considered as "interesting".
+ ret = []
+
+ # run each component thru a series of tests, if it passes all, then add it
+ # to the interesting list 'ret'.
+ for c in self.components:
+ exclude = False
+ if not exclude:
+ for refs in self.excluded_references:
+ if refs.match(c.getRef()):
+ exclude = True
+ break;
+ if not exclude:
+ for vals in self.excluded_values:
+ if vals.match(c.getValue()):
+ exclude = True
+ break;
+ if not exclude:
+ for mods in self.excluded_footprints:
+ if mods.match(c.getFootprint()):
+ exclude = True
+ break;
+
+ if not exclude:
+ # This is a fairly personal way to flag DNS (Do Not Stuff). NU for
+ # me means Normally Uninstalled. You can 'or in' another expression here.
+ if c.getField( "Installed" ) == 'NU':
+ exclude = True
+
+ if not exclude:
+ ret.append(c)
+
+ # Sort first by ref as this makes for easier to read BOM's
+ def f(v):
+ return re.sub(r'([A-z]+)[0-9]+', r'\1', v) + '%08i' % int(re.sub(r'[A-z]+([0-9]+)', r'\1', v))
+ ret.sort(key=lambda g: f(g.getRef()))
+
+ return ret
+
+
+ def groupComponents(self, components = None):
+ """Return a list of component lists. Components are grouped together
+ when the value, library and part identifiers match.
+
+ Keywords:
+ components -- is a list of components, typically an interesting subset
+ of all components, or None. If None, then all components are looked at.
+ """
+ if not components:
+ components = self.components
+
+ groups = []
+
+ # Make sure to start off will all components ungrouped to begin with
+ for c in components:
+ c.grouped = False
+
+ # Group components based on the value, library and part identifiers
+ for c in components:
+ if c.grouped == False:
+ c.grouped = True
+ newgroup = []
+ newgroup.append(c)
+
+ # Check every other ungrouped component against this component
+ # and add to the group as necessary
+ for ci in components:
+ if ci.grouped == False and ci == c:
+ newgroup.append(ci)
+ ci.grouped = True
+
+ # Add the new component group to the groups list
+ groups.append(newgroup)
+
+ # Each group is a list of components, we need to sort each list first
+ # to get them in order as this makes for easier to read BOM's
+ def f(v):
+ return re.sub(r'([A-z]+)[0-9]+', r'\1', v) + '%08i' % int(re.sub(r'[A-z]+([0-9]+)', r'\1', v))
+ for g in groups:
+ g = sorted(g, key=lambda g: f(g.getRef()))
+
+ # Finally, sort the groups to order the references alphabetically
+ groups = sorted(groups, key=lambda group: f(group[0].getRef()))
+
+ return groups
+
+ def getGroupField(self, group, field):
+ """Return the whatever is known about the given field by consulting each
+ component in the group. If any of them know something about the property/field,
+ then return that first non-blank value.
+ """
+ for c in group:
+ ret = c.getField(field, False)
+ if ret != '':
+ return ret
+ return group[0].getLibPart().getField(field)
+
+ def getGroupFootprint(self, group):
+ """Return the whatever is known about the Footprint by consulting each
+ component in the group. If any of them know something about the Footprint,
+ then return that first non-blank value.
+ """
+ for c in group:
+ ret = c.getFootprint()
+ if ret != "":
+ return ret
+ return group[0].getLibPart().getFootprint()
+
+ def getGroupDatasheet(self, group):
+ """Return the whatever is known about the Datasheet by consulting each
+ component in the group. If any of them know something about the Datasheet,
+ then return that first non-blank value.
+ """
+ for c in group:
+ ret = c.getDatasheet()
+ if ret != "":
+ return ret
+
+ if len(group) > 0:
+ return group[0].getLibPart().getDatasheet()
+ else:
+ print("NULL!")
+ return ''
+
+ def formatXML(self):
+ """Return the whole netlist formatted in XML"""
+ return self.tree.formatXML()
+
+ def formatHTML(self):
+ """Return the whole netlist formatted in HTML"""
+ return self.tree.formatHTML()
+
+ def load(self, fname):
+ """Load a kicad generic netlist
+
+ Keywords:
+ fname -- The name of the generic netlist file to open
+
+ """
+ try:
+ self._reader = sax.make_parser()
+ self._reader.setContentHandler(_gNetReader(self))
+ self._reader.parse(fname)
+ except IOError as e:
+ print( __file__, ":", e, file=sys.stderr )
+ sys.exit(-1)
+
+
+
+class _gNetReader(sax.handler.ContentHandler):
+ """SAX kicad generic netlist content handler - passes most of the work back
+ to the 'netlist' class which builds a complete tree in RAM for the design
+
+ """
+ def __init__(self, aParent):
+ self.parent = aParent
+
+ def startElement(self, name, attrs):
+ """Start of a new XML element event"""
+ element = self.parent.addElement(name)
+
+ for name in attrs.getNames():
+ element.addAttribute(name, attrs.getValue(name))
+
+ def endElement(self, name):
+ self.parent.endElement()
+
+ def characters(self, content):
+ # Ignore erroneous white space - ignoreableWhitespace does not get rid
+ # of the need for this!
+ if not content.isspace():
+ self.parent.addChars(content)
+
+ def endDocument(self):
+ """End of the XML document event"""
+ self.parent.endDocument()
diff --git a/bin/scripting/plugins/netlist_form_OrcadPcb2.xsl b/bin/scripting/plugins/netlist_form_OrcadPcb2.xsl
new file mode 100644
index 0000000..3017711
--- /dev/null
+++ b/bin/scripting/plugins/netlist_form_OrcadPcb2.xsl
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--XSL style sheet to EESCHEMA Generic Netlist Format to CADSTAR netlist format
+ Copyright (C) 2010, SoftPLC Corporation.
+ GPL v2.
+
+ How to use:
+ see eeschema.pdf, chapter 14
+-->
+
+<!DOCTYPE xsl:stylesheet [
+ <!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF -->
+]>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
+
+<!--
+ Netlist header
+ Creates the entire netlist
+ (can be seen as equivalent to main function in C
+-->
+<xsl:template match="/export">
+ <xsl:text>( { EESchema Netlist Version 1.1 </xsl:text>
+ <!-- Generate line .TIM <time> -->
+ <xsl:apply-templates select="design/date"/>
+ <!-- Generate line eeschema version ... -->
+ <xsl:apply-templates select="design/tool"/>
+ <xsl:text>}&nl;</xsl:text>
+
+ <!-- Generate the list of components -->
+ <xsl:apply-templates select="components/comp"/> <!-- Generate list of components -->
+
+ <!-- end of file -->
+ <xsl:text>)&nl;*&nl;</xsl:text>
+</xsl:template>
+
+<!--
+ Generate id in header like "eeschema (2010-08-17 BZR 2450)-unstable"
+-->
+<xsl:template match="tool">
+ <xsl:apply-templates/>
+</xsl:template>
+
+<!--
+ Generate date in header like "20/08/2010 10:45:33"
+-->
+<xsl:template match="date">
+ <xsl:apply-templates/>
+ <xsl:text>&nl;</xsl:text>
+</xsl:template>
+
+<!--
+ This template read each component
+ (path = /export/components/comp)
+ creates lines:
+ ( 3EBF7DBD $noname U1 74LS125
+ ... pin list ...
+ )
+ and calls "create_pin_list" template to build the pin list
+-->
+<xsl:template match="comp">
+ <xsl:text> ( </xsl:text>
+ <xsl:choose>
+ <xsl:when test = "tstamp != '' ">
+ <xsl:apply-templates select="tstamp"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>00000000</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test = "footprint != '' ">
+ <xsl:apply-templates select="footprint"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>$noname</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@ref"/>
+ <xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test = "value != '' ">
+ <xsl:apply-templates select="value"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>"~"</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>&nl;</xsl:text>
+ <xsl:call-template name="Search_pin_list" >
+ <xsl:with-param name="cmplib_id" select="libsource/@part"/>
+ <xsl:with-param name="cmp_ref" select="@ref"/>
+ </xsl:call-template>
+ <xsl:text> )&nl;</xsl:text>
+</xsl:template>
+
+<!--
+ This template search for a given lib component description in list
+ lib component descriptions are in /export/libparts,
+ and each description start at ./libpart
+ We search here for the list of pins of the given component
+ This template has 2 parameters:
+ "cmplib_id" (reference in libparts)
+ "cmp_ref" (schematic reference of the given component)
+-->
+<xsl:template name="Search_pin_list" >
+ <xsl:param name="cmplib_id" select="0" />
+ <xsl:param name="cmp_ref" select="0" />
+ <xsl:for-each select="/export/libparts/libpart">
+ <xsl:if test = "@part = $cmplib_id ">
+ <xsl:apply-templates name="build_pin_list" select="pins/pin">
+ <xsl:with-param name="cmp_ref" select="$cmp_ref"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+
+<!--
+ This template writes the pin list of a component
+ from the pin list of the library description
+ The pin list from library description is something like
+ <pins>
+ <pin num="1" type="passive"/>
+ <pin num="2" type="passive"/>
+ </pins>
+ Output pin list is ( <pin num> <net name> )
+ something like
+ ( 1 VCC )
+ ( 2 GND )
+-->
+<xsl:template name="build_pin_list" match="pin">
+ <xsl:param name="cmp_ref" select="0" />
+
+ <!-- write pin numner and separator -->
+ <xsl:text> ( </xsl:text>
+ <xsl:value-of select="@num"/>
+ <xsl:text> </xsl:text>
+
+ <!-- search net name in nets section and write it: -->
+ <xsl:variable name="pinNum" select="@num" />
+ <xsl:for-each select="/export/nets/net">
+ <!-- net name is output only if there is more than one pin in net
+ else use "?" as net name, so count items in this net
+ -->
+ <xsl:variable name="pinCnt" select="count(node)" />
+ <xsl:apply-templates name="Search_pin_netname" select="node">
+ <xsl:with-param name="cmp_ref" select="$cmp_ref"/>
+ <xsl:with-param name="pin_cnt_in_net" select="$pinCnt"/>
+ <xsl:with-param name="pin_num"> <xsl:value-of select="$pinNum"/>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:for-each>
+
+ <!-- close line -->
+ <xsl:text> )&nl;</xsl:text>
+</xsl:template>
+
+<!--
+ This template writes the pin netname of a given pin of a given component
+ from the nets list
+ The nets list description is something like
+ <nets>
+ <net code="1" name="GND">
+ <node ref="J1" pin="20"/>
+ <node ref="C2" pin="2"/>
+ </net>
+ <net code="2" name="">
+ <node ref="U2" pin="11"/>
+ </net>
+ </nets>
+ This template has 2 parameters:
+ "cmp_ref" (schematic reference of the given component)
+ "pin_num" (pin number)
+-->
+
+<xsl:template name="Search_pin_netname" match="node">
+ <xsl:param name="cmp_ref" select="0" />
+ <xsl:param name="pin_num" select="0" />
+ <xsl:param name="pin_cnt_in_net" select="0" />
+
+ <xsl:if test = "@ref = $cmp_ref ">
+ <xsl:if test = "@pin = $pin_num">
+ <!-- net name is output only if there is more than one pin in net
+ else use "?" as net name
+ -->
+ <xsl:if test = "$pin_cnt_in_net>1">
+ <xsl:choose>
+ <!-- if a net has a name, use it,
+ else build a name from its net code
+ -->
+ <xsl:when test = "../@name != '' ">
+ <xsl:value-of select="../@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>$N-0</xsl:text><xsl:value-of select="../@code"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:if test = "$pin_cnt_in_net &lt;2">
+ <xsl:text>?</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/bin/scripting/plugins/netlist_form_cadstar-RINF.xsl b/bin/scripting/plugins/netlist_form_cadstar-RINF.xsl
new file mode 100644
index 0000000..7df4b76
--- /dev/null
+++ b/bin/scripting/plugins/netlist_form_cadstar-RINF.xsl
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--XSL style sheet to EESCHEMA Generic Netlist Format to CADSTAR netlist format
+ Copyright (C) 2010, SoftPLC Corporation.
+ GPL v2.
+
+ How to use:
+ see eeschema.pdf, chapter 14
+-->
+
+<!DOCTYPE xsl:stylesheet [
+ <!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF -->
+]>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
+
+<!-- Netlist header -->
+<xsl:template match="/export">
+ <xsl:text>.HEA&nl;</xsl:text>
+ <xsl:apply-templates select="design/date"/> <!-- Generate line .TIM <time> -->
+ <xsl:apply-templates select="design/tool"/> <!-- Generate line .APP <eeschema version> -->
+ <xsl:text>&nl;</xsl:text>
+ <xsl:apply-templates select="components/comp"/> <!-- Generate list of components -->
+ <xsl:text>&nl;&nl;</xsl:text>
+ <xsl:apply-templates select="nets/net"/> <!-- Generate list of nets and connections -->
+ <xsl:text>&nl;.END&nl;</xsl:text>
+</xsl:template>
+
+ <!-- Generate line .APP "eeschema (2010-08-17 BZR 2450)-unstable" -->
+<xsl:template match="tool">
+ <xsl:text>.APP "</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>"&nl;</xsl:text>
+</xsl:template>
+
+ <!-- Generate line .TIM 20/08/2010 10:45:33 -->
+<xsl:template match="date">
+ <xsl:text>.TIM </xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&nl;</xsl:text>
+</xsl:template>
+
+<!-- for each component -->
+<!-- create lines like
+ .ADD_COM U3 74LS541 (when no footprint name specified)
+ .ADD_COM JP1 CONN_8X2 pin_array_8x2 pin_array_8x2 (with a specified footprint name)
+-->
+<xsl:template match="comp">
+ <xsl:text>.ADD_COM </xsl:text>
+ <xsl:value-of select="@ref"/>
+ <xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test = "value != '' ">
+ <xsl:apply-templates select="value"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>?</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test = "footprint != '' ">
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates select="footprint"/>
+ </xsl:when>
+ <xsl:otherwise>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>&nl;</xsl:text>
+</xsl:template>
+
+<!-- for each net -->
+<!-- create lines like
+.ADD_TER U3.9 /PC-RST
+.TER U3.8
+ BUS1.2
+.ADD_TER BUS1.14 /PC-IOR
+.TER U3.7
+-->
+<xsl:template match="net">
+ <!-- nets are output only if there is more than one pin in net -->
+ <xsl:if test="count(node)>1">
+ <xsl:variable name="netname">
+ <xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test = "@name != '' ">
+ <xsl:value-of select="@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>N-</xsl:text>
+ <xsl:value-of select="@code"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>&nl;</xsl:text>
+ </xsl:variable>
+ <xsl:apply-templates select="node" mode="first"/>
+ <xsl:value-of select="$netname"/>
+ <xsl:apply-templates select="node" mode="others"/>
+ </xsl:if>
+</xsl:template>
+
+<!-- for each node -->
+<xsl:template match="node" mode="first">
+ <xsl:if test="position()=1">
+ <xsl:text>.ADD_TER </xsl:text>
+ <xsl:value-of select="@ref"/>
+ <xsl:text>.</xsl:text>
+ <xsl:value-of select="@pin"/>
+ <xsl:text> </xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="node" mode="others">
+ <xsl:choose>
+ <xsl:when test='position()=1'>
+ </xsl:when>
+ <xsl:when test='position()=2'>
+ <xsl:text>.TER </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="position()>1">
+ <xsl:value-of select="@ref"/>
+ <xsl:text>.</xsl:text>
+ <xsl:value-of select="@pin"/>
+ <xsl:text>&nl;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/bin/scripting/plugins/netlist_form_cadstar.xsl b/bin/scripting/plugins/netlist_form_cadstar.xsl
new file mode 100644
index 0000000..0c72f53
--- /dev/null
+++ b/bin/scripting/plugins/netlist_form_cadstar.xsl
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--XSL style sheet to EESCHEMA Generic Netlist Format to CADSTAR netlist format
+ Copyright (C) 2010, SoftPLC Corporation.
+ GPL v2.
+
+ How to use:
+ see eeschema.pdf, chapter 14
+-->
+
+<!DOCTYPE xsl:stylesheet [
+ <!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF -->
+]>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
+
+<!-- Netlist header -->
+<xsl:template match="/export">
+ <xsl:text>.HEA&nl;</xsl:text>
+ <xsl:apply-templates select="design/date"/> <!-- Generate line .TIM <time> -->
+ <xsl:apply-templates select="design/tool"/> <!-- Generate line .APP <eeschema version> -->
+ <xsl:text>&nl;</xsl:text>
+ <xsl:apply-templates select="components/comp"/> <!-- Generate list of components -->
+ <xsl:text>&nl;&nl;</xsl:text>
+ <xsl:apply-templates select="nets/net"/> <!-- Generate list of nets and connections -->
+ <xsl:text>&nl;.END&nl;</xsl:text>
+</xsl:template>
+
+ <!-- Generate line .APP "eeschema (2010-08-17 BZR 2450)-unstable" -->
+<xsl:template match="tool">
+ <xsl:text>.APP "</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>"&nl;</xsl:text>
+</xsl:template>
+
+ <!-- Generate line .TIM 20/08/2010 10:45:33 -->
+<xsl:template match="date">
+ <xsl:text>.TIM </xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&nl;</xsl:text>
+</xsl:template>
+
+<!-- for each component -->
+<!-- create lines like
+ .ADD_COM U3 "74LS541" (when no footprint name specified)
+ .ADD_COM JP1 "CONN_8X2" "pin_array_8x2" "pin_array_8x2" (with a specified footprint name)
+-->
+<xsl:template match="comp">
+ <xsl:text>.ADD_COM </xsl:text>
+ <xsl:value-of select="@ref"/>
+ <xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test = "value != '' ">
+ <xsl:text>"</xsl:text> <xsl:apply-templates select="value"/> <xsl:text>"</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>""</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>&nl;</xsl:text>
+</xsl:template>
+
+<!-- for each net -->
+<!-- create lines like
+.ADD_TER U3.9 "/PC-RST"
+.TER U3.8
+ BUS1.2
+.ADD_TER BUS1.14 "/PC-IOR"
+.TER U3.7
+-->
+<xsl:template match="net">
+ <!-- nets are output only if there is more than one pin in net -->
+ <xsl:if test="count(node)>1">
+ <xsl:variable name="netname">
+ <xsl:text>"</xsl:text>
+ <xsl:choose>
+ <xsl:when test = "@name != '' ">
+ <xsl:value-of select="@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>N-</xsl:text>
+ <xsl:value-of select="@code"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>"&nl;</xsl:text>
+ </xsl:variable>
+ <xsl:apply-templates select="node" mode="first"/>
+ <xsl:value-of select="$netname"/>
+ <xsl:apply-templates select="node" mode="others"/>
+ </xsl:if>
+</xsl:template>
+
+<!-- for each node -->
+<xsl:template match="node" mode="first">
+ <xsl:if test="position()=1">
+ <xsl:text>.ADD_TER </xsl:text>
+ <xsl:value-of select="@ref"/>
+ <xsl:text>.</xsl:text>
+ <xsl:value-of select="@pin"/>
+ <xsl:text> </xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="node" mode="others">
+ <xsl:choose>
+ <xsl:when test='position()=1'>
+ </xsl:when>
+ <xsl:when test='position()=2'>
+ <xsl:text>.TER </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="position()>1">
+ <xsl:value-of select="@ref"/>
+ <xsl:text>.</xsl:text>
+ <xsl:value-of select="@pin"/>
+ <xsl:text>&nl;</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/bin/scripting/plugins/netlist_form_pads-pcb.xsl b/bin/scripting/plugins/netlist_form_pads-pcb.xsl
new file mode 100644
index 0000000..355072c
--- /dev/null
+++ b/bin/scripting/plugins/netlist_form_pads-pcb.xsl
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--XSL style sheet to EESCHEMA Generic Netlist Format to PADS netlist format
+ Copyright (C) 2010, SoftPLC Corporation.
+ GPL v2.
+
+ How to use:
+ see eeschema.pdf, chapter 14
+-->
+
+<!DOCTYPE xsl:stylesheet [
+ <!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF -->
+]>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
+
+<xsl:template match="/export">
+ <xsl:text>*PADS-PCB*&nl;*PART*&nl;</xsl:text>
+ <xsl:apply-templates select="components/comp"/>
+ <xsl:text>&nl;*NET*&nl;</xsl:text>
+ <xsl:apply-templates select="nets/net"/>
+ <xsl:text>*END*&nl;</xsl:text>
+</xsl:template>
+
+<!-- for each component -->
+<xsl:template match="comp">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@ref"/>
+ <xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test = "footprint != '' ">
+ <xsl:apply-templates select="footprint"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>unknown</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>&nl;</xsl:text>
+</xsl:template>
+
+<!-- for each net -->
+<xsl:template match="net">
+ <!-- nets are output only if there is more than one pin in net -->
+ <xsl:if test="count(node)>1">
+ <xsl:text>*SIGNAL* </xsl:text>
+ <xsl:choose>
+ <xsl:when test = "@name != '' ">
+ <xsl:value-of select="@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>N-</xsl:text>
+ <xsl:value-of select="@code"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>&nl;</xsl:text>
+ <xsl:apply-templates select="node"/>
+ </xsl:if>
+</xsl:template>
+
+<!-- for each node -->
+<xsl:template match="node">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@ref"/>
+ <xsl:text>.</xsl:text>
+ <xsl:value-of select="@pin"/>
+ <xsl:text>&nl;</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/bin/ssleay32.dll b/bin/ssleay32.dll
new file mode 100644
index 0000000..18f9df2
--- /dev/null
+++ b/bin/ssleay32.dll
Binary files differ
diff --git a/bin/wxbase30u_gcc_custom.dll b/bin/wxbase30u_gcc_custom.dll
new file mode 100644
index 0000000..8b43755
--- /dev/null
+++ b/bin/wxbase30u_gcc_custom.dll
Binary files differ
diff --git a/bin/wxbase30u_net_gcc_custom.dll b/bin/wxbase30u_net_gcc_custom.dll
new file mode 100644
index 0000000..ac85a38
--- /dev/null
+++ b/bin/wxbase30u_net_gcc_custom.dll
Binary files differ
diff --git a/bin/wxbase30u_xml_gcc_custom.dll b/bin/wxbase30u_xml_gcc_custom.dll
new file mode 100644
index 0000000..5a888a3
--- /dev/null
+++ b/bin/wxbase30u_xml_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_adv_gcc_custom.dll b/bin/wxmsw30u_adv_gcc_custom.dll
new file mode 100644
index 0000000..a01a815
--- /dev/null
+++ b/bin/wxmsw30u_adv_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_aui_gcc_custom.dll b/bin/wxmsw30u_aui_gcc_custom.dll
new file mode 100644
index 0000000..0be85af
--- /dev/null
+++ b/bin/wxmsw30u_aui_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_core_gcc_custom.dll b/bin/wxmsw30u_core_gcc_custom.dll
new file mode 100644
index 0000000..76a5ff8
--- /dev/null
+++ b/bin/wxmsw30u_core_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_gl_gcc_custom.dll b/bin/wxmsw30u_gl_gcc_custom.dll
new file mode 100644
index 0000000..bc2c224
--- /dev/null
+++ b/bin/wxmsw30u_gl_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_html_gcc_custom.dll b/bin/wxmsw30u_html_gcc_custom.dll
new file mode 100644
index 0000000..ab066bc
--- /dev/null
+++ b/bin/wxmsw30u_html_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_propgrid_gcc_custom.dll b/bin/wxmsw30u_propgrid_gcc_custom.dll
new file mode 100644
index 0000000..4cdf0e0
--- /dev/null
+++ b/bin/wxmsw30u_propgrid_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_qa_gcc_custom.dll b/bin/wxmsw30u_qa_gcc_custom.dll
new file mode 100644
index 0000000..321da88
--- /dev/null
+++ b/bin/wxmsw30u_qa_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_ribbon_gcc_custom.dll b/bin/wxmsw30u_ribbon_gcc_custom.dll
new file mode 100644
index 0000000..0d394ba
--- /dev/null
+++ b/bin/wxmsw30u_ribbon_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_richtext_gcc_custom.dll b/bin/wxmsw30u_richtext_gcc_custom.dll
new file mode 100644
index 0000000..b44b249
--- /dev/null
+++ b/bin/wxmsw30u_richtext_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_stc_gcc_custom.dll b/bin/wxmsw30u_stc_gcc_custom.dll
new file mode 100644
index 0000000..da3e895
--- /dev/null
+++ b/bin/wxmsw30u_stc_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_webview_gcc_custom.dll b/bin/wxmsw30u_webview_gcc_custom.dll
new file mode 100644
index 0000000..8e4a71e
--- /dev/null
+++ b/bin/wxmsw30u_webview_gcc_custom.dll
Binary files differ
diff --git a/bin/wxmsw30u_xrc_gcc_custom.dll b/bin/wxmsw30u_xrc_gcc_custom.dll
new file mode 100644
index 0000000..d66d00f
--- /dev/null
+++ b/bin/wxmsw30u_xrc_gcc_custom.dll
Binary files differ
diff --git a/bin/xsltproc.exe b/bin/xsltproc.exe
new file mode 100644
index 0000000..3659bf2
--- /dev/null
+++ b/bin/xsltproc.exe
Binary files differ
diff --git a/bin/zlib1.dll b/bin/zlib1.dll
new file mode 100644
index 0000000..c8c39e3
--- /dev/null
+++ b/bin/zlib1.dll
Binary files differ