wok diff syslinux/stuff/iso2exe/iso2exe.sh @ rev 18804

Up vanessa_adt (0.0.9), vanessa_logger (0.0.10), vanessa_socket (0.0.12)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Jan 13 22:13:51 2016 +0100 (2016-01-13)
parents 429407501864
children 49be2e5503d0
line diff
     1.1 --- a/syslinux/stuff/iso2exe/iso2exe.sh	Tue Jan 12 15:40:40 2016 +0100
     1.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh	Wed Jan 13 22:13:51 2016 +0100
     1.3 @@ -35,7 +35,7 @@
     1.4  {
     1.5  	TMP=/tmp/iso2exe$$
     1.6  	mkdir -p $TMP/bin $TMP/dev
     1.7 -	cp -a /dev/?d?* /dev/tty /dev/tty0 $TMP/dev
     1.8 +	cp -a /dev/tty /dev/tty0 $TMP/dev
     1.9  	$0 --get init > $TMP/init.exe
    1.10  #	mount -o loop,ro $1 $TMP
    1.11  #	oldslitaz="$(ls $TMP/boot/isolinux/splash.lss 2> /dev/null)"
    1.12 @@ -125,6 +125,49 @@
    1.13  	fi
    1.14  }
    1.15  
    1.16 +fileofs()
    1.17 +{
    1.18 +	[ $(get 1024 $ISO) -eq 35615 ] && i=1024 || i=$((512*(1+$(get 417 $ISO 1))))
    1.19 +	stub=$(($(get 20 $ISO) - 0xC0))
    1.20 +	SIZE=0; OFFSET=0
    1.21 +	case "$1" in
    1.22 +	win32.exe)	[ $i -eq 1024 ] || SIZE=$(($i - 512));;
    1.23 +	syslinux.mbr)	[ $i -eq 1024 ] || OFFSET=$(($i - 512)); SIZE=512;;
    1.24 +	flavor.info)	OFFSET=$i; SIZE=-1;;
    1.25 +	floppy.boot)	SIZE=$(($(get 26 $ISO 1)*512))
    1.26 +			OFFSET=$(($(get 64 $ISO) - 0xC0 - $SIZE));;
    1.27 +	rootfs.gz)	SIZE=$(get 24 $ISO); OFFSET=$(($stub - $SIZE));;
    1.28 +	tazboot.com)	OFFSET=$(($(get 64 $ISO) - 0xC0))
    1.29 +			SIZE=$(($stub - $(get 24 $ISO) - $OFFSET));;
    1.30 +	dosstub)	OFFSET=$stub; SIZE=$((0x8000 - $OFFSET));;
    1.31 +	md5)		OFFSET=$((0x7FF0)); SIZE=16;;
    1.32 +	esac
    1.33 +}
    1.34 +
    1.35 +list()
    1.36 +{
    1.37 +	for f in win32.exe syslinux.mbr flavor.info floppy.boot \
    1.38 +		 dosstub rootfs.gz tazboot.com md5 ; do
    1.39 +		fileofs $f
    1.40 +		[ $SIZE -eq 0 ] && continue
    1.41 +		echo -n "$f at $(printf "%X\n" $OFFSET)"
    1.42 +		[ $SIZE -eq -1 ] || echo -n " ($SIZE bytes)"
    1.43 +		echo .
    1.44 +	done
    1.45 +}
    1.46 +
    1.47 +extract()
    1.48 +{
    1.49 +	for f in $@; do
    1.50 +		fileofs $f
    1.51 +		case "$SIZE" in
    1.52 +		0) ;;
    1.53 +		-1) ddq bs=1 count=20480 skip=$OFFSET if="$ISO" | zcat >$f ;;
    1.54 +		*) ddq bs=1 count=$SIZE skip=$OFFSET if="$ISO" >$f ;;
    1.55 +		esac
    1.56 +	done
    1.57 +}
    1.58 +
    1.59  custom_config_sector()
    1.60  {
    1.61  	echo $(($(get 32848 "$1" 4)+16))
    1.62 @@ -304,6 +347,9 @@
    1.63  		-i*)	initrd="$2" ; shift 2 ;;
    1.64  		-e*)	extract_custom_config "$2"
    1.65  			exit ;;
    1.66 +		-r*)	ISO="$2" ; shift 2
    1.67 +			[ -z "$1" ] && list || extract $@
    1.68 +			exit ;;
    1.69  		*)	cat > /dev/null
    1.70  			break
    1.71  		esac