wok-current view memtest/stuff/pack @ rev 19920
memtest: VCPI support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Wed Apr 19 22:14:58 2017 +0200 (2017-04-19) |
parents | 4ebd023252ac |
children | 9e463ebef079 |
line source
1 #!/bin/sh
2 if [ "$1" == "--build" ]; then
3 set -- ${2:-bootloader.bin} ${3:-unpack.bin}
4 x=$(grep -s packed_syssize$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
5 [ -n "$x" ] && sed -i "s/XXXP/$((513+0x$x))/" $0 || sed -i "/XXXP$/d" $0
6 x=$(grep -s setup_byte$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
7 [ -n "$x" ] && sed -i "s/XXXSB/$((513+0x$x))/" $0 || sed -i "/XXXSB/d" $0
8 x=$(grep -s setup_word$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
9 [ -n "$x" ] && sed -i "s/XXXSW/$((514+0x$x))/" $0 || sed -i "/XXXSW/d" $0
10 x=$(grep -s setup_para$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
11 [ -n "$x" ] && sed -i "s/XXXSP/$((514+0x$x))/" $0 || sed -i "/XXXSP/d" $0
12 x=$(grep -s setup_seg$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
13 [ -n "$x" ] && sed -i "s/XXXSS/$((513+0x$x))/" $0 || sed -i "/XXXSS/d" $0
14 grep -q BFF401 ${2/.bin/.lst} && sed -i 's/512 skip/500 skip/;s/1000 -/&32 - /' $0
15 grep -q 83C60D ${2/.bin/.lst} && sed -i 's/ | dd bs=1 skip=13//' $0
16 helpmsg=$(grep -s helpmsg$ ${1/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
17 helpend=$(grep -s helpend$ ${1/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
18 if [ -n "$helpmsg" ]; then
19 sed -i "s/YYY/$((0x$helpmsg))/" $0
20 sed -i "s/ZZZ/$((0x$helpend-0x$helpmsg-1))/" $0
21 else
22 sed -i '/YYY/d' $0
23 fi
24 cat >> $0 <<EOM
25 $(dd if=$1 bs=512 count=1 conv=sync 2> /dev/null | cat - $2 | gzip -9 | uuencode -m -)
26 EOT
27 EOM
28 sed -i '/--build/,/^fi/d' $0
29 exit
30 fi
32 store()
33 {
34 n=$1
35 for i in $(seq 1 ${4:-2}); do
36 printf '\\\\x%02X' $(($n & 255))
37 n=$(($n >> 8))
38 done | xargs echo -en | dd conv=notrunc bs=1 of=$2 seek=$3
39 }
41 compress()
42 {
43 xz -z -e --format=lzma --lzma1=mf=bt2 --stdout | dd bs=1 skip=13
44 }
46 main()
47 {
48 uudecode | gunzip >$2
49 dd if=$1 bs=1 skip=497 seek=497 count=15 of=$2 conv=notrunc
50 setup="$(echo $(od -j 497 -N 1 -dAn $1))"
51 [ $setup -eq 0 ] && setup=4
52 syssize="$(echo $(od -j 500 -N 2 -dAn $1))"
53 [ $syssize -eq 0 ] && syssize=$((($(stat -c %s $1) + 15 - 512*($setup + 1))/16))
54 store $setup $2 XXXSB 1
55 store $setup $2 XXXSW 1
56 store $((32 * $setup)) $2 XXXSP
57 store $((0x1000 - 32*$setup)) $2 XXXSS
58 dd if=$1 bs=512 skip=1 | compress >>$2
59 size=$(stat -c %s $2)
60 store $((($size-2560+15)/16 + 0x1000)) $2 XXXP
61 store $((($size-2560+15)/16)) $2 500
62 store 4 $2 497 1
63 store $((($size+511)/512)) $2 4
64 store $((($size+15)/16)) $2 14
65 echo -e "$3" | dd conv=notrunc bs=1 seek=YYY of=$2 count=ZZZ
66 }
68 HELP="$(unix2dos <<EOT
69 Memtest86+ VERSION GPL endless
70 EOT
71 )"
72 main $1 ${2:-$1.packed} "${3:-$HELP}" 2>/dev/null <<EOT