EncodeExecutable.c 2.8 KB

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