#!/usr/bin/perl # # drl2gerber - Convert a KiCAD-generated Excellon drill file to Gerber # # Written 2011, 2017 by Werner Almesberger # Copyright 2011, 2017 Werner Almesberger # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # sub begin { return if $began; $began = 1; print "G04 MACHINE-GENERATED FROM DRILL FILE*\n" || die; print "G01*\n" || die; # linear Interpolation print "G70*\n" || die; # inch units print "G90*\n" || die; # absolute Mode if ($mm) { print "%MOMM*%*\n" || die; # millimeters, RS274X-style } else { print "%MOIN*%*\n" || die; # inches, RS274X-style } print "%FSLAX34Y34*%\n" || die; # format } while (<>) { chop; if (/^METRIC/) { $mm = 1; next; } if (/^T(\d+)C/) { &begin; print "%ADD", $1 + 10, "C,$'*%\n" || die; next; } if (/^T(\d+)$/) { &begin; print "G54D", $1 + 10, "*\n" || die; next; } if (/^X([-0-9.]+)Y([-0-9.]+)$/) { &begin; printf("X%dY%dD03*\n", $1 * 10000, $2 * 10000) || die; next; } if (/^X([-0-9.]+)Y([-0-9.]+)G85X([-0-9.]+)Y([-0-9.]+)$/) { &begin; printf("X%dY%dD02*\nX%dY%dD01*\n", $1 * 10000, $2 * 10000, $3 * 10000, $4 * 10000) || die; next; } } &begin; print "M02*\n" || die;