Codebase list gerbv / 34085a7
New upstream version 2.8.0 Carsten Schoenert 2 years ago
89 changed file(s) with 1468 addition(s) and 339 deletion(s). Raw diff Collapse all Expand all
0 name: CI
1
2 # Controls when the action will run. Triggers the workflow on push or pull
3 # request events but only for the main branch
4 on:
5 push:
6 branches:
7 - main
8 pull_request:
9 branches: [ main ]
10
11
12 jobs:
13 ci:
14 runs-on: ubuntu-20.04
15
16 steps:
17 - uses: actions/checkout@v2
18
19 - name: Get number of jobs for compiling
20 run: echo "NUM_BUILD_JOBS=$((`nproc --all` * 4))" >> $GITHUB_ENV
21
22 - name: Set a local install path
23 run: echo "LOCAL_INSTALL_PATH=${HOME}/.local" >> $GITHUB_ENV
24
25 - name: Get requirements for configure and build
26 run: |
27 sudo apt-get install autopoint libgtkmm-2.4-dev desktop-file-utils libc6-dbg
28
29 - name: Configure and build
30 run: |
31 sh autogen.sh
32 ./configure CPPFLAGS_EXTRA=-Werror
33 make -j ${NUM_BUILD_JOBS}
34
35 - name: Install valgrind
36 run: |
37 pushd ~
38 git clone --depth=1 --branch=master https://github.com/eyal0/valgrind.git
39 pushd valgrind
40 sh autogen.sh
41 ./configure --prefix=${LOCAL_INSTALL_PATH}
42 make -j ${NUM_BUILD_JOBS}
43 make install
44 popd
45 popd
46
47 - name: Run unit tests
48 run: |
49 make check || (cat test/test-suite.log && false)
50
51 - name: Rebuild Fedora 34
52 run: npx --package mini-cross@0.15.2 mc --no-tty fedora:34 .mc/rebuild.sh
53
54 - name: Rebuild Ubuntu 20.04
55 run: npx --package mini-cross@0.15.2 mc --no-tty ubuntu:20.04 .mc/rebuild.sh
56
57 - name: Rebuild Windows amd64
58 run: npx --package mini-cross@0.15.2 mc --no-tty windows:amd64 .mc/rebuild.sh
59
60 - name: Rebuild gerbv.github.io
61 run: |
62 npx --package mini-cross@0.15.2 mc --no-tty website make -C gerbv.github.io
63 find gerbv.github.io -type f -name '.gitignore' -exec rm {} \;
64
65 - name: Deploy gerbv.github.io
66 uses: JamesIves/github-pages-deploy-action@4.1.5
67 with:
68 repository-name: gerbv/gerbv.github.io
69 branch: gh-pages
70 folder: gerbv.github.io
71 token: ${{ secrets.GERBV_BUILDBOT_PAT }}
72 git-config-name: gerbv-buildbot
73 git-config-email: violetland+gerbv@mail.ru
74 single-commit: true
75 # @see https://github.community/t/how-can-i-test-if-secrets-are-available-in-an-action/17911/10
76 env:
77 GERBV_BUILDBOT_PAT: ${{ secrets.GERBV_BUILDBOT_PAT }}
78 if: ${{ success() && github.event_name == 'push' && env.GERBV_BUILDBOT_PAT }}
79
4444 src/authors.c
4545 src/bugs.c
4646 src/gerbv
47 src/gerbv.exe
4748 src/gerbv.orig
49 src/gerbv_icon.ico
4850 src/libgerbv.la
4951 src/libgerbv.pc
5052 src/run_gerbv
5254 test-driver
5355 test/mismatch/
5456 test/outputs/
57 win32/BUGS.txt
58 win32/COPYING.txt
0 ---
1 base: fedora:34
2 install:
3 - gcc
4 - gcc-c++
5 - make
6
7 # Buildsystem dependencies
8 - autoconf
9 - gettext-devel
10 - libtool
11 - pkgconf
12
13 # Runtime dependencies
14 - cairo-devel
15 - gtk2-devel
16 - libdxflib-devel
17
18 # Test dependencies
19 - ImageMagick
20
21 # Packaging dependencies
22 - git
23 ---
24
0 #!/bin/bash
1
2 set -e
3
4 ./configure \
5 --disable-debug \
6 --enable-dxf \
7 --disable-update-desktop-database \
8
0 #!/bin/bash
1
2 set -e
3
4 .mc/package-linux.sh 'Fedora 34'
5
0 #!/bin/bash
1 #
2 # Builds an archive containing a gerbv binary distribution for Linux based
3 # systems
4 #
5 # @param $1 System name e.g. 'Fedora 34'
6 #
7 # @warning Expects working directory to be set to project root
8
9
10 # Validate arguments
11 RELEASE_OS="${1}"
12
13 if [ "${RELEASE_OS}" == "" ]; then
14 (>&2 echo "Usage: package-linux.sh <release-os>")
15 exit 1
16 fi
17
18
19 # Validate environment
20 CAT=`command -v cat`
21 CHMOD=`command -v chmod`
22 CP=`command -v cp`
23 DATE=`command -v date`
24 FIND=`command -v find`
25 GIT=`command -v git`
26 GZIP=`command -v gzip`
27 MKTEMP=`command -v mktemp`
28 TAR=`command -v tar`
29
30 if [ ! -x "${CAT}" ]; then
31 (>&2 echo "\`cat' missing")
32 exit 1
33 fi
34
35 if [ ! -x "${CHMOD}" ]; then
36 (>&2 echo "\`chmod' missing")
37 exit 1
38 fi
39
40 if [ ! -x "${CP}" ]; then
41 (>&2 echo "\`cp' missing")
42 exit 1
43 fi
44
45 if [ ! -x "${DATE}" ]; then
46 (>&2 echo "\`date' missing")
47 exit 1
48 fi
49
50 if [ ! -x "${FIND}" ]; then
51 (>&2 echo "\`find' missing")
52 exit 1
53 fi
54
55 if [ ! -x "${GIT}" ]; then
56 (>&2 echo "\`git' missing")
57 exit 1
58 fi
59
60 if [ ! -x "${GZIP}" ]; then
61 (>&2 echo "\`gzip' missing")
62 exit 1
63 fi
64
65 if [ ! -x "${MKTEMP}" ]; then
66 (>&2 echo "\`mktemp' missing")
67 exit 1
68 fi
69
70 if [ ! -x "${TAR}" ]; then
71 (>&2 echo "\`tar' missing")
72 exit 1
73 fi
74
75
76 # Gather information about current build
77 set -e
78
79 RELEASE_COMMIT=`"${GIT}" rev-parse HEAD`
80 RELEASE_COMMIT_SHORT="${RELEASE_COMMIT:0:6}"
81 RELEASE_DATE=`"${DATE}" --rfc-3339=date`
82
83
84 # Copy files to be released into temporary directory
85 WEBSITE_DIRECTORY='gerbv.github.io/ci'
86 TEMPORARY_DIRECTORY=`"${MKTEMP}" --directory`
87
88 "${CP}" 'COPYING' "${TEMPORARY_DIRECTORY}"
89 "${CP}" 'src/.libs/gerbv' "${TEMPORARY_DIRECTORY}"
90 "${FIND}" 'src/.libs' -name 'libgerbv.so*' -exec "${CP}" {} "${TEMPORARY_DIRECTORY}" \;
91
92 "${CAT}" <<EOT >> "${TEMPORARY_DIRECTORY}/gerbv.sh"
93 #!/bin/bash
94
95 DIRECTORY=\`dirname "\$0"\`
96 LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:\${DIRECTORY}" "\${DIRECTORY}/gerbv"
97 EOT
98
99 "${CHMOD}" +x "${TEMPORARY_DIRECTORY}/gerbv.sh"
100
101
102 # Create archive and auxiliary files
103 RELEASE_FILENAME="gerbv_${RELEASE_DATE}_${RELEASE_COMMIT_SHORT}_(${RELEASE_OS}).tar.gz"
104
105 "${TAR}" --directory="${TEMPORARY_DIRECTORY}" -czf "${WEBSITE_DIRECTORY}/${RELEASE_FILENAME}" '.'
106
107 echo "${RELEASE_COMMIT}" > "${WEBSITE_DIRECTORY}/${RELEASE_OS}.RELEASE_COMMIT"
108 echo "${RELEASE_COMMIT_SHORT}" > "${WEBSITE_DIRECTORY}/${RELEASE_OS}.RELEASE_COMMIT_SHORT"
109 echo "${RELEASE_DATE}" > "${WEBSITE_DIRECTORY}/${RELEASE_OS}.RELEASE_DATE"
110 echo "${RELEASE_FILENAME}" > "${WEBSITE_DIRECTORY}/${RELEASE_OS}.RELEASE_FILENAME"
111
0 #!/bin/bash
1 #
2 # Helper script to unify build logic between different operating systems. Can be
3 # executed like this from the main directory:
4 #
5 # mc fedora:34 .mc/rebuild.sh
6 # mc ubuntu:20.04 .mc/rebuild.sh
7 set -e
8
9 sh autogen.sh
10 /opt/configure.sh
11 make clean
12 make
13 /opt/package.sh
14
0 #!/bin/bash
1
2 set -e
3
4 ./configure \
5 --disable-debug \
6 --enable-dxf \
7 --disable-update-desktop-database \
8
0 #!/bin/bash
1
2 set -e
3
4 .mc/package-linux.sh 'Ubuntu 20.04'
5
0 ---
1 base: ubuntu:20.04
2 install:
3 - gcc
4 - make
5
6 # Buildsystem dependencies
7 - autoconf
8 - autopoint
9 - libtool
10 - pkg-config
11
12 # Runtime dependencies
13 - libdxflib-dev
14 - libgtk2.0-dev
15 - libcairo2-dev
16
17 # Test dependencies
18 - imagemagick
19
20 # Packaging dependencies
21 - git
22 ---
23
0 ---
1 base: ubuntu:20.04
2 install:
3 - doxygen
4 - m4
5 - make
6 ---
7
0 #!/bin/bash
1
2 set -e
3
4 mingw64-configure \
5 --disable-debug \
6 --disable-update-desktop-database \
7
0 #!/bin/bash
1 #
2 # Builds an archive containing a gerbv binary distribution for Windows systems
3 #
4 # @warning Expects working directory to be set to project root
5
6
7 # Validate arguments
8 RELEASE_OS="Windows amd64"
9
10 if [ "${RELEASE_OS}" == "" ]; then
11 (>&2 echo "Usage: package-linux.sh <release-os>")
12 exit 1
13 fi
14
15
16 # Validate environment
17 CP=`command -v cp`
18 DATE=`command -v date`
19 FIND=`command -v find`
20 GIT=`command -v git`
21 MKTEMP=`command -v mktemp`
22 ZIP=`command -v zip`
23
24 if [ ! -x "${CP}" ]; then
25 (>&2 echo "\`cp' missing")
26 exit 1
27 fi
28
29 if [ ! -x "${DATE}" ]; then
30 (>&2 echo "\`date' missing")
31 exit 1
32 fi
33
34 if [ ! -x "${FIND}" ]; then
35 (>&2 echo "\`find' missing")
36 exit 1
37 fi
38
39 if [ ! -x "${GIT}" ]; then
40 (>&2 echo "\`git' missing")
41 exit 1
42 fi
43
44 if [ ! -x "${MKTEMP}" ]; then
45 (>&2 echo "\`mktemp' missing")
46 exit 1
47 fi
48
49 if [ ! -x "${ZIP}" ]; then
50 (>&2 echo "\`zip' missing")
51 exit 1
52 fi
53
54
55 # Gather information about current build
56 set -e
57
58 RELEASE_COMMIT=`"${GIT}" rev-parse HEAD`
59 RELEASE_COMMIT_SHORT="${RELEASE_COMMIT:0:6}"
60 RELEASE_DATE=`"${DATE}" --rfc-3339=date`
61
62
63 # Copy files to be released into temporary directory
64 WEBSITE_DIRECTORY='gerbv.github.io/ci'
65 TEMPORARY_DIRECTORY=`"${MKTEMP}" --directory`
66
67 "${CP}" 'COPYING' "${TEMPORARY_DIRECTORY}"
68 "${CP}" 'src/.libs/gerbv.exe' "${TEMPORARY_DIRECTORY}"
69 "${FIND}" 'src/.libs' -name 'libgerbv-*.dll' -exec "${CP}" {} "${TEMPORARY_DIRECTORY}" \;
70
71 # @warning While this might copy more libraries than strictly necessary, it
72 # won't be many more, since the development environment contains only the
73 # required mingw dependencies
74 MINGW_LIBRARY_DIRECTORY='/usr/x86_64-w64-mingw32/sys-root/mingw/bin'
75
76 "${FIND}" "${MINGW_LIBRARY_DIRECTORY}" -type f -name '*.dll' -exec "${CP}" {} "${TEMPORARY_DIRECTORY}" \;
77
78
79 # Create archive and auxiliary files
80 RELEASE_FILENAME="gerbv_${RELEASE_DATE}_${RELEASE_COMMIT_SHORT}_(${RELEASE_OS}).zip"
81
82 "${FIND}" "${TEMPORARY_DIRECTORY}" -type f -exec "${ZIP}" --junk-paths "${WEBSITE_DIRECTORY}/${RELEASE_FILENAME}" {} \;
83
84 echo "${RELEASE_COMMIT}" > "${WEBSITE_DIRECTORY}/${RELEASE_OS}.RELEASE_COMMIT"
85 echo "${RELEASE_COMMIT_SHORT}" > "${WEBSITE_DIRECTORY}/${RELEASE_OS}.RELEASE_COMMIT_SHORT"
86 echo "${RELEASE_DATE}" > "${WEBSITE_DIRECTORY}/${RELEASE_OS}.RELEASE_DATE"
87 echo "${RELEASE_FILENAME}" > "${WEBSITE_DIRECTORY}/${RELEASE_OS}.RELEASE_FILENAME"
88
0 ---
1 base: fedora:34
2 install:
3 - make
4 - mingw64-gcc
5 - mingw64-gcc-c++
6
7 # Buildsystem dependencies
8 - autoconf
9 - gettext-devel
10 - libtool
11
12 # Runtime dependencies
13 #
14 # @warning gtk2-devel should not be required, but needed to provide
15 # {@code /usr/share/aclocal/gsettings.m4} since autoconf does not seem to
16 # pick up on {@code /usr/x86_64-w64-mingw32/sys-root/mingw/share/aclocal/gsettings.m4}
17 - gtk2-devel
18 - mingw64-cairo-static
19 - mingw64-gtk2-static
20
21 # Test dependencies
22 - ImageMagick
23
24 # Packaging dependencies
25 - git
26 - zip
27 ---
28
2929 test \
3030 win32
3131
32 EXTRA_DIST = BUGS CONTRIBUTORS HACKING AUTHORS ChangeLog COPYING INSTALL \
33 NEWS README \
34 TODO \
35 autogen.sh README-cvs.txt README-release.txt \
36 README-win32.txt icon-theme-installer BUGS
32 EXTRA_DIST = \
33 autogen.sh icon-theme-installer \
34 INSTALL \
35 AUTHORS CONTRIBUTORS COPYING \
36 HACKING ChangeLog NEWS BUGS TODO \
37 README README-git.txt README-release.txt README-win32.txt
3738
3839 DISTCHECK_CONFIGURE_FLAGS = \
3940 --disable-update-desktop-database GTK_UPDATE_ICON_THEME_BIN=true
4041
4142 .PHONY: doxygen
4243 doxygen:
43 doxygen doc/Doxyfile.nopreprocessing
44 PROJECT_NUMBER=@VERSION@ doxygen doc/Doxyfile.nopreprocessing
0 ========================================================================
1 Release Notes for gerbv-2.8.0
2 ========================================================================
3 gerbv maintenance has moved from SourceForge to GitHub in order to revitalize
4 the project. Multiple patches from the mailing list have been reintegrated and
5 build warnings have been trimmed down.
6
7 -CVE-2021-40391: Gerbv drill format T-code tool number out-of-bounds write vulnerability
8
9 -Patch #77: Fix double-freeing memory
10 -Patch #81: Fix casting pointer to different size integer
11 -Patch #83: Crash may occur on opening/saveing files
12
13
014 ========================================================================
115 Release Notes for gerbv-2.7.1
216 ========================================================================
317 This is a minor patch release on top of gerbv-2.7.0 in order to fix the security
418 vulnerability TALOS-2021-1402 discovered by the Cisco Talos team.
19
520
621 ========================================================================
722 Release Notes for gerbv-2.7.0
0 # Gerbv – a Gerber file viewer
1
2 Gerbv was originally developed as part of the
3 [gEDA Project](https://www.geda-project.org/) but is now seperatly maintained.
4
5
6 ## About Gerbv
7
8 * Gerbv is a viewer for Gerber RS-274X files, Excellon drill files, and CSV
9 pick-and-place files. (Note: RS-274D files are not supported.)
10 * Gerbv is a native Linux application, and it runs on many common Unix
11 platforms.
12 * Gerbv is free/open-source software.
13 * The core functionality of Gerbv is located in a separate library (libgerbv),
14 allowing developers to include Gerber parsing/editing/exporting/rendering into
15 other programs.
16 * Gerbv is one of the utilities originally affiliated with the gEDA project, an
17 umbrella organization dedicated to producing free software tools for
18 electronic design.
19
20
21 ## About this fork
22
23 While Gerbv is great software, the development on Source Force has stalled since
24 many years with patches accumulating in the tracker and mailing list.
25
26 This fork aims at providing a maintained Gerbv source, containing mostly
27 bugfixes.
28
29 To communicate with the original Gerbv developers, please post your query on the
30 following mailing list:
31
32 gerbv-devel@lists.sourceforge.net
33 geda-user@delorie.com
34
35 This is a friendly fork and I'm willing to invite other people to join the Gerbv
36 GitHub organization.
37
38
39 ## Applied patches from SourceForge
40
41 * [Patch #77: Fix double-freeing memory](https://sourceforge.net/p/gerbv/patches/77/),
42 applied in [PR#24](https://github.com/gerbv/gerbv/pull/24) as
43 [Commit `a96b46`](https://github.com/gerbv/gerbv/commit/a96b46c7249e97e950d860790b84bcdba2368f57)
44 * [Patch #81: Fix casting pointer to different size integer](https://sourceforge.net/p/gerbv/patches/81/),
45 applied in [PR#23](https://github.com/gerbv/gerbv/pull/23) as
46 [Commit `e4b344`](https://github.com/gerbv/gerbv/commit/e4b344e182191296d48b392f56f3bdd48900e1fc)
47 * [Patch #83: Crash may occur on opening/saveing files](https://sourceforge.net/p/gerbv/patches/83/),
48 applied in [PR#8](https://github.com/gerbv/gerbv/pull/8) as
49 [Commit `242dda`](https://github.com/gerbv/gerbv/commit/242dda66b81e88f17f4ef99840cfeff727753b19)
50
51
52 ## Supported platforms
53
54 Gerbv has been built and tested on
55
56 * Debian 10 (amd64)
57 * Fedora 34 (amd64)
58 * Ubuntu 20.04 (amd64)
59 * Windows 10 (amd64 cross compiled from Fedora as well as native x86/amd64 using MSYS2)
60
61
62 ## Information for developers
63
64 Gerbv is split into a core functional library and a GUI portion. Developers
65 wishing to incorporate Gerber parsing/editing/exporting/rendering into other
66 programs are welcome to use libgerbv. Complete API documentation for libgerbv
67 is here, as well as many example programs using libgerbv.
68
69
70 ## Security
71
72 The current focus of gerbv is to provide a utility to view and manipulate
73 trusted gerber files. When using gerbv, you should not view files from untrusted
74 sources without extra precautions.
75
76 Nevertheless, we acknowledge that libgerbv will be used to handle untrusted
77 input, maybe even provided over the network. In those cases we strongly advise
78 to treat libgerbv as any codec and isolate its operations from the rest of your
79 application.
80
81
82 ## License
83
84 Gerbv and all associated files is placed under the GNU Public License (GPL)
85 version 2.0. See the toplevel [COPYING](COPYING) file for more information.
86
87 Programs and associated files are:
88 Copyright 2001, 2002 by Stefan Petersen and the respective original authors
89 (which are listed on the respective files)
90
+0
-16
TODO less more
0 gEDA
1
2 GNU Electronic Design Automation
3 ------------------------------------------------------------------------------
4
5 gerbv TODO
6
7 Stefan Petersen
8 E-mail: spe@stacken.kth.se
9 Web: http://gerbv.sourceforge.net/
10 $Id$
11
12 ------------------------------------------------------------------------------
13
14 For an up-to-date list of TODO items, see the Feature Requests at
15 http://sourceforge.net/projects/gerbv
2121 dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
2222
2323
24 AC_INIT([gerbv], [2.7.1])
24 AC_INIT([gerbv], [m4_esyscmd(utils/git-version-gen.sh 2.8.0)])
2525 AC_CONFIG_SRCDIR([src/gerbv.c])
2626 AC_PREREQ([2.59])
2727 AM_INIT_AUTOMAKE([1.9])
298298 ]], [[
299299 if (!strncmp("2.2.", DL_VERSION, 4)
300300 || !strncmp("2.5.", DL_VERSION, 4)
301 || !strncmp("3.12.", DL_VERSION, 5))
301 || !strncmp("3.12.", DL_VERSION, 5)
302 || !strncmp("3.17.", DL_VERSION, 5))
302303 return 0;
303304
304305 return 1;
390391 AC_CHECK_FUNCS(realpath canonicalize_file_name)
391392 libiberty_NEED_DECLARATION(canonicalize_file_name)
392393
393
394 CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS $GTK_CFLAGS $CAIRO_CFLAGS"
395 LIBS="$LIBS $GDK_PIXBUF_LIBS $GTK_LIBS $CAIRO_LIBS"
396
397 CPPFLAGS="$CPPFLAGS $GTK_CFLAGS"
394 AC_SUBST([GTK_CFLAGS_ISYSTEM], ['$(subst -I/usr/include/gtk-2.0,-isystem /usr/include/gtk-2.0,$(GTK_CFLAGS))'])
395
396 CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS $GTK_CFLAGS_ISYSTEM $CAIRO_CFLAGS"
397 LIBS="$LIBS $GDK_PIXBUF_LIBS $GTK_LIBS $CAIRO_LIBS -lm"
398
399 AC_ARG_VAR([CPPFLAGS_EXTRA], [Additional flags when compiling])
400
401 CPPFLAGS="$CPPFLAGS $GTK_CFLAGS_ISYSTEM $CPPFLAGS_EXTRA"
398402
399403 ############################################################
400404 #
3030 # This could be handy for archiving the generated documentation or
3131 # if some version control system is used.
3232
33 PROJECT_NUMBER = 2.7
33 PROJECT_NUMBER = $(PROJECT_NUMBER)
3434
3535 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
3636 # base path where the generated documentation will be put.
100100 "F121","0805","2039.504mil","3507.346mil","2040mil","3506.85mil","2039.504mil","3552.346mil","T","270.00","BK2125HS601-T 600R@100MHZ"
101101 "F122","0805","1909.944mil","3936.512mil","1909.449mil","3937.008mil","1909.944mil","3891.512mil","T","90.00","BK2125HS601-T 600R@100MHZ"
102102 "F123","NFM21C","2253.945mil","3503.914mil","2253.937mil","3503.937mil","2253.944mil","3545.252mil","T","270.00","*"
103 "LED200","LED_3M","1260.008mil","1465.26mil","1259.842mil","1515.748mil","1260.008mil","1415.26mil","T","270.00","LED GRÃœN 3MM"
103 "LED200","LED_3M","1260.008mil","1465.26mil","1259.842mil","1515.748mil","1260.008mil","1415.26mil","T","270.00","LED GR\DCN 3MM"
104104 "P100","BOURNS3314J","3030mil","2536.85mil","3030mil","2536.85mil","2952.5mil","2491.85mil","T","270.00","5K 20% 0.25W"
105105 "P101","BOURNS3314J","3070mil","696.85mil","3070mil","696.85mil","3115mil","619.35mil","T","360.00","5K 20% 0.25W"
106106 "P102","BOURNS3314J","830mil","1296.85mil","830mil","1296.85mil","875mil","1219.35mil","T","360.00","10K 20% 0.25W"
100100 F121 0805 2039.504mil 3507.346mil 2040mil 3506.85mil 2039.504mil 3552.346mil T 270.00 BK2125HS601-T 600R@100MHZ
101101 F122 0805 1909.944mil 3936.512mil 1909.449mil 3937.008mil 1909.944mil 3891.512mil T 90.00 BK2125HS601-T 600R@100MHZ
102102 F123 NFM21C 2253.945mil 3503.914mil 2253.937mil 3503.937mil 2253.944mil 3545.252mil T 270.00 *
103 LED200 LED_3M 1260.008mil 1465.26mil 1259.842mil 1515.748mil 1260.008mil 1415.26mil T 270.00 LED GRÃœN 3MM
103 LED200 LED_3M 1260.008mil 1465.26mil 1259.842mil 1515.748mil 1260.008mil 1415.26mil T 270.00 LED GR\DCN 3MM
104104 P100 BOURNS3314J 3030mil 2536.85mil 3030mil 2536.85mil 2952.5mil 2491.85mil T 270.00 5K 20% 0.25W
105105 P101 BOURNS3314J 3070mil 696.85mil 3070mil 696.85mil 3115mil 619.35mil T 360.00 5K 20% 0.25W
106106 P102 BOURNS3314J 830mil 1296.85mil 830mil 1296.85mil 875mil 1219.35mil T 360.00 10K 20% 0.25W
0 !/Makefile
1 /doc/
2 /index.html
0 .PHONY: all
1 all: clean build
2
3
4 .PHONY: clean
5 clean:
6 if [ -f 'doc' ]; then \
7 rm -rf 'doc'; \
8 fi
9
10 if [ -f 'index.html' ]; then \
11 rm 'index.html'; \
12 fi
13
14
15 .PHONY: build
16 build:
17 make -C '..' doxygen
18 cp -r '../doc/html' 'doc'
19
20 m4 'index.html.m4' > 'index.html'
21
0 <?xml version="1.0" encoding="UTF-8"?>
1 <svg version="1.1" viewBox="0 0 204.7 200.9" xmlns="http://www.w3.org/2000/svg">
2 <title>Fedora logo (2021)</title>
3 <path d="m102.7 1.987c-55.41 0-100.3 44.21-100.4 98.79h-0.01773v76.47h0.01773c0.02659 12.38 10.22 22.4 22.8 22.4h77.58c55.42-0.0349 100.3-44.24 100.3-98.79 8e-5 -54.58-44.91-98.79-100.4-98.79zm20.39 40.68c16.85 0 32.76 12.7 32.76 30.23 0 1.625 0.01 3.252-0.26 5.095-0.4668 4.662-4.794 8.012-9.505 7.355-4.711-0.6649-7.909-5.07-7.037-9.679 0.0799-0.526 0.1083-1.352 0.1083-2.772 0-9.938-8.257-13.77-16.06-13.77-7.805 0-14.84 6.462-14.85 13.77 0.1349 8.455 0 16.84 0 25.29l14.49-0.1067c11.31-0.2306 11.44 16.54 0.1305 16.46l-14.61 0.1067c-0.0354 6.801 0.0532 5.571 0.0178 8.996 0 0 0.1225 8.318-0.1296 14.62-1.749 18.52-17.76 33.32-37 33.32-20.4 0-37.2-16.41-37.2-36.54 0.6124-20.7 17.38-36.99 38.5-36.8l11.78-0.08737v16.43l-11.78 0.1066h-0.06216c-11.6 0.3382-21.55 8.1-21.74 20.34 0 11.15 9.148 20.08 20.5 20.08 11.34 0 20.42-8.124 20.42-20.06l-0.01772-62.23c0.0058-1.155 0.04435-2.073 0.1731-3.347 1.914-15.22 15.74-26.82 31.39-26.82z" style="fill:#51a2da;stroke-width:.982"/>
4 </svg>
0 bg_hr.png CC0-1.0 https://github.com/pages-themes/slate/blob/ff147bf37e3611395f37cc0cdcaee57550293235/assets/images/bg_hr.png
1 blacktocat.png CC0-1.0 https://github.com/pages-themes/slate/blob/ff147bf37e3611395f37cc0cdcaee57550293235/assets/images/blacktocat.png
2 Fedora_icon_(2021).svg [fedora-logo] https://de.wikipedia.org/wiki/Datei:Fedora_icon_(2021).svg
3 cof_orange_hex.png [ubuntu-logo] https://assets.ubuntu.com/v1/9fbc8a44-circle-of-friends-web.zip
4 gerbv.svg GPL-2.0-only https://github.com/gerbv/gerbv/blob/52b9e719981da5a450d073a7a5064d1903926fed/desktop/gerbv.svg
5 icon_download.png CC0-1.0 https://github.com/pages-themes/slate/blob/ff147bf37e3611395f37cc0cdcaee57550293235/assets/images/icon_download.png
6 slate-style.css CC0-1.0 https://github.com/pages-themes/slate/tree/a185c0dde883863779be4856421ba0b2390f44a4
7 sprite_download.png CC0-1.0 https://github.com/pages-themes/slate/blob/ff147bf37e3611395f37cc0cdcaee57550293235/assets/images/sprite_download.png
8 Windows_10_Logo.png [windows-logo] https://de.wikipedia.org/wiki/Datei:Windows_10_Logo.svg
9
10 [fedora-logo]: https://fedoraproject.org/wiki/Legal:Trademark_guidelines
11 [ubuntu-logo]: https://design.ubuntu.com/brand/ubuntu-logo/
12 [windows-logo]: https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks
13
0 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1 <!-- Created with Inkscape (http://www.inkscape.org/) -->
2 <svg
3 xmlns:svg="http://www.w3.org/2000/svg"
4 xmlns="http://www.w3.org/2000/svg"
5 xmlns:xlink="http://www.w3.org/1999/xlink"
6 version="1.0"
7 width="128"
8 height="128"
9 id="svg2396">
10 <defs
11 id="defs2398">
12 <linearGradient
13 id="linearGradient4684">
14 <stop
15 style="stop-color:#000000;stop-opacity:1"
16 offset="0"
17 id="stop4686" />
18 <stop
19 style="stop-color:#343434;stop-opacity:1"
20 offset="1"
21 id="stop4688" />
22 </linearGradient>
23 <linearGradient
24 id="linearGradient5048">
25 <stop
26 style="stop-color:#000000;stop-opacity:0"
27 offset="0"
28 id="stop5050" />
29 <stop
30 style="stop-color:#000000;stop-opacity:1"
31 offset="0.5"
32 id="stop5056" />
33 <stop
34 style="stop-color:#000000;stop-opacity:0"
35 offset="1"
36 id="stop5052" />
37 </linearGradient>
38 <linearGradient
39 id="linearGradient2937">
40 <stop
41 style="stop-color:#333333;stop-opacity:1"
42 offset="0"
43 id="stop2939" />
44 <stop
45 style="stop-color:#474747;stop-opacity:1"
46 offset="1"
47 id="stop2941" />
48 </linearGradient>
49 <linearGradient
50 id="linearGradient2929">
51 <stop
52 style="stop-color:#737373;stop-opacity:1"
53 offset="0"
54 id="stop2931" />
55 <stop
56 style="stop-color:#73a424;stop-opacity:1"
57 offset="1"
58 id="stop2933" />
59 </linearGradient>
60 <linearGradient
61 id="linearGradient5464">
62 <stop
63 style="stop-color:#73d216;stop-opacity:1"
64 offset="0"
65 id="stop5466" />
66 <stop
67 style="stop-color:#ffffff;stop-opacity:1"
68 offset="1"
69 id="stop5468" />
70 </linearGradient>
71 <linearGradient
72 id="linearGradient4360">
73 <stop
74 style="stop-color:#d8d8d8;stop-opacity:0"
75 offset="0"
76 id="stop4362" />
77 <stop
78 style="stop-color:#ffffff;stop-opacity:1"
79 offset="1"
80 id="stop4364" />
81 </linearGradient>
82 <linearGradient
83 x1="21.313709"
84 y1="10.795495"
85 x2="13.984389"
86 y2="10.795495"
87 id="linearGradient6447"
88 xlink:href="#linearGradient5464"
89 gradientUnits="userSpaceOnUse"
90 gradientTransform="matrix(1,0,0,1.4112692,0,-7.1972126)"
91 spreadMethod="reflect" />
92 <linearGradient
93 x1="27.16466"
94 y1="41.576271"
95 x2="37.249554"
96 y2="33.886486"
97 id="linearGradient3645"
98 xlink:href="#linearGradient4360"
99 gradientUnits="userSpaceOnUse"
100 spreadMethod="reflect" />
101 <linearGradient
102 x1="21.313709"
103 y1="10.795495"
104 x2="13.984389"
105 y2="10.795495"
106 id="linearGradient3669"
107 xlink:href="#linearGradient5464"
108 gradientUnits="userSpaceOnUse"
109 gradientTransform="matrix(1,0,0,1.4112692,0,-7.1972126)"
110 spreadMethod="reflect" />
111 <linearGradient
112 x1="40.751785"
113 y1="43.994072"
114 x2="7.5954852"
115 y2="4.2193146"
116 id="linearGradient3326"
117 xlink:href="#linearGradient2937"
118 gradientUnits="userSpaceOnUse"
119 gradientTransform="matrix(0.889237,0,0,0.7822742,0.6229226,7.6471606)" />
120 <linearGradient
121 x1="40.751785"
122 y1="43.994072"
123 x2="7.5954852"
124 y2="4.2193146"
125 id="linearGradient2250"
126 xlink:href="#linearGradient2937"
127 gradientUnits="userSpaceOnUse"
128 gradientTransform="matrix(0.889237,0,0,0.7822742,0.6229226,7.6471606)" />
129 <linearGradient
130 x1="40.751785"
131 y1="43.994072"
132 x2="7.5954852"
133 y2="4.2193146"
134 id="linearGradient2294"
135 xlink:href="#linearGradient2937"
136 gradientUnits="userSpaceOnUse"
137 gradientTransform="matrix(0.889237,0,0,0.7822742,0.6229226,7.6471606)" />
138 <linearGradient
139 x1="40.751785"
140 y1="43.994072"
141 x2="7.5954852"
142 y2="4.2193146"
143 id="linearGradient2500"
144 xlink:href="#linearGradient2937"
145 gradientUnits="userSpaceOnUse"
146 gradientTransform="matrix(0.889237,0,0,0.7822742,0.6229226,7.6471606)" />
147 <linearGradient
148 x1="40.751785"
149 y1="43.994072"
150 x2="7.5954852"
151 y2="4.2193146"
152 id="linearGradient2502"
153 xlink:href="#linearGradient2937"
154 gradientUnits="userSpaceOnUse"
155 gradientTransform="matrix(0.889237,0,0,0.7822742,0.6229226,7.6471606)" />
156 </defs>
157 <g
158 style="display:inline"
159 id="layer1" />
160 <g
161 style="display:inline"
162 id="layer2">
163 <g
164 transform="matrix(2.3604652,1.2409028,-1.2407632,2.3607308,51.999447,-21.683224)"
165 style="display:inline"
166 id="use3514">
167 <rect
168 width="31.01214"
169 height="32.011047"
170 ry="0.89887106"
171 x="6.4950466"
172 y="10.499681"
173 style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.63253012;fill-rule:nonzero;stroke:url(#linearGradient2500);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
174 id="rect2210" />
175 <rect
176 width="28.997715"
177 height="30.003584"
178 rx="0.13186733"
179 ry="0.1148243"
180 x="7.5"
181 y="11.496416"
182 style="opacity:0.79120878;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
183 id="rect2212" />
184 <path
185 d="M 10.184257,13.467549 L 15.5,13.5 L 18.5,16.5 L 18.5,24.5"
186 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
187 id="path2214" />
188 <path
189 d="M 22.5,24.5 L 22.5,16.5 L 19.5,13.5"
190 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
191 id="path2216" />
192 <path
193 d="M 26.5,24.5 L 26.5,16.5 L 23.5,13.5"
194 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
195 id="path2218" />
196 <path
197 d="M 30.5,24.5 L 30.5,13.5"
198 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
199 id="path2220" />
200 <path
201 d="M 18.5,24.5 L 18.5,26.5"
202 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
203 id="path2222" />
204 <path
205 d="M 22.5,24.5 L 22.5,26.5"
206 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
207 id="path2224" />
208 <path
209 d="M 26.5,24.5 L 26.5,26.5"
210 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
211 id="path2226" />
212 <path
213 d="M 30.5,24.5 L 30.5,26.5"
214 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
215 id="path2228" />
216 <path
217 d="M 30.5,31.5 L 30.5,33.5"
218 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
219 id="path2230" />
220 <path
221 d="M 26.5,31.5 L 26.5,33.5"
222 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
223 id="path2232" />
224 <path
225 d="M 22.5,31.5 L 22.5,33.5"
226 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
227 id="path2234" />
228 <path
229 d="M 18.5,31.5 L 18.5,33.5"
230 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
231 id="path2236" />
232 <path
233 d="M 18.5,33.5 L 18.5,36.5 L 16.5,38.5 L 10.5,38.5"
234 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
235 id="path2238" />
236 <path
237 d="M 22.5,33.5 L 22.5,38.5"
238 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
239 id="path2240" />
240 <path
241 d="M 26.5,33.5 L 26.5,36.5 L 28.5,38.5 L 34.5,38.5"
242 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
243 id="path2242" />
244 <path
245 d="M 30.5,33.5 L 32.5,35.5 L 34.5,35.5"
246 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
247 id="path2244" />
248 <path
249 d="M 10.5,15.5 L 14.5,15.5 L 16.5,17.5 L 16.5,35.5 L 15.5,36.5 L 10.5,36.5 L 10.5,15.5 z "
250 style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
251 id="path2246" />
252 <rect
253 width="16"
254 height="13"
255 ry="2.0280445"
256 x="16.5"
257 y="22.5"
258 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
259 id="rect2248" />
260 </g>
261 <use
262 transform="matrix(0.9736689,0.2279926,-0.2279414,0.9736689,26.137765,-19.83503)"
263 style="display:inline"
264 id="use3466"
265 x="0"
266 y="0"
267 width="48"
268 height="48"
269 xlink:href="#use3464" />
270 <g
271 transform="matrix(2.6667,0,0,2.667,-10.653592,2.6383863)"
272 style="display:inline"
273 id="use3464">
274 <rect
275 width="31.01214"
276 height="32.011047"
277 ry="0.89887106"
278 x="6.4950466"
279 y="10.499681"
280 style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.63253012;fill-rule:nonzero;stroke:url(#linearGradient2502);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
281 id="rect2254" />
282 <rect
283 width="28.997715"
284 height="30.003584"
285 rx="0.13186733"
286 ry="0.1148243"
287 x="7.5"
288 y="11.496416"
289 style="opacity:0.79120878;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
290 id="rect2256" />
291 <path
292 d="M 10.184257,13.467549 L 15.5,13.5 L 18.5,16.5 L 18.5,24.5"
293 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
294 id="path2258" />
295 <path
296 d="M 22.5,24.5 L 22.5,16.5 L 19.5,13.5"
297 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
298 id="path2260" />
299 <path
300 d="M 26.5,24.5 L 26.5,16.5 L 23.5,13.5"
301 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
302 id="path2262" />
303 <path
304 d="M 30.5,24.5 L 30.5,13.5"
305 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
306 id="path2264" />
307 <path
308 d="M 18.5,24.5 L 18.5,26.5"
309 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
310 id="path2266" />
311 <path
312 d="M 22.5,24.5 L 22.5,26.5"
313 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
314 id="path2268" />
315 <path
316 d="M 26.5,24.5 L 26.5,26.5"
317 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
318 id="path2270" />
319 <path
320 d="M 30.5,24.5 L 30.5,26.5"
321 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
322 id="path2272" />
323 <path
324 d="M 30.5,31.5 L 30.5,33.5"
325 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
326 id="path2274" />
327 <path
328 d="M 26.5,31.5 L 26.5,33.5"
329 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
330 id="path2276" />
331 <path
332 d="M 22.5,31.5 L 22.5,33.5"
333 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
334 id="path2278" />
335 <path
336 d="M 18.5,31.5 L 18.5,33.5"
337 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
338 id="path2280" />
339 <path
340 d="M 18.5,33.5 L 18.5,36.5 L 16.5,38.5 L 10.5,38.5"
341 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
342 id="path2282" />
343 <path
344 d="M 22.5,33.5 L 22.5,38.5"
345 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
346 id="path2284" />
347 <path
348 d="M 26.5,33.5 L 26.5,36.5 L 28.5,38.5 L 34.5,38.5"
349 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
350 id="path2286" />
351 <path
352 d="M 30.5,33.5 L 32.5,35.5 L 34.5,35.5"
353 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
354 id="path2288" />
355 <path
356 d="M 10.5,15.5 L 14.5,15.5 L 16.5,17.5 L 16.5,35.5 L 15.5,36.5 L 10.5,36.5 L 10.5,15.5 z "
357 style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
358 id="path2290" />
359 <rect
360 width="16"
361 height="13"
362 ry="2.0280445"
363 x="16.5"
364 y="22.5"
365 style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
366 id="rect2292" />
367 </g>
368 <path
369 d="M 10.6668,69.342 L 10.6668,34.671 L 85.3344,34.671 L 85.3344,69.342 C 66.6675,85.344 37.3338,53.34 10.6668,69.342 z "
370 style="fill:#ffffff;fill-opacity:0.51807233;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
371 id="path3470" />
372 <path
373 d="M 31 31 A 10 10 0 1 1 11,31 A 10 10 0 1 1 31 31 z"
374 transform="scale(2.6667,2.667)"
375 style="color:#000000;fill:#72a0cf;fill-opacity:0.30120485;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
376 id="path3519" />
377 <rect
378 width="8.3139791"
379 height="46.050308"
380 ry="2.9566638"
381 x="-56.911964"
382 y="108.47866"
383 transform="matrix(0.3823627,-0.9240123,0.9041292,0.4272591,0,0)"
384 style="color:#000000;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.66845894;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
385 id="rect3521" />
386 </g>
387 </svg>
0 .highlight table td{padding:5px}.highlight table pre{margin:0}.highlight .cm{color:#777772;font-style:italic}.highlight .cp{color:#797676;font-weight:bold}.highlight .c1{color:#777772;font-style:italic}.highlight .cs{color:#797676;font-weight:bold;font-style:italic}.highlight .c,.highlight .cd{color:#777772;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .gd{color:#000000;background-color:#ffdddd}.highlight .ge{color:#000000;font-style:italic}.highlight .gr{color:#aa0000}.highlight .gh{color:#797676}.highlight .gi{color:#000000;background-color:#ddffdd}.highlight .go{color:#888888}.highlight .gp{color:#555555}.highlight .gs{font-weight:bold}.highlight .gu{color:#aaaaaa}.highlight .gt{color:#aa0000}.highlight .kc{color:#000000;font-weight:bold}.highlight .kd{color:#000000;font-weight:bold}.highlight .kn{color:#000000;font-weight:bold}.highlight .kp{color:#000000;font-weight:bold}.highlight .kr{color:#000000;font-weight:bold}.highlight .kt{color:#445588;font-weight:bold}.highlight .k,.highlight .kv{color:#000000;font-weight:bold}.highlight .mf{color:#009999}.highlight .mh{color:#009999}.highlight .il{color:#009999}.highlight .mi{color:#009999}.highlight .mo{color:#009999}.highlight .m,.highlight .mb,.highlight .mx{color:#009999}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .s{color:#d14}.highlight .na{color:#008080}.highlight .bp{color:#797676}.highlight .nb{color:#0086B3}.highlight .nc{color:#445588;font-weight:bold}.highlight .no{color:#008080}.highlight .nd{color:#3c5d5d;font-weight:bold}.highlight .ni{color:#800080}.highlight .ne{color:#990000;font-weight:bold}.highlight .nf{color:#990000;font-weight:bold}.highlight .nl{color:#990000;font-weight:bold}.highlight .nn{color:#555555}.highlight .nt{color:#000080}.highlight .vc{color:#008080}.highlight .vg{color:#008080}.highlight .vi{color:#008080}.highlight .nv{color:#008080}.highlight .ow{color:#000000;font-weight:bold}.highlight .o{color:#000000;font-weight:bold}.highlight .w{color:#bbbbbb}.highlight{background-color:#f8f8f8}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}body{box-sizing:border-box;color:#373737;background:#212121;font-size:16px;font-family:'Myriad Pro', Calibri, Helvetica, Arial, sans-serif;line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3,h4,h5,h6{margin:10px 0;font-weight:700;color:#222222;font-family:'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif;letter-spacing:-1px}h1{font-size:36px;font-weight:700}h2{padding-bottom:10px;font-size:32px;background:url("bg_hr.png") repeat-x bottom}h3{font-size:24px}h4{font-size:21px}h5{font-size:18px}h6{font-size:16px}p{margin:10px 0 15px 0}footer p{color:#f2f2f2}a{text-decoration:none;color:#0F79D0;text-shadow:none;transition:color 0.5s ease;transition:text-shadow 0.5s ease;-webkit-transition:color 0.5s ease;-webkit-transition:text-shadow 0.5s ease;-moz-transition:color 0.5s ease;-moz-transition:text-shadow 0.5s ease;-o-transition:color 0.5s ease;-o-transition:text-shadow 0.5s ease;-ms-transition:color 0.5s ease;-ms-transition:text-shadow 0.5s ease}a:hover,a:focus{text-decoration:underline}footer a{color:#F2F2F2;text-decoration:underline}em,cite{font-style:italic}strong{font-weight:bold}img{position:relative;margin:0 auto;max-width:739px;padding:5px;margin:10px 0 10px 0;border:1px solid #ebebeb;box-shadow:0 0 5px #ebebeb;-webkit-box-shadow:0 0 5px #ebebeb;-moz-box-shadow:0 0 5px #ebebeb;-o-box-shadow:0 0 5px #ebebeb;-ms-box-shadow:0 0 5px #ebebeb}p img{display:inline;margin:0;padding:0;vertical-align:middle;text-align:center;border:none}pre,code{color:#222;background-color:#fff;font-family:Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;font-size:0.875em;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}pre{padding:10px;box-shadow:0 0 10px rgba(0,0,0,0.1);overflow:auto}code{padding:3px;margin:0 3px;box-shadow:0 0 10px rgba(0,0,0,0.1)}pre code{display:block;box-shadow:none}blockquote{color:#666;margin-bottom:20px;padding:0 0 0 20px;border-left:3px solid #bbb}ul,ol,dl{margin-bottom:15px}ul{list-style-position:inside;list-style:disc;padding-left:20px}ol{list-style-position:inside;list-style:decimal;padding-left:20px}dl dt{font-weight:bold}dl dd{padding-left:20px;font-style:italic}dl p{padding-left:20px;font-style:italic}hr{height:1px;margin-bottom:5px;border:none;background:url("bg_hr.png") repeat-x center}table{border:1px solid #373737;margin-bottom:20px;text-align:left}th{font-family:'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif;padding:10px;background:#373737;color:#fff}td{padding:10px;border:1px solid #373737}form{background:#f2f2f2;padding:20px}kbd{background-color:#fafbfc;border:1px solid #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5;color:#444d56;display:inline-block;font-size:11px;line-height:11px;padding:3px 5px;vertical-align:middle}.outer{width:100%}.inner{position:relative;max-width:640px;padding:20px 10px;margin:0 auto}#forkme_banner{display:block;position:absolute;top:0;right:10px;z-index:10;padding:10px 50px 10px 10px;color:#fff;background:url("blacktocat.png") #0090ff no-repeat 95% 50%;font-weight:700;box-shadow:0 0 10px rgba(0,0,0,0.5);border-bottom-left-radius:2px;border-bottom-right-radius:2px}#header_wrap{background:#212121;background:-moz-linear-gradient(top, #373737, #212121);background:-webkit-linear-gradient(top, #373737, #212121);background:-ms-linear-gradient(top, #373737, #212121);background:-o-linear-gradient(top, #373737, #212121);background:linear-gradient(to top, #373737, #212121)}#header_wrap .inner{padding:50px 10px 30px 10px}#project_title{margin:0;color:#fff;font-size:42px;font-weight:700;text-shadow:#111 0px 0px 10px}#project_tagline{color:#fff;font-size:24px;font-weight:300;background:none;text-shadow:#111 0px 0px 10px}#downloads{position:absolute;width:210px;z-index:10;bottom:-40px;right:0;height:70px;background:url("icon_download.png") no-repeat 0% 90%}.zip_download_link{display:block;float:right;width:90px;height:70px;text-indent:-5000px;overflow:hidden;background:url(sprite_download.png) no-repeat bottom left}.tar_download_link{display:block;float:right;width:90px;height:70px;text-indent:-5000px;overflow:hidden;background:url(sprite_download.png) no-repeat bottom right;margin-left:10px}.zip_download_link:hover{background:url(sprite_download.png) no-repeat top left}.tar_download_link:hover{background:url(sprite_download.png) no-repeat top right}#main_content_wrap{background:#f2f2f2;border-top:1px solid #111;border-bottom:1px solid #111}#main_content{padding-top:40px}#footer_wrap{background:#212121}@media screen and (max-width: 992px){img{max-width:100%}}@media screen and (max-width: 480px){body{font-size:14px}#downloads{display:none}.inner{min-width:320px;max-width:480px}#project_title{font-size:32px}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:18px}h5{font-size:14px}h6{font-size:12px}code,pre{font-size:11px}}@media screen and (max-width: 320px){body{font-size:14px}#downloads{display:none}.inner{min-width:240px;max-width:320px}#project_title{font-size:28px}h1{font-size:24px}h2{font-size:21px}h3{font-size:18px}h4{font-size:16px}h5{font-size:14px}h6{font-size:12px}code,pre{min-width:240px;max-width:320px;font-size:11px}}
0 /*.RELEASE_COMMIT
1 /*.RELEASE_COMMIT_SHORT
2 /*.RELEASE_DATE
3 /*.RELEASE_FILENAME
4 /*.tar.gz
5 /*.zip
0
1 <!DOCTYPE html>
2 <html lang="en-US">
3
4 <!--
5 | Theme based on GitHub Pages slate theme
6 |
7 | @see https://github.com/pages-themes/slate
8 | @see https://github.com/pages-themes/slate/blob/master/LICENSE
9 -->
10
11 <head>
12 <meta charset='utf-8'>
13 <meta http-equiv="X-UA-Compatible" content="IE=edge">
14 <meta name="viewport" content="width=device-width,maximum-scale=2">
15 <link rel="stylesheet" type="text/css" media="screen" href="/assets/slate-style.css?v=a185c0dde883863779be4856421ba0b2390f44a4">
16
17 <title>gerbv - A Free/Open Source Gerber Viewer</title>
18 <meta name="description" content="Gerbv is a viewer for Gerber RS-274X files, Excellon drill files, and CSV pick-and-place files." />
19 </head>
20
21 <body>
22
23 <!-- HEADER -->
24 <div id="header_wrap" class="outer">
25 <header class="inner">
26
27 <a id="forkme_banner" href="https://github.com/gerbv/gerbv">View on GitHub</a>
28
29 <img src="assets/gerbv.svg" style="float: left; box-shadow: none; border: none; padding-right: 2em" />
30 <h1 id="project_title">gerbv</h1>
31 <h2 id="project_tagline">A Free/Open Source Gerber Viewer</h2>
32
33 <section id="downloads">
34 <a class="zip_download_link" href="https://github.com/gerbv/gerbv/zipball/main">Download this project as a .zip file</a>
35 <a class="tar_download_link" href="https://github.com/gerbv/gerbv/tarball/main">Download this project as a tar.gz file</a>
36 </section>
37
38 </header>
39 </div>
40
41 <!-- MAIN CONTENT -->
42 <div id="main_content_wrap" class="outer">
43 <section id="main_content" class="inner">
44
45 <h2>Overview</h2>
46
47 <ul>
48 <li>Gerbv is a viewer for Gerber RS-274X files, Excellon drill files, and CSV pick-and-place files.</li>
49 <li>Gerbv is a native Linux application, and it runs on many common UNIX platforms. A Windows version is also available.</li>
50 <li>Gerbv is <a href="http://www.gnu.org/philosophy/free-sw.html">free</a> / <a href="http://www.opensource.org/docs/osd">open-source</a> software.</li>
51 <li>The core functionality of gerbv is located in a separate library (<a href="doc">libgerbv</a>), allowing developers to include Gerber parsing/editing/exporting/rendering into other programs</li>
52 <li>Gerbv was originally developed as one of the utilities affiliated with the <a href="http://www.geda-project.org/">gEDA project</a>, an umbrella organization dedicated to producing free software tools for electronic design.</li>
53 </ul>
54
55
56 <h2>Download</h2>
57
58 <p>No official releases have been published yet, however you can download the latest binaries for various platforms here. Be aware however that they are not manually verified!</p>
59
60 <table style="width: 100%">
61 <tr>
62 <th>OS</th>
63 <th>Build date</th>
64 <th>Source</th>
65 <th>Download</th>
66 </tr>
67 <tr>
68 <td style="vertical-align: middle"><img src="assets/Fedora_icon_(2021).svg" alt="Fedora 34" title="Fedora 34" style="height: 100px; box-shadow: none; border: none" /></td>
69 <td style="vertical-align: middle">include(ci/Fedora 34.RELEASE_DATE)</td>
70 <td style="vertical-align: middle"><code><a href="https://github.com/gerbv/gerbv/tree/include(ci/Fedora 34.RELEASE_COMMIT)">include(ci/Fedora 34.RELEASE_COMMIT_SHORT)</a></code></td>
71 <td style="vertical-align: middle"><a class="tar_download_link" href="ci/include(ci/Fedora 34.RELEASE_FILENAME)">Download Fedora 34 binaries</a></td>
72 </tr>
73 <tr>
74 <td style="vertical-align: middle"><img src="assets/cof_orange_hex.png" alt="Ubuntu 20.04" title="Ubuntu 20.04" style="height: 100px; box-shadow: none; border: none" /></td>
75 <td style="vertical-align: middle">include(ci/Ubuntu 20.04.RELEASE_DATE)</td>
76 <td style="vertical-align: middle"><code><a href="https://github.com/gerbv/gerbv/tree/include(ci/Ubuntu 20.04.RELEASE_COMMIT)">include(ci/Ubuntu 20.04.RELEASE_COMMIT_SHORT)</a></code></td>
77 <td style="vertical-align: middle"><a class="tar_download_link" href="ci/include(ci/Ubuntu 20.04.RELEASE_FILENAME)">Download Ubuntu 20.04 binaries</a></td>
78 </tr>
79 <tr>
80 <td style="vertical-align: middle"><img src="assets/Windows_10_Logo.png" alt="Windows amd64" title="Windows amd64" style="height: 100px; box-shadow: none; border: none" /></td>
81 <td style="vertical-align: middle">include(ci/Windows amd64.RELEASE_DATE)</td>
82 <td style="vertical-align: middle"><code><a href="https://github.com/gerbv/gerbv/tree/include(ci/Windows amd64.RELEASE_COMMIT)">include(ci/Windows amd64.RELEASE_COMMIT_SHORT)</a></code></td>
83 <td style="vertical-align: middle"><a class="zip_download_link" href="ci/include(ci/Windows amd64.RELEASE_FILENAME)">Download Windows amd64 binaries</a></td>
84 </tr>
85 </table>
86
87 </section>
88 </div>
89
90 <!-- FOOTER -->
91 <div id="footer_wrap" class="outer">
92 <footer class="inner">
93
94 <p class="copyright">Slate theme maintained by <a href="https://github.com/pages-themes">pages-themes</a></p>
95 </footer>
96 </div>
97 </body>
98 </html>
99
198198
199199 /* Update the last folder */
200200 g_free (mainProject->path);
201 mainProject->path = project_filename;
201 mainProject->path = g_strdup(project_filename);
202202
203203 gerbv_unload_all_layers (mainProject);
204204 main_open_project_from_filename (mainProject, project_filename);
438438 {
439439 gint i, filecount, img;
440440 gerbv_image_t *out;
441 gerbv_layertype_t layertype;
441442 struct l_image_info {
442443 gerbv_image_t *image;
443444 gerbv_user_transformation_t *transform;
445446
446447 images=(struct l_image_info *)g_new0(struct l_image_info,1);
447448 out = NULL;
448 switch(type){
449 case CALLBACKS_SAVE_FILE_DRILLM:
450 type=GERBV_LAYERTYPE_DRILL;
451 break;
452 case CALLBACKS_SAVE_FILE_RS274XM:
453 type=GERBV_LAYERTYPE_RS274X;
454 break;
455 default:
456 GERB_COMPILE_ERROR(_("Unknown Layer type for merge"));
457 goto err;
449 switch(type) {
450 case CALLBACKS_SAVE_FILE_DRILLM:
451 layertype = GERBV_LAYERTYPE_DRILL;
452 break;
453 case CALLBACKS_SAVE_FILE_RS274XM:
454 layertype = GERBV_LAYERTYPE_RS274X;
455 break;
456 default:
457 GERB_COMPILE_ERROR(_("Unknown Layer type for merge"));
458 goto err;
458459 }
459460 dprintf("Looking for matching files\n");
460461 for (i = img = filecount = 0; i < mainProject->max_files; ++i) {
461462 if (mainProject->file[i] && mainProject->file[i]->isVisible &&
462 (mainProject->file[i]->image->layertype == type)) {
463 (mainProject->file[i]->image->layertype == layertype)) {
463464 ++filecount;
464465 dprintf("Adding '%s'\n", mainProject->file[i]->name);
465466 images[img].image=mainProject->file[i]->image;
501502 for (int i = 0; i < mainProject->max_files; ++i) {
502503 if (mainProject->file[i]
503504 && mainProject->file[i]->isVisible
504 && (layer_type == -1 || layer_type ==
505 mainProject->file[i]->image->layertype)) {
506
505 && (layer_type == (gerbv_layertype_t)-1
506 || layer_type == mainProject->file[i]->image->layertype)) {
507507 if (first_vis_file == NULL) {
508508 first_vis_file = mainProject->file[i];
509509 /* Always directory of first visible file */
18691869 "Version %s\n"
18701870 "Compiled on %s at %s\n"
18711871 "\n"
1872 "Gerbv is part of the gEDA Project.\n"
1872 "Gerbv was originally developed as part of the gEDA Project "
1873 "but is now seperatly maintained.\n"
18731874 "\n"
18741875 "For more information see:\n"
1875 " gEDA homepage: http://geda-project.org/\n"
1876 " gEDA Wiki: http://wiki.geda-project.org/"),
1876 " gerbv homepage: https://gerbv.github.io/\n"
1877 " gerbv repository: https://github.com/gerbv/gerbv"),
18771878 VERSION, __DATE__, __TIME__);
18781879
18791880 #if GTK_CHECK_VERSION(2,6,0)
19151916 a[i] = _(authors_string_array[i]);
19161917
19171918 gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG (aboutdialog1), (const gchar **)a);
1918 gtk_about_dialog_set_website(GTK_ABOUT_DIALOG (aboutdialog1), "http://gerbv.geda-project.org/");
1919 gtk_about_dialog_set_website(GTK_ABOUT_DIALOG (aboutdialog1), "https://gerbv.github.io/");
19191920 g_free(a);
19201921
19211922 g_signal_connect (G_OBJECT(aboutdialog1),"response",
27672768 }
27682769
27692770 open_files(fns);
2770 g_slist_free(fns);
2771 g_slist_free_full(fns, g_free);
27712772 g_strfreev(uris);
27722773
27732774 return TRUE;
28592860 GtkTreeIter iter;
28602861 GtkTreeSelection *selection;
28612862 gint oldSelectedRow;
2862 int i;
28632863
28642864 if (screen.win.treeIsUpdating)
28652865 return;
29812981 gtk_widget_set_sensitive (screen.win.curLayerMenuItem, showItems);
29822982 gtk_widget_set_sensitive (screen.win.curAnalyzeMenuItem, showItems);
29832983 gtk_widget_set_sensitive (screen.win.curEditMenuItem, showItems);
2984 for (i = 0; i < sizeof(screen.win.curFileMenuItem)/
2985 sizeof(screen.win.curFileMenuItem[0]); i++) {
2984 for (unsigned int i = 0;
2985 i < G_N_ELEMENTS(screen.win.curFileMenuItem); i++) {
29862986 gtk_widget_set_sensitive (screen.win.curFileMenuItem[i], showItems);
29872987 }
29882988 screen.win.treeIsUpdating = FALSE;
39063906 /* --------------------------------------------------------- */
39073907 void
39083908 callbacks_sidepane_render_type_combo_box_changed (GtkComboBox *widget, gpointer user_data) {
3909 int type = gtk_combo_box_get_active (widget);
3909 gerbv_render_types_t type = gtk_combo_box_get_active (widget);
39103910
39113911 dprintf ("%s(): type = %d\n", __FUNCTION__, type);
39123912
39203920 /* --------------------------------------------------------- */
39213921 void
39223922 callbacks_viewmenu_rendertype_changed (GtkCheckMenuItem *widget, gpointer user_data) {
3923 gint type = GPOINTER_TO_INT(user_data);
3923 gerbv_render_types_t type = GPOINTER_TO_INT(user_data);
39243924
39253925 if (type == screenRenderInfo.renderType)
39263926 return;
39343934 /* --------------------------------------------------------- */
39353935 void
39363936 callbacks_viewmenu_units_changed (GtkCheckMenuItem *widget, gpointer user_data) {
3937 gint unit = GPOINTER_TO_INT(user_data);
3937 gerbv_gui_unit_t unit = GPOINTER_TO_INT(user_data);
39383938
39393939 if (unit < 0 || unit == screen.unit)
39403940 return;
39473947 /* --------------------------------------------------------- */
39483948 void
39493949 callbacks_statusbar_unit_combo_box_changed (GtkComboBox *widget, gpointer user_data) {
3950 int unit = gtk_combo_box_get_active (widget);
3950 gerbv_gui_unit_t unit = gtk_combo_box_get_active (widget);
39513951 int force_change = GPOINTER_TO_INT (user_data);
39523952
39533953 if (!force_change && (unit < 0 || unit == screen.unit))
2525 \ingroup gerbv
2626 */
2727
28 enum {
28 typedef enum {
2929 CALLBACKS_SAVE_PROJECT_AS,
3030 CALLBACKS_SAVE_FILE_PS,
3131 CALLBACKS_SAVE_FILE_PDF,
4242
4343 } CALLBACKS_SAVE_FILE_TYPE;
4444
45 enum {
45 typedef enum {
4646 LAYER_SELECTED = -1,
4747 LAYER_ALL_ON = -2,
4848 LAYER_ALL_OFF = -3,
992992 }
993993
994994 if (drawMode == DRAW_SELECTIONS) {
995 int i;
996995 gboolean foundNet = FALSE;
997996 gerbv_selection_item_t sItem;
998997
999 for (i=0; i<selectionInfo->selectedNodeArray->len; i++){
998 for (guint i = 0; i < selectionInfo->selectedNodeArray->len; i++) {
1000999 sItem = g_array_index (selectionInfo->selectedNodeArray,
10011000 gerbv_selection_item_t, i);
10021001 if (sItem.net == net) {
119119 gerbv_selection_info_t *selectionInfo, gboolean remove)
120120 {
121121 gerbv_selection_item_t sItem;
122 gint i;
123
124 for (i = 0; i < selection_length (selectionInfo); i++) {
122
123 for (guint i = 0; i < selection_length (selectionInfo); i++) {
125124 sItem = selection_get_item_by_index (selectionInfo, i);
126125 if (sItem.net == net) {
127126 if (remove)
167167 static gerbv_HID_Attribute drill_attribute_list[] = {
168168 /* This should be first */
169169 {N_("autodetect"), N_("Try to autodetect the file format"),
170 HID_Boolean, 0, 0, {1, 0, 0}, 0, 0},
170 HID_Boolean, 0, 0, {1, 0, 0}, 0, 0, 0},
171171
172172 {N_("zero_suppression"), N_("Zero suppression"),
173 HID_Enum, 0, 0, {0, 0, 0}, suppression_list, 0},
173 HID_Enum, 0, 0, {0, 0, 0}, suppression_list, 0, 0},
174174
175175 {N_("units"), N_("Length units"),
176 HID_Enum, 0, 0, {0, 0, 0}, units_list, 0},
176 HID_Enum, 0, 0, {0, 0, 0}, units_list, 0, 0},
177177
178178 {N_("digits"), N_("Number of digits. For trailing zero suppression,"
179179 " this is the number of digits before the decimal point. "
180180 "Otherwise this is the number of digits after the decimal point."),
181 HID_Integer, 0, 20, {5, 0, 0}, 0, 0},
181 HID_Integer, 0, 20, {5, 0, 0}, 0, 0, 0},
182182
183183 #if 0
184184 {"tool_units", "Tool size units",
185 HID_Enum, 0, 0, {0, 0, 0}, units_list, 0},
185 HID_Enum, 0, 0, {0, 0, 0}, units_list, 0, 0},
186186 #endif
187187 };
188188
479479 curr_net->stop_x = state->curr_x;
480480 curr_net->stop_y = state->curr_y;
481481
482 if (state->unit == GERBV_UNIT_MM) {
483 /* Convert to inches -- internal units */
484 curr_net->stop_x /= 25.4;
485 curr_net->stop_y /= 25.4;
486 }
487
482488 r = image->aperture[state->current_tool]->parameter[0]/2;
483489
484490 /* Update boundingBox with drilled slot stop_x,y coords */
489495
490496 drill_update_image_info_min_max_from_bbox(image->info, bbox);
491497
492 if (state->unit == GERBV_UNIT_MM) {
493 /* Convert to inches -- internal units */
494 curr_net->stop_x /= 25.4;
495 curr_net->stop_y /= 25.4;
496 }
497498 curr_net->aperture_state = GERBV_APERTURE_STATE_ON;
498499
499500 break;
763764 for (c = 1 ; c <= rcnt ; c++) {
764765 state->curr_x = start_x + c*step_x;
765766 state->curr_y = start_y + c*step_y;
766 dprintf (" Repeat #%d — new location is (%g, %g)\n", c, state->curr_x, state->curr_y);
767 dprintf (" Repeat #%d - new location is (%g, %g)\n", c, state->curr_x, state->curr_y);
767768 curr_net = drill_add_drill_hole (image, state, stats, curr_net);
768769 }
769770
11191120
11201121 /* Set the current tool to the correct one */
11211122 state->current_tool = tool_num;
1123 apert = image->aperture[tool_num];
11221124
11231125 /* Check for a size definition */
11241126 temp = gerb_fgetc(fd);
11551157 "at line %ld in file \"%s\""),
11561158 size, tool_num, file_line, fd->filename);
11571159 } else {
1158 apert = image->aperture[tool_num];
11591160 if (apert != NULL) {
11601161 /* allow a redefine of a tool only if the new definition is exactly the same.
11611162 * This avoid lots of spurious complaints with the output of some cad
17731774 {
17741775 int read;
17751776 char temp[DRILL_READ_DOUBLE_SIZE];
1776 int i = 0, ndigits = 0;
1777 unsigned int i = 0, ndigits = 0;
17771778 double result;
17781779 gboolean decimal_point = FALSE;
17791780 gboolean sign_prepend = FALSE;
18071808 if (decimal_point) {
18081809 result = strtod(temp, NULL);
18091810 } else {
1810 int wantdigits;
1811 unsigned int wantdigits;
18111812 double scale;
18121813 char tmp2[DRILL_READ_DOUBLE_SIZE];
18131814
177177 for (error = input_stats->error_list; error != NULL; error = error->next) {
178178 if (error->error_text != NULL)
179179 gerbv_stats_printf(accum_stats->error_list, error->type,
180 this_layer, error->error_text);
180 this_layer, "%s", error->error_text);
181181 }
182182
183183 /* ==== Now deal with the misc header stuff ==== */
209209 error = error->next) {
210210 if (error->error_text != NULL) {
211211 gerbv_stats_printf(accum_stats->error_list, error->type,
212 this_layer, error->error_text);
212 this_layer, "%s", error->error_text);
213213 }
214214 }
215215
6161
6262 /* define all apertures */
6363 gerbv_aperture_t *aperture;
64 gint i;
6564
6665 /* the image should already have been cleaned by a duplicate_image call, so we can safely
6766 assume the aperture range is correct */
68 for (i = APERTURE_MIN; i < APERTURE_MAX; i++) {
67 for (int i = APERTURE_MIN; i < APERTURE_MAX; i++) {
6968 aperture = image->aperture[i];
7069
7170 if (!aperture)
8584 fprintf(fd, "%%\n");
8685 /* write rest of image */
8786
88 for (i = 0; i < apertureTable->len; i++) {
87 for (guint i = 0; i < apertureTable->len; i++) {
8988 int aperture_idx = g_array_index(apertureTable, int, i);
9089
9190 /* write tool change */
9393
9494 /* define all apertures */
9595 gerbv_aperture_t *currentAperture;
96 gint i;
9796
9897 /* the image should already have been cleaned by a duplicate_image call, so we can safely
9998 assume the aperture range is correct */
100 for (i=APERTURE_MIN; i<APERTURE_MAX; i++) {
99 for (int i=APERTURE_MIN; i<APERTURE_MAX; i++) {
101100 currentAperture = image->aperture[i];
102101
103102 if (!currentAperture)
119118
120119 /* write rest of image */
121120
122 for (i=0; i<apertureTable->len; i++) {
121 for (guint i=0; i<apertureTable->len; i++) {
123122 int currentAperture=g_array_index (apertureTable, int, i);
124123
125124 /* write tool change */
222222 fprintf(fd, "G04 This is an RS-274x file exported by *\n");
223223 fprintf(fd, "G04 gerbv version %s *\n",VERSION);
224224 fprintf(fd, "G04 More information is available about gerbv at *\n");
225 fprintf(fd, "G04 http://gerbv.geda-project.org/ *\n");
225 fprintf(fd, "G04 https://gerbv.github.io/ *\n");
226226 fprintf(fd, "G04 --End of header info--*\n");
227227 fprintf(fd, "%%MOIN*%%\n");
228228 fprintf(fd, "%%FSLAX36Y36*%%\n");
5858 struct stat statinfo;
5959
6060 dprintf("---> Entering gerb_fopen, filename = %s\n", filename);
61 #ifdef HAVE_SYS_MMAN_H
61
6262 fd = g_new(gerb_file_t, 1);
6363 if (fd == NULL) {
6464 return NULL;
6565 }
6666
6767 dprintf(" Doing fopen\n");
68 fd->fd = fopen(filename, "r");
68 /* fopen() can't open files with non ASCII filenames on windows */
69 fd->fd = g_fopen(filename, "rb");
6970 if (fd->fd == NULL) {
7071 g_free(fd);
7172 return NULL;
9596 errno = EIO; /* More compatible with the world outside Linux */
9697 return NULL;
9798 }
99
100 #ifdef HAVE_SYS_MMAN_H
98101
99102 dprintf(" Doing mmap\n");
100103 fd->datalen = (int)statinfo.st_size;
105108 g_free(fd);
106109 fd = NULL;
107110 }
111
108112 #else
109113 /* all systems without mmap, not only MINGW32 */
110 fd = g_new(gerb_file_t);
111 if (fd == NULL) {
112 return NULL;
113 }
114
115 /* fopen() can't open files with non ASCII filenames on windows */
116 fd->fd = g_fopen(filename, "rb");
117 if (fd->fd == NULL) {
118 g_free(fd);
119 return NULL;
120 }
121 fd->ptr = 0;
122 fd->fileno = fileno(fd->fd);
123 if (fstat(fd->fileno, &statinfo) < 0) {
124 fclose(fd->fd);
125 g_free(fd);
126 return NULL;
127 }
128 if (!S_ISREG(statinfo.st_mode)) {
129 fclose(fd->fd);
130 g_free(fd);
131 errno = EISDIR;
132 return NULL;
133 }
134 if ((int)statinfo.st_size == 0) {
135 fclose(fd->fd);
136 g_free(fd);
137 errno = EIO; /* More compatible with the world outside Linux */
138 return NULL;
139 }
114
115 dprintf(" Doing calloc\n");
140116 fd->datalen = (int)statinfo.st_size;
141117 fd->data = calloc(1, statinfo.st_size + 1);
142118 if (fd->data == NULL) {
151127 return NULL;
152128 }
153129 rewind (fd->fd);
130
154131 #endif
155132
156133 dprintf("<--- Leaving gerb_fopen\n");
336313 /*
337314 * Build complete path (inc. filename) and check if file exists.
338315 */
339 complete_path = (char *)g_malloc(strlen(curr_path) + strlen(filename) + 2);
316 complete_path = g_build_filename(curr_path, filename, NULL);
340317 if (complete_path == NULL)
341318 return NULL;
342 strcpy(complete_path, curr_path);
343 complete_path[strlen(curr_path)] = G_DIR_SEPARATOR;
344 complete_path[strlen(curr_path) + 1] = '\0';
345 strncat(complete_path, filename, strlen(filename));
346319
347320 if (paths[i][0] == '$') {
348321 g_free(curr_path);
172172 gerbv_layer_t *tempLayer = layer;
173173
174174 layer = layer->next;
175 g_free (tempLayer->name);
175176 g_free (tempLayer);
176177 }
177178 for (state = image->states; state != NULL; ) {
294295 while (net){
295296 printf(_("(%f,%f)->(%f,%f) with %d ("), net->start_x, net->start_y,
296297 net->stop_x, net->stop_y, net->aperture);
297 printf(_(gerbv_interpolation_name(net->interpolation)));
298 printf("%s", _(gerbv_interpolation_name(net->interpolation)));
298299 gerbv_image_aperture_state(net->aperture_state);
299300 printf(")\n");
300301 net = net->next;
311312 previousLayer->next = newLayer;
312313 /* clear this boolean so we only draw the knockout once */
313314 newLayer->knockout.firstInstance = FALSE;
315 newLayer->name = NULL;
314316 newLayer->next = NULL;
315317
316318 return newLayer;
401403 err_unknown_macro_aperture = 0,
402404 err_rotate_oval = 0,
403405 err_rotate_rect = 0;
404 guint i;
405406
406407 if (trans && (trans->mirrorAroundX || trans->mirrorAroundY)) {
407408 if (sourceImage->layertype != GERBV_LAYERTYPE_DRILL) {
428429
429430 trans_apers = g_new (int, aper_last_id + 1);
430431 /* Initialize trans_apers array */
431 for (i = 0; i < aper_last_id + 1; i++)
432 for (int i = 0; i < aper_last_id + 1; i++)
432433 trans_apers[i] = -1;
433434 }
434435
475476
476477 /* Check if we need to translate the aperture number */
477478 if (translationTable) {
478 for (i = 0; i < translationTable->len; i++) {
479 for (guint i = 0; i < translationTable->len; i++) {
479480 gerb_translation_entry_t translationEntry;
480481
481482 translationEntry =
703704 break;
704705
705706 case GERBV_APTYPE_MACRO_OUTLINE:
706 for (i = 0; i < 1 + sam->parameter[
707 for (int i = 0; i < 1 + sam->parameter[
707708 OUTLINE_NUMBER_OF_POINTS]; i++) {
708709 sam->parameter[OUTLINE_X_IDX_OF_POINT(i)] *=
709710 trans->scaleX;
12141215 gboolean
12151216 gerbv_image_reduce_area_of_selected_objects (GArray *selectionArray,
12161217 gdouble areaReduction, gint paneRows, gint paneColumns, gdouble paneSeparation){
1217 int i;
12181218 gdouble minX,minY,maxX,maxY;
12191219
1220 for (i=0; i<selectionArray->len; i++) {
1220 for (guint i=0; i<selectionArray->len; i++) {
12211221 gerbv_selection_item_t sItem = g_array_index (selectionArray,gerbv_selection_item_t, i);
12221222 gerbv_image_t *image = sItem.image;
12231223 gerbv_net_t *currentNet = sItem.net;
13101310
13111311 gboolean
13121312 gerbv_image_move_selected_objects (GArray *selectionArray, gdouble translationX,
1313 gdouble translationY) {
1314 int i;
1315
1316 for (i=0; i<selectionArray->len; i++) {
1313 gdouble translationY)
1314 {
1315 for (guint i=0; i<selectionArray->len; i++) {
13171316 gerbv_selection_item_t sItem = g_array_index (selectionArray,gerbv_selection_item_t, i);
13181317 gerbv_net_t *currentNet = sItem.net;
13191318
559559 } else if (gerber_is_rs274d_p(fd)) {
560560 gchar *str = g_strdup_printf(_("Most likely found a RS-274D file "
561561 "\"%s\" ... trying to open anyways\n"), filename);
562 dprintf(str);
563 g_warning(str);
562 dprintf("%s", str);
563 g_warning("%s", str);
564564 g_free (str);
565565
566566 if (!foundBinary || forceLoadFile) {
5757
5858 For help with using the standalone Gerbv software, please refer to the man page
5959 (using the command "man gerbv") or go to the Gerbv homepage for documentation
60 (http://gerbv.geda-project.org).
60 (https://gerbv.github.io/).
6161
6262 */
6363
6464 #ifndef __GERBV_H__
6565 #define __GERBV_H__
66
67 #if defined(__cplusplus)
68 extern "C" {
69 #endif
7066
7167 #ifdef HAVE_CONFIG_H
7268 # include "config.h"
7975
8076 #ifndef RENDER_USING_GDK
8177 # include <cairo.h>
78 #endif
79
80 #if defined(__cplusplus)
81 extern "C" {
8282 #endif
8383
8484 #define APERTURE_MIN 10
0 /** \file icons.h
1 \brief XPM info for the toolbar button icons
2 \ingroup gerbv
3 */
4
5 /* ------------------- Zoom tool icon -------------------------- */
6 /* GdkPixbuf RGBA C-Source image dump */
7 #ifdef __SUNPRO_C
8 #pragma align 4 (lzoom)
9 #endif
10 #ifdef __GNUC__
11 static const guint8 lzoom[] __attribute__ ((__aligned__ (4))) =
12 #else
13 static const guint8 lzoom[] =
14 #endif
0 #include <gdk-pixbuf/gdk-pixbuf.h>
1
2 typedef struct icon {
3 GdkColorspace colorspace;
4 gboolean has_alpha;
5 int bits_per_sample;
6 int width;
7 int height;
8 int rowstride;
9 const guchar *data;
10 } icon;
11
12 static const guchar lzoom_data[] =
1513 { ""
16 /* Pixbuf magic (0x47646b50) */
17 "GdkP"
18 /* length: header (24) + pixel_data (2304) */
19 "\0\0\11\30"
20 /* pixdata_type (0x1010002) */
21 "\1\1\0\2"
22 /* rowstride (96) */
23 "\0\0\0`"
24 /* width (24) */
25 "\0\0\0\30"
26 /* height (24) */
27 "\0\0\0\30"
28 /* pixel_data: */
2914 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0IIIN444\243---\335))"
3015 ")\373&&&\373&&&\335&&&\243555N\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
3116 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
119104 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
120105 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
121106
107 static const icon lzoom = {
108 .colorspace = GDK_COLORSPACE_RGB,
109 .has_alpha = 1,
110 .bits_per_sample = 8,
111 .width = 24,
112 .height = 24,
113 .rowstride = 96,
114 .data = lzoom_data,
115 };
122116
123117 /* ------------------- Measure tool icon ------------------- */
124118 /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
127121 ver. 1.8.0-1~bpo70+. This theme has been made by Rowen_Stipe based on
128122 Faenza and Faience icon themes by ~Tiheum. */
129123
130 #ifdef __SUNPRO_C
131 #pragma align 4 (ruler)
132 #endif
133 #ifdef __GNUC__
134 static const guint8 ruler[] __attribute__ ((__aligned__ (4))) =
135 #else
136 static const guint8 ruler[] =
137 #endif
124 static const guchar ruler_data[] =
138125 { ""
139 /* Pixbuf magic (0x47646b50) */
140 "GdkP"
141 /* length: header (24) + pixel_data (1689) */
142 "\0\0\6\261"
143 /* pixdata_type (0x2010002) */
144 "\2\1\0\2"
145 /* rowstride (96) */
146 "\0\0\0`"
147 /* width (24) */
148 "\0\0\0\30"
149 /* height (24) */
150 "\0\0\0\30"
151 /* pixel_data: */
152 "\233\377\377\377\0\1\0\0\0\7\220\0\0\0\15\1\0\0\0\7\205\377\377\377\0"
153 "\24\311\277e`\356\343\205\337\363\350\215\377\363\351\217\377\363\351"
154 "\222\377\363\351\225\377\364\352\227\377\364\352\231\377\364\353\233"
155 "\377\364\353\235\377\365\354\237\377\365\354\240\377\365\354\241\377"
156 "\365\355\244\377\365\355\246\377\366\355\250\377\366\356\252\377\366"
157 "\356\254\377\362\352\243\346\322\312~k\203\377\377\377\0\12\0\0\0\11"
158 "\352\335z\340\355\337_\377\357\342k\377\361\344z\377\360\344{\377\361"
159 "\345\201\377\361\346\201\377\361\347\205\377\362\347\205\377\202\362"
160 "\350\212\377\12\363\351\217\377\363\350\217\377\363\351\224\377\364\351"
161 "\223\377\364\352\230\377\364\352\227\377\364\353\231\377\364\353\236"
162 "\377\360\346\236\350\0\0\0\11\202\377\377\377\0\26\0\0\0\20\360\344{"
163 "\377\352\333L\377\357\343u\377\214|\"\377\361\345\200\377\214|$\377\361"
164 "\346\205\377\214|%\377\362\347\212\377\214}'\377\362\350\216\377\215"
165 "}(\377\363\351\223\377\215})\377\364\352\227\377\215~*\377\363\352\231"
166 "\377\215}*\377\363\352\231\377\365\355\244\377\0\0\0\20\202\377\377\377"
167 "\0\26\0\0\0\21\357\342u\377\353\331L\377\360\343v\377\206u\34\377\361"
168 "\345\202\377\206u\35\377\362\347\207\377\206v\36\377\362\350\214\377"
169 "\206v\40\377\362\350\220\377\206v\40\377\363\351\225\377\206v\"\377\363"
170 "\352\231\377\206v\"\377\364\352\232\377\206v\"\377\364\351\231\377\364"
171 "\353\240\377\0\0\0\21\202\377\377\377\0\26\0\0\0\22\356\340m\377\352"
172 "\330I\377\357\342u\377~m\26\377\361\345\201\377~m\27\377\361\345\206"
173 "\377\177m\30\377\361\346\213\377\177n\31\377\362\347\217\377\177n\32"
174 "\377\363\351\224\377\177n\32\377\363\351\230\377\177n\33\377\363\351"
175 "\232\377\177n\33\377\363\351\226\377\363\352\232\377\0\0\0\22\202\377"
176 "\377\377\0\26\0\0\0\24\355\337e\377\351\327E\377\356\341s\377xf\17\377"
177 "\360\344~\377xg\20\377\361\345\204\377xg\21\377\361\346\210\377xg\21"
178 "\377\361\346\215\377xg\22\377\362\350\221\377xg\22\377\363\351\225\377"
179 "xg\23\377\362\351\230\377xg\23\377\362\351\224\377\362\350\225\377\0"
180 "\0\0\24\202\377\377\377\0\26\0\0\0\25\352\334]\377\346\326@\377\355\340"
181 "o\377p_\11\377\356\343{\377p_\11\377\357\344\201\377p_\12\377\357\345"
182 "\205\377p_\12\377\360\346\211\377p_\12\377\361\346\215\377p_\13\377\361"
183 "\350\222\377p_\13\377\362\350\225\377p_\13\377\361\350\221\377\360\346"
184 "\216\377\0\0\0\25\202\377\377\377\0\26\0\0\0\26\351\332T\377\345\324"
185 ":\377\355\337k\377jW\3\377\356\341x\377jW\3\377\356\343}\377jW\3\377"
186 "\357\344\201\377jW\3\377\357\345\206\377jW\3\377\360\346\212\377jW\3"
187 "\377\361\347\217\377jW\3\377\361\350\221\377jW\3\377\361\346\215\377"
188 "\357\345\207\377\0\0\0\26\202\377\377\377\0\26\0\0\0\27\346\327J\377"
189 "\344\3226\377\353\335h\377fT\0\377\355\341t\377\355\341x\377\355\341"
190 "w\377\356\341}\377\356\342{\377\357\343\201\377\357\342\200\377\357\344"
191 "\205\377\357\345\207\377fT\0\377\360\346\214\377\360\345\215\377\360"
192 "\346\215\377\360\345\215\377\357\343\201\377\356\342\200\377\0\0\0\27"
193 "\202\377\377\377\0\26\0\0\0\30\345\325@\377\343\3201\377\352\335d\377"
194 "fT\0\377\354\340q\377\350\330Q\377\350\331T\377\351\332W\377\351\332"
195 "Z\377\351\332\\\377\352\333`\377\352\334b\377\357\344\205\377fT\0\377"
196 "\357\345\211\377\353\337n\377\354\337o\377\353\337l\377\353\336i\377"
197 "\355\340y\377\0\0\0\30\202\377\377\377\0\26\0\0\0\32\344\3228\377\343"
198 "\320-\377\352\334a\377fT\0\377\354\336n\377\347\327N\377\350\330Q\377"
199 "\350\331T\377\351\331W\377\351\332X\377\351\331V\377\350\330R\377\354"
200 "\337q\377fT\0\377\354\336o\377\347\326H\377\346\325C\377\345\3229\377"
201 "\343\3200\377\345\324A\377\0\0\0\32\202\377\377\377\0\12\0\0\0\33\343"
202 "\3200\377\342\316)\377\351\332]\377fT\0\377\353\335k\377\346\325I\377"
203 "\346\325H\377\345\324D\377\345\324@\377\203\345\323<\377\11\351\331W"
204 "\377\352\334c\377\351\331W\377\344\323;\377\344\3229\377\343\3200\377"
205 "\342\316'\377\343\3200\377\0\0\0\33\202\377\377\377\0\6\0\0\0\34\341"
206 "\315(\377\341\314#\377\351\331Z\377fT\0\377\351\333c\377\212\344\321"
207 ":\377\6\344\3219\377\343\3206\377\342\316.\377\341\314#\377\341\315("
208 "\377\0\0\0\34\202\377\377\377\0\1\0\0\0\35\202\337\313\37\377\3\346\327"
209 "U\377fT\0\377\350\331]\377\212\342\3206\377\3\342\3205\377\342\3172\377"
210 "\340\315*\377\202\337\313\37\377\1\0\0\0\35\202\377\377\377\0\6\0\0\0"
211 "\36\335\311\27\377\336\312\34\377\343\323E\377\347\330Y\377\345\326O"
212 "\377\212\341\3174\377\6\341\3173\377\341\3160\377\337\314'\377\336\312"
213 "\34\377\335\311\27\377\0\0\0\36\202\377\377\377\0\6\0\0\0\40\333\307"
214 "\20\377\335\311\30\377\336\313#\377\340\315+\377\340\316/\377\212\340"
215 "\3160\377\6\340\316/\377\340\315+\377\336\313#\377\335\311\30\377\333"
216 "\307\20\377\0\0\0\40\202\377\377\377\0\6\0\0\0!\332\305\15\377\333\306"
217 "\23\377\335\310\34\377\336\312%\377\337\313)\377\212\337\314+\377\6\337"
218 "\313)\377\336\312%\377\335\310\34\377\333\306\23\377\332\305\15\377\0"
219 "\0\0!\202\377\377\377\0\6\0\0\0\"\332\303\12\377\333\304\16\377\334\306"
220 "\25\377\335\307\32\377\335\310\36\377\212\336\311\40\377\6\335\310\36"
221 "\377\335\307\32\377\334\306\25\377\333\304\16\377\332\303\12\377\0\0"
222 "\0\"\202\377\377\377\0\7\0\0\0\40\272\247\10\353\331\303\12\377\332\303"
223 "\13\377\332\304\16\377\333\305\20\377\333\305\21\377\210\333\305\22\377"
224 "\7\333\305\21\377\333\305\20\377\332\304\16\377\332\303\13\377\331\303"
225 "\12\377\272\247\10\353\0\0\0\40\202\377\377\377\0\12\0\0\0\10QH\2\242"
226 "\274\251\20\355\334\307\35\377\334\311\"\377\335\312%\377\337\313)\377"
227 "\337\313,\377\337\314/\377\340\3153\377\202\340\3166\377\12\340\3153"
228 "\377\337\314/\377\337\313,\377\337\313)\377\335\312%\377\334\311\"\377"
229 "\334\307\35\377\274\251\20\355QH\2\242\0\0\0\10\203\377\377\377\0\3\0"
230 "\0\0+\0\0\0{\0\0\0\243\216\0\0\0\245\3\0\0\0\243\0\0\0{\0\0\0+\232\377"
231 "\377\377\0"};
126 "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
127 "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
128 "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
129 "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
130 "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
131 "\377\377\377\0\377\377\377\0\0\0\0\7\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0"
132 "\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0"
133 "\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\15\0\0\0\7\377\377\377\0\377\377"
134 "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\311\277e`\356\343\205"
135 "\337\363\350\215\377\363\351\217\377\363\351\222\377\363\351\225\377\364"
136 "\352\227\377\364\352\231\377\364\353\233\377\364\353\235\377\365\354\237"
137 "\377\365\354\240\377\365\354\241\377\365\355\244\377\365\355\246\377\366"
138 "\355\250\377\366\356\252\377\366\356\254\377\362\352\243\346\322\312~"
139 "k\377\377\377\0\377\377\377\0\377\377\377\0\0\0\0\11\352\335z\340\355"
140 "\337_\377\357\342k\377\361\344z\377\360\344{\377\361\345\201\377\361\346"
141 "\201\377\361\347\205\377\362\347\205\377\362\350\212\377\362\350\212\377"
142 "\363\351\217\377\363\350\217\377\363\351\224\377\364\351\223\377\364\352"
143 "\230\377\364\352\227\377\364\353\231\377\364\353\236\377\360\346\236\350"
144 "\0\0\0\11\377\377\377\0\377\377\377\0\0\0\0\20\360\344{\377\352\333L\377"
145 "\357\343u\377\214|\"\377\361\345\200\377\214|$\377\361\346\205\377\214"
146 "|%\377\362\347\212\377\214}'\377\362\350\216\377\215}(\377\363\351\223"
147 "\377\215})\377\364\352\227\377\215~*\377\363\352\231\377\215}*\377\363"
148 "\352\231\377\365\355\244\377\0\0\0\20\377\377\377\0\377\377\377\0\0\0"
149 "\0\21\357\342u\377\353\331L\377\360\343v\377\206u\34\377\361\345\202\377"
150 "\206u\35\377\362\347\207\377\206v\36\377\362\350\214\377\206v\40\377\362"
151 "\350\220\377\206v\40\377\363\351\225\377\206v\"\377\363\352\231\377\206"
152 "v\"\377\364\352\232\377\206v\"\377\364\351\231\377\364\353\240\377\0\0"
153 "\0\21\377\377\377\0\377\377\377\0\0\0\0\22\356\340m\377\352\330I\377\357"
154 "\342u\377~m\26\377\361\345\201\377~m\27\377\361\345\206\377\177m\30\377"
155 "\361\346\213\377\177n\31\377\362\347\217\377\177n\32\377\363\351\224\377"
156 "\177n\32\377\363\351\230\377\177n\33\377\363\351\232\377\177n\33\377\363"
157 "\351\226\377\363\352\232\377\0\0\0\22\377\377\377\0\377\377\377\0\0\0"
158 "\0\24\355\337e\377\351\327E\377\356\341s\377xf\17\377\360\344~\377xg\20"
159 "\377\361\345\204\377xg\21\377\361\346\210\377xg\21\377\361\346\215\377"
160 "xg\22\377\362\350\221\377xg\22\377\363\351\225\377xg\23\377\362\351\230"
161 "\377xg\23\377\362\351\224\377\362\350\225\377\0\0\0\24\377\377\377\0\377"
162 "\377\377\0\0\0\0\25\352\334]\377\346\326@\377\355\340o\377p_\11\377\356"
163 "\343{\377p_\11\377\357\344\201\377p_\12\377\357\345\205\377p_\12\377\360"
164 "\346\211\377p_\12\377\361\346\215\377p_\13\377\361\350\222\377p_\13\377"
165 "\362\350\225\377p_\13\377\361\350\221\377\360\346\216\377\0\0\0\25\377"
166 "\377\377\0\377\377\377\0\0\0\0\26\351\332T\377\345\324:\377\355\337k\377"
167 "jW\3\377\356\341x\377jW\3\377\356\343}\377jW\3\377\357\344\201\377jW\3"
168 "\377\357\345\206\377jW\3\377\360\346\212\377jW\3\377\361\347\217\377j"
169 "W\3\377\361\350\221\377jW\3\377\361\346\215\377\357\345\207\377\0\0\0"
170 "\26\377\377\377\0\377\377\377\0\0\0\0\27\346\327J\377\344\3226\377\353"
171 "\335h\377fT\0\377\355\341t\377\355\341x\377\355\341w\377\356\341}\377"
172 "\356\342{\377\357\343\201\377\357\342\200\377\357\344\205\377\357\345"
173 "\207\377fT\0\377\360\346\214\377\360\345\215\377\360\346\215\377\360\345"
174 "\215\377\357\343\201\377\356\342\200\377\0\0\0\27\377\377\377\0\377\377"
175 "\377\0\0\0\0\30\345\325@\377\343\3201\377\352\335d\377fT\0\377\354\340"
176 "q\377\350\330Q\377\350\331T\377\351\332W\377\351\332Z\377\351\332\\\377"
177 "\352\333`\377\352\334b\377\357\344\205\377fT\0\377\357\345\211\377\353"
178 "\337n\377\354\337o\377\353\337l\377\353\336i\377\355\340y\377\0\0\0\30"
179 "\377\377\377\0\377\377\377\0\0\0\0\32\344\3228\377\343\320-\377\352\334"
180 "a\377fT\0\377\354\336n\377\347\327N\377\350\330Q\377\350\331T\377\351"
181 "\331W\377\351\332X\377\351\331V\377\350\330R\377\354\337q\377fT\0\377"
182 "\354\336o\377\347\326H\377\346\325C\377\345\3229\377\343\3200\377\345"
183 "\324A\377\0\0\0\32\377\377\377\0\377\377\377\0\0\0\0\33\343\3200\377\342"
184 "\316)\377\351\332]\377fT\0\377\353\335k\377\346\325I\377\346\325H\377"
185 "\345\324D\377\345\324@\377\345\323<\377\345\323<\377\345\323<\377\351"
186 "\331W\377\352\334c\377\351\331W\377\344\323;\377\344\3229\377\343\320"
187 "0\377\342\316'\377\343\3200\377\0\0\0\33\377\377\377\0\377\377\377\0\0"
188 "\0\0\34\341\315(\377\341\314#\377\351\331Z\377fT\0\377\351\333c\377\344"
189 "\321:\377\344\321:\377\344\321:\377\344\321:\377\344\321:\377\344\321"
190 ":\377\344\321:\377\344\321:\377\344\321:\377\344\321:\377\344\3219\377"
191 "\343\3206\377\342\316.\377\341\314#\377\341\315(\377\0\0\0\34\377\377"
192 "\377\0\377\377\377\0\0\0\0\35\337\313\37\377\337\313\37\377\346\327U\377"
193 "fT\0\377\350\331]\377\342\3206\377\342\3206\377\342\3206\377\342\3206"
194 "\377\342\3206\377\342\3206\377\342\3206\377\342\3206\377\342\3206\377"
195 "\342\3206\377\342\3205\377\342\3172\377\340\315*\377\337\313\37\377\337"
196 "\313\37\377\0\0\0\35\377\377\377\0\377\377\377\0\0\0\0\36\335\311\27\377"
197 "\336\312\34\377\343\323E\377\347\330Y\377\345\326O\377\341\3174\377\341"
198 "\3174\377\341\3174\377\341\3174\377\341\3174\377\341\3174\377\341\317"
199 "4\377\341\3174\377\341\3174\377\341\3174\377\341\3173\377\341\3160\377"
200 "\337\314'\377\336\312\34\377\335\311\27\377\0\0\0\36\377\377\377\0\377"
201 "\377\377\0\0\0\0\40\333\307\20\377\335\311\30\377\336\313#\377\340\315"
202 "+\377\340\316/\377\340\3160\377\340\3160\377\340\3160\377\340\3160\377"
203 "\340\3160\377\340\3160\377\340\3160\377\340\3160\377\340\3160\377\340"
204 "\3160\377\340\316/\377\340\315+\377\336\313#\377\335\311\30\377\333\307"
205 "\20\377\0\0\0\40\377\377\377\0\377\377\377\0\0\0\0!\332\305\15\377\333"
206 "\306\23\377\335\310\34\377\336\312%\377\337\313)\377\337\314+\377\337"
207 "\314+\377\337\314+\377\337\314+\377\337\314+\377\337\314+\377\337\314"
208 "+\377\337\314+\377\337\314+\377\337\314+\377\337\313)\377\336\312%\377"
209 "\335\310\34\377\333\306\23\377\332\305\15\377\0\0\0!\377\377\377\0\377"
210 "\377\377\0\0\0\0\"\332\303\12\377\333\304\16\377\334\306\25\377\335\307"
211 "\32\377\335\310\36\377\336\311\40\377\336\311\40\377\336\311\40\377\336"
212 "\311\40\377\336\311\40\377\336\311\40\377\336\311\40\377\336\311\40\377"
213 "\336\311\40\377\336\311\40\377\335\310\36\377\335\307\32\377\334\306\25"
214 "\377\333\304\16\377\332\303\12\377\0\0\0\"\377\377\377\0\377\377\377\0"
215 "\0\0\0\40\272\247\10\353\331\303\12\377\332\303\13\377\332\304\16\377"
216 "\333\305\20\377\333\305\21\377\333\305\22\377\333\305\22\377\333\305\22"
217 "\377\333\305\22\377\333\305\22\377\333\305\22\377\333\305\22\377\333\305"
218 "\22\377\333\305\21\377\333\305\20\377\332\304\16\377\332\303\13\377\331"
219 "\303\12\377\272\247\10\353\0\0\0\40\377\377\377\0\377\377\377\0\0\0\0"
220 "\10QH\2\242\274\251\20\355\334\307\35\377\334\311\"\377\335\312%\377\337"
221 "\313)\377\337\313,\377\337\314/\377\340\3153\377\340\3166\377\340\316"
222 "6\377\340\3153\377\337\314/\377\337\313,\377\337\313)\377\335\312%\377"
223 "\334\311\"\377\334\307\35\377\274\251\20\355QH\2\242\0\0\0\10\377\377"
224 "\377\0\377\377\377\0\377\377\377\0\0\0\0+\0\0\0{\0\0\0\243\0\0\0\245\0"
225 "\0\0\245\0\0\0\245\0\0\0\245\0\0\0\245\0\0\0\245\0\0\0\245\0\0\0\245\0"
226 "\0\0\245\0\0\0\245\0\0\0\245\0\0\0\245\0\0\0\245\0\0\0\245\0\0\0\243\0"
227 "\0\0{\0\0\0+\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
228 "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
229 "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
230 "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
231 "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
232 "\377\377\0\377\377\377\0"};
233
234 static const icon ruler = {
235 .colorspace = GDK_COLORSPACE_RGB,
236 .has_alpha = 1,
237 .bits_per_sample = 8,
238 .width = 24,
239 .height = 24,
240 .rowstride = 96,
241 .data = ruler_data,
242 };
232243
233244
234245 /* ------------------- Move tool icon -------------------------- */
235246 /* GdkPixbuf RGBA C-Source image dump */
236247
237 #ifdef __SUNPRO_C
238 #pragma align 4 (move)
239 #endif
240 #ifdef __GNUC__
241 static const guint8 move[] __attribute__ ((__aligned__ (4))) =
242 #else
243 static const guint8 move[] =
244 #endif
248 static const guchar move_data[] =
245249 { ""
246 /* Pixbuf magic (0x47646b50) */
247 "GdkP"
248 /* length: header (24) + pixel_data (1936) */
249 "\0\0\7\250"
250 /* pixdata_type (0x1010002) */
251 "\1\1\0\2"
252 /* rowstride (88) */
253 "\0\0\0X"
254 /* width (22) */
255 "\0\0\0\26"
256 /* height (22) */
257 "\0\0\0\26"
258 /* pixel_data: */
259250 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
260251 "\0\0\0\0\0\0\40J\207\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
261252 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
323314 "\0\0\0\2\0\0\0\2\0\0\0\3\0\0\0\3\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\1\0\0"
324315 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
325316
317 static const icon move = {
318 .colorspace = GDK_COLORSPACE_RGB,
319 .has_alpha = 1,
320 .bits_per_sample = 8,
321 .width = 22,
322 .height = 22,
323 .rowstride = 88,
324 .data = move_data,
325 };
326326
327327 /* ------------------- Pointer tool icon -------------------------- */
328328 /* GdkPixbuf RGBA C-Source image dump */
329329
330 #ifdef __SUNPRO_C
331 #pragma align 4 (pointer)
332 #endif
333 #ifdef __GNUC__
334 static const guint8 pointer[] __attribute__ ((__aligned__ (4))) =
335 #else
336 static const guint8 pointer[] =
337 #endif
330 static const guchar pointer_data[] =
338331 { ""
339 /* Pixbuf magic (0x47646b50) */
340 "GdkP"
341 /* length: header (24) + pixel_data (2304) */
342 "\0\0\11\30"
343 /* pixdata_type (0x1010002) */
344 "\1\1\0\2"
345 /* rowstride (96) */
346 "\0\0\0`"
347 /* width (24) */
348 "\0\0\0\30"
349 /* height (24) */
350 "\0\0\0\30"
351 /* pixel_data: */
352332 "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
353333 "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
354334 "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
463443 "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
464444 "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"};
465445
466
446 static const icon pointer = {
447 .colorspace = GDK_COLORSPACE_RGB,
448 .has_alpha = 1,
449 .bits_per_sample = 8,
450 .width = 24,
451 .height = 24,
452 .rowstride = 96,
453 .data = pointer_data,
454 };
7474 g_string_printf(win_title, "%s — Gerbv", basename);
7575 g_free(basename);
7676 } else {
77 g_string_printf(win_title, _(gerbv_win_title));
77 g_string_printf(win_title, "%s", _(gerbv_win_title));
7878 }
7979
8080 gtk_window_set_title(GTK_WINDOW(win), win_title->str);
143143 gtk_widget_size_request (label, &req);
144144 gtk_widget_set_size_request (label, req.width, req.height);
145145 gtk_label_set_text (GTK_LABEL (label), "");
146 }
147
148 GdkPixbuf *pixbuf_from_icon(const icon *icon)
149 {
150 return gdk_pixbuf_new_from_data(icon->data,
151 icon->colorspace,
152 icon->has_alpha,
153 icon->bits_per_sample,
154 icon->width,
155 icon->height,
156 icon->rowstride,
157 NULL, NULL);
146158 }
147159
148160 /* ---------------------------------------------- */
336348 screen.settings = g_settings_new(settings_id);
337349 }
338350
339 pointerpixbuf = gdk_pixbuf_new_from_inline(-1, pointer, FALSE, NULL);
340 movepixbuf = gdk_pixbuf_new_from_inline(-1, move, FALSE, NULL);
341 zoompixbuf = gdk_pixbuf_new_from_inline(-1, lzoom, FALSE, NULL);
342 measurepixbuf = gdk_pixbuf_new_from_inline(-1, ruler, FALSE, NULL);
351 pointerpixbuf = pixbuf_from_icon(&pointer);
352 movepixbuf = pixbuf_from_icon(&move);
353 zoompixbuf = pixbuf_from_icon(&lzoom);
354 measurepixbuf = pixbuf_from_icon(&ruler);
343355
344356 tooltips = gtk_tooltips_new();
345357 accel_group = gtk_accel_group_new ();
18001812 /* Output temporary stored log messages */
18011813 extern GArray *log_array_tmp;
18021814 struct log_struct log_item;
1803 int i;
1804
1805 for (i = 0; i < log_array_tmp->len; i++) {
1815
1816 for (guint i = 0; i < log_array_tmp->len; i++) {
18061817 log_item = g_array_index (log_array_tmp, struct log_struct, i);
18071818 callbacks_handle_log_messages (log_item.domain, log_item.level,
18081819 log_item.message, NULL);
909909 used a relative path */
910910 g_free (mainProject->path);
911911 if (!g_path_is_absolute(project_filename)) {
912 gchar *fullName = g_build_filename (g_get_current_dir (),
912 gchar *currentDir = g_get_current_dir ();
913 gchar *fullName = g_build_filename (currentDir,
913914 project_filename, NULL);
914915 main_open_project_from_filename (mainProject, fullName);
915916 mainProject->path = g_path_get_dirname (fullName);
916917 g_free (fullName);
918 g_free (currentDir);
917919 } else {
918920 main_open_project_from_filename (mainProject, project_filename);
919921 mainProject->path = g_path_get_dirname (project_filename);
923925 for(i = optind ; i < argc; i++) {
924926 g_free (mainProject->path);
925927 if (!g_path_is_absolute(argv[i])) {
926 gchar *fullName = g_build_filename (g_get_current_dir (),
928 gchar *currentDir = g_get_current_dir ();
929 gchar *fullName = g_build_filename (currentDir,
927930 argv[i], NULL);
928931 gerbv_open_layer_from_filename_with_color (mainProject, fullName,
929932 mainDefaultColors[loadedIndex % NUMBER_OF_DEFAULT_COLORS].red*257,
932935 mainDefaultColors[loadedIndex % NUMBER_OF_DEFAULT_COLORS].alpha*257);
933936 mainProject->path = g_path_get_dirname (fullName);
934937 g_free (fullName);
938 g_free (currentDir);
935939 } else {
936940 gerbv_open_layer_from_filename_with_color (mainProject, argv[i],
937941 mainDefaultColors[loadedIndex % NUMBER_OF_DEFAULT_COLORS].red*257,
538538 {
539539 gerbv_image_t *image = NULL;
540540 gerbv_net_t *curr_net = NULL;
541 int i;
542541 gerbv_transf_t *tr_rot = gerb_transf_new();
543542 gerbv_drill_stats_t *stats; /* Eventually replace with pick_place_stats */
544543 gboolean foundElement = FALSE;
546545
547546 /* step through and make sure we have an element on the layer before
548547 we actually create a new image for it and fill it */
549 for (i = 0; i < parsedPickAndPlaceData->len; i++) {
548 for (guint i = 0; i < parsedPickAndPlaceData->len; i++) {
550549 PnpPartData partData = g_array_index(parsedPickAndPlaceData, PnpPartData, i);
551550
552551 if ((boardSide == 0) && !((partData.layer[0]=='b') || (partData.layer[0]=='B')))
598597 image->aperture[0]->parameter[0] = draw_width;
599598 image->aperture[0]->nuf_parameters = 1;
600599
601 for (i = 0; i < parsedPickAndPlaceData->len; i++) {
600 for (guint i = 0; i < parsedPickAndPlaceData->len; i++) {
602601 PnpPartData partData = g_array_index(parsedPickAndPlaceData, PnpPartData, i);
603602 float radius,labelOffset;
604603
426426 init_paths (char *argv0)
427427 {
428428 size_t l;
429 int i;
430429 int haspath;
431430 char *t1, *t2;
432431 int found_bindir = 0;
443442 */
444443
445444 haspath = 0;
446 for (i = 0; i < strlen (argv0) ; i++)
445 for (unsigned int i = 0; i < strlen (argv0) ; i++)
447446 {
448447 if (argv0[i] == GERBV_DIR_SEPARATOR_C)
449448 haspath = 1;
564563 static char *
565564 convert_path_separators(char* path, int conv_flag)
566565 {
566 if (path == NULL) return NULL;
567
567568 #if defined (__MINGW32__)
568569 char *hit_in_path;
569570
2121
2222 -gdb - runs gerbv in the GDB debugger
2323
24 -valgrind - runs gerbv with the Valgrind memory checker
25
2426 -h|--help - displays this message and exits
2527
2628 -- - halts all further option processing all additional options
3739 }
3840
3941 do_gdb=no
42 do_valgrind=no
4043 while test $# -gt 0 ; do
4144 case $1 in
4245 -gdb)
4346 do_gdb=yes
47 shift
48 ;;
49
50 -valgrind)
51 do_valgrind=yes
4452 shift
4553 ;;
4654
101109 echo "Set LD_PRELOAD to ${LD_PRELOAD}"
102110
103111 GERBV=@BUILDDIR@/gerbv
112 VALGRIND=""
104113
114 if test $do_valgrind = yes ; then
115 VALGRIND="valgrind --trace-children=yes --suppressions=gerbv.supp --error-exitcode=127 --errors-for-leak-kinds=definite --leak-check=full -s --exit-on-first-error=yes --expensive-definedness-checks=yes -- "
116 fi
117
118 if [ ! -f "${GERBV}" ]; then
119 echo "${GERBV} not found"
120 exit 1
121 fi
105122 mv -f ${GERBV} ${GERBV}.orig
106123 sed \
107124 -e 's;LD_LIBRARY_PATH="/;LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/;g' \
134151 else
135152 GERBV_SCHEMEINIT="@SRCDIR@"
136153 export GERBV_SCHEMEINIT
137 exec ${GERBV} "$@"
154 exec ${VALGRIND} ${GERBV} "$@"
138155 fi
139156
1515 \brief The TinyScheme compiler
1616 \ingroup gerbv
1717 */
18
19 #include <assert.h>
1820
1921 #ifdef HAVE_CONFIG_H
2022 #include <config.h>
3739 #ifdef HAVE_UNISTD_H
3840 #include <unistd.h> /* access() on Linux */
3941 #endif
42 #include <stddef.h>
4043
4144 #if USE_STRCASECMP
4245 #include <strings.h>
567570 char *cp;
568571 long i;
569572 int k;
570 int adj=ADJ;
573 size_t adj=ADJ;
571574
572575 if(adj<sizeof(struct cell)) {
573576 adj=sizeof(struct cell);
582585 i = ++sc->last_cell_seg ;
583586 sc->alloc_seg[i] = cp;
584587 /* adjust in TYPE_BITS-bit boundary */
585 if((unsigned long)cp%adj!=0) {
586 cp=(char*)(adj*((unsigned long)cp/adj+1));
588 /* Check that the casting below is safe. */
589 static_assert(sizeof(size_t) == sizeof(cp),
590 "Can't cast pointer to size_t.");
591 if((size_t)cp%adj!=0) {
592 cp=(char*)(adj*((size_t)cp/adj+1));
587593 }
588594 /* insert new segment in address order */
589595 newp=(pointer)cp;
1010 IM_DISPLAY=${IM_DISPLAY} \
1111 IM_MONTAGE=${IM_MONTAGE}
1212
13 RUN_TESTS= run_tests.sh
13 RUN_TESTS= run_tests.sh run_valgrind_tests.sh
1414
1515 check_SCRIPTS= ${RUN_TESTS}
1616
0 {
1 ignore bash memory leaks
2 Memcheck:Leak
3 match-leak-kinds: definite
4 fun:malloc
5 fun:xmalloc
6 fun:set_default_locale
7 fun:main
8 }
0 G90
1 M72
2 M48
3 T10950C0.12345
4 %
5 G90
6 M72
7 M48
8 %
9 M30
2020 # This code was derived from code written by Dan McMahill as part of the
2121 # latex-mk testsuite. The original code was covered by a BSD license
2222 # but the copyright holder is releasing the version for gerbv under the GPL.
23
24 set -e
2325
2426 magic_test_skip=${GERBV_MAGIC_TEST_SKIP:-no}
2527
7375 OPTIONS
7476
7577 -g | --golden <dir> : Specifies that <dir> should be used for the
76 reference files.
78 reference files.
79
80 -v | --valgrind : Specifies that valgrind should check gerbv.
7781
7882 LIMITATIONS
7983
112116 regen=yes
113117 shift
114118 ;;
115
119
120 -v|--valgrind)
121 valgrind=yes
122 shift
123 ;;
124
116125 -*)
117126 echo "unknown option: $1"
118127 exit 1
128137 all_tests="$*"
129138
130139 # The gerbv executible
131 GERBV=${GERBV:-../src/run_gerbv --}
140 if test "X$valgrind" = "Xyes" ; then
141 GERBV=${GERBV:-../src/run_gerbv -valgrind --}
142 else
143 GERBV=${GERBV:-../src/run_gerbv --}
144 fi
132145 GERBV_DEFAULT_FLAGS=${GERBV_DEFAULT_FLAGS:---export=png --window=640x480}
133146
134147 # Source directory
0 #!/bin/sh
1 ./run_tests.sh --valgrind example_cslk out-of-bounds-drill-tool
193193
194194 # Test "G85" drilled slot
195195 test-drill-slot-drilled-g85 | test-drill-slot-drilled-g85.exc
196
197 # Out of bounds drill tool
198 out-of-bounds-drill-tool | test-out-of-bounds-drill-tool.exc
0 #!/bin/bash
1 #
2 # Generates gerbv version string from a given prefix and the current commit
3 # short id
4 #
5 # @warning Version will only be updated when reconfiguring! Will have no effect
6 # on incremental builds
7 #
8 # @param $1 Version prefix
9
10 set -e
11
12
13 # Validate arguments
14 PREFIX="${1}"
15
16 if [ "" == "${PREFIX}" ]; then
17 (>&2 echo "Usage: git-version-gen.sh <prefix>")
18 exit 1
19 fi
20
21
22 # Validate environment
23 GIT=`command -v git`
24
25 if [ ! -x "${GIT}" ]; then
26 (>&2 echo "\`git' missing")
27 exit 1
28 fi
29
30
31 # Get commit short id
32 RELEASE_COMMIT=`"${GIT}" rev-parse HEAD`
33 RELEASE_COMMIT_SHORT="${RELEASE_COMMIT:0:6}"
34
35
36 # Output final version
37 echo -n "${PREFIX}~${RELEASE_COMMIT_SHORT}"
38