File: file2csource.sh

package info (click to toggle)
gsmartcontrol 0.8.6-1.2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 5,492 kB
  • sloc: cpp: 312,009; sh: 3,761; makefile: 379
file content (50 lines) | stat: -rwxr-xr-x 1,162 bytes parent folder | download
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
#!/bin/bash
############################################################################
# Copyright:
#      (C) 2008 - 2010  Alexander Shaduri <ashaduri 'at' gmail.com>
# License: See LICENSE_zlib.txt file
############################################################################

# We use #!/bin/bash of #!/bin/sh because freebsd (tested with 6.3) in its
# infinite wisdom has csh-like /bin/sh (even though the SUS says it
# must be bourne-compatible).


if [ "$1" == "" ] | [ "$2" == "" ] | [ "$3" == "" ]; then
	echo "Usage: $0 <input_file> <cpp_file> <symbol_name>";
	exit 1;
fi

if [ ! -e $1 ]; then
	echo "Cannot open input file \"$1\".";
	exit 2;
fi


in_file="$1";
out_file="$2";
sym_name="$3";
size=`stat -c "%s" "$in_file"`


# header. extern means "global" in this context (needed because const
# variables are static by default).
echo "

extern const unsigned char ${sym_name}[] = {
" > "$out_file";


# file binary. "xxd(1) -i" can also do the trick
hexdump -v -e '1/1 "0x%X,\n"' "$in_file" >> "$out_file";


# footer. add 0x0 byte for easy stringifying
echo "
 0x0 };

extern const unsigned int ${sym_name}_size = ${size};

" >> "$out_file";