1#!/usr/local/bin/perl 2# 3# Call this script with something like 'cmap *', assuming 4# 5# alias cmap "dump ${1:-*} des >! tmp/cmap.dump; 6# bmdump ${1:-*} x y des >! tmp/cmap.mdump; 7# ldump ${1:-*} x y fort >! tmp/cmap.ldump; 8# pdump * ?type=ss x y laun orb >! tmp/cmap.sat; 9# look * ?type#sb&type#sbc&type#na&type#nm >! tmp/cmap.llook; 10# llook * >> tmp/cmap.llook; 11# coast * >! tmp/cmap.coast; 12# @ /usr/local/lib/eif/cmap.pl" 13# 14# cmap.pl - johans, July 2002 15 16use strict; 17chdir "tmp" || die 'No tmp subdir'; 18 19my %view; 20my ($minx, $miny, $maxx, $maxy); 21my %land = ( 22 'agribusiness', 'a', 23 'airfield', '*', 24 'bank', 'b', 25 'capital', 'c', 26 'defense', 'd', 27 'enlistment', 'e', 28 'fortress', 'f', 29 'gold', 'g', 30 'harbor', 'h', 31 'headquarters', '!', 32 'heavy', 'k', 33 'highway', '+', 34 'library/school', 'l', 35 'light', 'j', 36 'mine', 'm', 37 'mountain', '^', 38 'nuclear', 'n', 39 'oil', 'o', 40 'park', 'p', 41 'plains', '~', 42 'radar', ')', 43 'refinery', '%', 44 'research', 'r', 45 'shell', 'i', 46 'technical', 't', 47 'uranium', 'u', 48 'venture', 'v', 49 'warehouse', 'w', 50 'wilderness', '-', 51 ); 52my %colour = ( 53 'me', 37, 54 'sea', '34', 55 'sat', '41', 56 'unknown', '32', 57 0, '33', 58 1, '1;31', 59 2, '1;32', 60 3, '1;33', 61 4, '1;34', 62 5, '1;35', 63 6, '1;36', 64 7, '1;37', 65 ); 66 67open(CONFIG, '../.cmaprc'); 68open(DUMP, 'cmap.dump') || die; 69open(MDUMP, 'cmap.mdump') || die; 70open(LOOK, 'cmap.llook') || die; 71open(LDUMP, 'cmap.ldump') || die; 72open(COAST, 'cmap.coast') || die; 73open(SAT, 'cmap.sat'); 74my $init; 75while (<CONFIG>) 76{ 77 my ($idx, $val) = /^\s*colour\s+(\S+)\s+(\S+)/; 78 next unless $idx; 79 $colour{$idx} = $val; 80} 81while (<DUMP>) 82{ 83 chop; 84 my @line = split / /; 85 next unless /^[0-9-]+ [0-9-]/; 86 my ($x, $y) = @line[0..1]; 87 $view{"$x:$y:0"} = $line[2]; 88 $view{"$x:$y:1"} = $colour{me}; 89} 90while (<MDUMP>) 91{ 92 chop; 93 my @line = split / /; 94 next unless /^[0-9-]+ [0-9-]/; 95 my ($x, $y) = @line[0..1]; 96 $view{"$x:$y:0"} = $line[2] unless $view{"$x:$y:0"}; 97 $view{"$x:$y:1"} = $colour{unknown} unless $view{"$x:$y:1"}; 98 $view{"$x:$y:1"} = $colour{sea} if $view{"$x:$y:0"} eq '.'; 99 $minx = $x if $x < $minx || !defined($minx); 100 $miny = $y if $y < $miny || !defined($miny); 101 $maxx = $x if $x > $maxx || !defined($maxx); 102 $maxy = $y if $y > $maxy || !defined($maxy); 103} 104print "$minx:$maxx,$miny:$maxy\n"; 105while (<LOOK>) 106{ 107 my ($n, $p, $d, $x, $y) = /^(\S+).*#(\d+). (\S+).*@ (-?\d+),(-?\d+)/; 108 next if ! $n; 109 $view{"$x:$y:0"} = $land{$d} || '?'; 110 $view{"$x:$y:1"} = $colour{$p} || $colour{unknown}; 111} 112while (<LDUMP>) 113{ 114 my @line = split /\s+/; 115 my ($x, $y) = @line[2..3]; 116 $view{"$x:$y:l"} = 1; 117} 118while (<COAST>) 119{ 120 my ($c) = /#\s*(\d+)/; 121 my ($x, $y) = / (-?\d+),(-?\d+)$/; 122 next unless $c; 123 $view{"$x:$y:s"} = $colour{$c}; 124} 125while (<SAT>) 126{ 127 my @line = split /\s+/; 128 next unless $line[3] eq 'Y'; 129 my ($x, $y) = @line[1..2]; 130 $view{"$x:$y:sat"} = 3; 131 for my $i ($minx .. $maxx) 132 { 133 for my $j ($miny .. $maxy) 134 { 135 $view{"$i:$j:sat"} = 1 136 if ((abs($x - $i) + abs($y - $j) <= 28) && 137 (abs($y - $j) <= 14)); 138 } 139 } 140} 141close CONFIG; 142close DUMP; 143close LOOK; 144close LDUMP; 145close COAST; 146close SAT; 147 148print " "; 149for (my $i = $minx; $i <= $maxx; $i++) 150{ 151 print int(abs($i) / 10) unless ( $i < 0 && $i > -10 ); 152 print "-" if ( $i < 0 && $i > -10 ); 153} 154print "\n "; 155for (my $i = $minx; $i <= $maxx; $i++) { print abs($i) % 10; } 156print "\n"; 157 158for (my $j = $miny; $j <= $maxy; $j++) 159{ 160 print " " . int(abs($j) / 10) unless ( $j < 0 && $j > -10 ); 161 print " -" if ( $j < 0 && $j > -10 ); 162 print abs($j) % 10 . " "; 163 for (my $i = $minx; $i <= $maxx; $i++) 164 { 165 my $p = $view{"$i:$j:0"} || ' '; 166 my $l = $view{"$i:$j:l"}; 167 my $c = $view{"$i:$j:1"}; 168 my $s = $view{"$i:$j:s"}; 169 my $sat = $view{"$i:$j:sat"}; 170 $p = "[${s}ms[m" if $s; 171 if ($s) { 172 print "[${s}ms[m"; 173 } elsif ($c) { 174 print $l 175 ? "[${c};${l}m$p[m" 176 : "[${c}m$p[m" 177 } elsif ($sat) { 178 print "[${colour{sat}}m$p[m"; 179 } else { 180 print $p; 181 } 182 } 183 print " " . int(abs($j) / 10) unless ( $j < 0 && $j > -10 ); 184 print " -" if ( $j < 0 && $j > -10 ); 185 print abs($j) % 10 . "\n"; 186} 187 188print " "; 189for (my $i = $minx; $i <= $maxx; $i++) 190{ 191 print int(abs($i) / 10) unless ( $i < 0 && $i > -10 ); 192 print "-" if ( $i < 0 && $i > -10 ); 193} 194print "\n "; 195for (my $i = $minx; $i <= $maxx; $i++) { print abs($i) % 10; } 196print "\n"; 197