-
Notifications
You must be signed in to change notification settings - Fork 25
/
miniprohex
executable file
·138 lines (129 loc) · 2.57 KB
/
miniprohex
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash
if [ $# == 0 ]
then
cat << EOF
miniprohex by Al Williams http://www.awce.com
Usage:
miniprohex [--o offset] [--unfill byte size] [--obs blksize] [--line-length length] [minipro_options] -r filename.ext
miniprohex [--o offset] [minirpo_options] -w filename.ext
This calls minipro after converting known file types to
.bin for writing or converting bin files after reading.
--o: Offset for file conversion (see srec_cat)
--unfill: Unfil blocks of at least size of byte (see srec_cat)
--obs: Output block size (see srec_cat)
--line-length: Output line length max (see srec_cat)
Assumes minipro and srec_cat are on the path.
Here's the minipro help:
EOF
exec minipro
fi
# Options for minipro
OPTS=
# The -r or -w
RWOPT=
# Real file name
FN=
# Extension provided
EXT=
# Options for srec_cat
SRECOPTS=
# parse arguments and sort them out
while [ $# != 0 ]
do
# note --obs x becomes --obs=x
if [ "$1" == "--obs" ]
then
SRECOPTS="$SRECOPTS $1=$2"
shift
shift
continue
fi
# note --line-length x becomes --line-length=x
if [ "$1" == "--line-length" ]
then
SRECOPTS="$SRECOPTS $1=$2"
fi
if [ "$1" == "--unfill" ]
then
SRECOPTS="$SRECOPTS $1 $2 $3"
shift
shift
shift
continue
fi
if [ "$1" == "--offset" ]
then
SRECOPTS="$SRECOPTS $1 $2"
shift
shift
continue
fi
if [ "$1" == "-r" ]
then
RWOPT=-r
shift
FN=$1
elif [ "$1" == "-w" ]
then
RWOPT=-w
shift
FN=$1
elif [ "$1" == "-p" ]
then
DEV=$2
shift
shift
else
echo
OPTS="$OPTS $1"
fi
shift
done
# Pick apart file name
filename=$(basename "$FN")
extension="${filename##*.}"
fileprefix="${filename%.*}"
# for each case decide the real file name (RFILE)
# and what you have to do before or after
# to get the right answer
case "$extension" in
.bin)
# no conversion needed
RFILE="$FN"
PRECVT=
POSTCVT=
;;
hex)
RFILE="$(mktemp)"
PRECVT="srec_cat $FN --intel -o $SRECOPT $RFILE --binary"
POSTCVT="srec_cat $RFILE --binary $SRECOPTS -o $FN --intel"
;;
srec)
RFILE="$(mktemp)"
PRECVT="srec_cat $FN --motorola -o $SRECOPT $RFILE --binary"
POSTCVT="srec_cat $RFILE --binary $SRECOPTS -o $FN --motorola"
;;
txt)
# assume fuse and just go for it
RFILE="$FN"
PRECVT=
POSTCVT=
;;
*)
# Who knows?
RFILE="$FN"
PRECVT=
POSTCVT=
esac
# If we write, do PRECMD and execute
if [ "$RWOPT" == -w ]
then
$PRECVT
minipro $OPTS -p "$DEV" $RWOPT $RFILE
else
# If reading, execute and then do post cmd
minipro $OPTS -p "$DEV" $RWOPT $RFILE
$POSTCVT
fi
# Purge the temporary file if we used one
[ "$PRECVT" ] && rm "$RFILE"