slitaz-forge view mirror/floppies/floppies @ rev 634

fix 'floppies' extraction tool
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Feb 05 18:07:41 2017 +0100 (2017-02-05)
parents a37f4ff3d549
children d65a5b0bb724
line source
1 #!/bin/sh
3 rd()
4 {
5 echo $(od -j $(($1)) -N ${2:-4} -t u${2:-4} -An ${3:-kernel})
6 }
8 ds()
9 {
10 set -- $1 ${2:-512}
11 dd count=$((($1*$2)/512)) bs=512 2>/dev/null
12 dd count=$(((($1*$2)%512)/$2)) bs=$2 2>/dev/null
13 }
15 case "$1" in
16 extract) (
17 ds 1
18 ds $(($(rd 0x1F1 1)-1))
19 [ $(rd 0x228 1) -le 128 ] || ds 1
20 [ $(rd 0x228) -ne 0 ] && ds 1 >cmdline$$
21 ds $(( ($(rd 0x1F4) +31) /32)) ) >kernel
22 if [ $(rd 0x21C) -ne 0 ]; then
23 ds $(( ($(rd 0x21C) +3) /4)) 4 >rootfs
24 elif [ $(rd 0x218) -ne 0 ]; then
25 n=$(($(rd 0x1EE 2)%512))
26 i=0
27 while [ $(($n % 256)) -lt $(rd 0x1F0 1) ]; do
28 ds $(( ($(rd $n 4 cmdline$$) +3) /4)) 4 >rootfs$i
29 n=$(($n+4))
30 i=$(($i+1))
31 done
32 fi
33 if [ -s cmdline$$ ]; then
34 strings <cmdline$$ | sed q >cmdline
35 rm -f cmdline$$
36 fi
37 ;;
38 *) cat <<EOT
39 usage: cat fd*.img | $0 extract or
40 # cat fd0*.img | $0 extract
41 creates kernel, rootfs(es) and cmdline files
42 EOT
43 for i in 1 2 3; do
44 j=" cat fd$i*.img |"
45 echo "#$j cpio -i 2>/dev/null ||$j unlzma | cpio -idmu"
46 done
47 esac