--- kexecboot.c.orig	2009-04-07 17:08:18.000000000 +0200
+++ kexecboot.c	2009-04-07 17:30:38.000000000 +0200
@@ -349,12 +349,22 @@
 	FB *fb;
 	FILE *f;
 	int angle = KXB_FBANGLE;
-	char *eventif = KXB_EVENTIF;
 	struct bootlist * bl;
 	struct input_event evt;
 	struct termios old, new;
 	struct hw_model_info *model;
-
+	int ev0;
+	int ev1;
+	fd_set fds;
+	/* hardcoded for openmoko gta02 with 2.6.24 kernel */
+	char *eventif = "/dev/event0";
+	char *eventif1 = "/dev/event1";
+
+	struct input_event evt1;
+	int maxfd;
+	int nready;
+	int nread;
+	struct timeval tv;
 	/* When our pid is 1 we are init-process */
 	if ( 1 == getpid() ) {
 		initmode = 1;
@@ -410,11 +420,19 @@
 				eventif = argv[i];
 				continue;
 			}
+			if (!strcmp(argv[i], "-e") || !strcmp(argv[i], "--event")) {
+			  if (++i > argc)
+			    goto fail;
+			  eventif1 = argv[i];
+			  continue;
+                        }
 
 			fail:
-			fprintf(stderr,	"Usage: %s [-a|--angle <0|90|180|270>] \
-				[-i|--input </dev/input/eventX>\n",
-				argv[0]);
+		 fprintf(stderr, "Usage: %s [-a|--angle <0|90|180|270>] \
+                                [-i|--input </dev/input/eventX> [-e|--eventt </dev/input/eventX2>\n",
+			 /* kxecboot -i /dev/input4 -e /dev/input0  for GTA02*/
+			 /*                aux             tscreen on GTA running shr-unstable */
+			argv[0]);
 			exit(-1);
 		}
 	}
@@ -425,9 +443,10 @@
 	if ((fb = fb_new(angle)) == NULL)
 		exit(-1);
 
-	f = fopen(eventif,"r");
-	if(!f){
-	    perror(eventif);
+	ev0 = open(eventif,O_RDONLY);
+	ev1 = open(eventif1,O_RDONLY);
+	if(!ev0 && !ev1 ){
+	    perror(eventif); /* maybe more sane output for for eventif1 */
 	    exit(3);
 	}
 
@@ -445,35 +464,46 @@
 
 	do {
 		display_menu(fb, bl, choice);
-		do
-			fread(&evt, sizeof(struct input_event), 1, f);
-		while(evt.type != EV_KEY || evt.value != 0);
-
-		switch (evt.code) {
-		case KEY_UP:
-			if (choice > 0) choice--;
-			break;
-		case KEY_DOWN:
-			if ( choice < (bl->size - 1) ) choice++;
-			break;
-		case KEY_R:
-			display_text(fb, "Rebooting...");
-			sync();
-			/* if ( -1 == reboot(LINUX_REBOOT_CMD_RESTART) ) { */
-			if ( -1 == reboot(RB_AUTOBOOT) ) {
-				perror("Can't initiate reboot");
+		do{
+		  /* Wait for some input. */
+		  tv.tv_sec =1;
+		  tv.tv_usec = 0;
+		  FD_ZERO(&fds);
+		  FD_SET( ev0,&fds);
+		  FD_SET(ev1,&fds);
+		  maxfd = 8;
+		  nready = select(maxfd, &fds, NULL,NULL,&tv);
+		  /* now GTA02 specific */
+		  if( FD_ISSET(ev0, &fds))
+		    {
+		      read(ev0,&evt, sizeof(struct input_event));
+		      DPRINTF("event: %i %i %i,\n",evt.type, evt.code,evt.value);
+		    }
+		  if( FD_ISSET(ev1, &fds))
+		    {
+		      read(ev1,&evt1 ,sizeof(struct input_event) );
+		      DPRINTF("event1: %i %i %i,\n",evt1.type, evt1.code,evt1.value);
+		      if ((evt1.code == 330) && (evt1.value == 1))
+			{
+			  if ( choice < (bl->size - 1) ) 
+			    {
+			      choice++;
+			      DPRINTF("Choice %i\n", choice);
+			    }
+			  else
+			    {
+			      choice=0;
+			    }
+			  DPRINTF("Selected: %i ,\n",choice );
+			  break;
 			}
-			break;
-		case KEY_S:	/* reScan */
-			display_text(fb, "Rescanning devices.\nPlease wait...");
-			free_bootlist(bl);
-			bl = scan_devices(model);
-			break;
-		}
-
-	} while( (bl->size == 0) || (evt.code != 87 && evt.code != 63 &&
-		evt.code != KEY_SPACE && evt.code != KEY_ENTER &&
-		evt.code != KEY_HIRAGANA && evt.code != KEY_HENKAN) );
+		    }
+	  } while( ( evt.type != EV_KEY || evt.value != 0) || ( evt.type != EV_KEY ||  evt1.value != 0) );
+	  // dev/event0 power 116
+	  }while( ( evt.code != 169 ) || (bl->size == 0)  );
+	draw_background(fb, "DEBUG by EW: .\n Boot selected ");
+	fb_render(fb);
+		  
 	fclose(f);
 	// reset terminal
 	tcsetattr(fileno(stdin), TCSANOW, &old);

