wok diff BootProg/stuff/bootprog.sh @ rev 24942

BootProg: clear cmdline
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Apr 20 15:10:50 2022 +0000 (2022-04-20)
parents 89c8d8b6cf48
children 810e3d0a38f7
line diff
     1.1 --- a/BootProg/stuff/bootprog.sh	Fri Feb 18 09:29:30 2022 +0000
     1.2 +++ b/BootProg/stuff/bootprog.sh	Wed Apr 20 15:10:50 2022 +0000
     1.3 @@ -1,39 +1,30 @@
     1.4  #!/bin/sh
     1.5  
     1.6  [ ! -e "$1" ] && cat <<EOT && exit 2
     1.7 -Usage: [FAT=<FAT12|FAT16|FAT32|EXFAT>] $0 device [boot name entry] [boot.bin]
     1.8 +Usage: [FAT=<FAT12|FAT16|FAT32|EXFAT>] $0 device [file]
     1.9  Example: $0 /dev/fd0 STARTUP.BIN
    1.10  EOT
    1.11  
    1.12 -while read chk ofs fat bin name; do
    1.13 -	[ $FAT -eq $fat ] || [ "$(dd if="$1" bs=1 count=8 skip=$chk)" = "$fat   " ] || continue
    1.14 -	echo "Install $fat bootsector on $1."
    1.15 -	for arg in "skip=$(($ofs+8)) seek=$(($ofs+8))" "count=11" ; do
    1.16 -		if [ "$3" ]; then
    1.17 -			cat "$3"
    1.18 -		else
    1.19 -			sed '1,/^exit 1/d' $0 | tar xzOf - boot$bin.bin
    1.20 -		fi | dd of="$1" bs=1 conv=notrunc $arg
    1.21 +ddo="dd of=$1 bs=1 conv=notrunc"
    1.22 +while read c o b f; do
    1.23 +	[ "${FAT:-$(dd if="$1" bs=1 count=5 skip=$c)}" = "$f" ] || continue
    1.24 +	echo "Install $f bootsector on $1."
    1.25 +	for a in "$((o+b)) seek=$o count=$((512-o))" "$b count=11"; do
    1.26 +		sed '1,/^exit 1/d' $0 | unlzma | $ddo skip=$a
    1.27  	done
    1.28 -	[ "$2" ] && echo "Set bootfile '$2'" && echo -en "$name" | \
    1.29 -		dd of="$1" bs=1 conv=notrunc seek=499 count=11
    1.30 -	case "$fat" in
    1.31 -	EXFAT) dd if="$1" bs=512 count=11 | od -v -An -t u1 -w1 - | awk '
    1.32 -BEGIN { chk=0; i=-1 }
    1.33 -{
    1.34 -  i++
    1.35 -  if (i == 106 || i == 107 || i == 112) next
    1.36 -  chk = or(lshift(chk,31),rshift(chk,1)) + $1
    1.37 -}
    1.38 -END { a=chk%256; b=(chk/256)%256; c=(chk/256/256)%256; d=chk/256/256/256
    1.39 -  for (i=0;i<128;i++) printf "echo -en \"\\x%02X\\x%02X\\x%02X\\x%02X\"\n",a,b,c,d
    1.40 -} ' | sh | dd bs=512 of="$1" seek=11
    1.41 -	esac
    1.42 +	[ "$2" ] && echo "Set boot file '$2'" && echo -n "$2" | case "$f" in
    1.43 +	E*)	sed 's| |.|;s| ||g' | cat - /dev/zero;;
    1.44 +	*)	tr a-z A-Z | sed 's|\.|       |;s|^\(.\{8\}\) *|\1|;s|$|   |'
    1.45 +	esac | $ddo seek=499 count=11
    1.46 +	[ "$f" = "EXFAT" ] && dd if="$1" bs=512 count=11 | od -v -An -t u1 -w1 - | LANG=C awk '
    1.47 +BEGIN { a=0;i=-1;m=0xFFFFFFFE }
    1.48 +{ if (++i!=106 && i!=107 && i!=112) a=or(and(lshift(a,31),m),and(rshift(a,1),m/2))+$1 }
    1.49 +END { b=a/256;c=b/256; for (i=0;i<128;i++) printf "%c%c%c%c",a%256,b%256,c%256,(c/256)%256 }' | $ddo seek=5632
    1.50  	exit 0
    1.51 -done 2> /dev/null <<EOT
    1.52 -54	54	FAT12	16	$(A="${2/./       }";echo "${A:0:8}${A##* }          " | tr '[a-z]' '[A-Z]' | sed 's| |\\\\x20|g')
    1.53 -54	54	FAT16	16	$(A="${2/./       }";echo "${A:0:8}${A##* }          " | tr '[a-z]' '[A-Z]' | sed 's| |\\\\x20|g')
    1.54 -82	82	FAT32	32	$(A="${2/./       }";echo "${A:0:8}${A##* }          " | tr '[a-z]' '[A-Z]' | sed 's| |\\\\x20|g')
    1.55 -3	105	EXFAT	ex	$(echo "$2" | sed 's| |.|;s| ||g')\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0
    1.56 +done 2>/dev/null <<EOT
    1.57 +54	62	0	FAT12
    1.58 +54	62	0	FAT16
    1.59 +82	90	512	FAT32
    1.60 +3	113	1024	EXFAT
    1.61  EOT
    1.62  exit 1