#! /usr/bin/gawk -f # Last edited on 2003-04-18 15:40:18 by stolfi BEGIN { abort = -1; # # Filters a ".parms" file, rescaling the pixel coordinates # in "-varWhite" parameters. # if (scale == "") { scale = 1; } n = 0; split("", arg); } (abort >= 0) { exit abort; } /./ { gsub (/[#].*$/, "", $0); for (i = 1; i <= NF; i++) { t = $(i); if (t ~ /^[-]/) { if (n > 0) { flush_args(); n = 0; } } arg[n] = t; n++; } next; } END { if (abort >= 0) { exit abort; } if (n > 0) { flush_args(); } } function flush_args( key,i,k,ncolors,h,v) { key = arg[0]; printf " %-12s", key; if (key == "-saturation") { assert(n == 2); printf " %6.3f", arg[1]; } else if ((key == "-inGamma") || (key == "-kappa") || (key == "-outGamma")) { assert(n == 4); printf " %6.3f %6.3f %6.3f", arg[1], arg[2], arg[3]; } else if ((key == "-black") || (key == "-white")) { assert((n == 4) || (n == 6)); print_color(1); } else if (key == "-varWhite") { assert(n >= 6); printf " %s", arg[1]; if (arg[1] ~ /^[hv]$/) { i = 2; ncolors = 2; for (k = 0; k < ncolors; k++) { assert(i < n); h = int(scale*arg[i] + 0.5); i++; printf "\n"; printf " %04d ", h; i = print_color(i); } } else if (arg[1] ~ /^d[12]$/) { i = 2; ncolors = (arg[1] == "d1" ? 2 : 3); for (k = 0; k < ncolors; k++) { assert(i < n); h = int(scale*arg[i] + 0.5); i++; assert(i < n); v = int(scale*arg[i] + 0.5); i++; printf "\n"; printf " %04d %04d ", h, v; i = print_color(i); } } else { data_error("bad key %s", key); } } printf "\n"; } function print_color(i) { assert(i + 2 < n); printf " %03d %03d %03d", arg[i+0], arg[i+1], arg[i+2]; if ((i + 3 < n) && (arg[i+3] == "/")) { assert(i + 4 < n); printf " / %03d", arg[i+4]; return i + 5; } else { return i + 3; } } function assert(bool) { if (! bool) { data_error(("assertion failure arg = ( " arg[0] " ... )")); } } function data_error(msg) { printf "%d: **%s\n", FNR, msg > "/dev/stderr"; abort = 1; exit abort; }