wok
annotate BootProg/stuff/bootprog.sh @ rev 25161
created recipe for py3k-pillow
author |
Hans-G?nter Theisgen |
date |
Fri Jul 01 10:04:47 2022 +0100 (2022-07-01) |
parents |
d1f31f5f6401 |
children |
78727b04c002 |
rev |
line source |
pascal@24476
|
1 #!/bin/sh
|
pascal@24476
|
2
|
pascal@24476
|
3 [ ! -e "$1" ] && cat <<EOT && exit 2
|
pascal@24942
|
4 Usage: [FAT=<FAT12|FAT16|FAT32|EXFAT>] $0 device [file]
|
pascal@24476
|
5 Example: $0 /dev/fd0 STARTUP.BIN
|
pascal@24476
|
6 EOT
|
pascal@24476
|
7
|
pascal@24943
|
8 xd="dd of=$1 bs=1 conv=notrunc"
|
pascal@24942
|
9 while read c o b f; do
|
pascal@24942
|
10 [ "${FAT:-$(dd if="$1" bs=1 count=5 skip=$c)}" = "$f" ] || continue
|
pascal@24942
|
11 echo "Install $f bootsector on $1."
|
pascal@24942
|
12 for a in "$((o+b)) seek=$o count=$((512-o))" "$b count=11"; do
|
pascal@24943
|
13 sed '1,/^exit 1/d' $0 | unlzma | $xd skip=$a
|
pascal@24476
|
14 done
|
pascal@24942
|
15 [ "$2" ] && echo "Set boot file '$2'" && echo -n "$2" | case "$f" in
|
pascal@24942
|
16 E*) sed 's| |.|;s| ||g' | cat - /dev/zero;;
|
pascal@24942
|
17 *) tr a-z A-Z | sed 's|\.| |;s|^\(.\{8\}\) *|\1|;s|$| |'
|
pascal@24943
|
18 esac | $xd seek=499 count=11
|
pascal@24942
|
19 [ "$f" = "EXFAT" ] && dd if="$1" bs=512 count=11 | od -v -An -t u1 -w1 - | LANG=C awk '
|
pascal@24942
|
20 BEGIN { a=0;i=-1;m=0xFFFFFFFE }
|
pascal@24942
|
21 { if (++i!=106 && i!=107 && i!=112) a=or(and(lshift(a,31),m),and(rshift(a,1),m/2))+$1 }
|
pascal@24943
|
22 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 }' | $xd seek=5632
|
pascal@24476
|
23 exit 0
|
pascal@24942
|
24 done 2>/dev/null <<EOT
|
pascal@24942
|
25 54 62 0 FAT12
|
pascal@24942
|
26 54 62 0 FAT16
|
pascal@24942
|
27 82 90 512 FAT32
|
pascal@24942
|
28 3 113 1024 EXFAT
|
pascal@24476
|
29 EOT
|
pascal@24476
|
30 exit 1
|