#!/bin/bash

if [[ ${#} -ne 2 ]] ; then
        echo "Expected 2 arguments"
        exit 1
fi

if [[ ! -f ${1} ]] ; then
        echo "File does not exist"
        exit 1
fi


BINARY=${1}
OUTPUT=${2}

touch ${OUTPUT}
echo "#include <stdint.h>" > ${OUTPUT}

ARR=""

for UINT16 in $(xxd $BINARY | cut -d ' ' -f2-9) ; do
        UINT16=$(echo "${UINT16}" | sed -E 's/^(..)(..)$/\2\1/' )
        ARR="${ARR}0x${UINT16},"
done

ARR=$(echo "${ARR}" | sed -E "s/,$//")

echo "uint32_t arr[] = { ${ARR} };" > ${OUTPUT}

#Напишете shell скрипт, който приема два позиционни параметъра – имена на файлове. Примерно извикване:
#$ ./foo.sh input.bin output.h
#Файлът input.bin е двоичен файл с елементи uint16_t числа, създаден на little-endian машина.
#Вашият скрипт трябва да генерира C хедър файл, дефиниращ масив с име arr, който:
#• съдържа всички елементи от входния файл;
#• няма указана големина;
#• не позволява промяна на данните.
#Генерираният хедър файл трябва да:
#• съдържа и uint32_t променлива arrN, която указва големината на масива;
#• бъде валиден и да може да се #include-ва без проблеми от C файлове, очакващи да “виждат”
#arr и arrN.
#За да е валиден един входен файл, той трябва да съдържа не повече от 524288 елемента.
#За справка, dump на съдържанието на примерен input.bin:
#00000000: 5555 5655 5955 5a55 6555 6655 6955 6a55 UUVUYUZUeUfUiUjU
#00000010: 9555 9655 9955 9a55 a555 a655 a955 aa55 .U.U.U.U.U.U.U.U