wok diff memtest64/stuff/pack @ rev 25514

Add memtest64
author Pascal Bellard <pascal.bellard@slitaz.org>
date Thu Feb 16 14:18:05 2023 +0000 (16 months ago)
parents
children cb71c3a76f5a
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/memtest64/stuff/pack	Thu Feb 16 14:18:05 2023 +0000
     1.3 @@ -0,0 +1,101 @@
     1.4 +#!/bin/sh
     1.5 +if [ "$1" == "--build" ]; then
     1.6 +	set -- ${2:-bootloader.bin} ${3:-unpack.bin}
     1.7 +	x=$(grep -s packed_syssize$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
     1.8 +	[ -n "$x" ] && sed -i "s/XXXP/$((513+0x$x))/" $0 || sed -i "/XXXP$/d" $0
     1.9 +	x=$(grep -s setup_byte$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.10 +	[ -n "$x" ] && sed -i "s/XXXSB/$((513+0x$x))/" $0 || sed -i "/XXXSB/d" $0
    1.11 +	x=$(grep -s setup_word$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.12 +	[ -n "$x" ] && sed -i "s/XXXSW/$((514+0x$x))/" $0 || sed -i "/XXXSW/d" $0
    1.13 +	x=$(grep -s setup_para$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.14 +	[ -n "$x" ] && sed -i "s/XXXSP/$((514+0x$x))/" $0 || sed -i "/XXXSP/d" $0
    1.15 +	x=$(grep -s setup_seg$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.16 +	[ -n "$x" ] && sed -i "s/XXXSS/$((513+0x$x))/" $0 || sed -i "/XXXSS/d" $0
    1.17 +	x=$(grep -s setup_keep$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.18 +	if [ -n "$x" ]; then
    1.19 +		sed -i "s/XXXK2 //" $0 
    1.20 +	else
    1.21 +		x=$(grep -s setup_syssize$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.22 +		if [ -n "$x" ]; then
    1.23 +			sed -i "s/XXXK2/bs=500 skip=1/" $0
    1.24 +		else
    1.25 +			sed -i "s/XXXK2/bs=512 skip=1/" $0
    1.26 +		fi
    1.27 +	fi
    1.28 +	x=$(grep -s double_packed$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.29 +	[ -n "$x" ] && sed -i "s/| compress /&& 2 /" $0
    1.30 +	x=$(grep -s update_code32_start$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.31 +	[ -n "$x" ] && sed -i '/XXXU2/d; s| XXXU1||' $0 || sed -i '/XXXU1/d; s| XXXU2||' $0
    1.32 +	x=$(grep -s lzsa.block$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.33 +	[ -n "$x" ] && sed -i 's| XXXR||' $0 || sed -i 's| XXXR| -r|;s|tail -c +4|cat|' $0
    1.34 +	helpmsg=$(grep -s helpmsg$ ${1/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.35 +	helpend=$(grep -s helpend$ ${1/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
    1.36 +	if [ -n "$helpmsg" ]; then
    1.37 +		sed -i "s/YYY/$((0x$helpmsg))/" $0
    1.38 +		sed -i "s/ZZZ/$((0x$helpend-0x$helpmsg))/" $0
    1.39 +	else
    1.40 +		sed -i '/YYY/d' $0
    1.41 +	fi
    1.42 +	cat >> $0 <<EOM
    1.43 +$(dd if=$1 bs=512 count=1 conv=sync 2> /dev/null | cat - $2 | gzip -9 | uuencode -m -)
    1.44 +EOT
    1.45 +EOM
    1.46 +	sed -i '/--build/,/^fi/d' $0
    1.47 +	exit
    1.48 +fi
    1.49 +
    1.50 +store()
    1.51 +{
    1.52 +	n=$1
    1.53 +	for i in $(seq 1 ${4:-2}); do
    1.54 +		printf '\\\\x%02X' $(($n & 255))
    1.55 +		n=$(($n >> 8))
    1.56 +	done | xargs echo -en | dd conv=notrunc bs=1 of=$2 seek=$3
    1.57 +}
    1.58 +
    1.59 +bits()
    1.60 +{
    1.61 +	sed "/^#define PROP_$1/!d;s|.*PROP_...||" unlzma.S
    1.62 +}
    1.63 +
    1.64 +compress()
    1.65 +{
    1.66 +	case "$PACKER" in
    1.67 +	lz4) lz4 -l --best | tail -c +5 ;;
    1.68 +	lzsa1) cat > /tmp/in$$$1 ; lzsa XXXR -f1 /tmp/in$$$1 /tmp/out$$$1 ; tail -c +4 /tmp/out$$$1 ; rm -f /tmp/in$$$1 /tmp/out$$$1 ;;
    1.69 +	lzsa2) cat > /tmp/in$$$1 ; lzsa XXXR -f2 /tmp/in$$$1 /tmp/out$$$1 ; tail -c +4 /tmp/out$$$1 ; rm -f /tmp/in$$$1 /tmp/out$$$1 ;;
    1.70 +	*) xz -z -e --format=raw --lzma1=lc=$(bits LC),lp=$(bits LP),pb=$(bits PB) --stdout 
    1.71 +	esac
    1.72 +}
    1.73 +
    1.74 +main()
    1.75 +{
    1.76 +	uudecode | gunzip >$2
    1.77 +	dd if=$1 bs=1 skip=497 seek=497 count=15 of=$2 conv=notrunc
    1.78 +	setup="$(echo $(od -j 497 -N 1 -dAn $1))"
    1.79 +	[ $setup -eq 0 ] && setup=4
    1.80 +	store $setup $2 497 1
    1.81 +	setup=$((setup+1))
    1.82 +	store $setup $2 XXXSB 1
    1.83 +	store $setup $2 XXXSW 1
    1.84 +	store $((32*setup+0xF000)) $2 XXXSP
    1.85 +	store $((0x1000 - 32*setup)) $2 XXXSS 
    1.86 +	cp $1 /tmp/un$$ XXXU1
    1.87 +	store 1 /tmp/un$$ 534 1 XXXU1
    1.88 +	dd if=/tmp/un$$ XXXK2 | compress >>$2 XXXU1
    1.89 +	rm -f /tmp/un$$ XXXU1
    1.90 +	dd if=$1 XXXK2 | compress >>$2 XXXU2
    1.91 +	size=$(stat -c %s $2)
    1.92 +	syssize=$(((size-512*setup+15)/16))
    1.93 +	store $((syssize + 0x1000 + 0x1000)) $2 XXXP
    1.94 +	store $syssize $2 500
    1.95 +	store $(((size+511)/512)) $2 4
    1.96 +	store $(((size+15)/16)) $2 14
    1.97 +	echo -e "$3" | dd conv=notrunc bs=1 seek=YYY of=$2 count=ZZZ
    1.98 +}
    1.99 +
   1.100 +HELP="$(unix2dos <<EOT
   1.101 +Memtest86+ VERSION GPLv2
   1.102 +EOT
   1.103 +)"
   1.104 +main $1 ${2:-$1.packed} "${3:-$HELP}" 2>/dev/null <<EOT