For fun, make the first line of the awk script: #!/usr/bin/awk -f
(obviously use the path to your awk). Change the (I call it reformat.awk) script mode to executable and you can now: >./reformat.awk logo.pbm >> logo.mod And you're half way there - just edit to move the DS lines before $EndMODULE and you're done. raoul --- In [email protected], "raoulduke_esq" <raoulduke_...@...> wrote: > > OK, I suck. My first code did not properly handle the case of a line that > starts with the fg color, much less an entire line of fg color. Let's try > this again (sorry that Yahoo eats my indentation): > > ------------Cut Here------------ > # This script will take an ASCII PBM B&W file and convert it to a series > # of "DS" (Draw Segment) statements in PCBNEW syntax. The deltaX and deltaY > # is defined in "step" which is in uints of 1/10 mil. The layer is currently > # set to 21, the component layer silkscreen. Swap bg & fg based on whether > # black or white is the foreground. > # > # State 0 : look for magic number - must be P1 (can be P4 for raw file) > # State 1 : look for height & width > # State 2 : process data > # State 3 : done with data - skip the rest > # > BEGIN { state = 0; step = 40; layer = 21; fg = "1"; bg = "0"; } > {if (NR == 1) { > state = 1; > if ($1 != "P1") { > printf("Must supply an ASCII PBM image file\n"); > exit 1 > } > next; > } > } > /^#/ { next } # Comment line, skip it > {if (state == 1) { > width = $1; > height = $2; > buff = ""; > state = 2; > Y = - ((step * height) / 2); > initX = - ((step * width) / 2); > next; > } > } > {if (state == 2) { > buff = buff $1; > if (length( buff ) >= width) { > scanline = substr( buff, 1, width ); > buff = substr( buff, width + 1 ); > Y += step; > X = initX; > while ( Z1 = index( scanline, fg )) { > scanline = substr( scanline, Z1 ); > Z2 = index( scanline, bg ); > if (Z2 == 0) > Z2 = length( scanline ) + 1; > scanline = substr( scanline, Z2 ); > Z1 = step * Z1 + X; > Z2 = step * Z2 + Z1 - 2 * step; > X = Z2; > printf( "DS %d %d %d %d %d %d\n", Z1, Y, Z2, Y, step, layer ); > } > height--; > if (height == 0) > state = 3; > } > } > } > {if (state == 3) { nextfile; }} > ------------Cut Here------------ >
