slitaz-forge annotate mirror/floppies/sets.sh @ rev 716

mirror/floppies: multi-format support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Jul 23 16:41:12 2021 +0000 (2021-07-23)
parents
children
rev   line source
pascal@716 1 #!/bin/sh
pascal@716 2
pascal@716 3 get()
pascal@716 4 {
pascal@716 5 hexdump -v -s $1 -n ${4:-${3:-2}} -e "\"\" 1/${3:-2} \" %u\n\"" "$2"
pascal@716 6 }
pascal@716 7
pascal@716 8 n=$((1 + $(get 497 $1/fd001.img 1) + 1 + ($(get 500 $1/fd001.img 4)-1)/32))
pascal@716 9 last=$(($n*512))
pascal@716 10 first=$last
pascal@716 11 dir=$1
pascal@716 12 n=$((512*$(get 497 $1/fd001.img 1) + 512 - 20))
pascal@716 13 SET=""
pascal@716 14 if [ -s $1/fd100.img ]; then
pascal@716 15 for i in 0 1 2 3; do
pascal@716 16 x=$(get $n $1/fd001.img 4)
pascal@716 17 last=$(($last+$x))
pascal@716 18 [ $x -eq 0 ] && SET="" && break
pascal@716 19 SET="$SET $last"
pascal@716 20 n=$(($n+4))
pascal@716 21 done
pascal@716 22 file=$1/fd.img
pascal@716 23 cat $1/fd???.img > $file
pascal@716 24 set -- $first $SET
pascal@716 25 while [ -n "$2" ]; do
pascal@716 26 n=$(get $1 $file)
pascal@716 27 shift
pascal@716 28 case $n in
pascal@716 29 \ 14128|\ 93) continue ;;
pascal@716 30 esac
pascal@716 31 rm $file
pascal@716 32 SET=""
pascal@716 33 break
pascal@716 34 done
pascal@716 35 else
pascal@716 36 if [ $(get 494 $1/fd001.img) -eq 490 ]; then
pascal@716 37 SET="$(($first+$(get 490 $1/fd001.img 4)))"
pascal@716 38 cat $1/fd???.img > $1/fd.img
pascal@716 39 set -- $SET
pascal@716 40 fi
pascal@716 41 fi
pascal@716 42 if [ -n "$SET" ]; then
pascal@716 43 size=$1
pascal@716 44 best=$1
pascal@716 45 cd $dir
pascal@716 46 for i in $(sed '/option value/!d;s|.*value=.||;s|. title.*||' ../format.js); do
pascal@716 47 s=$((((($size-1)/$i)+1)*$i))
pascal@716 48 [ $s -gt $best ] && best=$s
pascal@716 49 dd of=fd.img bs=1 count=0 seek=$s 2> /dev/null
pascal@716 50 [ -d $i ] || mkdir $i
pascal@716 51 cd $i
pascal@716 52 split -b $i ../fd.img xx
pascal@716 53 set -- $SET
pascal@716 54 n=1; sz=0
pascal@716 55 ls xx* | while read x; do
pascal@716 56 mv $x $(printf "fd%03d.img" $n)
pascal@716 57 n=$(($n+1))
pascal@716 58 sz=$(($sz+$i))
pascal@716 59 if [ $sz -ge $1 ]; then
pascal@716 60 n=$(($n-($n%100)+100))
pascal@716 61 shift
pascal@716 62 [ -n "$1" ] || break
pascal@716 63 fi
pascal@716 64 done
pascal@716 65 md5sum fd* > md5sum
pascal@716 66 rm fd*
pascal@716 67 cd ..
pascal@716 68 done
pascal@716 69 dd of=fd.img bs=1 count=0 seek=$best 2> /dev/null
pascal@716 70 cd ..
pascal@716 71 echo $SET
pascal@716 72 fi