#!/usr/bin/perl # # fped2d2z.pl - Convert fped 2D stacks into 2.5D paths with Z information # # Written 2012 by Werner Almesberger # Copyright 2012 Werner Almesberger # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # sub usage { print STDERR "usage: $0 [-r] prefix [file ...]\n\n"; print STDERR " -r reverse Z stacking. Also swaps X and Y.\n"; exit(1); } if ($ARGV[0] eq "-r") { shift @ARGV; $reverse = 1; } &usage if $ARGV[0] =~ /^-/; $pfx = shift @ARGV; &usage unless defined $pfx; $skip = 1; while (<>) { if (/^# $pfx.*?(\d+(\.\d*)?)\s*$/) { $z = $1; $skip = 0; } elsif (/^# /) { $skip = 1; } next if $skip; $z{$z} .= $_; $zmax = $z if $z > $zmax || !defined $zmax; } if ($reverse) { for (keys %z) { ($t{$zmax-$_} = $z{$_}) =~ s/^(-?\d+(\.\d*)?)\s+(-?\d+(\.\d*)?)/$3 $1/mg; } %z = %t; } # sort, to make output easier to examine manually for (sort { $b <=> $a } keys %z) { $z{$_} =~ s/\s+-?\d+(\.\d*)?$/$& $_/gm; print $z{$_}; }