Basic shell script to produce uncompressed spark archive with correct
filetypes for RISC OS.
This commit is contained in:
parent
d42e56f0d5
commit
16cd5129d4
151
distrib/acorn32/mksparkive.sh
Executable file
151
distrib/acorn32/mksparkive.sh
Executable file
@ -0,0 +1,151 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2004 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This code is derived from software contributed to The NetBSD Foundation
|
||||
# by Gavan Fantom
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# 3. All advertising materials mentioning features or use of this software
|
||||
# must display the following acknowledgement:
|
||||
# This product includes software developed by the NetBSD
|
||||
# Foundation, Inc. and its contributors.
|
||||
# 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
#
|
||||
# Creates an uncompressed spark format archive. Some metadata is included,
|
||||
# notably filetypes, but CRC calculations and permissions are not. Filename
|
||||
# translation is performed according to RISC OS conventions.
|
||||
#
|
||||
# This script is intended to provide sufficient functionality to create
|
||||
# an archive for distribution of the NetBSD/acorn32 bootloader which can be
|
||||
# used directly in RISC OS.
|
||||
#
|
||||
|
||||
# Target byte order is little endian.
|
||||
|
||||
print2()
|
||||
{
|
||||
lowbyte=`expr $1 % 256 | xargs printf %02x`
|
||||
highbyte=`expr $1 / 256 | xargs printf %02x`
|
||||
printf "\x$lowbyte\x$highbyte"
|
||||
}
|
||||
|
||||
print4()
|
||||
{
|
||||
print2 `expr $1 % 65536`
|
||||
print2 `expr $1 / 65536`
|
||||
}
|
||||
|
||||
makeheader()
|
||||
{
|
||||
filename="$1"
|
||||
statfilename="$2"
|
||||
realfilename="$3"
|
||||
filetype=`printf %03s "$4"`
|
||||
length=`wc -c "$filename"`
|
||||
eval `stat -s "$statfilename"`
|
||||
# centiseconds since 1st Jan 1900
|
||||
timestamp=`expr $st_mtime \* 100 + 220898880000`
|
||||
lowtype=`echo "$filetype" | sed s/.//`
|
||||
hightype=`echo "$filetype" | sed s/..\$//`
|
||||
highdate=`expr $timestamp / 4294967296 | xargs printf %02x`
|
||||
lowdate=`expr $timestamp % 4294967296`
|
||||
|
||||
# Header version number
|
||||
printf \\x82
|
||||
# Filename
|
||||
printf %-13.13s "$realfilename" | tr " ." \\0/
|
||||
# Compressed file length
|
||||
print4 $length
|
||||
# File date stamp
|
||||
print2 0
|
||||
# File time stamp
|
||||
print2 0
|
||||
# CRC
|
||||
print2 0
|
||||
# Original file length
|
||||
print4 $length
|
||||
# Load address (FFFtttdd)
|
||||
printf \\x$highdate
|
||||
printf \\x$lowtype
|
||||
printf \\xf$hightype
|
||||
printf \\xff
|
||||
# Exec address (dddddddd)
|
||||
print4 $lowdate
|
||||
# Attributes
|
||||
# Public read, owner read/write
|
||||
print4 19
|
||||
}
|
||||
|
||||
makearchive()
|
||||
{
|
||||
for file in "$@"
|
||||
do
|
||||
# Archive marker
|
||||
printf \\x1a
|
||||
if [ -f "$file" ]
|
||||
then
|
||||
case "$file" in
|
||||
*,???) type=`echo "$file" | \
|
||||
sed "s/.*,\(...\)$/\1/"`
|
||||
filename=`echo "$file" | \
|
||||
sed "s/,...$//"`
|
||||
;;
|
||||
*) type=fff
|
||||
filename="$file"
|
||||
;;
|
||||
esac
|
||||
makeheader "$file" "$file" "$filename" "$type"
|
||||
cat "$file"
|
||||
fi
|
||||
if [ -d "$file" ]
|
||||
then
|
||||
temp=`mktemp -t $0` || exit 1
|
||||
(
|
||||
cd "$file"
|
||||
makearchive `ls -A` >$temp
|
||||
)
|
||||
makeheader "$temp" "$file" "$file" ddc
|
||||
cat "$temp"
|
||||
rm -f "$temp"
|
||||
fi
|
||||
done
|
||||
|
||||
# Archive marker
|
||||
printf \\x1a
|
||||
# Archive terminator
|
||||
printf \\x00
|
||||
}
|
||||
|
||||
if [ $# -eq 0 ]
|
||||
then
|
||||
name=`basename $0`
|
||||
echo "Usage: $name filename"
|
||||
echo "$name: Outputs an uncompressed sparkive to stdout."
|
||||
fi
|
||||
|
||||
makearchive "$@"
|
Loading…
Reference in New Issue
Block a user