-
Notifications
You must be signed in to change notification settings - Fork 1
/
unitel2vdt.bash
59 lines (54 loc) · 2.36 KB
/
unitel2vdt.bash
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash
# This script is a filter that will convert Unitel disc images to VDT files.
# The conversion cannot be done via iconv because the Unitel system mixes EBCDIC
# and ASCII codes.
# The script converts an entire disc image, and extracts individual pages.
# Generate the 256 EBCDIC codes in octal
FROMEBCDIC=$(printf "\\\\%o" {0..255})
# Each byte that cannot be converted from EBCDIC to ASCII is copied as is if it
# is below 0x7F. Otherwise it is given the 0x1A value (Error Signal).
# The output will only contain 7 bits codes.
TOVDT=$(printf $(for i in {0..255}; do echo -n "\\\\%o"; done) \
0x00 0x01 0x02 0x03 0x04 0x09 0x06 0x7F \
0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F \
0x10 0x11 0x12 0x13 0x14 0x15 0x08 0x17 \
0x18 0x19 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F \
0x20 0x21 0x22 0x23 0x24 0x0A 0x17 0x1B \
0x28 0x29 0x3A 0x3B 0x3C 0x05 0x06 0x07 \
0x30 0x31 0x16 0x33 0x34 0x35 0x36 0x04 \
0x38 0x39 0x3A 0x3B 0x14 0x15 0x3E 0x3F \
0x20 0x41 0x42 0x43 0x44 0x45 0x46 0x47 \
0x48 0x49 0x5B 0x2E 0x3C 0x28 0x2B 0x21 \
0x26 0x51 0x52 0x53 0x54 0x55 0x56 0x57 \
0x58 0x59 0x5D 0x24 0x2A 0x29 0x3B 0x5E \
0x2D 0x2F 0x62 0x63 0x64 0x65 0x66 0x67 \
0x68 0x69 0x7C 0x2C 0x25 0x5F 0x3E 0x3F \
0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 \
0x78 0x60 0x3A 0x23 0x40 0x27 0x3D 0x22 \
0x1A 0x61 0x62 0x63 0x64 0x65 0x66 0x67 \
0x68 0x69 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A \
0x1A 0x6A 0x6B 0x6C 0x6D 0x6E 0x6F 0x70 \
0x71 0x72 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A \
0x1A 0x7E 0x73 0x74 0x75 0x76 0x77 0x78 \
0x79 0x7A 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A \
0x1A 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A \
0x1A 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A \
0x7B 0x41 0x42 0x43 0x44 0x45 0x46 0x47 \
0x48 0x49 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A \
0x7D 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F 0x50 \
0x51 0x52 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A \
0x5C 0x1A 0x53 0x54 0x55 0x56 0x57 0x58 \
0x59 0x5A 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A \
0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 \
0x38 0x39 0x1A 0x1A 0x1A 0x1A 0x1A 0x1A
)
# convert EBCDIC disc image into ASCII/Vidéotex
cat $1 | tr "$FROMEBCDIC" "$TOVDT" > $1.asc
# extract pages (located at $0D00, $1500, $1D00, etc)
# end of page is \x00
for pos in `seq -w 3329 2048 256000`
do
cut -b $pos- $1.asc | sed 's/\x00.*//;s/^V.*//' > $1-$pos.vdt
done
# delete empty pages
find $1*.vdt -size -10c -delete