slitaz-forge diff 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
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/mirror/floppies/sets.sh	Fri Jul 23 16:41:12 2021 +0000
     1.3 @@ -0,0 +1,72 @@
     1.4 +#!/bin/sh
     1.5 +
     1.6 +get()
     1.7 +{
     1.8 +	hexdump -v -s $1 -n ${4:-${3:-2}} -e "\"\" 1/${3:-2} \" %u\n\"" "$2"
     1.9 +}
    1.10 +
    1.11 +n=$((1 + $(get 497 $1/fd001.img 1) + 1 + ($(get 500 $1/fd001.img 4)-1)/32))
    1.12 +last=$(($n*512))
    1.13 +first=$last
    1.14 +dir=$1
    1.15 +n=$((512*$(get 497 $1/fd001.img 1) + 512 - 20))
    1.16 +SET=""
    1.17 +if [ -s $1/fd100.img ]; then
    1.18 +	for i in 0 1 2 3; do
    1.19 +		x=$(get $n $1/fd001.img 4)
    1.20 +		last=$(($last+$x))
    1.21 +		[ $x -eq 0 ] && SET="" && break
    1.22 +		SET="$SET $last"
    1.23 +		n=$(($n+4))
    1.24 +	done
    1.25 +	file=$1/fd.img
    1.26 +	cat $1/fd???.img > $file
    1.27 +	set -- $first $SET
    1.28 +	while [ -n "$2" ]; do
    1.29 +		n=$(get $1 $file)
    1.30 +		shift
    1.31 +		case $n in
    1.32 +		\ 14128|\ 93) continue ;;
    1.33 +		esac
    1.34 +		rm $file
    1.35 +		SET=""
    1.36 +		break
    1.37 +	done
    1.38 +else
    1.39 +	if [ $(get 494 $1/fd001.img) -eq 490 ]; then
    1.40 +		SET="$(($first+$(get 490 $1/fd001.img 4)))"
    1.41 +		cat $1/fd???.img > $1/fd.img
    1.42 +		set -- $SET
    1.43 +	fi
    1.44 +fi
    1.45 +if [ -n "$SET" ]; then
    1.46 +	size=$1
    1.47 +	best=$1
    1.48 +	cd $dir
    1.49 +	for i in $(sed '/option value/!d;s|.*value=.||;s|. title.*||' ../format.js); do
    1.50 +		s=$((((($size-1)/$i)+1)*$i))
    1.51 +		[ $s -gt $best ] && best=$s
    1.52 +		dd of=fd.img bs=1 count=0 seek=$s 2> /dev/null
    1.53 +		[ -d $i ] || mkdir $i
    1.54 +		cd $i
    1.55 +		split -b $i ../fd.img xx
    1.56 +		set -- $SET
    1.57 +		n=1; sz=0
    1.58 +		ls xx* | while read x; do
    1.59 +			mv $x $(printf "fd%03d.img" $n)
    1.60 +			n=$(($n+1))
    1.61 +			sz=$(($sz+$i))
    1.62 +			if [ $sz -ge $1 ]; then
    1.63 +				n=$(($n-($n%100)+100))
    1.64 +				shift
    1.65 +				[ -n "$1" ] || break
    1.66 +			fi
    1.67 +		done
    1.68 +		md5sum fd* > md5sum
    1.69 +		rm fd*
    1.70 +		cd ..
    1.71 +	done
    1.72 +	dd of=fd.img bs=1 count=0 seek=$best 2> /dev/null
    1.73 +	cd ..
    1.74 +	echo $SET
    1.75 +fi