txt-compiler.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include <stdio.h>
  2. #include "Filesystem.h"
  3. #include "Stream.h"
  4. #include "Path.h"
  5. #include "String.h"
  6. #include "Hash.h"
  7. #include "Resource.h"
  8. #include "ResourceArchive.h"
  9. #include "FileStream.h"
  10. using namespace crown;
  11. /// UTF-8 compiler for "txt" resource types
  12. int main(int argc, char** argv)
  13. {
  14. if (argc != 4)
  15. {
  16. printf("Usage: %s /path/to/resources /path/to/compiled resource.txt\n", argv[0]);
  17. return -1;
  18. }
  19. Filesystem fs_root(argv[1]);
  20. Filesystem fs_dest(argv[2]);
  21. const char* resource = argv[3];
  22. if (!fs_root.exists(resource))
  23. {
  24. printf("Fatal: resource %s does not exists. Aborting.\n", resource);
  25. return -1;
  26. }
  27. char resource_basename[256];
  28. char resource_extension[256];
  29. path::basename(resource, resource_basename, 256);
  30. path::extension(resource, resource_extension, 256);
  31. printf("Resource basename : %s\n", resource_basename);
  32. printf("Resource extension : %s\n", resource_extension);
  33. uint32_t resource_basename_hash = hash::fnv1a_32(resource_basename, string::strlen(resource_basename));
  34. uint32_t resource_extension_hash = hash::fnv1a_32(resource_extension, string::strlen(resource_extension));
  35. printf("Resource basename (hash) : %X\n", resource_basename_hash);
  36. printf("Resource extension (hash) : %X\n", resource_extension_hash);
  37. FileStream* src_file = (FileStream*)fs_root.open(resource, SOM_READ);
  38. size_t src_file_size = src_file->size();
  39. ArchiveEntry archive_entry;
  40. archive_entry.name = resource_basename_hash;
  41. archive_entry.type = resource_extension_hash;
  42. archive_entry.offset = sizeof (ArchiveEntry);
  43. archive_entry.size = src_file_size + sizeof(uint32_t);
  44. void* buffer = new uint8_t[src_file_size];
  45. src_file->read(buffer, src_file_size);
  46. fs_root.close(src_file);
  47. FileStream* dest_file = (FileStream*)fs_dest.open(resource, SOM_WRITE);
  48. dest_file->write(&archive_entry, sizeof(ArchiveEntry));
  49. dest_file->write(&src_file_size, sizeof(uint32_t));
  50. dest_file->write(buffer, src_file_size);
  51. fs_dest.close(dest_file);
  52. return 0;
  53. }