
#include <stdio.h>
#include "nawm.h"
#include "inform.h"

Display *dpy;
int screen;
Window root;
int error_mode = SPEW_ON_ERROR;
int min_keycode, max_keycode;
int have_xtest_extension, xtest_op, xtest_ev, xtest_er;
int use_xtest_extension, use_cache=0;

int x_error();

main(argc, argv)
     int argc;
     char **argv;
{
  int skip_nawmrc = 0;
  
  if (!(dpy = XOpenDisplay(NULL))) {
    fputs ("can't open display\n", stderr);
    exit(1);
  }
  init_bindings();
  screen = DefaultScreen(dpy);
  root = RootWindow(dpy, screen);
  XSetErrorHandler(x_error);
  have_xtest_extension = (False != XQueryExtension(dpy, 
				  		   XTestExtensionName, 
						   &xtest_op, 
						   &xtest_ev, 
						   &xtest_er));
  use_xtest_extension = (have_xtest_extension && HAVE_XTEST_EXTENSION);
  if (have_xtest_extension) 
    inform_user(5, "have xtest extension");
  else 
    inform_user(5, "don't have xtest extension");
  init_icon();
  XDisplayKeycodes(dpy, &min_keycode, &max_keycode);
  
  while (++argv, --argc)
    if (**argv == '-')
      switch(argv[0][1]) {
      case 0:
	read_config_file(stdin);
	skip_nawmrc = 1;
	break;
      case 'v':
	set_verbosity(++argv);
	argc--;
	break;
#ifdef USE_CACHE
      case 'C':
	use_cache=1;
	break;
#endif
      default: die("unknown flag");
      }
    else {
      FILE *f = fopen(*argv, "r");
      if (!f) {
	perror(*argv);
	exit(1);
      }       
      read_config_file(f);
      skip_nawmrc = 1;
    }
  if (!skip_nawmrc)
    read_nawmrc();
  wait_for_binding();
}


die(str)
     char *str;
{
  fputs(str, stderr);
  fputc('\n', stderr);
  exit(0);
}

int x_error (dpy, xee)
     Display *dpy;
     XErrorEvent *xee;
{
    char temp[80];
  switch (error_mode) {
  case IGNORE_ERRORS:
    return 0;
  case BEEP_ON_ERROR:
    XBell(dpy, 100);
    return 0;
  case SPEW_ON_ERROR:
    XGetErrorText(dpy, xee->error_code, temp, 80);
    fprintf (stderr, "nawm X error :%s\n", temp);
    /*    abort(); */
    return 0;
  }
    return 0;
}
