summaryrefslogtreecommitdiff
path: root/emulators/ods2reader/files/vmsvlr2unix.sh
blob: 9055aeec3e89d576a000daaa4df9ce0476310897 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/sh -

PATH=/usr/bin

off=0
strlen=0

if [ $# -eq 0 -a ! -t 0 ]; then
	file=/dev/stdin
elif [ $# -eq 1 ]; then
	file=$1
else
	echo Usage: ${0##*/} [file]
	echo converts OpenVMS variable-length record format to unix text format
	exit 0
fi

while true; do
	off=$((${off} + ${strlen}))
	# read in 1-byte units
	set -- $(od -An -tu1 -j${off} -N2 ${file})
	# EoF
	[ -z "${1}" -o -z "${2}" ] && break
	# assume little-endian, it's OpenVMS format
	strlen=$(($2 * 256 + $1))
	# print newline for zero-size records, as info-zip does
	[ ${strlen} -eq 0 ] && echo
	off=$((${off} + 2))
	hexdump -s ${off} -n ${strlen} -e '"'%.${strlen}s'"''"\n"' ${file}
	# align 2
	[ $((${strlen} % 2)) -ne 0 ] && off=$((${off} + 1))
done