#! /usr/bin/gawk -f # Last edited on 2004-07-29 19:48:48 by stolfi BEGIN { usage = ( ARGV[0] " -v factor=NUM < IN.parms > OUT.parms" ); # Reads a parmsfile, outputs the same with the color tetrahedron # expanded by the given factor. if (factor == "") { arg_error(("must define \"factor\"")); } split("", fname); split("", r); split("", g); split("", b); split("", cmt); n = 0; } /^[ ]*[-]layer/ { if (match($0, /[ ]*[\#]/)) { cmt[n] = substr($0,RSTART); $0 = substr($0, 1, RSTART-1); } else { cmt[n] = 0; } fname[n] = $2; if ($3 != "-color") { data_error(("bad -layer fmt")); } if (NF == 6) { den = 1; } else if (NF == 8) { if ($7 != "/") { data_error(("bad -layer fmt")); } den = $8 + 0; } else { data_error(("bad -layer fmt")); } r[n] = $4/den; g[n] = $5/den; b[n] = $6/den; n++; if (n == 4) { sr = sg = sb = 0; for (i = 0; i < n; i++) { sr += r[i]; sg += g[i]; sb += b[i]; } sr /= n; sg /= n; sb /= n; den = 255; for (i = 0; i < n; i++) { r[i] = int(den*(sr + factor*(r[i] - sr)) + 0.5); g[i] = int(den*(sg + factor*(g[i] - sg)) + 0.5); b[i] = int(den*(sb + factor*(b[i] - sb)) + 0.5); if (r[i] < 0) { r[i] = 0; } if (r[i] > den) { r[i] = den; } if (g[i] < 0) { g[i] = 0; } if (g[i] > den) { g[i] = den; } if (b[i] < 0) { b[i] = 0; } if (b[i] > den) { b[i] = den; } printf "-layer %s -color %03d %03d %03d / %03d%s\n", \ fname[i], r[i], g[i], b[i], den, cmt[i]; } } next; } // { print; } END { if (n != 4) { data_error(("wrong num of layers")); } } function data_error(msg) { printf "line %d: %s\n", FNR, msg > "/dev/stderr"; abort = 1; exit 1 }