wok-current 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