diff --git a/coraleda/subc/qr b/coraleda/subc/qr new file mode 100755 index 0000000..25d3c7e --- /dev/null +++ b/coraleda/subc/qr @@ -0,0 +1,39 @@ +#!/bin/sh + +#@@example qr(hello world, 1mm) + +#@@purpose Generate QR code on silk + +#@@desc Generate the specified QR code as silk lines +#@@params text,pixel_size,level +#@@thumbsize 2 + +#@@param:text ASCII text to encode + +#@@param:pixel_size width and height of each pixel +#@@dim:pixel_size + +#@@param:level error correction level +#@@optional:level +#@@enum:level:L low +#@@enum:level:H high +#@@default:L + +libdir="" +for n in $PCB_RND_PCBLIB/parametric `dirname $0` /usr/local/share/pcb-rnd/pcblib/parametric /usr/share/pcb-rnd/pcblib/parametric +do + if test -f "$n/common.awk" + then + libdir="$n" + break + fi +done + +if test -z "$libdir" +then + echo "pcblib/parametric/common.awk not found." >&2 + exit 1 +fi + +awk -f $libdir/common.awk -f `dirname $0`/qr.awk -v "args=$*" -v gen=`basename $0` -v "genfull=$0" + diff --git a/coraleda/subc/qr.awk b/coraleda/subc/qr.awk new file mode 100644 index 0000000..ac14108 --- /dev/null +++ b/coraleda/subc/qr.awk @@ -0,0 +1,62 @@ +function flush_line(x1, x2, y, w ,n,yy) +{ + x1/=2 + x2/=2 + for(n = 0; n < 3; n++) { + yy = y*w + w/6 + w/3 * n + element_line(x1*w + w/6, yy, x2*w - w/6, yy, w/3) + } + + element_line(x1*w + w/6, y*w + w/6, x1*w + w/6, (y+1)*w - w/6, w/3) + element_line(x2*w - w/6, y*w + w/6, x2*w - w/6, (y+1)*w - w/6, w/3) + +} + +BEGIN { + help_auto() + set_arg(P, "?pixel_size", "1mm") + + proc_args(P, "text,pixel_size,level", "text") + + pixel_size = parse_dim(P["pixel_size"]) + + element_begin("", "QR1", "qr(" P["text"] "," P["pixel_size"] "," P["level"] ")" ,0,0, 0,-mil(50)) + + print "# text=" P["text"] + cmd = "echo '" P["text"] "' | qrencode -t ASCII" + + if (P["level"] != "") { + if (tolower(P["level"]) == "h") + cmd = cmd " -l H" + else if (tolower(P["level"]) == "l") + cmd = cmd " -l L" + } + + y = 0; + while((cmd | getline line) > 0) { + line = line "-" +# print line + len = length(line) + start = "" + for(x = 1; x < len; x++) { + if (substr(line, x, 1) == "#") { + if (start == "") + start = x; + } + else { + if (start != "") { + flush_line(start, x, y, pixel_size) + start = "" + } + } + } + if (start != "") + flush_line(start, x, y, pixel_size) + y++; + } + + +# dimension(+spacing/aspect, -dia, +spacing/aspect, dia, "@" spacing*1.2 ";0", "dia") + + element_end() +}