#include <stdio.h>

static int maxline=0,minline=0;
void move(int x, int y, int absx, int absy) {
  printf("  move_rel_xy(%d,%d), // to %d,%d\n", x,y, absx, absy);
  if (x<minline)minline=x;
  if (y<minline)minline=y;
  if (x>maxline)maxline=x;
  if (y>maxline)maxline=y;
}

void line(int x, int y, int absx, int absy) {
  printf("  line_rel_xy(%d,%d), // to %d,%d\n", x,y, absx, absy);
  if (x<minline)minline=x;
  if (y<minline)minline=y;
  if (x>maxline)maxline=x;
  if (y>maxline)maxline=y;
}

static int screenx = 0, screeny = 0;
void emit(int fromx, int fromy, int tox, int toy) {
  if (fromx != screenx || fromx != screeny) move(fromx-screenx, fromy-screeny, fromx, fromy);
  line((screenx=tox)-fromx, (screeny=toy)-fromy, tox, toy);
}

int main(void) {
  char *s[5] = {"angle.txt", "fromx.txt", "fromy.txt", "tox.txt", "toy.txt"};
  double d[5];
  int n[5],max=0,min=0;
  FILE *f[5];
  int i, lines=0;


  int prev_angle = 999;

  printf("#pragma const_data start\n");
  for (i = 0; i < 5; i++) f[i] = fopen(s[i], "r");
  for (;;) {
    if (feof(f[0])) break;
    for (i = 0; i < 5; i++) fscanf(f[i], "%lf\n", &d[i]);

    for (i = 0; i < 5; i++) {
      n[i] = (int)d[i];
      if (i) {n[i] = (n[i]*256)/845;}
      if (n[i]>max) max=n[i];
      if (n[i]<min) min=n[i];
    }
    if (n[0] != prev_angle) {
      if (prev_angle != 999) printf("  1\n};\n\n\n");
      screenx = 0; screeny = 0;
      printf("const char placard%d[] = {\n", n[0]);
      prev_angle = n[0];
    }
    emit(n[1],n[2], n[3],n[4]);
    //fprintf(stdout, "  ");
    //for (i = 1; i < 5; i++) fprintf(stdout, "%d,", n[i]);
    //fprintf(stdout, "\n");
    lines++;
  }
  printf("  1\n};\n\n#pragma const_data end\nconst char *placard[256] = {\n");
  for (i = 64; i < 256; i += 2) printf("  placard%d,\n  placard%d,\n", i, i);
  for (i = 0; i < 64; i += 2) printf("  placard%d,\n  placard%d,\n", i, i);
  printf("};\n\n");
  fprintf(stderr, "%d lines\nmin = %d\nmax = %d\n", lines, minline, maxline);
}
