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