carray.sh 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env bash
  2. function usage()
  3. {
  4. echo "Usage:"
  5. echo " $0 [options]"
  6. echo "Options:"
  7. echo " -h Display help or usage"
  8. echo " -i <input_config> Input config file"
  9. echo " -l <variable_list> List of variables in the array (Optional)"
  10. exit 1;
  11. }
  12. # Command line options
  13. CONFIG_FILE=""
  14. VAR_LIST=""
  15. while getopts "hi:l:" o; do
  16. case "${o}" in
  17. h)
  18. usage
  19. ;;
  20. i)
  21. CONFIG_FILE=${OPTARG}
  22. ;;
  23. l)
  24. VAR_LIST=${OPTARG}
  25. ;;
  26. *)
  27. usage
  28. ;;
  29. esac
  30. done
  31. shift $((OPTIND-1))
  32. if [ -z "${CONFIG_FILE}" ]; then
  33. echo "Must specify input config file"
  34. usage
  35. fi
  36. if [ ! -f "${CONFIG_FILE}" ]; then
  37. echo "The input config file should be a present"
  38. usage
  39. fi
  40. TYPE_HEADER=`cat ${CONFIG_FILE} | awk '{ if ($1 == "HEADER:") { printf $2; exit 0; } }'`
  41. if [ -z "${TYPE_HEADER}" ]; then
  42. echo "Must specify HEADER: in input config file"
  43. usage
  44. fi
  45. TYPE_NAME=`cat ${CONFIG_FILE} | awk '{ if ($1 == "TYPE:") { printf $2; for (i=3; i<=NF; i++) printf " %s", $i; exit 0; } }'`
  46. if [ -z "${TYPE_NAME}" ]; then
  47. echo "Must specify TYPE: in input config file"
  48. usage
  49. fi
  50. ARRAY_NAME=`cat ${CONFIG_FILE} | awk '{ if ($1 == "NAME:") { printf $2; exit 0; } }'`
  51. if [ -z "${ARRAY_NAME}" ]; then
  52. echo "Must specify NAME: in input config file"
  53. usage
  54. fi
  55. printf "#include <%s>\n\n" "${TYPE_HEADER}"
  56. for VAR in ${VAR_LIST}; do
  57. printf "extern %s %s;\n" "${TYPE_NAME}" "${VAR}"
  58. done
  59. printf "\n"
  60. printf "%s *%s[] = {\n" "${TYPE_NAME}" "${ARRAY_NAME}"
  61. for VAR in ${VAR_LIST}; do
  62. printf "\t&%s,\n" "${VAR}"
  63. done
  64. printf "};\n\n"
  65. printf "unsigned long %s_size = sizeof(%s) / sizeof(%s *);\n" "${ARRAY_NAME}" "${ARRAY_NAME}" "${TYPE_NAME}"