# HG changeset patch # User Pascal Bellard # Date 1334853325 -7200 # Node ID 591795b60a3e9bc2c3bf27ede740a89d8447ec67 # Parent 0e7a8e01fa4fbde109c7d5b0fc0af3c2bb7855ee syslinux: merge setarg ifarg & listarg modules diff -r 0e7a8e01fa4f -r 591795b60a3e syslinux/receipt --- a/syslinux/receipt Thu Apr 19 10:18:06 2012 +0000 +++ b/syslinux/receipt Thu Apr 19 18:35:25 2012 +0200 @@ -81,7 +81,6 @@ sl slovene sl_SI Slovenski tr tr_q-latin5 tr_TR Turk EOT -# Missing: nl2 ru sg-latin1 trq cat >> $fs/boot/isolinux/i18n.cfg <> 10; } +static void usage(const char *msg) +{ + fprintf(stderr,"\n%s\n.",msg); + sleep(5); + exit(1); +} + static int main_ifmem(int argc, char *argv[]) { int i; unsigned long ram_size; if (argc < 4) { - perror("\nUsage: ifmem.c32 size_KB boot_large_memory boot_small_memory\n"); - return 1; + usage("Usage: ifmem.c32 size_KB boot_large_memory boot_small_memory"); } // find target according to ram size @@ -463,7 +469,7 @@ i++; // next size or default label } while (i + 1 < argc); - if (i != argc) syslinux_run_command(argv[i]); + if (i != argc) syslinux_run_command(argv[i]); else syslinux_run_default(); return -1; } @@ -549,20 +555,23 @@ #include #include +static void setlinuxarg(int slot, int argc, char *argv[]) +{ + for (; argc--; argv++) + syslinux_setadv(slot++, strlen(*argv), *argv); +} + static int main_kbdmap(int argc, char *argv[]) { const struct syslinux_keyboard_map *const kmap = syslinux_keyboard_map(); size_t map_size, size, i; char *kbdmap, *msg; - msg = "Usage: kbdmap archive.cpio mapfile [cmdline].."; if (argc < 3) - goto kbdmap_error; + usage("Usage: kbdmap archive.cpio mapfile [cmdline].."); // Save extra cmdline arguments - for (i = 3; i < (size_t) argc; i++) { - syslinux_setadv(i - 2, strlen(argv[i]), argv[i]); - } + setlinuxarg(1, argc - 3, argv + 3); msg = "Load error"; if (kmap->version != 1 || @@ -746,8 +755,6 @@ size_t dhcplen; char **argp, *arg, *p; - openconsole(&dev_null_r, &dev_stdcon_w); - (void)argc; argp = argv + 1; @@ -839,6 +846,75 @@ return 1; } +static int main_setarg(int argc, char *argv[]) +{ + if (argc < 3) { + usage("Usage: setarg.c32 argnum [args]..."); + } + setlinuxarg(atoi(argv[1]), argc - 2, argv + 2); + return 0; +} + +static int main_ifarg(int argc, char *argv[]) +{ + int i; + size_t size; + + if (argc < 3) { + usage("Usage: ifarg.c32 [argnum labelifset]... labelifnoneset"); + } + for (i = 1; i < argc - 1; i += 2) { + if (syslinux_getadv(atoi(argv[i]), &size)) + syslinux_run_command(argv[i+1]); + } + if (i != argc) syslinux_run_command(argv[i]); + else syslinux_run_default(); + return 0; +} + +/* ----------------------------------------------------------------------- * + * + * Copyright 2007-2008 H. Peter Anvin - All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, Inc., 53 Temple Place Ste 330, + * Boston MA 02111-1307, USA; either version 2 of the License, or + * (at your option) any later version; incorporated herein by reference. + * + * ----------------------------------------------------------------------- */ + +static int main_listarg(int argc, char *argv[]) +{ + uint8_t *p, *ep; + size_t s = syslinux_adv_size(); + char buf[256]; + + (void) argc; + (void) argv; + p = syslinux_adv_ptr(); + + printf("args size: %zd bytes at %p\n", s, p); + + ep = p + s; /* Need at least opcode+len */ + while (p < ep - 1 && *p) { + int t = *p++; + int l = *p++; + + if (p + l > ep) + break; + + memcpy(buf, p, l); + buf[l] = '\0'; + + printf("arg %3d: \"%s\"\n", t, buf); + + p += l; + } + sleep(5); + return 0; +} + int main(int argc, char *argv[]) { unsigned i; @@ -851,7 +927,10 @@ { "reboot", main_reboot }, { "poweroff", main_poweroff }, { "kbdmap", main_kbdmap }, - { "linux", main_linux } + { "linux", main_linux }, + { "setarg", main_setarg }, + { "ifarg", main_ifarg }, + { "listarg", main_listarg } }; openconsole(&dev_null_r, &dev_stdcon_w); diff -r 0e7a8e01fa4f -r 591795b60a3e syslinux/stuff/i18n.cfg --- a/syslinux/stuff/i18n.cfg Thu Apr 19 10:18:06 2012 +0000 +++ b/syslinux/stuff/i18n.cfg Thu Apr 19 18:35:25 2012 +0200 @@ -1,4 +1,7 @@ # Languages submenu MENU BEGIN ^lang MENU TITLE Languages +MENU TABMSG +MENU START +TIMEOUT 1 diff -r 0e7a8e01fa4f -r 591795b60a3e syslinux/stuff/isolinux.cfg --- a/syslinux/stuff/isolinux.cfg Thu Apr 19 10:18:06 2012 +0000 +++ b/syslinux/stuff/isolinux.cfg Thu Apr 19 18:35:25 2012 +0200 @@ -8,11 +8,11 @@ MENU BACKGROUND splash.jpg MENU WIDTH 78 MENU MARGIN 6 -MENU ROWS 6 -MENU VSHIFT 6 -MENU TIMEOUTROW 14 -MENU TABMSGROW 12 -MENU CMDLINEROW 12 +MENU ROWS 12 +MENU VSHIFT 3 +MENU TIMEOUTROW 16 +MENU TABMSGROW 14 +MENU CMDLINEROW 14 # Menu colors MENU COLOR border * #00000000 #00000000 none