wok rev 20869

syslinux/iso2exe: add cdrom icon
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Feb 23 13:25:31 2019 +0100 (2019-02-23)
parents ad3df832c790
children dbb60b913b41
files syslinux/stuff/iso2exe/bootiso.S syslinux/stuff/iso2exe/iso2exe.sh syslinux/stuff/iso2exe/win32.rc
line diff
     1.1 --- a/syslinux/stuff/iso2exe/bootiso.S	Sat Feb 23 11:05:52 2019 +0100
     1.2 +++ b/syslinux/stuff/iso2exe/bootiso.S	Sat Feb 23 13:25:31 2019 +0100
     1.3 @@ -178,7 +178,7 @@
     1.4  	ret
     1.5  	.org	0x7E00
     1.6  
     1.7 -	.org	0x7F81
     1.8 +	.org	0x7F78
     1.9  ////////////////////////////// DOS EXE code ///////////////////////////////////
    1.10  
    1.11  exestart:
    1.12 @@ -200,7 +200,7 @@
    1.13  abort:
    1.14  goputs:
    1.15  	mov	$EXEADRS(puts), %si
    1.16 -	jmp	%si
    1.17 +	jmp	*%si
    1.18  
    1.19  tst386:
    1.20  	pushw	%sp
    1.21 @@ -226,9 +226,10 @@
    1.22  	movw	comstart-end_header(%di), %si		// .com address
    1.23  	pushw	%di
    1.24  	movb	$0x7C/2, %ch		// 31K-31.5K, > com length
    1.25 -	rep
    1.26 -	movsw
    1.27 -	ret
    1.28 +	movb	$0x80, %bh
    1.29 +	movw	$0xA5F3, (%bx)		// rep movsw
    1.30 +	movb	$0xC3, 2(%bx)		// ret
    1.31 +	jmp	*%bx
    1.32  
    1.33  vm86modemsg:
    1.34  // --------------- Must be in 7F40 7FFF range ------------------------
     2.1 --- a/syslinux/stuff/iso2exe/iso2exe.sh	Sat Feb 23 11:05:52 2019 +0100
     2.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh	Sat Feb 23 13:25:31 2019 +0100
     2.3 @@ -5,6 +5,11 @@
     2.4  	dd $@ 2> /dev/null
     2.5  }
     2.6  
     2.7 +ddn()
     2.8 +{
     2.9 +	ddq $@ conv=notrunc
    2.10 +}
    2.11 +
    2.12  store()
    2.13  {
    2.14  	local i
    2.15 @@ -12,7 +17,7 @@
    2.16  	n=$2; for i in $(seq 8 8 ${4:-16}); do
    2.17  		printf '\\\\x%02X' $(($n & 255))
    2.18  		n=$(($n >> 8))
    2.19 -	done | xargs echo -en | ddq bs=1 conv=notrunc of=$3 seek=$(($1))
    2.20 +	done | xargs echo -en | ddn bs=1 of=$3 seek=$(($1))
    2.21  }
    2.22  
    2.23  get()
    2.24 @@ -40,28 +45,18 @@
    2.25  	$0 --get rootfs.gz > $TMP/rootfs.gz
    2.26  	SIZE=$(wc -c < $TMP/rootfs.gz)
    2.27  	store 24 $SIZE $1
    2.28 -	OFS=$(( $OFS - $SIZE ))
    2.29 +	OFS=$(( 0x7FF0 - $SIZE ))
    2.30  	printf "Adding rootfs.gz file at %04X (%d bytes) ...\n" $OFS $SIZE
    2.31 -	cat $TMP/rootfs.gz | ddq of=$1 bs=1 seek=$OFS conv=notrunc
    2.32 +	cat $TMP/rootfs.gz | ddn of=$1 bs=1 seek=$OFS
    2.33  	rm -rf $TMP
    2.34  }
    2.35  
    2.36 -add_dosexe()
    2.37 -{
    2.38 -	TMP=/tmp/bootiso$$
    2.39 -	$0 --get bootiso.bin > $TMP 2> /dev/null
    2.40 -	OFS=$(($(get 20 $TMP) - 0xC0))
    2.41 -	printf "Adding DOS/EXE stub at %04X (%d bytes) ...\n" $OFS $((0x7FF0 - $OFS))
    2.42 -	ddq if=$TMP bs=1 skip=$OFS of=$1 seek=$OFS conv=notrunc
    2.43 -	rm -f $TMP
    2.44 -}
    2.45 -
    2.46  add_doscom()
    2.47  {
    2.48  	SIZE=$($0 --get boot.com | wc -c)
    2.49  	OFS=$(( $OFS - $SIZE ))
    2.50  	printf "Adding DOS boot file at %04X (%d bytes) ...\n" $OFS $SIZE
    2.51 -	$0 --get boot.com | ddq of=$1 bs=1 seek=$OFS conv=notrunc
    2.52 +	$0 --get boot.com | ddn of=$1 bs=1 seek=$OFS
    2.53  	store 64 $(($OFS+0xC0)) $1
    2.54  }
    2.55  
    2.56 @@ -72,7 +67,7 @@
    2.57  	zcat $2 | compress /tmp/rezipped$$.gz
    2.58  	n=$(stat -c %s /tmp/rezipped$$.gz)
    2.59  	printf "Moving tazlito data record at %04X ($n bytes) ...\n" $OFS
    2.60 -	ddq if=/tmp/rezipped$$.gz bs=1 of=$1 seek=$OFS conv=notrunc
    2.61 +	ddn if=/tmp/rezipped$$.gz bs=1 of=$1 seek=$OFS
    2.62  	HOLE=$(($HOLE+$n))
    2.63  	rm -f /tmp/rezipped$$.gz
    2.64  	if [ -n "$gpt" ]; then
    2.65 @@ -94,22 +89,28 @@
    2.66  	done
    2.67  	cut=$((0x98+$(get 0x94 /tmp/exe$$)))	### end of header
    2.68  	store $((0x94)) $(($n + $cut - 0x98)) /tmp/exe$$
    2.69 -	ddq if=/tmp/exe$$ of=$1 conv=notrunc bs=1 count=$cut
    2.70 -	ddq if=/tmp/exe$$ of=$1 conv=notrunc bs=1 skip=$cut seek=$(($n+$cut))
    2.71 +	ddn if=/tmp/exe$$ of=$1 bs=1 count=$cut
    2.72 +	ddn if=/tmp/exe$$ of=$1 bs=1 skip=$cut seek=$(($n+$cut))
    2.73  	printf "Adding bootiso head at %04X...\n" 0
    2.74  	$0 --get bootiso.bin 2> /dev/null > /tmp/exe$$
    2.75 -	ddq if=/tmp/exe$$ of=$1 bs=128 count=1 conv=notrunc	### DOS stub
    2.76 -	ddq if=/tmp/exe$$ of=$1 bs=1 count=24 seek=$((0x1A0)) skip=$((0x1A0)) conv=notrunc
    2.77 -	ddq if=$2 bs=1 skip=$((0x1B8)) seek=$((0x1B8)) count=72 of=$1 conv=notrunc
    2.78 +	x=$(($(get 0x14 /tmp/exe$$ 1)+0x40))
    2.79 +	printf "Adding bootiso DOS stub at %04X...\n" $(($n+$x))
    2.80 +	ddn if=/tmp/exe$$ of=$1 bs=1 seek=$(($n+$x)) skip=$((0x7F00+$x)) count=$((256-$x))
    2.81 +	x=$(($n/256+1))
    2.82 +	store $((0x15)) $x /tmp/exe$$ 8		### exe IP 
    2.83 +	store $((0x6c)) $x /tmp/exe$$ 8		### puts data 
    2.84 +	ddn if=/tmp/exe$$ of=$1 bs=128 count=1	### DOS header
    2.85 +	ddn if=/tmp/exe$$ of=$1 bs=1 count=24 seek=$((0x1A0)) skip=$((0x1A0))
    2.86 +	ddn if=$2 bs=1 skip=$((0x1B8)) seek=$((0x1B8)) count=72 of=$1
    2.87  	store 510 $((0xAA55)) $1
    2.88  	i=$SIZE; OFS=$(($SIZE+512))
    2.89  	store 417 $(($i/512)) $1 8	### isolinux boot sector
    2.90  	printf "Moving syslinux hybrid boot record at %04X (512 bytes) ...\n" $i
    2.91 -	ddq if=$2 bs=1 count=512 of=$1 seek=$i conv=notrunc
    2.92 +	ddn if=$2 bs=1 count=512 of=$1 seek=$i
    2.93  	if [ $(get $((0x7C00)) /tmp/exe$$) -eq 60905 ]; then	# partition boot code
    2.94 -		ddq if=/tmp/exe$$ bs=1 count=66 skip=$((0x7DBE)) of=$1 seek=$(($i + 0x1BE)) conv=notrunc
    2.95 -		ddq if=$1 bs=1 count=3 skip=$i of=$1 seek=$(($i + 0x1BE)) conv=notrunc
    2.96 -		ddq if=/tmp/exe$$ bs=1 count=3 skip=$((0x7C00)) of=$1 seek=$i conv=notrunc
    2.97 +		ddn if=/tmp/exe$$ bs=1 count=66 skip=$((0x7DBE)) of=$1 seek=$(($i + 0x1BE))
    2.98 +		ddn if=$1 bs=1 count=3 skip=$i of=$1 seek=$(($i + 0x1BE))
    2.99 +		ddn if=/tmp/exe$$ bs=1 count=3 skip=$((0x7C00)) of=$1 seek=$i
   2.100  	fi
   2.101  	rm -f /tmp/exe$$ /tmp/coff$$
   2.102  	if [ -z "$RECURSIVE_PARTITION" -a $(get 454 $1 4) -eq 0 ]; then
   2.103 @@ -127,9 +128,9 @@
   2.104  		OFS=$(( $OFS - $SIZE ))
   2.105  		printf "Adding floppy bootstrap file at %04X (%d bytes) ...\n" $OFS $SIZE
   2.106  		$0 --get bootfd.bin | \
   2.107 -		ddq of=$1 bs=1 count=512 seek=$OFS conv=notrunc
   2.108 +		ddn of=$1 bs=1 count=512 seek=$OFS
   2.109  		$0 --get bootfd.bin | \
   2.110 -		ddq of=$1 bs=1 skip=1024 seek=$((512 + $OFS)) conv=notrunc
   2.111 +		ddn of=$1 bs=1 skip=1024 seek=$((512 + $OFS))
   2.112  		store 26 $(($SIZE/512)) $1 8
   2.113  	fi
   2.114  }
   2.115 @@ -260,9 +261,9 @@
   2.116  restore_hybrid_mbr()
   2.117  {
   2.118  	if [ $(get 0 "$1") -eq 60905 ]; then
   2.119 -		ddq bs=1 conv=notrunc if="$1" of="$1" skip=$((0x1BE)) seek=0 count=3
   2.120 -		ddq bs=1 skip=$((0x1BE)) count=66 if="$2" | \
   2.121 -			ddq bs=1 seek=$((0x1BE)) count=66 of="$1" conv=notrunc
   2.122 +		ddn bs=1 if="$1" of="$1" skip=$((0x1BE)) seek=0 count=3
   2.123 +		ddn bs=1 skip=$((0x1BE)) count=66 if="$2" | \
   2.124 +			ddq bs=1 seek=$((0x1BE)) count=66 of="$1"
   2.125  		if [ -n "$RECURSIVE_PARTITION" ]; then
   2.126  			for i in 0 1 2 3 ; do
   2.127  				n=$(get $((0x1C6+16*i)) $1 4)
   2.128 @@ -324,7 +325,6 @@
   2.129  	ddq if=/dev/zero bs=32k count=1 of=$DATA
   2.130  	add_win32exe $DATA $2 > /dev/null
   2.131  	HSZ=$OFS
   2.132 -	add_dosexe $DATA > /dev/null
   2.133  	add_rootfs $DATA > /dev/null
   2.134  	add_doscom $DATA > /dev/null
   2.135  	add_fdbootstrap $DATA > /dev/null
   2.136 @@ -485,7 +485,7 @@
   2.137  	store 16 -2 /tmp/exe$$
   2.138  	store 20 256 /tmp/exe$$
   2.139  	store 22 -16 /tmp/exe$$
   2.140 -	ddq if=$2 bs=1 seek=64 of=/tmp/exe$$ conv=notrunc
   2.141 +	ddn if=$2 bs=1 seek=64 of=/tmp/exe$$
   2.142  	store 65 $(stat -c %s $3) /tmp/exe$$
   2.143  	store 68 $((0x100-0x40+$(stat -c %s $4))) /tmp/exe$$
   2.144  	cat /tmp/exe$$
   2.145 @@ -526,19 +526,19 @@
   2.146  		n=$(($(get 64 $1) + 0xC0 - ($(get 26 $1 1)*512) - ($b+1)*512))
   2.147  		ddq if=$1 bs=512 count=1 skip=$b of=/tmp/hymbr$$
   2.148  		restore_hybrid_mbr /tmp/hymbr$$ $1
   2.149 -		ddq if=/tmp/hymbr$$ of=$1 conv=notrunc
   2.150 +		ddn if=/tmp/hymbr$$ of=$1
   2.151  		rm -f /tmp/hymbr$$
   2.152  		if [ $(get 512 $1) -eq 17989 ]; then
   2.153  			n=$(($(get 0x25C $1)/512))
   2.154 -			ddq if=$1 bs=512 seek=44 count=20 skip=$n of=$1 conv=notrunc
   2.155 -			ddq if=/dev/zero bs=512 seek=9 count=35 of=$1 conv=notrunc
   2.156 -			ddq if=/dev/zero bs=512 seek=3 count=1 of=$1 conv=notrunc
   2.157 +			ddn if=$1 bs=512 seek=44 count=20 skip=$n of=$1
   2.158 +			ddn if=/dev/zero bs=512 seek=9 count=35 of=$1
   2.159 +			ddn if=/dev/zero bs=512 seek=3 count=1 of=$1
   2.160  		else
   2.161 -			ddq if=/dev/zero bs=512 seek=1 count=1 of=$1 conv=notrunc
   2.162 -			ddq if=$1 bs=512 seek=2 count=30 skip=$(($b+1)) of=$1 conv=notrunc
   2.163 -			ddq if=/dev/zero bs=1 seek=$n count=$((0x8000 - $n)) of=$1 conv=notrunc
   2.164 +			ddn if=/dev/zero bs=512 seek=1 count=1 of=$1
   2.165 +			ddn if=$1 bs=512 seek=2 count=30 skip=$(($b+1)) of=$1
   2.166 +			ddn if=/dev/zero bs=1 seek=$n count=$((0x8000 - $n)) of=$1
   2.167  		fi ;;
   2.168 -	    *)  ddq if=/dev/zero bs=1k count=32 of=$1 conv=notrunc ;;
   2.169 +	    *)  ddn if=/dev/zero bs=1k count=32 of=$1 ;;
   2.170  	    esac
   2.171  	    case "${2/--/-}" in
   2.172  	    -f*)
   2.173 @@ -571,19 +571,18 @@
   2.174  	rm -f /tmp/tazlito$$ /tmp/hybrid$$
   2.175  	
   2.176  	# keep the largest room for the tazlito info file
   2.177 -	add_dosexe $1
   2.178  	add_rootfs $1
   2.179  	add_doscom $1
   2.180  	add_fdbootstrap $1
   2.181  	printf "%d free bytes in %04X..%04X\n" $(($OFS-$HOLE)) $HOLE $OFS
   2.182  	store 440 $(date +%s) $1 32
   2.183  	[ "$2" ] && echo "$2               " | \
   2.184 -		ddq bs=1 seek=$((0x7FDE)) count=15 conv=notrunc of=$1
   2.185 +		ddn bs=1 seek=$((0x7FDE)) count=15 of=$1
   2.186  	if [ $(stat -c %s $1) -gt 34816 ]; then
   2.187  		echo "Adding ISO image md5 at 7FF0 (16 bytes) ..."
   2.188  		echo -en "$(ddq if=$1 bs=2k skip=16 count=$(($(get 32848 "$1" 4)-16)) | \
   2.189  			md5sum | cut -c-32 | sed 's/\(..\)/\\x\1/g')" | \
   2.190 -			ddq bs=16 seek=2047 conv=notrunc of=$1
   2.191 +			ddn bs=16 seek=2047 of=$1
   2.192  	fi
   2.193  	HEAP=$(($(custom_config_sector $1)*2048))
   2.194  	if [ "$append$initrd" ]; then
     3.1 --- a/syslinux/stuff/iso2exe/win32.rc	Sat Feb 23 11:05:52 2019 +0100
     3.2 +++ b/syslinux/stuff/iso2exe/win32.rc	Sat Feb 23 13:25:31 2019 +0100
     3.3 @@ -1,6 +1,7 @@
     3.4  /* http://msdn.microsoft.com/en-us/library/aa381058.aspx */
     3.5  
     3.6  /* id ICON "./win32.ico" */	/* BMP32x32 */
     3.7 +id ICON "./isohybrid.ico"
     3.8  VS_VERSION_INFO	VERSIONINFO
     3.9  FILEVERSION	1,0,0,0
    3.10  PRODUCTVERSION	1,0,0,0