EncodeExecutable.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 <Configure.h>\n\n");
  46. fprintf(ofp, "#include <stdio.h>\n\n");
  47. /* Split file up in 1024-byte chunks. */
  48. while((n = (int)fread(buffer, 1, 1024, ifp)) > 0)
  49. {
  50. fprintf(ofp, "static unsigned char kwsysEncodedArray%s_%d[%d] = {\n",
  51. argv[4], count++, n);
  52. for(i=0; i < n-1; ++i)
  53. {
  54. fprintf(ofp, "0x%02X", buffer[i]);
  55. if(i%10 == 9)
  56. {
  57. fprintf(ofp, ",\n");
  58. }
  59. else
  60. {
  61. fprintf(ofp, ", ");
  62. }
  63. }
  64. fprintf(ofp, "0x%02X};\n\n", buffer[n-1]);
  65. }
  66. fclose(ifp);
  67. /* Provide a function to write the data to a file. */
  68. fprintf(ofp, "extern %s_EXPORT int %sEncodedWriteArray%s(const char* fname)\n",
  69. argv[3], argv[3], argv[4]);
  70. fprintf(ofp, "{\n");
  71. fprintf(ofp, " FILE* ofp = fopen(fname, \"wb\");\n");
  72. fprintf(ofp, " if(!ofp) { return 0; }\n");
  73. for(i=0; i < count; ++i)
  74. {
  75. fprintf(ofp, " if(fwrite(kwsysEncodedArray%s_%d, 1,\n"
  76. " sizeof(kwsysEncodedArray%s_%d), ofp) !=\n"
  77. " sizeof(kwsysEncodedArray%s_%d))\n",
  78. argv[4], i, argv[4], i, argv[4], i);
  79. fprintf(ofp, " {\n");
  80. fprintf(ofp, " fclose(ofp);\n");
  81. fprintf(ofp, " _unlink(fname);\n");
  82. fprintf(ofp, " return 0;\n");
  83. fprintf(ofp, " }\n");
  84. }
  85. fprintf(ofp, " fclose(ofp);\n");
  86. fprintf(ofp, " return 1;\n");
  87. fprintf(ofp, "}\n");
  88. fclose(ofp);
  89. return 0;
  90. }