devel/syslinux syslinux-hiddenmenu.patch, NONE, 1.1 syslinux.spec, 1.45, 1.46

Jeremy Katz (katzj) fedora-extras-commits at redhat.com
Tue Aug 14 17:47:06 UTC 2007


Author: katzj

Update of /cvs/pkgs/devel/syslinux
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv30731

Modified Files:
	syslinux.spec 
Added Files:
	syslinux-hiddenmenu.patch 
Log Message:
* Tue Aug 14 2007 Jeremy Katz <katzj at redhat.com> - 3.36-5
- backport "menu hidden" support from upstream git


syslinux-hiddenmenu.patch:

--- NEW FILE syslinux-hiddenmenu.patch ---
diff -up syslinux-3.36/com32/lib/sys/ansicon_write.c.hidden syslinux-3.36/com32/lib/sys/ansicon_write.c
--- syslinux-3.36/com32/lib/sys/ansicon_write.c.hidden	2007-02-10 15:47:07.000000000 -0500
+++ syslinux-3.36/com32/lib/sys/ansicon_write.c	2007-08-14 13:20:46.000000000 -0400
@@ -88,15 +88,15 @@ int __ansicon_open(struct file_info *fp)
     if ( (signed char)oreg.ebx.b[1] < 0 ) {
       ti.disabled = 1;
     } else {
+      /* Force text mode */
+      ireg.eax.w[0] = 0x0005;
+      __intcall(0x22, &ireg, NULL);
+
       /* Initial state */
       ti.rows = BIOS_ROWS ? BIOS_ROWS+1 : 25;
       ti.cols = BIOS_COLS;
       __ansi_init(&ti);
 
-      /* Force text mode */
-      ireg.eax.w[0] = 0x0005;
-      __intcall(0x22, &ireg, NULL);
-
       /* Get cursor shape and position */
       ireg.eax.b[1] = 0x03;
       ireg.ebx.b[1] = BIOS_PAGE;
diff -up syslinux-3.36/com32/modules/menu.h.hidden syslinux-3.36/com32/modules/menu.h
--- syslinux-3.36/com32/modules/menu.h.hidden	2007-02-10 15:47:08.000000000 -0500
+++ syslinux-3.36/com32/modules/menu.h	2007-08-14 13:20:46.000000000 -0400
@@ -56,6 +56,7 @@ extern int defentry;
 extern int allowedit;
 extern int timeout;
 extern int shiftkey;
+extern int hiddenmenu;
 extern long long totaltimeout;
 
 extern char *menu_title;
diff -up syslinux-3.36/com32/modules/menumain.c.hidden syslinux-3.36/com32/modules/menumain.c
--- syslinux-3.36/com32/modules/menumain.c.hidden	2007-02-10 15:47:08.000000000 -0500
+++ syslinux-3.36/com32/modules/menumain.c	2007-08-14 13:41:18.000000000 -0400
@@ -90,6 +90,7 @@ struct menu_parameter mparm[] = {
   { "endrow", -1 },
   { "passwordrow", 11 },
   { "timeoutrow", 20 },
+  { "hiddenrow", -2 },
   { NULL, 0 }
 };
 
@@ -102,6 +103,7 @@ struct menu_parameter mparm[] = {
 #define END_ROW		mparm[6].value
 #define PASSWD_ROW	mparm[7].value
 #define TIMEOUT_ROW	mparm[8].value
+#define HIDDEN_ROW      mparm[9].value
 
 static void
 install_default_color_table(void)
@@ -561,6 +563,61 @@ shift_is_held(void)
   return !!(shift_bits & 0x5d);	/* Caps/Scroll/Alt/Shift */
 }
 
+static void
+print_timeout_message(int tol, int row, const char *msg)
+{
+#define HSHIFT 0
+  char buf[256];
+  int nc = 0, nnc;
+  const char *tp = msg;
+  char tc;
+  char *tq = buf;
+
+  while ((size_t)(tq-buf) < (sizeof buf-16) && (tc = *tp)) {
+    if (tc == '#') {
+      nnc = sprintf(tq, "%d", tol);
+      tq += nnc;
+      nc += nnc-8;		/* 8 formatting characters */
+    } else {
+      *tq++ = tc;
+      nc++;
+    }
+    tp++;
+  }
+  *tq = '\0';
+
+  printf("\033[%d;%dH\2 %s ", row, HSHIFT+1+((WIDTH-nc-2)>>1), buf);
+}
+
+static const char *
+do_hidden_menu(void)
+{
+  int key;
+  int timeout_left, this_timeout;
+
+  clear_screen();
+
+  if ( !setjmp(timeout_jump) ) {
+    timeout_left = timeout;
+
+    while (!timeout || timeout_left) {
+      int tol = timeout_left/CLK_TCK;
+
+      print_timeout_message(tol, HIDDEN_ROW, " Automatic boot in # seconds ");
+
+      this_timeout = min(timeout_left, CLK_TCK);
+      key = mygetkey(this_timeout);
+
+      if (key != KEY_NONE)
+	return NULL;		/* Key pressed */
+
+      timeout_left -= this_timeout;
+    }
+  }
+
+  return menu_entries[defentry].cmdline; /* Default entry */
+}
+
 static const char *
 run_menu(void)
 {
@@ -580,6 +637,18 @@ run_menu(void)
     return menu_entries[defentry].cmdline;
   }
 
+  /* Handle hiddenmenu */
+  if ( hiddenmenu ) {
+    cmdline = do_hidden_menu();
+    if (cmdline)
+      return cmdline;
+
+    /* Otherwise display the menu now; the timeout has already been
+       cancelled, since the user pressed a key. */
+    hiddenmenu = 0;
+    key_timeout = 0;
+  }
+
   /* Handle both local and global timeout */
   if ( setjmp(timeout_jump) ) {
     entry = defentry;
@@ -632,7 +701,7 @@ run_menu(void)
       int tol = timeout_left/CLK_TCK;
       int nc = snprintf(NULL, 0, " Automatic boot in %d seconds ", tol);
       printf("\033[%d;%dH\1#14 Automatic boot in \1#15%d\1#14 seconds ",
-	     TIMEOUT_ROW, 1+((WIDTH-nc)>>1), tol);
+             TIMEOUT_ROW, 1+((WIDTH-nc)>>1), tol);
       to_clear = 1;
     } else {
       to_clear = 0;
diff -up syslinux-3.36/com32/modules/readconfig.c.hidden syslinux-3.36/com32/modules/readconfig.c
--- syslinux-3.36/com32/modules/readconfig.c.hidden	2007-02-10 15:47:08.000000000 -0500
+++ syslinux-3.36/com32/modules/readconfig.c	2007-08-14 13:21:22.000000000 -0400
@@ -30,6 +30,7 @@ int defentry     = 0;
 int allowedit    = 1;		/* Allow edits of the command line */
 int timeout      = 0;
 int shiftkey     = 0;		/* Only display menu if shift key pressed */
+int hiddenmenu   = 0;
 long long totaltimeout = 0;
 
 char *menu_title  = "";
@@ -417,6 +418,8 @@ static void parse_config_file(FILE *f)
 	if (menu_background)
 	  free(menu_background);
 	menu_background = dup_word(&p);
+      } else if ( (ep = looking_at(p, "hidden")) ) {
+          hiddenmenu = 1;
       } else if ((ep = looking_at(p, "color")) ||
 		 (ep = looking_at(p, "colour"))) {
 	int i;


Index: syslinux.spec
===================================================================
RCS file: /cvs/pkgs/devel/syslinux/syslinux.spec,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- syslinux.spec	7 May 2007 17:08:06 -0000	1.45
+++ syslinux.spec	14 Aug 2007 17:46:34 -0000	1.46
@@ -2,13 +2,14 @@
 Name: syslinux
 Version: 3.36
 %define tarball_version 3.36
-Release: 4%{?dist}
+Release: 5%{?dist}
 License: GPL
 Group: Applications/System
 Source0: ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/%{name}-%{tarball_version}.tar.bz2
 Patch0: syslinux-2.08-x86_64.patch
 Patch3: syslinux-3.36.patch
 Patch4: syslinux-3.36-16bpp.patch
+Patch5: syslinux-hiddenmenu.patch
 ExclusiveArch: i386 x86_64
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: nasm >= 0.98.38-1, perl, netpbm-progs
@@ -38,6 +39,7 @@
 %patch0 -p1 -b .x86_64
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
 
 %build
 CFLAGS="-Werror -Wno-unused -finline-limit=2000"
@@ -95,6 +97,9 @@
 %{_prefix}/lib/syslinux/com32
 
 %changelog
+* Tue Aug 14 2007 Jeremy Katz <katzj at redhat.com> - 3.36-5
+- backport "menu hidden" support from upstream git
+
 * Fri May  4 2007 Jeremy Katz <katzj at redhat.com> - 3.36-4
 - switch to preferring 16bpp for graphical menu; this fixes the display for 
   qemu, kvm, etc




More information about the fedora-extras-commits mailing list