85 lines
1.7 KiB
Awk
85 lines
1.7 KiB
Awk
#!/bin/awk -f
|
|
|
|
# Parse report and generate pbmtext commands for each country
|
|
# Now generates new positions as an average of all sectors.
|
|
|
|
BEGIN {
|
|
if (scale=="") scale=1;
|
|
FS="[ \t\n,]+";
|
|
}
|
|
|
|
/^World size is [0-9]+ by [0-9]+\./ {
|
|
width = $4;
|
|
height= $6;
|
|
system("ppmmake white " (width+1)*scale " " height*scale " | ppmtopgm | pgmtopbm >over.pbm");
|
|
}
|
|
|
|
/.*#.*name.*tech.*research.*education.*happiness.*capital/ {
|
|
getline;
|
|
while (NF>4) {
|
|
if ($2>0 && $2<90) {
|
|
name[$2]=substr($0,8,15);
|
|
capx[$2]= $(NF-1);
|
|
capy[$2]= $NF;
|
|
}
|
|
getline;
|
|
}
|
|
}
|
|
|
|
/own +sect/ {
|
|
getline;
|
|
while (NF>2) {
|
|
if ($2 in name) {
|
|
if (!count[$2]) {
|
|
cx[$2] = $3;
|
|
cy[$2] = $4;
|
|
} else {
|
|
dx = $3 - cx[$2];
|
|
dy = $4 - cy[$2];
|
|
if (dx>=width/2) dx -= width;
|
|
if (dy>=height/2) dy -= height;
|
|
if (dx<-width/2) dx += width;
|
|
if (dy<-height/2) dy += height;
|
|
cx[$2] += dx/(1+count[$2]);
|
|
cy[$2] += dy/(1+count[$2]);
|
|
}
|
|
count[$2]++;
|
|
}
|
|
getline;
|
|
}
|
|
}
|
|
|
|
|
|
END {
|
|
for (i in name) {
|
|
if (count[i]) {
|
|
system("pbmtext \"" name[i] "\" | pnmcrop >text.pbm");
|
|
system("pnmfile text.pbm >text.size");
|
|
getline < "text.size";
|
|
close("text.size");
|
|
h=$NF;
|
|
w=$(NF-2);
|
|
x = cx[i] + width/2;
|
|
y = cy[i] + height/2;
|
|
|
|
while (x<0) x += width;
|
|
while (y<0) y += height;
|
|
while (x>=width) x -= width;
|
|
while (y>=height) y -= height;
|
|
|
|
x = int(x*scale);
|
|
y = int(y*scale);
|
|
|
|
x -= w/2;
|
|
y -= h/2;
|
|
if (x<0) x=0;
|
|
if (y<0) y=0;
|
|
if (x+w>=width*scale) x=width*scale-w-1;
|
|
if (y+h>=height*scale) y=height*scale-h-1;
|
|
|
|
|
|
system("pnmpaste text.pbm " x " " y " over.pbm > over2.pbm");
|
|
system("cp over2.pbm over.pbm");
|
|
}
|
|
}
|
|
}
|