xenocara/app/xlockmore/etc/xlockhexlife.pl

83 lines
2.3 KiB
Perl
Raw Normal View History

2006-11-26 04:07:42 -07:00
#!/usr/bin/perl -T -w
# This is used to add life to life
# This is a QUICK hack to convert life files to xlock's life format.
# Patterns MUST have <= 64 pts at start for life.c to use the data generated
# Below is an example of a life file without the first initial #'s
# Call the file glider.hlife and run it like xlockhexlife.pl < glider.hlife
#glider.hlife
##P -2 -2 Treated as a comment, program finds own center
# . . O .
# . . . O
# O . . O
# . . . O
# . . . O
local($PTS, $X, $Y);
print "
Drop these points in life.c, within the 'patterns' array.
Note if the number of points > 64, one must increase points NUMPTS;
also to fit most screens and especially the iconified window,
one should have the size < 32x32.\n\n";
&search;
print "\npoints = $PTS; size = ${X}x$Y\n";
sub search {
local ($row, $col, $firstrow, $firstcol);
local ($i, $j, $found, $c, $tempx, $tempy);
local (@array);
$row = $col = 0;
$firstrow = -1;
$firstcol = 80;
$PTS = $X = $Y = 0;
while (<>) {
if (!($_ =~ /^#/))
{
@chars = split(//);
$col = 0;
foreach $c (@chars) {
if ($c =~ /[\*0O]/) {
$col++;
if ($firstrow < 0) {
$row = $firstrow = 1;
}
if ($col < $firstcol) {
$firstcol = $col;
}
if ($row > $Y) {
$Y = $row;
}
if ($col > $X) {
$X = $col;
}
$array{$col, $row} = 1;
$PTS++;
} elsif ($c =~ /[\.]/) {
$col++;
}
}
$row++;
}
}
$col = $X - $firstcol + 1;
$row = $Y;
print " {\n ";
for ($j = 0; $j <= $Y; $j++) {
$found = 0;
for ($i = 0; $i <= $X; $i++) {
if ($array{$i, $j}) {
$found = 1;
$tempx = $i - int(($col + 2) / 2) - $firstcol + 1;
$tempy = $j - int(($row + 2) / 2);
printf "$tempx, $tempy, ";
}
}
if ($found) {
print "\n ";
}
}
print "127\n },\n";
$X = $col;
}