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