--- grub-0.93/stage2/asm.S~	2004-11-03 13:53:00.000000000 +0800
+++ grub-0.93/stage2/asm.S	2004-11-03 13:53:00.000000000 +0800
@@ -1976,6 +1976,34 @@
 	pop	%ebp
 	ret

+/* 2004-12-01 CyberLink Corp. <http://www.gocyberlink.com> */ 
+/*
+ * int console_getshift (void)
+ * BIOS call "INT 16H Function 02H" to shift flags from keyboard
+ *	Call with	%ah = 0x2
+ *	Return:		%ah = destroyed by many BIOSes
+ *			%al = shift flags
+ */
+
+ENTRY(console_getshift)
+	push	%ebp
+
+	call	EXT_C(prot_to_real)
+	.code16
+
+	movb	$0x2, %ah
+	int	$0x16
+
+	movb	%al, %dl		/* real_to_prot uses %eax */
+	
+	DATA32	call	EXT_C(real_to_prot)
+	.code32
+
+	movb	%dl, %al
+	and	$0xf, %eax
+
+	pop	%ebp
+	ret
 
 /*
  * int console_checkkey (void)
--- grub-0.93/stage2/term.h~	2004-11-03 13:53:19.000000000 +0800
+++ grub-0.93/stage2/term.h	2004-11-03 13:53:19.000000000 +0800
@@ -94,6 +94,8 @@
 void console_putchar (int c);
 
 #ifndef STAGE1_5
+/* 2004-12-01 CyberLink Corp. <http://www.gocyberlink.com> */
+int console_getshift (void);
 int console_checkkey (void);
 int console_getkey (void);
 int console_getxy (void);
--- grub-0.93/stage2/stage2.c~	2004-11-03 13:53:55.000000000 +0800
+++ grub-0.93/stage2/stage2.c	2004-11-03 13:53:55.000000000 +0800
@@ -258,6 +258,13 @@
   /* If SHOW_MENU is false, don't display the menu until ESC is pressed.  */
   if (! show_menu)
     {
+/* 2004-12-01 CyberLink Corp. <http://www.gocyberlink.com> */
+#ifndef GRUB_UTIL
+        if(console_getshift() & 0x3)
+            ++entryno;
+#endif
+        goto boot_entry;
+#if 0
       /* Get current time.  */
       while ((time1 = getrtsecs ()) == 0xFF)
 	;
@@ -291,6 +295,7 @@
 			   grub_timeout);
 	    }
 	}
+#endif
     }
 
   /* Only display the menu if the user wants to see it. */
