ライフゲーム #25

メッシュをはみ出してしまうような設定が行われた場合は警告を出すようにすべきか?
現状、はみ出してしまうような座標が指定されても無視するだけなので問題は少ないが。

set_gen0.g
BEGIN {
...snip
  int fd = openF(filename, 'r');
  string p[], s;
  int pn = 0, mpx = -1, mpy = -1, minusp = 0;
  for (s = readL(fd); s != ""; s = readL(fd)) {
    s = substr(s, 0, length(s) - 1);
    int x = xOf(s) + x0, y = yOf(s) + y0;
    p[pn++] = sprintf('%d,%d', x, y);
    mpx = MAX(mpx, x);
    mpy = MAX(mpy, y);
    if (minusp == 0 && (x < 0 || y < 0)) minusp = 1;
  }
  closeF(fd);
}

BEG_G {
  int mx = -1, my = -1;
}

N {
  int i;
  for (p[i]) {
    if (name == p[i]) {
      alive = 1;
      break;
    }
  }
  mx = MAX(mx, xOf(name));
  my = MAX(my, yOf(name));
}

END_G {
  if (minusp != 0 || mx <= mpx || my <= mpy) {
    printf(2, 'warning: some alive nodes in list exceed bounds of graph:%s\n', name);
  }
}

はみ出すものがある場合は、

$ gvpr -f gen_mesh.g -a 4,6 | gvpr -cf set_gen0.g -a still.txt -a 1,0 | ...snip
warning: some alive nodes in list exceed bounds of graph:%1

のように警告を出す。
set_gen0.gへ指示する移動量は負の値も指定できるので、

$ gvpr -f gen_mesh.g -a 4,6 | gvpr -cf set_gen0.g -a still.txt -a 0,-1 | ...snip
warning: some alive nodes in list exceed bounds of graph:%1

のように負の側へのはみ出しも検出する。