wok-tiny annotate x86test/stuff/pack @ rev 172

Add x86test & tfttest
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat May 08 17:23:19 2021 +0000 (2021-05-08)
parents
children
rev   line source
pascal@172 1 #!/bin/sh
pascal@172 2 if [ "$1" == "--build" ]; then
pascal@172 3 set -- ${2:-bootloader.bin} ${3:-unpack.bin}
pascal@172 4 x=$(grep -s packed_syssize$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@172 5 [ -n "$x" ] && sed -i "s/XXXP/$((513+0x$x))/" $0 || sed -i "/XXXP$/d" $0
pascal@172 6 x=$(grep -s setup_byte$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@172 7 [ -n "$x" ] && sed -i "s/XXXSB/$((513+0x$x))/" $0 || sed -i "/XXXSB/d" $0
pascal@172 8 x=$(grep -s setup_word$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@172 9 [ -n "$x" ] && sed -i "s/XXXSW/$((514+0x$x))/" $0 || sed -i "/XXXSW/d" $0
pascal@172 10 x=$(grep -s setup_para$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@172 11 [ -n "$x" ] && sed -i "s/XXXSP/$((514+0x$x))/" $0 || sed -i "/XXXSP/d" $0
pascal@172 12 x=$(grep -s setup_seg$ ${2/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@172 13 [ -n "$x" ] && sed -i "s/XXXSS/$((513+0x$x))/" $0 || sed -i "/XXXSS/d" $0
pascal@172 14 grep -q BFF401 ${2/.bin/.lst} && sed -i 's/512 skip/500 skip/;s/1000 -/&32 - /' $0
pascal@172 15 grep -q 83C60D ${2/.bin/.lst} && sed -i 's/ | dd bs=1 skip=13//' $0
pascal@172 16 helpmsg=$(grep -s helpmsg$ ${1/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@172 17 helpend=$(grep -s helpend$ ${1/.bin/.lst}|sed '$!d;s/.*t:\([^ ]*\).*/\1/')
pascal@172 18 if [ -n "$helpmsg" ]; then
pascal@172 19 sed -i "s/YYY/$((0x$helpmsg))/" $0
pascal@172 20 sed -i "s/ZZZ/$((0x$helpend-0x$helpmsg))/" $0
pascal@172 21 else
pascal@172 22 sed -i '/YYY/d' $0
pascal@172 23 fi
pascal@172 24 cat >> $0 <<EOM
pascal@172 25 $(dd if=$1 bs=512 count=1 conv=sync 2> /dev/null | cat - $2 | gzip -9 | uuencode -m -)
pascal@172 26 EOT
pascal@172 27 EOM
pascal@172 28 sed -i '/--build/,/^fi/d' $0
pascal@172 29 exit
pascal@172 30 fi
pascal@172 31
pascal@172 32 store()
pascal@172 33 {
pascal@172 34 n=$1
pascal@172 35 for i in $(seq 1 ${4:-2}); do
pascal@172 36 printf '\\\\x%02X' $(($n & 255))
pascal@172 37 n=$(($n >> 8))
pascal@172 38 done | xargs echo -en | dd conv=notrunc bs=1 of=$2 seek=$3
pascal@172 39 }
pascal@172 40
pascal@172 41 bits()
pascal@172 42 {
pascal@172 43 sed "/^.define PROP_$1/"'!'"d;s|.*_$1.||" unlzma.S
pascal@172 44 }
pascal@172 45
pascal@172 46 compress()
pascal@172 47 {
pascal@172 48 xz -z -e --format=raw --lzma1=mf=bt2,lc=$(bits LC),lp=$(bits LP),pb=$(bits PB),nice=36 --stdout
pascal@172 49 }
pascal@172 50
pascal@172 51 main()
pascal@172 52 {
pascal@172 53 uudecode | gunzip >$2
pascal@172 54 dd if=$1 bs=1 skip=497 seek=497 count=15 of=$2 conv=notrunc
pascal@172 55 setup="$(echo $(od -j 497 -N 1 -dAn $1))"
pascal@172 56 [ $setup -eq 0 ] && setup=4
pascal@172 57 store $setup $2 XXXSB 1
pascal@172 58 store $setup $2 XXXSW 1
pascal@172 59 store $((32 * $setup)) $2 XXXSP
pascal@172 60 store $((0x1000 - 32*$setup)) $2 XXXSS
pascal@172 61 dd if=$1 bs=512 skip=1 | compress >>$2
pascal@172 62 size=$(stat -c %s $2)
pascal@172 63 syssize=$((($size-512*($setup+1)+15)/16))
pascal@172 64 store $(($syssize + 0x1000)) $2 XXXP
pascal@172 65 store $syssize $2 500
pascal@172 66 store 4 $2 497 1
pascal@172 67 store $((($size+511)/512)) $2 4
pascal@172 68 store $((($size+15)/16)) $2 14
pascal@172 69 echo -e "$3" | dd conv=notrunc bs=1 seek=YYY of=$2 count=ZZZ
pascal@172 70 }
pascal@172 71
pascal@172 72 HELP="$(unix2dos <<EOT
pascal@172 73 x86test VERSION GPLv2
pascal@172 74 EOT
pascal@172 75 )"
pascal@172 76 main $1 ${2:-$1.packed} "${3:-$HELP}" 2>/dev/null <<EOT