#! /client/bin/perl @text = <>; for ($i=0; $i<=$#text; $i++) { if ($text[$i] =~ /[@]/) { $x[$k] = length $`; $y[$k] = $i; $k++; if ($text[$i] =~ /^([^@]*[@][^@]*)[@][^@]*$/) { $x[$k] = length $1; $y[$k] = $i; $k++; } elsif ($text[$i] =~ /[@].*[@].*[@]/) { $k += 2; }; }; }; die "not exactly two @ in file" if $k != 2; if (abs ($x[1]-$x[0]) > ($y[1]-$y[0])) { # flat line $m = ($y[1] - $y[0]) / ($x[1] - $x[0]); $b = $y[0] - $m * $x[0] + 0.5; if ($x[1] >= $x[0]) { for ($x=$x[0]; $x<=$x[1]; $x++) { $y = int ($m * $x + $b); &overwrite; }; } else { for ($x=$x[0]; $x>=$x[1]; $x--) { $y = int ($m * $x + $b); &overwrite; }; }; } else { # steep line $m = ($x[1] - $x[0]) / ($y[1] - $y[0]); $b = $x[0] - $m * $y[0] + 0.5; for ($y=$y[0]; $y<=$y[1]; $y++) { $x = int ($m * $y + $b); &overwrite; }; }; for ($i=0; $i<=$#text; $i++) { print $text[$i]; }; sub overwrite { my ($miss); $miss = $x - length ($text[$y]) + 2; if ($miss > 0) { chop $text[$y]; $text[$y] .= sprintf ("%$miss"."s\n", ""); }; substr ($text[$y], $x, 1) = '@'; }