wok rev 12287

syslinux: merge md5sum, kbdmap and linux. kbdmap will append the kernel cmdline
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Apr 15 17:51:38 2012 +0200 (2012-04-15)
parents b30c71e802a4
children a8baf2428b53
files syslinux/receipt syslinux/stuff/common.cfg syslinux/stuff/default.cfg syslinux/stuff/extra/md5sum.c syslinux/stuff/i18n.cfg syslinux/stuff/isolinux.cfg
line diff
     1.1 --- a/syslinux/receipt	Sun Apr 15 17:25:16 2012 +0200
     1.2 +++ b/syslinux/receipt	Sun Apr 15 17:51:38 2012 +0200
     1.3 @@ -36,37 +36,58 @@
     1.4  {
     1.5      mkdir -p $fs/boot/isolinux
     1.6      cp -a $src/core/isolinux.bin $fs/boot/isolinux
     1.7 -    cp -a $src/com32/modules/md5sum.c32 $fs/boot/isolinux
     1.8 +    cp -a $src/com32/modules/md5sum.c32 $fs/boot/isolinux/c32box.c32
     1.9      cp -a $src/com32/menu/vesamenu.c32 $fs/boot/isolinux
    1.10      # $stuff/isolinux.msg is the old way the have a splash image.
    1.11      cp $stuff/*.cfg $stuff/*.txt $stuff/help.* $stuff/opts.* $fs/boot/isolinux
    1.12 -    while read cfg kbd loc ; do
    1.13 -        sed -e "s/^display/kbdmap $cfg.kbd\ndisplay/" \
    1.14 -            -e "s/^label/say Now using $kbd keyboard and $loc locale.\nlabel/" \
    1.15 -            -e "s/rootfs.gz/rootfs.gz lang=$loc kmap=$kbd/" \
    1.16 -	        < $fs/boot/isolinux/default.cfg > $fs/boot/isolinux/$cfg.cfg
    1.17 -        cp $src/$kbd.kbd $fs/boot/isolinux/$cfg.kbd
    1.18 -	cat >> $fs/boot/isolinux/common.cfg <<EOT
    1.19 -label $cfg
    1.20 -	config $cfg.cfg
    1.21 +    ( cd $src ; ls *.kbd | cpio -o -H newc ) > $fs/boot/isolinux/cpio.kbd
    1.22 +    while read label kbd loc menu; do
    1.23 +        [ -s $src/$kbd.kbd ] || continue
    1.24 +	cat >> $fs/boot/isolinux/i18n.cfg <<EOT
    1.25 +
    1.26 +LABEL $label
    1.27 +	MENU LABEL $menu
    1.28 +	com32 c32box.c32
    1.29 +	append kbdmap cpio.kbd $kbd.kbd lang=$loc kmap=$kbd
    1.30  EOT
    1.31      done <<EOT
    1.32 -be    be-latin1    fr_FR
    1.33 -br    br-abnt2     pt_PT
    1.34 -ca    cf           fr_FR
    1.35 -de    de-latin1    de_DE
    1.36 -de_CH de_CH-latin1 de_DE
    1.37 -en    uk           C
    1.38 -es    es           es_ES
    1.39 -fi    fi-latin1    fi
    1.40 -fr    fr-latin1    fr_FR
    1.41 -fr_CH fr_CH-latin1 fr_FR
    1.42 -hu    hu           hu
    1.43 -it    it           it_IT
    1.44 -jp    jp106        jp_JP
    1.45 -pt    pt-latin1    pt_PT
    1.46 -ru    ru           ru_RU
    1.47 -us    us           C
    1.48 +cr		croat		hr_HR	Hvratski
    1.49 +cz		cz-lat2		cs_CZ	Cesky
    1.50 +de		de-latin1	de_DE	Deutsch
    1.51 +de_CH\ deCH	de_CH-latin1	de_DE	Deutsch Schweitz
    1.52 +dk		dk-latin1	da_DK	Dansk
    1.53 +en		uk		C	English UK
    1.54 +us		us		C	English US
    1.55 +us_ac\ usac	us-acentos	C	English US (acentos)
    1.56 +us_dv\ usdv	dvorak		C	English US (dvorak)
    1.57 +us_dl\ usdl	dvorak-l	C	English US (dvorak-l)
    1.58 +us_dr\ usdr	dvorak-r	C	English US (dvorak-r)
    1.59 +es		es		es_ES	Espanol
    1.60 +fr		fr-latin1	fr_FR	Francais
    1.61 +be		be-latin1	fr_FR	Francais Belgique
    1.62 +ca		cf		fr_FR	Francais Canada
    1.63 +fr_CH\ frCH	fr_CH-latin1	fr_FR	Francais Suisse
    1.64 +fi		fi-latin1	fi	Suomi
    1.65 +is		is-latin1	is_IS	Islenska
    1.66 +it		it		it_IT	Italiano
    1.67 +no		no-latin1	nb_NO	Norske
    1.68 +jp		jp106		jp_JP	Japanese
    1.69 +hu		hu		hu	Magyar
    1.70 +po		pl2		pl_PL	Polski
    1.71 +br		br-abnt2	pt_PT	Brazil
    1.72 +pt		pt-latin1	pt_PT	Portugues
    1.73 +ru		ru		ru_RU	Russian
    1.74 +se		se-lat6		sv_SE	Svenskt
    1.75 +sl		slovene		sl_SI	Slovenski
    1.76 +tr		tr_q-latin5	tr_TR	Turk
    1.77 +EOT
    1.78 +# Missing: nl2 ru sg-latin1 trq
    1.79 +    cat >> $fs/boot/isolinux/i18n.cfg <<EOT
    1.80 +
    1.81 +LABEL exit
    1.82 +	MENU LABEL Back to main menu
    1.83 +MENU EXIT
    1.84 +MENU END
    1.85  EOT
    1.86      chown root.root $fs/boot/isolinux/*
    1.87  }
    1.88 @@ -75,7 +96,4 @@
    1.89  post_install()
    1.90  {
    1.91      sed -i "s/XXXXXXXX/$(date +%Y%m%d)/" $1/boot/isolinux/isolinux.cfg
    1.92 -    for i in ifmem reboot poweroff; do
    1.93 -    	ln $fs/boot/isolinux/md5sum.c32 $fs/boot/isolinux/$i.c32
    1.94 -    done
    1.95  }
     2.1 --- a/syslinux/stuff/common.cfg	Sun Apr 15 17:25:16 2012 +0200
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,54 +0,0 @@
     2.4 -# Common settings for cmdline
     2.5 -default slitaz
     2.6 -timeout 40
     2.7 -prompt 1
     2.8 -
     2.9 -# Help files
    2.10 -F1 help.en
    2.11 -F2 opts.en
    2.12 -F3 help.fr
    2.13 -F4 opts.fr
    2.14 -
    2.15 -# Labels
    2.16 -label web zeb
    2.17 -	kernel /boot/gpxe
    2.18 -label reboot
    2.19 -	com32 reboot.c32
    2.20 -label deCH
    2.21 -	config de_CH.cfg
    2.22 -label frCH
    2.23 -	config fr_CH.cfg
    2.24 -
    2.25 -label be
    2.26 -	config be.cfg
    2.27 -label br
    2.28 -	config br.cfg
    2.29 -label ca
    2.30 -	config ca.cfg
    2.31 -label de
    2.32 -	config de.cfg
    2.33 -label de_CH
    2.34 -	config de_CH.cfg
    2.35 -
    2.36 -label en
    2.37 -	config en.cfg
    2.38 -label es
    2.39 -	config es.cfg
    2.40 -label fi
    2.41 -	config fi.cfg
    2.42 -label fr
    2.43 -	config fr.cfg
    2.44 -label fr_CH
    2.45 -	config fr_CH.cfg
    2.46 -label hu
    2.47 -	config hu.cfg
    2.48 -label it
    2.49 -	config it.cfg
    2.50 -label jp
    2.51 -	config jp.cfg
    2.52 -label pt
    2.53 -	config pt.cfg
    2.54 -label ru
    2.55 -	config ru.cfg
    2.56 -label us
    2.57 -	config us.cfg
     3.1 --- a/syslinux/stuff/default.cfg	Sun Apr 15 17:25:16 2012 +0200
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,6 +0,0 @@
     3.4 -display display.txt
     3.5 -label slitaz
     3.6 -	kernel /boot/bzImage
     3.7 -	append initrd=/boot/rootfs.gz rw root=/dev/null vga=normal autologin
     3.8 -
     3.9 -include common.cfg
     4.1 --- a/syslinux/stuff/extra/md5sum.c	Sun Apr 15 17:25:16 2012 +0200
     4.2 +++ b/syslinux/stuff/extra/md5sum.c	Sun Apr 15 17:51:38 2012 +0200
     4.3 @@ -306,7 +306,7 @@
     4.4  
     4.5  	(void) argc;
     4.6  	/* -c implied */
     4.7 -
     4.8 +	argv++;
     4.9  	do {
    4.10  		FILE *fp;
    4.11  		char eol, *line, buffer[256];
    4.12 @@ -355,6 +355,7 @@
    4.13  	} while (*++argv);
    4.14  	printf("\r%d files OK, %d broken, %d not checked.%s\n",
    4.15  		good, tested - good, files - tested, clear_eol);
    4.16 +	sleep(5);
    4.17  	return 0;
    4.18  }
    4.19  
    4.20 @@ -540,6 +541,304 @@
    4.21  	return 0;
    4.22  }
    4.23  
    4.24 +/*
    4.25 + *   Copyright 2009 Intel Corporation; author: H. Peter Anvin
    4.26 + */
    4.27 +
    4.28 +#include <syslinux/keyboard.h>
    4.29 +#include <syslinux/loadfile.h>
    4.30 +#include <syslinux/adv.h>
    4.31 +
    4.32 +static int main_kbdmap(int argc, char *argv[])
    4.33 +{
    4.34 +    const struct syslinux_keyboard_map *const kmap = syslinux_keyboard_map();
    4.35 +    size_t map_size, size, i;
    4.36 +    char *kbdmap, *msg;
    4.37 +
    4.38 +    msg = "Usage: kbdmap archive.cpio mapfile [cmdline]..";
    4.39 +    if (argc < 3)
    4.40 +    	goto kbdmap_error;
    4.41 +
    4.42 +    msg = "Load error";
    4.43 +    if (kmap->version != 1 ||
    4.44 +	loadfile(argv[1], (void **) &kbdmap, &map_size) || 
    4.45 +	strncmp(kbdmap, "07070", 5))
    4.46 +    	goto kbdmap_error;
    4.47 +
    4.48 +    // search for mapfile in cpio archive
    4.49 +    for (i = 0; i < map_size;) {
    4.50 +	int len, j;
    4.51 +	char *name;
    4.52 +	
    4.53 +	for (j = size = 0; j < 8; j++) {
    4.54 +		char c = kbdmap[54 + i + j] - '0';
    4.55 +		if (c > 9) c += '0' + 10 - 'A';
    4.56 +		size <<= 4;
    4.57 +		size += c;
    4.58 +	}
    4.59 +	i += 110;
    4.60 +	name = kbdmap + i;
    4.61 +	len = 1 + strlen(name);
    4.62 +	i += len;
    4.63 +	i += ((-i)&3);
    4.64 +	if (!strcmp(name, argv[2])) {
    4.65 +	    kbdmap += i;
    4.66 +	    break;
    4.67 +	}
    4.68 +	i += size + ((-size)&3);
    4.69 +    }
    4.70 +
    4.71 +    msg = "Filename error";
    4.72 +    if (i >= map_size)
    4.73 +    	goto kbdmap_error;
    4.74 +
    4.75 +    msg = "Format error";
    4.76 +    if (size != kmap->length)
    4.77 +    	goto kbdmap_error;
    4.78 +
    4.79 +    memcpy(kmap->map, kbdmap, size);
    4.80 +
    4.81 +    // Save extra cmdline arguments
    4.82 +    for (i = 3; i < (size_t) argc; i++) {
    4.83 +	syslinux_setadv(i - 2, strlen(argv[i]), argv[i]);
    4.84 +    }
    4.85 +
    4.86 +    return 0;
    4.87 +
    4.88 +kbdmap_error:
    4.89 +    printf("%s.\n",msg);
    4.90 +    return 1;
    4.91 +}
    4.92 +
    4.93 +/* ----------------------------------------------------------------------- *
    4.94 + *
    4.95 + *   Copyright 2007-2008 H. Peter Anvin - All Rights Reserved
    4.96 + *   Copyright 2009 Intel Corporation; author: H. Peter Anvin
    4.97 + *
    4.98 + *   Permission is hereby granted, free of charge, to any person
    4.99 + *   obtaining a copy of this software and associated documentation
   4.100 + *   files (the "Software"), to deal in the Software without
   4.101 + *   restriction, including without limitation the rights to use,
   4.102 + *   copy, modify, merge, publish, distribute, sublicense, and/or
   4.103 + *   sell copies of the Software, and to permit persons to whom
   4.104 + *   the Software is furnished to do so, subject to the following
   4.105 + *   conditions:
   4.106 + *
   4.107 + *   The above copyright notice and this permission notice shall
   4.108 + *   be included in all copies or substantial portions of the Software.
   4.109 + *
   4.110 + *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   4.111 + *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
   4.112 + *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   4.113 + *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
   4.114 + *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
   4.115 + *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   4.116 + *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   4.117 + *   OTHER DEALINGS IN THE SOFTWARE.
   4.118 + *
   4.119 + * ----------------------------------------------------------------------- */
   4.120 +
   4.121 +/*
   4.122 + * linux.c
   4.123 + *
   4.124 + * Sample module to load Linux kernels.  This module can also create
   4.125 + * a file out of the DHCP return data if running under PXELINUX.
   4.126 + *
   4.127 + * If -dhcpinfo is specified, the DHCP info is written into the file
   4.128 + * /dhcpinfo.dat in the initramfs.
   4.129 + *
   4.130 + * Usage: linux.c32 [-dhcpinfo] kernel arguments...
   4.131 + */
   4.132 +
   4.133 +#include <stdbool.h>
   4.134 +#include <stdlib.h>
   4.135 +#include <stdio.h>
   4.136 +#include <string.h>
   4.137 +#include <console.h>
   4.138 +#include <syslinux/loadfile.h>
   4.139 +#include <syslinux/linux.h>
   4.140 +#include <syslinux/pxe.h>
   4.141 +
   4.142 +const char *progname = "linux.c32";
   4.143 +
   4.144 +/* Find the last instance of a particular command line argument
   4.145 +   (which should include the final =; do not use for boolean arguments) */
   4.146 +static char *find_argument(char **argv, const char *argument)
   4.147 +{
   4.148 +    int la = strlen(argument);
   4.149 +    char **arg;
   4.150 +    char *ptr = NULL;
   4.151 +
   4.152 +    for (arg = argv; *arg; arg++) {
   4.153 +	if (!memcmp(*arg, argument, la))
   4.154 +	    ptr = *arg + la;
   4.155 +    }
   4.156 +
   4.157 +    return ptr;
   4.158 +}
   4.159 +
   4.160 +/* Search for a boolean argument; return its position, or 0 if not present */
   4.161 +static int find_boolean(char **argv, const char *argument)
   4.162 +{
   4.163 +    char **arg;
   4.164 +
   4.165 +    for (arg = argv; *arg; arg++) {
   4.166 +	if (!strcmp(*arg, argument))
   4.167 +	    return (arg - argv) + 1;
   4.168 +    }
   4.169 +
   4.170 +    return 0;
   4.171 +}
   4.172 +
   4.173 +/* Stitch together the command line from a set of argv's */
   4.174 +static char *make_cmdline(char **argv)
   4.175 +{
   4.176 +    char **arg;
   4.177 +    size_t bytes, size;
   4.178 +    char *cmdline, *p;
   4.179 +    int i;
   4.180 +
   4.181 +    bytes = 1;			/* Just in case we have a zero-entry cmdline */
   4.182 +    for (arg = argv; *arg; arg++) {
   4.183 +	bytes += strlen(*arg) + 1;
   4.184 +    }
   4.185 +    for (i = 0; i < 255; i++)
   4.186 +    	if (syslinux_getadv(i, &size))
   4.187 +    		bytes += ++size;
   4.188 +  
   4.189 +    p = cmdline = malloc(bytes);
   4.190 +    if (!cmdline)
   4.191 +	return NULL;
   4.192 +
   4.193 +    for (arg = argv; *arg; arg++) {
   4.194 +	int len = strlen(*arg);
   4.195 +	memcpy(p, *arg, len);
   4.196 +	p[len] = ' ';
   4.197 +	p += len + 1;
   4.198 +    }
   4.199 +
   4.200 +    for (i = 0; i < 255; i++) {
   4.201 +    	const void *q = syslinux_getadv(i, &size);
   4.202 +    	if (q == NULL) continue;
   4.203 +    	memcpy(p, q, size);
   4.204 +	p[size] = ' ';
   4.205 +	p += size + 1;
   4.206 +    }
   4.207 +
   4.208 +    if (p > cmdline)
   4.209 +	p--;			/* Remove the last space */
   4.210 +    *p = '\0';
   4.211 +
   4.212 +    return cmdline;
   4.213 +}
   4.214 +
   4.215 +static int main_linux(int argc, char *argv[])
   4.216 +{
   4.217 +    const char *kernel_name;
   4.218 +    struct initramfs *initramfs;
   4.219 +    char *cmdline;
   4.220 +    char *boot_image;
   4.221 +    void *kernel_data;
   4.222 +    size_t kernel_len;
   4.223 +    bool opt_dhcpinfo = false;
   4.224 +    bool opt_quiet = false;
   4.225 +    void *dhcpdata;
   4.226 +    size_t dhcplen;
   4.227 +    char **argp, *arg, *p;
   4.228 +
   4.229 +    openconsole(&dev_null_r, &dev_stdcon_w);
   4.230 +
   4.231 +    (void)argc;
   4.232 +    argp = argv + 1;
   4.233 +
   4.234 +    while ((arg = *argp) && arg[0] == '-') {
   4.235 +	if (!strcmp("-dhcpinfo", arg)) {
   4.236 +	    opt_dhcpinfo = true;
   4.237 +	} else {
   4.238 +	    fprintf(stderr, "%s: unknown option: %s\n", progname, arg);
   4.239 +	    return 1;
   4.240 +	}
   4.241 +	argp++;
   4.242 +    }
   4.243 +
   4.244 +    if (!arg) {
   4.245 +	fprintf(stderr, "%s: missing kernel name\n", progname);
   4.246 +	return 1;
   4.247 +    }
   4.248 +
   4.249 +    kernel_name = arg;
   4.250 +
   4.251 +    boot_image = malloc(strlen(kernel_name) + 12);
   4.252 +    if (!boot_image)
   4.253 +	goto bail;
   4.254 +    strcpy(boot_image, "BOOT_IMAGE=");
   4.255 +    strcpy(boot_image + 11, kernel_name);
   4.256 +    /* argp now points to the kernel name, and the command line follows.
   4.257 +       Overwrite the kernel name with the BOOT_IMAGE= argument, and thus
   4.258 +       we have the final argument. */
   4.259 +    *argp = boot_image;
   4.260 +
   4.261 +    if (find_boolean(argp, "quiet"))
   4.262 +	opt_quiet = true;
   4.263 +
   4.264 +    if (!opt_quiet)
   4.265 +	printf("Loading %s... ", kernel_name);
   4.266 +    if (loadfile(kernel_name, &kernel_data, &kernel_len)) {
   4.267 +	if (opt_quiet)
   4.268 +	    printf("Loading %s ", kernel_name);
   4.269 +	printf("failed!\n");
   4.270 +	goto bail;
   4.271 +    }
   4.272 +    if (!opt_quiet)
   4.273 +	printf("ok\n");
   4.274 +
   4.275 +    cmdline = make_cmdline(argp);
   4.276 +    if (!cmdline)
   4.277 +	goto bail;
   4.278 +
   4.279 +    /* Initialize the initramfs chain */
   4.280 +    initramfs = initramfs_init();
   4.281 +    if (!initramfs)
   4.282 +	goto bail;
   4.283 +
   4.284 +    if ((arg = find_argument(argp, "initrd="))) {
   4.285 +	do {
   4.286 +	    p = strchr(arg, ',');
   4.287 +	    if (p)
   4.288 +		*p = '\0';
   4.289 +
   4.290 +	    if (!opt_quiet)
   4.291 +		printf("Loading %s... ", arg);
   4.292 +	    if (initramfs_load_archive(initramfs, arg)) {
   4.293 +		if (opt_quiet)
   4.294 +		    printf("Loading %s ", kernel_name);
   4.295 +		printf("failed!\n");
   4.296 +		goto bail;
   4.297 +	    }
   4.298 +	    if (!opt_quiet)
   4.299 +		printf("ok\n");
   4.300 +
   4.301 +	    if (p)
   4.302 +		*p++ = ',';
   4.303 +	} while ((arg = p));
   4.304 +    }
   4.305 +
   4.306 +    /* Append the DHCP info */
   4.307 +    if (opt_dhcpinfo &&
   4.308 +	!pxe_get_cached_info(PXENV_PACKET_TYPE_DHCP_ACK, &dhcpdata, &dhcplen)) {
   4.309 +	if (initramfs_add_file(initramfs, dhcpdata, dhcplen, dhcplen,
   4.310 +			       "/dhcpinfo.dat", 0, 0755))
   4.311 +	    goto bail;
   4.312 +    }
   4.313 +
   4.314 +    /* This should not return... */
   4.315 +    syslinux_boot_linux(kernel_data, kernel_len, initramfs, cmdline);
   4.316 +
   4.317 +bail:
   4.318 +    fprintf(stderr, "Kernel load failure (insufficient memory?)\n");
   4.319 +    return 1;
   4.320 +}
   4.321 +
   4.322  int main(int argc, char *argv[])
   4.323  {
   4.324  	unsigned i;
   4.325 @@ -550,7 +849,9 @@
   4.326  		{ "md5sum",	main_md5sum },
   4.327  		{ "ifmem",	main_ifmem  },
   4.328  		{ "reboot",	main_reboot },
   4.329 -		{ "poweroff",	main_poweroff }
   4.330 +		{ "poweroff",	main_poweroff },
   4.331 +		{ "kbdmap",	main_kbdmap },
   4.332 +		{ "linux",	main_linux }
   4.333  	};
   4.334  
   4.335  	openconsole(&dev_null_r, &dev_stdcon_w);
   4.336 @@ -559,5 +860,8 @@
   4.337  	for (i = 0; i < sizeof(bin)/sizeof(bin[0]); i++)
   4.338  		if (strstr(argv[0], bin[i].name))
   4.339  			return bin[i].main(argc, argv);
   4.340 +	printf("No %s in c32box modules\n", argv[0]);
   4.341 +	for (i = 0; i < sizeof(bin)/sizeof(bin[0]); i++)
   4.342 +		printf("  %s \n",bin[i].name);
   4.343  	return 1;
   4.344  }
     5.1 --- a/syslinux/stuff/i18n.cfg	Sun Apr 15 17:25:16 2012 +0200
     5.2 +++ b/syslinux/stuff/i18n.cfg	Sun Apr 15 17:51:38 2012 +0200
     5.3 @@ -2,52 +2,3 @@
     5.4  MENU BEGIN ^lang
     5.5  MENU TITLE Languages
     5.6  
     5.7 -# de
     5.8 -LABEL de
     5.9 -	MENU LABEL Deutsch
    5.10 -	CONFIG de.cfg
    5.11 -LABEL de_CH
    5.12 -	MENU LABEL Deutsch Schweitz
    5.13 -	CONFIG de_CH.cfg
    5.14 -LABEL deCH
    5.15 -	MENU HIDE
    5.16 -	CONFIG de_CH.cfg
    5.17 -# en
    5.18 -LABEL en
    5.19 -	MENU LABEL English UK
    5.20 -	CONFIG en.cfg
    5.21 -LABEL us
    5.22 -	MENU LABEL English US
    5.23 -	CONFIG us.cfg
    5.24 -# es
    5.25 -LABEL es
    5.26 -	MENU LABEL Espanol
    5.27 -	CONFIG es.cfg
    5.28 -# fr
    5.29 -LABEL fr
    5.30 -	MENU LABEL Francais
    5.31 -	CONFIG fr.cfg
    5.32 -LABEL be
    5.33 -	MENU LABEL Francais Belgique
    5.34 -	CONFIG be.cfg
    5.35 -LABEL ca
    5.36 -	MENU LABEL Francais Canada
    5.37 -	CONFIG ca.cfg
    5.38 -LABEL fr_CH
    5.39 -	MENU LABEL Francais Suisse
    5.40 -	CONFIG fr_CH.cfg
    5.41 -LABEL frCH
    5.42 -	MENU HIDE
    5.43 -	CONFIG fr_CH.cfg
    5.44 -# pt
    5.45 -LABEL pt
    5.46 -	MENU LABEL Portugues Brazil
    5.47 -	CONFIG pt.cfg
    5.48 -# ru
    5.49 -LABEL ru
    5.50 -	MENU LABEL Russian
    5.51 -	CONFIG ru.cfg
    5.52 -LABEL exit
    5.53 -	MENU LABEL Back to main menu
    5.54 -MENU EXIT
    5.55 -MENU END
     6.1 --- a/syslinux/stuff/isolinux.cfg	Sun Apr 15 17:25:16 2012 +0200
     6.2 +++ b/syslinux/stuff/isolinux.cfg	Sun Apr 15 17:51:38 2012 +0200
     6.3 @@ -29,8 +29,8 @@
     6.4  # Labels
     6.5  LABEL slitaz
     6.6  	MENU LABEL SliTaz Live
     6.7 -	KERNEL /boot/bzImage
     6.8 -	APPEND initrd=/boot/rootfs.gz rw root=/dev/null vga=normal autologin
     6.9 +	COM32 c32box.c32
    6.10 +	APPEND linux /boot/bzImage initrd=/boot/rootfs.gz rw root=/dev/null vga=normal autologin
    6.11  
    6.12  LABEL help
    6.13  	MENU LABEL Help & Options
    6.14 @@ -40,8 +40,8 @@
    6.15  
    6.16  LABEL md5sum
    6.17  	MENU LABEL Check media
    6.18 -	COM32 md5sum.c32
    6.19 -	append /md5sum
    6.20 +	COM32 c32box.c32
    6.21 +	append md5sum /md5sum
    6.22  
    6.23  LABEL cmdline
    6.24  	MENU LABEL Command Line
    6.25 @@ -53,7 +53,13 @@
    6.26  
    6.27  LABEL reboot
    6.28  	MENU LABEL Reboot System
    6.29 -	COM32 reboot.c32
    6.30 +	COM32 c32box.c32
    6.31 +	append reboot
    6.32 +
    6.33 +LABEL poweroff
    6.34 +	MENU LABEL Power off
    6.35 +	COM32 c32box.c32
    6.36 +	append poweroff
    6.37  
    6.38  # Help files
    6.39  F1 help.en