#include "gerber.h"


int scale = DEFAULT_SCALE;
Bool mirrorx, mirrory, verbose;
char *toolfile = NULL;

int redisplay = 0;
int nr_objects = 0;

extern Pixmap make_bitmap();

main(argc,argv)
     int argc;
     char *argv[];
{
  int i;

  init_xwin(&argc,argv);

  read_toolfile(toolfile);

  for (i=1; i<argc; i++) {
    if (*argv[i] != '-') {
      redisplay = 0;
      show_one_file(argv[i]);
    }
  }
  return 0;
}

show_one_file(fname)
     char *fname;
{
  Pixmap bitmap;
  object_t *glist = NULL;

  if (verbose) {
    printf("Reading file...");
    fflush(stdout);
  }

  read_file(fname,&glist);

  if (verbose) {
    printf("done\n");
  }

  if (verbose) {
    printstat(fname);
  }


  do {
    if (verbose) { printf("Rescaling tools..."); fflush(stdout); }
    rescale_tools();
    if (verbose) printf("done\n");

    bitmap = make_bitmap();
    display(fname,glist,bitmap);
    deallocate_bitmap(bitmap);
  } while (redisplay);
}


printstat(fname)
     char *fname;
{
  printf("File %s\n",fname);
  printf("Size %d x %d\n",max_xpos, max_ypos);
  printf("Total of %d objects\n",nr_objects);
}

display(fname,glist,bitmap)
     char *fname;
     object_t *glist;
     Pixmap bitmap;
{
  while (glist) {
    draw_object(glist,bitmap);
    glist = glist->next;
  }
  show_bitmap(fname,bitmap);
}

void *xmalloc(size)
     int size;
{
  char *p = (char *)malloc(size);
  if (!p) {
    fprintf(stderr,"Out of memory!\n");
    exit(1);
  }
  return (void *)p;
}
