/** @file */
#pragma once
#include "const.h"

typedef struct env {
  char* key;
  char* value;
} env;

/**
 * @struct inode
 * @brief Un inode est un fichier, il possède des permissions, un type
 * (répertoire par exemple) et pointe sur des blocs de données
 */
typedef struct inode {
  unsigned short perms; // rwxrwxrwx
  char filetype;
  int blocs[MAX_BLOCS];
} inode;

/**
 * @struct bloc
 * @brief Un bloc possède un tableau de données brut concernant des inodes
 */
typedef struct bloc {
  char datas[MAX_BYTES_PER_BLOC];
} bloc;

/**
 * @struct disk
 * @brief Un disque est un liste d'inodes qui pointent sur des blocs de donnée
 */
typedef struct disk {
  char owned_blocs[MAX_BLOCS]; // 1 si possédé par un inode, 0 si libre
  inode inodes[MAX_INODE];
  bloc blocs[MAX_BLOCS];
} disk;

// pour 10 inode qui a 30 blocs de chacun 1024 octets, on a 30720 octets, soit
// 30,7 Ko sur le disque

typedef struct command {
  char **argv;
} command;
/*
ce structure de cette façon :
commands[0].argv[0]: ls
commands[0].argv[1]: -l
commands[1].argv[0]: head
commands[2].argv[0]: tail
commands[2].argv[1]: -4
*/