wok annotate memtest64/stuff/pack @ rev 25547

Up utftpd (0.2.4)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Thu Mar 23 12:22:34 2023 +0000 (15 months ago)
parents
children cb71c3a76f5a
rev   line source
pascal@25514 1 #!/bin/sh
pascal@25514 2 if [ "$1" == "--build" ]; then
pascal@25514 3 set -- ${2:-bootloader.bin} ${3:-unpack.bin}
pascal@25514 4 x=$(grep -s packed_syssize$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 5 [ -n "$x" ] && sed -i "s/XXXP/$((513+0x$x))/" $0 || sed -i "/XXXP$/d" $0
pascal@25514 6 x=$(grep -s setup_byte$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 7 [ -n "$x" ] && sed -i "s/XXXSB/$((513+0x$x))/" $0 || sed -i "/XXXSB/d" $0
pascal@25514 8 x=$(grep -s setup_word$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 9 [ -n "$x" ] && sed -i "s/XXXSW/$((514+0x$x))/" $0 || sed -i "/XXXSW/d" $0
pascal@25514 10 x=$(grep -s setup_para$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 11 [ -n "$x" ] && sed -i "s/XXXSP/$((514+0x$x))/" $0 || sed -i "/XXXSP/d" $0
pascal@25514 12 x=$(grep -s setup_seg$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 13 [ -n "$x" ] && sed -i "s/XXXSS/$((513+0x$x))/" $0 || sed -i "/XXXSS/d" $0
pascal@25514 14 x=$(grep -s setup_keep$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 15 if [ -n "$x" ]; then
pascal@25514 16 sed -i "s/XXXK2 //" $0
pascal@25514 17 else
pascal@25514 18 x=$(grep -s setup_syssize$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 19 if [ -n "$x" ]; then
pascal@25514 20 sed -i "s/XXXK2/bs=500 skip=1/" $0
pascal@25514 21 else
pascal@25514 22 sed -i "s/XXXK2/bs=512 skip=1/" $0
pascal@25514 23 fi
pascal@25514 24 fi
pascal@25514 25 x=$(grep -s double_packed$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 26 [ -n "$x" ] && sed -i "s/| compress /&& 2 /" $0
pascal@25514 27 x=$(grep -s update_code32_start$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 28 [ -n "$x" ] && sed -i '/XXXU2/d; s| XXXU1||' $0 || sed -i '/XXXU1/d; s| XXXU2||' $0
pascal@25514 29 x=$(grep -s lzsa.block$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 30 [ -n "$x" ] && sed -i 's| XXXR||' $0 || sed -i 's| XXXR| -r|;s|tail -c +4|cat|' $0
pascal@25514 31 helpmsg=$(grep -s helpmsg$ ${1/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 32 helpend=$(grep -s helpend$ ${1/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@25514 33 if [ -n "$helpmsg" ]; then
pascal@25514 34 sed -i "s/YYY/$((0x$helpmsg))/" $0
pascal@25514 35 sed -i "s/ZZZ/$((0x$helpend-0x$helpmsg))/" $0
pascal@25514 36 else
pascal@25514 37 sed -i '/YYY/d' $0
pascal@25514 38 fi
pascal@25514 39 cat >> $0 <<EOM
pascal@25514 40 $(dd if=$1 bs=512 count=1 conv=sync 2> /dev/null | cat - $2 | gzip -9 | uuencode -m -)
pascal@25514 41 EOT
pascal@25514 42 EOM
pascal@25514 43 sed -i '/--build/,/^fi/d' $0
pascal@25514 44 exit
pascal@25514 45 fi
pascal@25514 46
pascal@25514 47 store()
pascal@25514 48 {
pascal@25514 49 n=$1
pascal@25514 50 for i in $(seq 1 ${4:-2}); do
pascal@25514 51 printf '\\\\x%02X' $(($n & 255))
pascal@25514 52 n=$(($n >> 8))
pascal@25514 53 done | xargs echo -en | dd conv=notrunc bs=1 of=$2 seek=$3
pascal@25514 54 }
pascal@25514 55
pascal@25514 56 bits()
pascal@25514 57 {
pascal@25514 58 sed "/^#define PROP_$1/!d;s|.*PROP_...||" unlzma.S
pascal@25514 59 }
pascal@25514 60
pascal@25514 61 compress()
pascal@25514 62 {
pascal@25514 63 case "$PACKER" in
pascal@25514 64 lz4) lz4 -l --best | tail -c +5 ;;
pascal@25514 65 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 ;;
pascal@25514 66 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 ;;
pascal@25514 67 *) xz -z -e --format=raw --lzma1=lc=$(bits LC),lp=$(bits LP),pb=$(bits PB) --stdout
pascal@25514 68 esac
pascal@25514 69 }
pascal@25514 70
pascal@25514 71 main()
pascal@25514 72 {
pascal@25514 73 uudecode | gunzip >$2
pascal@25514 74 dd if=$1 bs=1 skip=497 seek=497 count=15 of=$2 conv=notrunc
pascal@25514 75 setup="$(echo $(od -j 497 -N 1 -dAn $1))"
pascal@25514 76 [ $setup -eq 0 ] && setup=4
pascal@25514 77 store $setup $2 497 1
pascal@25514 78 setup=$((setup+1))
pascal@25514 79 store $setup $2 XXXSB 1
pascal@25514 80 store $setup $2 XXXSW 1
pascal@25514 81 store $((32*setup+0xF000)) $2 XXXSP
pascal@25514 82 store $((0x1000 - 32*setup)) $2 XXXSS
pascal@25514 83 cp $1 /tmp/un$$ XXXU1
pascal@25514 84 store 1 /tmp/un$$ 534 1 XXXU1
pascal@25514 85 dd if=/tmp/un$$ XXXK2 | compress >>$2 XXXU1
pascal@25514 86 rm -f /tmp/un$$ XXXU1
pascal@25514 87 dd if=$1 XXXK2 | compress >>$2 XXXU2
pascal@25514 88 size=$(stat -c %s $2)
pascal@25514 89 syssize=$(((size-512*setup+15)/16))
pascal@25514 90 store $((syssize + 0x1000 + 0x1000)) $2 XXXP
pascal@25514 91 store $syssize $2 500
pascal@25514 92 store $(((size+511)/512)) $2 4
pascal@25514 93 store $(((size+15)/16)) $2 14
pascal@25514 94 echo -e "$3" | dd conv=notrunc bs=1 seek=YYY of=$2 count=ZZZ
pascal@25514 95 }
pascal@25514 96
pascal@25514 97 HELP="$(unix2dos <<EOT
pascal@25514 98 Memtest86+ VERSION GPLv2
pascal@25514 99 EOT
pascal@25514 100 )"
pascal@25514 101 main $1 ${2:-$1.packed} "${3:-$HELP}" 2>/dev/null <<EOT