diff --git a/SD/picofs.c b/SD/picofs.c index b774cc814093c9e37980ca08e6a403b42f49efbb..0878e487adf8ee367c15c86943215c4f6a9b2846 100755 --- a/SD/picofs.c +++ b/SD/picofs.c @@ -398,7 +398,6 @@ void CP(SD_info *sd, char *source_filename, char *destination_filename) { char numBuffer[64]; int destination_offset; int source_offset; - int offset; int numDataBlock; int newDataBlock; @@ -440,46 +439,54 @@ void CP(SD_info *sd, char *source_filename, char *destination_filename) { writeBlock(sd,destination_offset, 0, destination_filename, strlen(destination_filename)); // Copier les blocs de données associés au fichier source dans de nouveaux blocs de données pour le fichier destination - for (int i = 0; i < MAX_BLOCKS_PER_FILE_DESCRIPTION; i++) { - if (i == 0) { offset = MAX_FILENAME_LENGTH; } - else { offset = 0; } + //for (int i = 1; i < MAX_BLOCKS_PER_FILE_DESCRIPTION; i++) { + // Lecture des numéros de bloc dans les blocs de description - for (int byteNum=0; byteNum<BLOCK_SIZE; byteNum+=2) { - readBlock(sd,source_offset + i, offset + byteNum, numBuffer, 2); + //for (int byteNum=0; byteNum<BLOCK_SIZE; byteNum+=2) { + readBlock(sd,source_offset+1, 0, numBuffer, 2); - numDataBlock = reconstituteNumber(numBuffer); + numDataBlock = reconstituteNumber(numBuffer); + //si aucune donnée à copier if (numDataBlock == 0) { printf("\nLa copie de \"%s\" sous le nom \"%s\" a été créée avec succès.\n", source_filename, destination_filename); return; } - for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += CHUNK_SIZE) { + //for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += //CHUNK_SIZE) { // On stocke le bloc de données associé au fichier source dans descriptionBuffer - readBlock(sd,numDataBlock, chunkStart, descriptionBuffer, CHUNK_SIZE); + readBlock(sd,numDataBlock, 0, descriptionBuffer, CHUNK_SIZE); + - if (chunkStart == 0) { // Trouver un nouveau bloc de données disponible newDataBlock = findAvailableBlock(sd); + char dataBlockNumBuffer[CHUNK_SIZE]; + readBlock(sd, newDataBlock, 0, dataBlockNumBuffer, CHUNK_SIZE); + while (dataBlockNumBuffer[0] != 0) + { + newDataBlock++; + readBlock(sd, newDataBlock, 0, dataBlockNumBuffer, CHUNK_SIZE); + } + // Mise à jour de la carte de disponibilités setBlockAvailability(sd,newDataBlock, 1); // Ecriture du numéro de bloc dans la description du fichier createNumberBuffer(newDataBlock,numBuffer); - writeBlock(sd,destination_offset+i, offset+byteNum, numBuffer, 2); - } + writeBlock(sd,destination_offset+1, 0, numBuffer, 2); + // Ecriture du bloc de données dans le premier bloc disponible - writeBlock(sd,newDataBlock, chunkStart, descriptionBuffer, CHUNK_SIZE); - } - } - } + writeBlock(sd,newDataBlock, 0, descriptionBuffer, CHUNK_SIZE); + printf("\nLa copie de \"%s\" sous le nom \"%s\" a été créée avec succès.\n", source_filename, destination_filename); + //} } + int main(int argc, char *argv[]) { char user_data; @@ -497,14 +504,11 @@ int main(int argc, char *argv[]) { printf("Pico ordinateur OK\n\n"); - erase(&sd,0,15000); current_cmd[0] = '\0'; // Initialise la chaîne vide printf("PicoOrdi>"); while (1) { - _delay_ms(10); - user_data = get_serial(); if (user_data == '\b'){