+ EMUFS *efs;
+
+ /* Si no es un tipo conocido, sale. */
+ if ((tipo != T1) && (tipo != T2) && (tipo != T3)) {
+ return NULL;
+ }
+
+ /* Inicializa parámetros comunes. */
+ efs = (EMUFS*) malloc(sizeof(EMUFS));
+ if (efs == NULL) {
+ return NULL;
+ }
+ efs->tipo = tipo;
+ efs->tam_bloque = tam_bloque;
+ efs->nombre = str_dup(filename);
+
+ /* Abre archivo de datos. */
+ strcpy(name, filename);
+ strcat(name, ".dat");
+ fp = fopen(name, "w");
+ if (fp == NULL) {
+ /* TODO ERROR */
+ free(efs->nombre);
+ free(efs);
+ return NULL;
+ }
+
+ /* Guarda cabecera común. */
+ fwrite(&tipo, sizeof(EMUFS_TYPE), 1, fp);
+
+ /* Crea archivo de índice. */
+ if (emufs_idx_crear(efs)) {
+ /* TODO ERROR */
+ free(efs->nombre);
+ free(efs);
+ return NULL;
+ }
+
+ /* Crea archivo de control de espacio libre. */
+ if (emufs_fsc_crear(efs)) {
+ /* TODO ERROR */
+ free(efs->nombre);
+ free(efs);
+ return NULL;
+ }
+
+ /* Crea archivo de identificadores borrados (recuperables). */
+ if (emufs_did_crear(efs)) {
+ /* TODO ERROR */
+ free(efs->nombre);
+ free(efs);
+ return NULL;
+ }