wok rev 17489
syslinux/iso2exe: add knoppix support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Thu Jan 01 22:09:19 2015 +0100 (2015-01-01) |
parents | cef92bf1f7cb |
children | 3cbe0810030e |
files | syslinux/receipt syslinux/stuff/iso2exe/Makefile syslinux/stuff/iso2exe/boot.c syslinux/stuff/iso2exe/bootlinux.c syslinux/stuff/iso2exe/init syslinux/stuff/iso2exe/iso2exe.c syslinux/stuff/iso2exe/iso2exe.sh syslinux/stuff/iso2exe/iso9660.c |
line diff
1.1 --- a/syslinux/receipt Wed Dec 31 11:31:10 2014 -0500 1.2 +++ b/syslinux/receipt Thu Jan 01 22:09:19 2015 +0100 1.3 @@ -13,7 +13,7 @@ 1.4 1.5 DEPENDS="ipxe memtest" 1.6 BUILD_DEPENDS="kbd-base perl nasm dev86 lzma mingw32-gcc upx posixovl \ 1.7 -util-linux-uuid-dev" 1.8 +util-linux-uuid-dev advancecomp" 1.9 1.10 # Rules to gen a SliTaz package suitable for Tazpkg. 1.11 compile_rules()
2.1 --- a/syslinux/stuff/iso2exe/Makefile Wed Dec 31 11:31:10 2014 -0500 2.2 +++ b/syslinux/stuff/iso2exe/Makefile Thu Jan 01 22:09:19 2015 +0100 2.3 @@ -9,17 +9,18 @@ 2.4 objcopy -O binary meminfo.o meminfo.exe 2.5 chmod +x $@ 2.6 2.7 -iso2exe: iso2exe.sh boot.com bootiso.bin init win32.exe 2.8 +iso2exe: iso2exe.sh boot.com bootiso.bin init win32.exe ../mbr/isohdpfx.bin 2.9 + cp ../mbr/isohdpfx.bin . 2.10 cp iso2exe.sh $@ 2.11 chmod +x $@ 2.12 - ./$@ --build boot.com bootiso.bin init win32.exe 2.13 + ./$@ --build boot.com bootiso.bin init win32.exe isohdpfx.bin 2.14 2.15 isohybrid.res: isohybrid.rc isohybrid.ico 2.16 i586-pc-mingw32-windres $< -O coff -o $@ 2.17 2.18 -iso2exe.h: iso2exe ../mbr/isohdpfx.bin 2.19 +iso2exe.h: iso2exe 2.20 chmod +x iso2exe.sh 2.21 - ./iso2exe.sh --array ../mbr/isohdpfx.bin > $@ 2.22 + ./iso2exe.sh --array isohdpfx.bin > $@ 2.23 2.24 iso2exe.com: iso2exe.c iso2exe.h 2.25 $(BCC) $(BCCFLAGS) -o $@ iso2exe.c && upx --ultra-brute $@
3.1 --- a/syslinux/stuff/iso2exe/boot.c Wed Dec 31 11:31:10 2014 -0500 3.2 +++ b/syslinux/stuff/iso2exe/boot.c Thu Jan 01 22:09:19 2015 +0100 3.3 @@ -10,10 +10,10 @@ 3.4 static void usage(char *iso) 3.5 { 3.6 printf("Usage: %s [[@commands]|[kernel=<bzimage>] \ 3.7 -[initrd=<rootfs>[,<rootfs2>...]] [iso=<isofile>] ...]\n\n\ 3.8 +[initrd=<rootfs>[,<rootfs2>...]] [bootfrom=<isofile>] ...]\n\n\ 3.9 Defaults: %s @tazboot.cmd or %s kernel=bzImage auto\n\n\ 3.10 Examples for tazboot.cmd:\n\n\ 3.11 - iso=\\isos\\slitaz-4.0.iso\n\ 3.12 + bootfrom=\\isos\\slitaz-4.0.iso\n\ 3.13 kernel=boot/bzImage\n\ 3.14 initrd=boot/rootfs4.gz,boot/rootfs3.gz,boot/rootfs2.gz,boot/rootfs1.gz,\\slitaz\\extrafs.gz\n\ 3.15 rw root=/dev/null vga=normal autologin\n\n\ 3.16 @@ -25,30 +25,52 @@ 3.17 static void bootiso(char **iso) 3.18 { 3.19 char *init = " rdinit=/init.exe", *mode="menu", *fmt=""; 3.20 - char c, rootfs[16], cmdline[256]; 3.21 - int restart; 3.22 + char *s, c, rootfs[16], fallback[16], cmdline[256]; 3.23 + int restart, isknoppix = 0; 3.24 unsigned long magic; 3.25 3.26 - if (isoreset(*iso) || isoopen("boot")) return; 3.27 + if (isoreset(*iso)) return; 3.28 + !isoopen("boot") || 3.29 + !isoopen("live") || // debian 3.30 + !isoopen("casper") || // ubuntu 3.31 + !isoopen("isolinux"); // zeroshell 3.32 if (iso[1] && !strcmp(mode = iso[1], "text")) 3.33 init = ""; 3.34 + do { 3.35 + if (!isoopen(mode) || // custom 3.36 + !isoopen("bzImage") || // SliTaz 3.37 + !isoopen("linux24") || // dsl 3.38 + !isoopen("vmlinuz") || // misc 3.39 + (!isoopen("linux") && ++isknoppix)) { 3.40 + magic = loadkernel(); 3.41 + break; 3.42 + } 3.43 + } while (!isoopen("isolinux")); // Knoppix 3.44 + fallback[0] = 0; 3.45 for (c = 0, restart = 1; isoreaddir(restart) == 0; restart = 0) { 3.46 + if (strstr(isofilename, ".gz")) 3.47 + strcpy(fallback, isofilename); 3.48 if (strncmp(isofilename, "rootfs", 6) 3.49 || c > isofilename[6]) continue; 3.50 strcpy(rootfs, isofilename); 3.51 c = isofilename[6]; 3.52 } 3.53 - if (isoopen(mode)) 3.54 - isoopen("bzImage"); 3.55 - magic = loadkernel(); 3.56 + 3.57 if (magic < 0x20630) 3.58 init = ""; // Does not support multiple initramfs 3.59 + 3.60 if (magic > 0) { 3.61 - fmt = "rw root=/dev/null%s iso=%s magic=%lu mode=%s autologin"; 3.62 - if (rootfs[6] != '.' && !isoopen("rootfs.gz")) 3.63 - loadinitrd(); // for loram 3.64 - isoopen(rootfs); 3.65 - loadinitrd(); 3.66 + char *initrd = fallback; 3.67 + 3.68 + fmt = "rw root=/dev/null bootfrom=%s%s magic=%lu mode=%s autologin"; 3.69 + if (rootfs[0]) { 3.70 + initrd = rootfs; 3.71 + if (rootfs[6] != '.' && !isoopen("rootfs.gz")) 3.72 + loadinitrd(); // for loram 3.73 + } 3.74 + if (!isoopen(initrd)) { 3.75 + loadinitrd(); 3.76 + } 3.77 if (*init) { 3.78 lseek(isofd, 24L, SEEK_SET); 3.79 read(isofd, &magic, 4); 3.80 @@ -58,7 +80,13 @@ 3.81 else init=""; 3.82 } 3.83 } 3.84 - sprintf(cmdline, fmt, init, *iso, magic, mode); 3.85 + if (isknoppix) { 3.86 + if (iso[0][1] == ':') 3.87 + *iso += 2; 3.88 + for (s = *iso; *s; s++) 3.89 + if (*s == '\\') *s = '/'; 3.90 + } 3.91 + sprintf(cmdline, fmt, *iso, init, magic, mode); 3.92 close(isofd); 3.93 bootlinux(cmdline); 3.94 } 3.95 @@ -159,7 +187,7 @@ 3.96 kernel = s + 7; 3.97 else if (stricmp("initrd=", s) == 0) 3.98 initrd = s + 7; 3.99 - else if (stricmp("iso=", s) == 0) 3.100 + else if (stricmp("bootfrom=", s) == 0) 3.101 iso = s + 4; 3.102 else { 3.103 cmdline = s;
4.1 --- a/syslinux/stuff/iso2exe/bootlinux.c Wed Dec 31 11:31:10 2014 -0500 4.2 +++ b/syslinux/stuff/iso2exe/bootlinux.c Thu Jan 01 22:09:19 2015 +0100 4.3 @@ -139,7 +139,7 @@ 4.4 #endasm 4.5 } 4.6 4.7 -static unsigned zimage = 0; 4.8 +static unsigned vgamode, zimage = 0; 4.9 static unsigned getss(void) 4.10 { 4.11 #asm 4.12 @@ -260,6 +260,7 @@ 4.13 syssize = LONG(buffer + SYSSIZE) << 4; 4.14 if (!syssize) syssize = 0x7F000; 4.15 setup = (1 + buffer[SETUPSECTORS]) << 9; 4.16 + vgamode = WORD(buffer + VIDEOMODE); 4.17 if (setup == 512) { 4.18 #ifdef LINUX001_SUPPORT 4.19 if (WORD(buffer + 0x3F) == 0x3AE8) /* linux 0.01 */ 4.20 @@ -355,10 +356,26 @@ 4.21 4.22 void bootlinux(char *cmdline) 4.23 { 4.24 + char *s; 4.25 + 4.26 + s = strstr(cmdline," vga="); 4.27 + if (s) { 4.28 + vgamode = -1; 4.29 + s += 5; 4.30 + switch (*s | 0x20) { 4.31 + case 'a' : vgamode--; 4.32 + case 'e' : vgamode--; 4.33 + case 'n' : break; 4.34 + default : vgamode = atoi(s); 4.35 + } 4.36 + } 4.37 dosshutdown(); 4.38 #asm 4.39 cld 4.40 mov es, _setupseg 4.41 + mov ax, _vgamode 4.42 + seg es 4.43 + mov VIDEOMODE, ax 4.44 mov ax, _setup_version 4.45 cmp ax, #0x200 4.46 jb noinitrd
5.1 --- a/syslinux/stuff/iso2exe/init Wed Dec 31 11:31:10 2014 -0500 5.2 +++ b/syslinux/stuff/iso2exe/init Thu Jan 01 22:09:19 2015 +0100 5.3 @@ -18,6 +18,71 @@ 5.4 sed "/$1=/!d;s/.*$1=\\([^ ]*\\).*/\\1/" /proc/cmdline 5.5 } 5.6 5.7 +clear() 5.8 +{ 5.9 + echo -e "\x1B[1;1H\x1B[J" 5.10 +} 5.11 + 5.12 +tinydialog() 5.13 +{ 5.14 + clear 5.15 + label="" 5.16 + while [ "$1" ]; do 5.17 + case "$1" in 5.18 + --title) title=" \x1B[30;47m$2\x1B[37;40m\n" 5.19 + echo -e $title; shift ;; 5.20 + --yes-label) label="$2" ; shift ;; 5.21 + --textbox) 5.22 + less "$2" < /dev/tty0 > /dev/tty0 5.23 + break;; 5.24 + --gauge) 5.25 + t=" " 5.26 + echo -e "$t$2\n" 5.27 + while read pct ; do 5.28 + s=" " 5.29 + s="$s$pct%$s" 5.30 + pct=$((($pct*63)/100)) 5.31 + echo -en "\r$t\x1B[30;47m$(echo "$s" | cut -c-$pct)\x1B[37;40m$(echo "$s" | cut -c$(($pct+1))-)" 5.32 + done 5.33 + break;; 5.34 + --yesno) 5.35 + while true; do 5.36 + clear 5.37 + echo "$2" | sed 's/\\n/\n/g' 5.38 + echo -en "\n <- 1:${label:-Yes} 2:Cancel\r" 5.39 + read x 5.40 + case "$x" in 5.41 + ''|Y*|y*|1) return 0;; 5.42 + N*|n*|2|0) return 1;; 5.43 + esac 5.44 + done ;; 5.45 + --menu|--radiolist) 5.46 + label="$2" 5.47 + shift 5 5.48 + echo -e "$title\n$label\n0 Cancel" > /tmp/data 5.49 + n=1 5.50 + while [ "$1" ]; do 5.51 + eval key_$n='$1' 5.52 + echo "$((n++)) $2" 5.53 + case "$3" in on|off) shift;; esac 5.54 + shift 2 5.55 + done >> /tmp/data 5.56 + while ! grep -q "^$n " /tmp/data ; do 5.57 + clear 5.58 + [ $(wc -l < /tmp/data) -gt 20 ] && 5.59 + less /tmp/data || cat /tmp/data 5.60 + echo -en "\n <- Enter the selection number\r" 5.61 + read n 5.62 + done 2> /dev/null 5.63 + rm -f /tmp/data 5.64 + [ $n -eq 0 ] && return 1 5.65 + eval echo -n \$key_$n 1>&2 5.66 + return 0;; 5.67 + esac 5.68 + shift 5.69 + done 5.70 +} 5.71 + 5.72 mount_proc() 5.73 { 5.74 mount -t proc /proc /proc 5.75 @@ -69,11 +134,11 @@ 5.76 getiso() 5.77 { 5.78 mkdir -p /media/cdrom 5.79 - blkid | while read dev info ; do 5.80 - mount ${dev%:} /mnt 5.81 + for dev in /sys/block/?d?/?d??* ; do 5.82 + mount /dev/$(basename $dev) /mnt 5.83 if checkmagic /mnt/$ISO; then 5.84 mount -o loop,ro /mnt/$ISO /media/cdrom 5.85 - echo "Found $ISO on ${dev%:}" 5.86 + echo "Found $ISO on $(basename $dev)" 5.87 break 5.88 fi 5.89 umount /mnt 5.90 @@ -82,6 +147,7 @@ 5.91 5.92 uncpio() 5.93 { 5.94 + [ -s "$1" ] || return 5.95 echo -en "\n Extracting $(basename $1) ..." 5.96 case $(get 0 $1) in 5.97 *35615) ( zcat || gunzip ) ;; 5.98 @@ -363,10 +429,10 @@ 5.99 any linux kernel, multiple initramfs, a kernel command line and 5.100 an ISO image file loopback (retrieves files from an ISO file).\n\n 5.101 Usage: tazboot.exe [[@commands]|[kernel=<bzimage>] 5.102 -[initrd=<rootfs>[,<rootfs2>...]] [iso=<isofile>] cmdline args ...]\n\n 5.103 +[initrd=<rootfs>[,<rootfs2>...]] [bootfrom=<isofile>] cmdline args ...]\n\n 5.104 Defaults: tazboot @tazboot.cmd or tazboot kernel=bzImage auto\n\n\ 5.105 Examples for tazboot.cmd:\n\n\ 5.106 - iso=\\isos\\slitaz-4.0.iso\n\ 5.107 + bootfrom=\\isos\\slitaz-4.0.iso\n\ 5.108 kernel=boot/bzImage\n\ 5.109 initrd=boot/rootfs4.gz,boot/rootfs3.gz,boot/rootfs2.gz,boot/rootfs1.gz\n\ 5.110 rw root=/dev/null autologin\n\n\ 5.111 @@ -380,7 +446,7 @@ 5.112 md5() 5.113 { 5.114 dotwait "Checking files" 5.115 - ( cd /media/cdrom ; md5sum -c md5sum* ) > /tmp/data 5.116 + ( cd /media/cdrom ; ${1:-md5sum -c md5sum*} ) > /tmp/data 5.117 rm -f /tmp/wait 5.118 $DIALOG --clear \ 5.119 --title " Checked files " \ 5.120 @@ -388,11 +454,19 @@ 5.121 rm -f /tmp/data 5.122 } 5.123 5.124 +sha() 5.125 +{ 5.126 + gotcdfile sha*sum* 5.127 + sha=$(basename $file) 5.128 + md5 "${sha%sum*}sum -c ${file#/media/cdrom/}" 5.129 +} 5.130 + 5.131 readme() 5.132 { 5.133 + gotcdfile README* 5.134 $DIALOG --clear \ 5.135 --title " Readme " \ 5.136 - --textbox /media/cdrom/README 24 78 5.137 + --textbox $file 24 78 5.138 } 5.139 5.140 bootlog() 5.141 @@ -424,14 +498,11 @@ 5.142 computers. BIOS based memory tests are a quick, cursory check and often 5.143 miss many of the failures that are detected by Memtest86.\n 5.144 " 12 70 5.145 - [ $? -eq 0 ] || return 5.146 - cp /media/cdrom/boot/memtest /mnt/memtest.exe 5.147 + [ $? -eq 0 ] && gotcdfile memtest* && cp $file /mnt/memtest.exe 5.148 } 5.149 5.150 -mkfloppy() 5.151 +mkfat12() 5.152 { 5.153 - dotwait "Create a $(basename $1) boot floppy" 5.154 - ddq if=$1 of=/dev/fd0 5.155 [ $(($(get 0 $1) - 0x5A4D)) -eq 0 ] || return 5.156 J=$(($(get 3 $1 1) + 0x02)) 5.157 R=$((1 + $(get 497 $1 1) + 1 + ($(get 500 $1)-1)/32)) 5.158 @@ -452,6 +523,13 @@ 5.159 bytes2bin 0xF0 0xFF 0xFF | ddq bs=512 seek=$i of=/dev/fd0 5.160 done 5.161 echo -n $(basename $1) | ddq bs=1 seek=3 count=8 of=/dev/fd0 5.162 +} 5.163 + 5.164 +mkfloppy() 5.165 +{ 5.166 + dotwait "Create a $(basename $1) boot floppy" 5.167 + ddq if=$1 of=/dev/fd0 5.168 + mkfat12 $1 5.169 rm -f /tmp/wait 5.170 } 5.171 5.172 @@ -465,12 +543,13 @@ 5.173 miss many of the failures that are detected by Memtest86.\n\n 5.174 Please insert a blank disk in floppy drive.\n 5.175 " 12 70 5.176 - [ $? -eq 0 ] && mkfloppy /media/cdrom/boot/memtest 5.177 + [ $? -eq 0 ] && gotcdfile memtest* && mkfloppy $file 5.178 } 5.179 5.180 pxe() 5.181 { 5.182 - pxe=$(ls /media/cdrom/boot/?pxe) 5.183 + gotcdfile ?pxe 5.184 + pxe=$(ls $file) 5.185 $DIALOG --clear \ 5.186 --title " Create $(basename $pxe).exe ? " \ 5.187 --yes-label "Install" --yesno \ 5.188 @@ -494,7 +573,7 @@ 5.189 from the Web using PXE and HTTP protocols.\n\n 5.190 Please insert a blank disk in floppy drive.\n 5.191 " 12 70 5.192 - [ $? -eq 0 ] && mkfloppy /media/cdrom/boot/?pxe 5.193 + [ $? -eq 0 ] && gotcdfile ?pxe && mkfloppy $file 5.194 } 5.195 5.196 gotposixovl() 5.197 @@ -508,11 +587,17 @@ 5.198 [ "$(which $1)" ] && echo -en "\"$2\" \"$3\"" 5.199 } 5.200 5.201 +gotcdfile() 5.202 +{ 5.203 + for file in /media/cdrom/$1 /media/cdrom/*/$1 \ 5.204 + /media/cdrom/*/isolinux/$1 ; do 5.205 + [ -s $file ] && break 5.206 + done 5.207 +} 5.208 + 5.209 cdfile() 5.210 { 5.211 - for i in ${1//,/ }; do 5.212 - [ -s /media/cdrom/$i ] && echo -en "\"$2\" \"$3\"" && break 5.213 - done 5.214 + gotcdfile "$1" && echo -en "\"$2\" \"$3\"" 5.215 } 5.216 5.217 cdfilex() 5.218 @@ -522,7 +607,8 @@ 5.219 5.220 cdexe() 5.221 { 5.222 - [ $(get 0 /media/cdrom/$1 2> /dev/null || echo 0) -eq 23117 ] && 5.223 + gotcdfile "$1" && 5.224 + [ $(get 0 $file 2>/dev/null || echo 0) -eq 23117 ] && 5.225 echo -en "\"$2\" \"$3\"" 5.226 } 5.227 5.228 @@ -723,18 +809,21 @@ 5.229 poweroff -f 5.230 } 5.231 5.232 -runmemtest() 5.233 +dokexec() 5.234 { 5.235 - kexec -l /media/cdrom/boot/memtest 5.236 + kexec -l $file 5.237 dosync 5.238 kexec -e 5.239 } 5.240 5.241 +runmemtest() 5.242 +{ 5.243 + gotcdfile memtest* && dokexec 5.244 +} 5.245 + 5.246 runpxe() 5.247 { 5.248 - kexec -l /media/cdrom/boot/?pxe 5.249 - dosync 5.250 - kexec -e 5.251 + gotcdfile ?pxe && dokexec 5.252 } 5.253 5.254 shell() 5.255 @@ -744,9 +833,9 @@ 5.256 5.257 BIN=bin/mount.posixovl 5.258 [ -x /usr/s$BIN ] || mv /bin/mount.posixovl.iso2exe \ 5.259 -/usr/s$BIN 2> /dev/null || mv /bin/mount.posixovl.iso2exe /$BIN 5.260 +/usr/s$BIN 2> /dev/null || mv /bin/mount.posixovl.iso2exe /$BIN 2> /dev/null 5.261 mount_proc 5.262 -ISO="$(getarg iso | sed 's/.://;s|\\|/|g')" 5.263 +ISO="$(getarg bootfrom | sed 's/.://;s|\\|/|g')" 5.264 getiso 5.265 mount_loram 5.266 case "${ISO##*/}$(getarg mode)" in 5.267 @@ -754,7 +843,7 @@ 5.268 *live*|*LIVE*) live ;; 5.269 *text*|*TEXT*) text ;; 5.270 esac 5.271 -which $DIALOG 2> /dev/null || live 5.272 +which $DIALOG 2> /dev/null || DIALOG=tinydialog 5.273 dmesg > /tmp/dmesg 5.274 5.275 while true; do 5.276 @@ -762,14 +851,15 @@ 5.277 locale="$(sed '/^LANG=/!d;s/.*=//' /etc/locale.conf 2> /dev/null)" 5.278 cat > /tmp/dialog <<EOT 5.279 $DIALOG --clear \ 5.280 - --title " Welcome to SliTaz " \ 5.281 + --title " Welcome to Linux " \ 5.282 --menu "" 23 70 17 \ 5.283 -$(xfile tazkeymap "tazkeymap" "Select keyboard ($keymap)") \ 5.284 -$(xfile tazlocale "tazlocale" "Select locale ($locale)") \ 5.285 -$(cdfile boot/bzImage "live" "SliTaz RAM boot") \ 5.286 - "text" "SliTaz RAM boot (text mode only)" \ 5.287 -$(cdfile README "readme" "Show the README file") \ 5.288 +$(xfile tazkeymap "tazkeymap" "Select keyboard (${keymap:-none})") \ 5.289 +$(xfile tazlocale "tazlocale" "Select locale (${locale:-none})") \ 5.290 +$(cdfile boot/bzImage "live" "Linux RAM boot (full desktop)") \ 5.291 + "text" "Linux RAM boot" \ 5.292 +$(cdfile README* "readme" "Show the README file") \ 5.293 $(cdfile md5sum* "md5" "Check ISO files") \ 5.294 +$(cdfile sha*sum* "sha" "Check ISO files") \ 5.295 $(gotposixovl "install" "Hard disk installation (UMSDOS way)") \ 5.296 $(gotposixovl "installtaz" "Hard disk installation (TAZUSB way)") \ 5.297 $(xfile tazusb "usbkey" "USB key read/write installation") \ 5.298 @@ -777,14 +867,12 @@ 5.299 $(fddata "fdbootstrap" "Create a floppy bootstrap") \ 5.300 $(cdfile boot/bzImage "tazboot" "Get tazboot.exe Linux loader") \ 5.301 $(cdexe boot/bzImage "bzimage" "Get linux DOS/EXE file") \ 5.302 -$(cdexe boot/memtest "memtest" "Get Memtest86 DOS/EXE file") \ 5.303 -$(cdfile boot/memtest,boot/isolinux/memtest \ 5.304 - "fdmemtest" "Create a Memtest86 boot floppy") \ 5.305 -$(cdfilex boot/memtest,boot/isolinux/memtest \ 5.306 - "runmemtest" "Start Memtest86") \ 5.307 -$(cdexe boot/?pxe "pxe" "Get SliTaz Web boot DOS/EXE utility") \ 5.308 -$(cdfile boot/?pxe "fdpxe" "Create a SliTaz Web boot floppy") \ 5.309 -$(cdfilex boot/?pxe "runpxe" "Start the SliTaz Web boot utility") \ 5.310 +$(cdexe memtest* "memtest" "Get Memtest86 DOS/EXE file") \ 5.311 +$(cdfile memtest* "fdmemtest" "Create a Memtest86 boot floppy") \ 5.312 +$(cdfilex memtest* "runmemtest" "Start Memtest86") \ 5.313 +$(cdexe ?pxe "pxe" "Get SliTaz Web boot DOS/EXE utility") \ 5.314 +$(cdfile ?pxe "fdpxe" "Create a SliTaz Web boot floppy") \ 5.315 +$(cdfilex ?pxe "runpxe" "Start the SliTaz Web boot utility") \ 5.316 $(xfile reboot "restart" "Restart the computer") \ 5.317 $(xfile poweroff "stop" "Power off") \ 5.318 "bootlog" "Linux boot messages" \ 5.319 @@ -792,7 +880,7 @@ 5.320 5.321 EOT 5.322 exec 3>&1 5.323 - value=$(sh /tmp/dialog 2>&1 1>&3) 5.324 + value=$(. /tmp/dialog 2>&1 1>&3) 5.325 retval=$? 5.326 exec 3>&- 5.327 [ $retval -eq 0 ] || continue
6.1 --- a/syslinux/stuff/iso2exe/iso2exe.c Wed Dec 31 11:31:10 2014 -0500 6.2 +++ b/syslinux/stuff/iso2exe/iso2exe.c Thu Jan 01 22:09:19 2015 +0100 6.3 @@ -12,7 +12,7 @@ 6.4 #include "iso2exe.h" 6.5 6.6 static int fd, forced, status = 1; 6.7 -static char tazlitoinfo[10*1024]; 6.8 +static char tazlitoinfo[0x8000U - BOOTISOSZ]; 6.9 #define buffer tazlitoinfo 6.10 #define BUFFERSZ 2048 6.11 #define WORD(n) * (unsigned short *) (n) 6.12 @@ -31,7 +31,7 @@ 6.13 { 6.14 #define heads 64 6.15 #define sectors 32 6.16 -#define partition 446 6.17 +#define partition (446+16) 6.18 #define trksz (512UL * heads * sectors) 6.19 unsigned long size, catalog, lba; 6.20 int cylinders, i, j, isohybrid; 6.21 @@ -69,14 +69,23 @@ 6.22 LONG(bootiso + isohybrid + 440) = rand(); 6.23 LONG(bootiso + isohybrid + partition) = 0x10080UL; 6.24 WORD(bootiso + isohybrid + 510) = 0xAA55U; 6.25 +#if 0 6.26 size = lseek(fd, 0UL, SEEK_END); 6.27 - cylinders = (size + trksz - 1) / trksz; 6.28 + size += 0x000FFFFFUL; 6.29 + size &= 0xFFF00000UL; 6.30 +#else 6.31 + for (size = 0x000FFFFFUL; /* 1M - 1 */ 6.32 + read(fd, tazlitoinfo, 1024) == 1024; 6.33 + size += 1024); 6.34 + size &= 0xFFF00000UL; /* round */ 6.35 +#endif 6.36 + cylinders = (size >> 20) - 1; 6.37 bootiso[isohybrid + partition + 4] = 23; /* "Windows hidden IFS" */ 6.38 bootiso[isohybrid + partition + 5] = heads - 1; 6.39 - bootiso[isohybrid + partition + 6] = (((cylinders - 1) & 0x300) >> 2) + sectors; 6.40 - bootiso[isohybrid + partition + 7] = (cylinders - 1) & 0xFF; 6.41 + bootiso[isohybrid + partition + 6] = ((cylinders & 0x300) >> 2) + sectors; 6.42 + bootiso[isohybrid + partition + 7] = cylinders & 0xFF; 6.43 LONG(bootiso + isohybrid + partition + 8) = 0; 6.44 - LONG(bootiso + isohybrid + partition + 12) = cylinders * sectors * heads; 6.45 + LONG(bootiso + isohybrid + partition + 12) = (size >> 9); 6.46 6.47 /* Copy the partition table */ 6.48 memcpy(bootiso + 0x1BE, bootiso + isohybrid + 0x1BE, 66); 6.49 @@ -93,8 +102,7 @@ 6.50 n = (bootiso[69] + 1) * 512; 6.51 lseek(fd, 0UL, SEEK_SET); 6.52 write(fd, bootiso, n); /* EXE/PE + isohybrid mbr */ 6.53 - write(fd, tazlitoinfo, ((0x8000U - BOOTISOSZ) > sizeof(tazlitoinfo)) 6.54 - ? sizeof(tazlitoinfo) : (0x8000U - BOOTISOSZ)); 6.55 + write(fd, tazlitoinfo, sizeof(tazlitoinfo)); 6.56 write(fd, bootiso + n, BOOTISOSZ - n); /* COM + rootfs + EXE/DOS */ 6.57 6.58 /* Compute the checksum */
7.1 --- a/syslinux/stuff/iso2exe/iso2exe.sh Wed Dec 31 11:31:10 2014 -0500 7.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh Thu Jan 01 22:09:19 2015 +0100 7.3 @@ -20,7 +20,11 @@ 7.4 7.5 compress() 7.6 { 7.7 - if [ "$(which xz 2> /dev/null)" ]; then 7.8 + if [ "$1" ]; then 7.9 + gzip -9 > $1 7.10 + [ "$(which advdef 2> /dev/null)" ] && 7.11 + advdef -z4 $1 > /dev/null 7.12 + elif [ "$(which xz 2> /dev/null)" ]; then 7.13 xz -z -e --format=lzma --lzma1=mode=normal --stdout 7.14 else 7.15 lzma e -si -so 7.16 @@ -33,12 +37,16 @@ 7.17 mkdir -p $TMP/bin $TMP/dev 7.18 cp -a /dev/?d?* /dev/tty /dev/tty0 $TMP/dev 7.19 $0 --get init > $TMP/init.exe 7.20 - grep -q mount.posixovl.iso2exe $TMP/init.exe && 7.21 - cp /usr/sbin/mount.posixovl $TMP/bin/mount.posixovl.iso2exe \ 7.22 - 2> /dev/null && echo "Store mount.posixovl ($(wc -c \ 7.23 - < /usr/sbin/mount.posixovl) bytes) ..." 7.24 +# mount -o loop,ro $1 $TMP 7.25 +# oldslitaz="$(ls $TMP/boot/isolinux/splash.lss 2> /dev/null)" 7.26 +# umount -d $TMP 7.27 +# [ "$oldslitaz" ] && # for SliTaz <= 3.0 only... 7.28 +# grep -q mount.posixovl.iso2exe $TMP/init.exe && 7.29 +# cp /usr/sbin/mount.posixovl $TMP/bin/mount.posixovl.iso2exe \ 7.30 +# 2> /dev/null && echo "Store mount.posixovl ($(wc -c \ 7.31 +# < /usr/sbin/mount.posixovl) bytes) ..." 7.32 find $TMP -type f -print0 | xargs -0 chmod +x 7.33 - ( cd $TMP ; find * | cpio -o -H newc ) | compress > $TMP/rootfs.gz 7.34 + ( cd $TMP ; find * | cpio -o -H newc ) | compress $TMP/rootfs.gz 7.35 SIZE=$(wc -c < $TMP/rootfs.gz) 7.36 store 24 $SIZE $1 7.37 OFS=$(( $OFS - $SIZE )) 7.38 @@ -66,7 +74,6 @@ 7.39 7.40 add_win32exe() 7.41 { 7.42 - ddq if=/tmp/exe$$ of=$1 conv=notrunc 7.43 SIZE=$($0 --get win32.exe 2> /dev/null | tee /tmp/exe$$ | wc -c) 7.44 printf "Adding WIN32 file at %04X (%d bytes) ...\n" 0 $SIZE 7.45 ddq if=/tmp/exe$$ of=$1 conv=notrunc 7.46 @@ -209,7 +216,7 @@ 7.47 esac 7.48 case "$(get 0 $1)" in 7.49 23117) echo "The file $1 is already an EXE file." 1>&2 && exit 1;; 7.50 - 0) [ -x /usr/bin/isohybrid ] && isohybrid $1 && echo "Do isohybrid" 7.51 + 0) $0 --get isohdpfx.bin | ddq bs=512 count=1 of=$1 conv=notrunc 7.52 esac 7.53 7.54 echo "Read hybrid & tazlito data..."
8.1 --- a/syslinux/stuff/iso2exe/iso9660.c Wed Dec 31 11:31:10 2014 -0500 8.2 +++ b/syslinux/stuff/iso2exe/iso9660.c Thu Jan 01 22:09:19 2015 +0100 8.3 @@ -1,11 +1,14 @@ 8.4 #include <sys/types.h> 8.5 #include <fcntl.h> 8.6 #include <stdio.h> 8.7 +#include <string.h> 8.8 #include "iso9660.h" 8.9 #define __ROCKRIDGE 8.10 +#ifdef __AS386_16__ 8.11 #asm 8.12 use16 86 8.13 #endasm 8.14 +#endif 8.15 8.16 char *isofilename; 8.17 unsigned long isofileofs, isofilesize; 8.18 @@ -69,7 +72,7 @@ 8.19 dirsize = isodirsize; 8.20 pos = SECTORSZ; 8.21 } 8.22 - if (pos >= SECTORSZ) { 8.23 + if (pos >= SECTORSZ || * (short *) (buffer + pos) == 0) { 8.24 if (dirsize < SECTORSZ) return -1; 8.25 readsector(dirofs); 8.26 dirofs += SECTORSZ; 8.27 @@ -124,6 +127,9 @@ 8.28 return 0; 8.29 } 8.30 8.31 +#ifndef __AS386_16__ 8.32 +#define cpuhaslm() (0) 8.33 +#else 8.34 static int cpuhaslm(void) 8.35 { 8.36 #asm 8.37 @@ -164,6 +170,7 @@ 8.38 not386: 8.39 #endasm 8.40 } 8.41 +#endif 8.42 8.43 #define IS_DIR(x)( ((x) & ~0777) == 040000) 8.44 int isoopen(char *filename) 8.45 @@ -187,7 +194,7 @@ 8.46 char *n = name, *i = isofilename; 8.47 if (_64bits) { 8.48 int len = strlen(name); 8.49 - if (strncmp(name, isofilename), len) continue; 8.50 + if (strncmp(name, isofilename, len)) continue; 8.51 n = "64"; 8.52 i += len; 8.53 }