derle.c 870 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <stdint.h>
  4. FILE *in, *out;
  5. uint8_t data;
  6. uint16_t len;
  7. int main(int argc, char** argv) {
  8. if((in=fopen(argv[1], "rb"))==NULL) {
  9. perror("could not open input file");
  10. return 1;
  11. }
  12. if((out=fopen(argv[2], "wb"))==NULL) {
  13. perror("could not open output file");
  14. fclose(in);
  15. return 1;
  16. }
  17. len=0;
  18. while(!feof(in)) {
  19. data=fgetc(in);
  20. if(feof(in))break;
  21. switch(data) {
  22. case 0x9b:
  23. fputc(fgetc(in), out);
  24. break;
  25. case 0x5b:
  26. data=fgetc(in);
  27. len=fgetc(in);
  28. while(len--)fputc(data, out);
  29. break;
  30. case 0x77:
  31. data=fgetc(in);
  32. len = fgetc(in);
  33. len |= fgetc(in) << 8;
  34. while(len--)fputc(data, out);
  35. break;
  36. default:
  37. fputc(data, out);
  38. }
  39. }
  40. fclose(out);
  41. fclose(in);
  42. return 0;
  43. }