text: #ifndef HACTOOL_NCA0_ROMFS_H
  #define HACTOOL_NCA0_ROMFS_H
  
  #include "types.h"
  #include "utils.h"
  #include "ivfc.h"
  #include "settings.h"
  
  /* RomFS structs. */
  #define NCA0_ROMFS_HEADER_SIZE 0x00000028
  
  typedef struct {
      uint32_t header_size;
      uint32_t dir_hash_table_offset;
      uint32_t dir_hash_table_size;
      uint32_t dir_meta_table_offset;
      uint32_t dir_meta_table_size;
      uint32_t file_hash_table_offset;
      uint32_t file_hash_table_size;
      uint32_t file_meta_table_offset;
      uint32_t file_meta_table_size;
      uint32_t data_offset;
  } nca0_romfs_hdr_t;
  
  typedef struct {
      uint8_t master_hash[0x20]; /* SHA-256 hash of the hash table. */
      uint32_t block_size; /* In bytes. */
      uint32_t always_2;
      uint64_t hash_table_offset; /* Normally zero. */
      uint64_t hash_table_size; 
      uint64_t romfs_offset;
      uint64_t romfs_size;
      uint8_t _0x48[0xF0];
  } nca0_romfs_superblock_t;
  
  typedef struct {
      nca0_romfs_superblock_t *superblock;
      FILE *file;
      hactool_ctx_t *tool_ctx;
      validity_t superblock_hash_validity;
      validity_t hash_table_validity;
      uint64_t romfs_offset;
      nca0_romfs_hdr_t header;
      romfs_direntry_t *directories;
      romfs_fentry_t *files;
  } nca0_romfs_ctx_t;
  
  void nca0_romfs_process(nca0_romfs_ctx_t *ctx);
  void nca0_romfs_save(nca0_romfs_ctx_t *ctx);
  void nca0_romfs_print(nca0_romfs_ctx_t *ctx);
  
  
  #endif
  