#! /usr/bin/gawk -f # Last edited on 2003-10-12 12:36:23 by stolfi BEGIN { abort = -1; usage = ( ARGV[0] " < INFILE.ppm > OUTFILE.pxl" ) # Reads an ASCII PPM file ("P3" format code). # Writes one pixel per line, R G B. nh = 0; } (abort >= 0) { exit abort; } /^ *([#]|$)/{ next; } (nh < 4) { for (i = 1; i <= NF; i++) { fld = $(i); if (nh == 0) { if (fld != "P3") { error(("bad code = \"" fld "\"")); } } else if (nh == 1) { wd = fld + 0; if (wd <= 0) { error(("bad width = \"" fld "\"")); } } else if (nh == 2) { ht = fld + 0; if (ht <= 0) { error(("bad height = \"" fld "\"")); } } else if (nh == 3) { dp = fld + 0; if (dp <= 0) { error(("bad depth = \"" fld "\"")); } } else { error(("excess header field = \"" fld "\"")); } nh++; } next; } /./ { if ((NF % 3) != 0) { error(("bad num samples = " NF)); } for(i = 1; i <= NF; i += 3) { printf "%7d %7d %7d\n", $(i), $(i+1), $(i+2); } } function error(msg) { printf "line %d: %s", FNR, msg > "/dev/stderr"; abort = 1; exit 1; }