novacisko

bin2c

Dec 21st, 2013
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.87 KB | None | 0 0
  1. /*
  2.   Konvertuje binarni soubor na soubor *.c tak, aby po prelozeni se tento
  3.   soubor stal soucasti vysledneho spustitelneho souboru. Je to zpusob jako
  4.   do (zejmena) knihoven zabalit krome prelozitelnych zdrojovych kodu
  5.   take i skripty, napriklad knihovnu v javascriptu. Ale lze to take pouzit
  6.   pro vlozeni obrazku a jinych binarnich souboru, pokud to ma smysl
  7.  
  8.   Program vypisuje vysledny zdrojak na standardni vystup. Je mozne primo propojit s gcc
  9.  
  10.   bin2c soubor.dat nazev_souboru | gcc -c -o output.o -xc -Wall -Wno-trigraphs -
  11.  
  12.   vysledek bude v souboru output.o a vlastni soubor bude dostupny v promenne
  13.     extern const char *nazev_souboru;
  14.  
  15.   a případně v
  16.     extern unsigned int nazev_souboru_length;
  17.   bude velikost
  18.  
  19.  
  20. */
  21.  
  22. #include <stdio.h>
  23. #include <errno.h>
  24.  
  25. int main(int argc, char **argv) {
  26.  
  27. if (argc != 3) {
  28.     fputs("bin2c <file> <identifier>\n",stderr);
  29.     return 1;
  30. } else {
  31.     FILE *f = fopen(argv[1],"rb");
  32.         if (f == NULL) {
  33.               fprintf(stderr,"Can't open input file '%s'", argv[1]);
  34.               return errno;
  35.         }
  36.     printf("const char *%s=\"",argv[2]);
  37.         int i = fgetc(f);
  38.         int cnt = 0;
  39.         unsigned int size = 0;
  40.         while (i != -1) {
  41.                 size++;
  42.         if (i >= 32 && i!='"' && i!='\\') putchar(i);
  43.                 else if (i == '"') {
  44.             putchar('\\'); putchar('"');
  45.                 } else if (i == '\\') {
  46.             putchar('\\'); putchar('\\');
  47.                 } else if (i == '\n') {
  48.             putchar('\\'); putchar('n');
  49.                 } else if (i == '\r') {
  50.             putchar('\\'); putchar('r');
  51.                 } else if (i == '\t') {
  52.             putchar('\\'); putchar('t');       
  53.         } else {
  54.             printf("\\%03o",i);
  55.         }
  56.  
  57.         cnt++;
  58.         if (cnt == 80) {
  59.             printf("\"\n\"");
  60.             cnt = 0;
  61.         }
  62.         i = fgetc(f);
  63.     }
  64.     fclose(f);
  65.     printf("\";\n");
  66.     printf("unsigned int %s_length=%u;\n",argv[2],size);
  67. }
  68.  
  69.  
  70. }
Advertisement
Add Comment
Please, Sign In to add comment