EncodeExecutable.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*=========================================================================
  2. Program: KWSys - Kitware System Library
  3. Module: $RCSfile$
  4. Language: C++
  5. Date: $Date$
  6. Version: $Revision$
  7. Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
  8. See http://www.cmake.org/HTML/Copyright.html for details.
  9. This software is distributed WITHOUT ANY WARRANTY; without even
  10. the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  11. PURPOSE. See the above copyright notices for more information.
  12. =========================================================================*/
  13. #include <stdio.h>
  14. int main(int argc, char* argv[])
  15. {
  16. FILE* ifp;
  17. FILE* ofp;
  18. int i;
  19. int n;
  20. int count = 0;
  21. unsigned char buffer[1024];
  22. /* Check arguments. */
  23. if(argc != 5)
  24. {
  25. fprintf(stderr, "Usage: %s <input> <output> <kwsys-name> <array>\n",
  26. argv[0]);
  27. return 1;
  28. }
  29. /* Open the input file. */
  30. ifp = fopen(argv[1], "rb");
  31. if(!ifp)
  32. {
  33. fprintf(stderr, "Cannot open input file: \"%s\"\n", argv[1]);
  34. return 2;
  35. }
  36. ofp = fopen(argv[2], "w");
  37. if(!ofp)
  38. {
  39. fprintf(stderr, "Cannot open output file: \"%s\"\n", argv[2]);
  40. return 2;
  41. }
  42. /* Prepend header comment. */
  43. fprintf(ofp, "/*\n * DO NOT EDIT\n * This file is generated by:\n");
  44. fprintf(ofp, " * %s\n */\n\n", argv[0]);
  45. fprintf(ofp, "#include <stdio.h>\n\n");
  46. /* Split file up in 1024-byte chunks. */
  47. while((n = fread(buffer, 1, 1024, ifp)) > 0)
  48. {
  49. fprintf(ofp, "static unsigned char kwsysEncodedArray%s_%d[%d] = {\n",
  50. argv[4], count++, n);
  51. for(i=0; i < n-1; ++i)
  52. {
  53. fprintf(ofp, "0x%02X", buffer[i]);
  54. if(i%10 == 9)
  55. {
  56. fprintf(ofp, ",\n");
  57. }
  58. else
  59. {
  60. fprintf(ofp, ", ");
  61. }
  62. }
  63. fprintf(ofp, "0x%02X};\n\n", buffer[n-1]);
  64. }
  65. fclose(ifp);
  66. /* Provide a function to write the data to a file. */
  67. fprintf(ofp, "extern int %sEncodedWriteArray%s(const char* fname)\n",
  68. argv[3], argv[4]);
  69. fprintf(ofp, "{\n");
  70. fprintf(ofp, " FILE* ofp = fopen(fname, \"wb\");\n");
  71. fprintf(ofp, " if(!ofp) { return 0; }\n");
  72. for(i=0; i < count; ++i)
  73. {
  74. fprintf(ofp, " if(fwrite(kwsysEncodedArray%s_%d, 1,\n"
  75. " sizeof(kwsysEncodedArray%s_%d), ofp) !=\n"
  76. " sizeof(kwsysEncodedArray%s_%d))\n",
  77. argv[4], i, argv[4], i, argv[4], i);
  78. fprintf(ofp, " {\n");
  79. fprintf(ofp, " fclose(ofp);\n");
  80. fprintf(ofp, " _unlink(fname);\n");
  81. fprintf(ofp, " return 0;\n");
  82. fprintf(ofp, " }\n");
  83. }
  84. fprintf(ofp, " fclose(ofp);\n");
  85. fprintf(ofp, " return 1;\n");
  86. fprintf(ofp, "}\n");
  87. fclose(ofp);
  88. return 0;
  89. }