Algumas vezes quando preciso fazer algo mais rápido ou automatizado escrevo umas linhas de código e gero um programinha para resolver o problema. Nada muito elaborado e só para problemas pontuais. Geralmente o código é usado só uma vez e fica esquecido em alguma pasta. E acaba que preciso novamente do mesmo código anos depois e não lembro onde deixei ou, pela ação de Murphy, apaguei o programinha numa limpeza ou formatação.
Para evitar que isso aconteça vou ver se salvo estas pequenas ferramentas no Github. Assim terei uma cópia de segurança fora dos meu PC e backups, além de (quem sabe) poder ser útil para alguém. Um outro beneficio é que terei que ter mais cuidado com o código e comentários, afinal estará a vista de outras pessoas.
Para começar coloquei o programa "bintoh" que foi feito para um projetinho que estou desenvolvendo. Minha necessidade era a de converter um arquivo binário que antes era gravado em uma EPROM (.bin) em um arquivo header em C (.h), para ser incluído no código de um projeto com microcontrolador (ARM Cortex M3). Funciona por linha de comando (veja imagem acima, rodando no PowerShell), bastando informar o nome da tabela, arquivo de entrada e arquivo de saída. Ele gera também um define com o tamanho da tabela.
Antigamente eu criava a maioria destas ferramentas de software em VB6 e depois passei a usar (e ainda uso) o VB.NET 10. Mas eu tento variar de vez em quando com Python, Javascript ou o bom e velho C puro. O bintoh era pra ter sido feito em VB.Net também, mas acabei fazendo em C já que não precisa de uma UI cheia de flu-flus...
Como é uma ferramenta para uso pessoal ele tem suas limitações (e falta delas). Ele não checa as extensões dos arquivos, que só precisa existir para ser convertido. Isso acabou transformando o programa em um conversor "universal" de arquivos para headers C. Para mim isso é uma vantagem até e devo usar em breve para outra coisa aqui.
Aproveitando a oportunidade deixa eu testar aqui o formatador de código hilite.me (Vou precisar formatar outros códigos pra postar aqui, num futuro post). O código abaixo é do bintoh e até que ficou bonito:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | /* Bintoh - Binary to c header file converter Rodrigo Feliciano - 08/02/2017 */ #include "stdio.h" #define MAX_FILE_SIZE 524288 /* bytes */ int main(int argc, char *argv[]) { FILE *infile; /* Binary file - input */ FILE *outfile; /* Header file - output */ int chrin = 0; /* Temp char input */ int bytecount = 0; int i = 0; if(argc == 4) { infile = fopen(argv[2],"rb"); /* open input file for binary read */ if(infile == 0) { printf("\n\nInput file error...\n\n"); /* No file... */ }else { fseek(infile, 0L, SEEK_END); bytecount = ftell(infile); /* Get the number of bytes in the file */ rewind(infile); if(bytecount <= MAX_FILE_SIZE) { outfile = fopen(argv[3],"w"); /* Open the output file for write */ if(outfile == 0) { printf("Output file error..."); }else { fprintf(outfile,"/* Bintoh - Bin to Header file converter */\n"); fprintf(outfile,"\n#ifndef %s_H_",argv[1]); fprintf(outfile,"\n#define %s_H_\n",argv[1]); fprintf(outfile,"\n#define FTABLE_SIZE %i",bytecount); fprintf(outfile,"\n\nconst unsigned char %s[%i] = \n{\n",argv[1],bytecount); while((chrin = fgetc(infile)) != EOF) { if(i >= 7) /* Number of items in a row - 1 */ { fprintf(outfile,"0x%02x,\n",chrin); /* Last item in a row */ i=0; }else if(i == 0) { fprintf(outfile," 0x%02x,",chrin); /* first item in a row */ i++; }else { fprintf(outfile,"0x%02x,",chrin); /* item in a row */ i++; } } fprintf(outfile,"};\n\n\n#endif /* %s_H_ */",argv[1]); fclose(outfile); } }else { printf("\nInput file too big!"); printf("\nMaximum file size: %i bytes",MAX_FILE_SIZE); printf("\nInput file size: %i bytes\n\n",bytecount); } fclose(infile); } }else { printf("\nCreate a C Header file from a binary file\n"); printf("\nusage: bintoh [table_name] [input_filename] [output_filename]\n\n"); } return 0; } |
Nenhum comentário:
Postar um comentário
1. Alguns comentários são moderados automaticamente. Caso isso ocorra pode levar algum tempo até que eu veja e o libere.
2. Comentários fora do assunto do post podem ser apagados.
3. Não, eu não posso consertar os seus aparelhos!